From b2e84d6f37bc1b2af9045bc2648737ae81ed8993 Mon Sep 17 00:00:00 2001 From: Yro Boros Date: Sun, 22 Feb 2026 14:55:37 +1000 Subject: [PATCH] KodaChat is generating.. --- .gitignore | 2 +- GPT_chat.code-workspace | 13 + data/cookies.json | 1 + data/proxies.json | 1 + data/settings.db | Bin 0 -> 12288 bytes har_and_cookies/.nodriver_is_open | 1 + har_and_cookies/auth_Copilot.json | 1 + har_and_cookies/auth_OpenaiChat.json | 1 + main.py | 564 +++++++++++++++++++++++++++ requirements.txt | 13 + static/css/style.css | 73 ++++ static/img/copy(Gregor_Cresnar).png | Bin 0 -> 4098 bytes static/img/delete(Anggara).png | Bin 0 -> 8047 bytes static/img/favicon(Nicoladipa).png | Bin 0 -> 77372 bytes static/js/script.js | 252 ++++++++++++ templates/login.html | 49 +++ templates/settings.html | 292 ++++++++++++++ tests/__init__.py | 0 tests/test_launch.py | 4 + 19 files changed, 1266 insertions(+), 1 deletion(-) create mode 100644 GPT_chat.code-workspace create mode 100644 data/cookies.json create mode 100644 data/proxies.json create mode 100644 data/settings.db create mode 100644 har_and_cookies/.nodriver_is_open create mode 100644 har_and_cookies/auth_Copilot.json create mode 100644 har_and_cookies/auth_OpenaiChat.json create mode 100644 main.py create mode 100644 requirements.txt create mode 100644 static/css/style.css create mode 100644 static/img/copy(Gregor_Cresnar).png create mode 100644 static/img/delete(Anggara).png create mode 100644 static/img/favicon(Nicoladipa).png create mode 100644 static/js/script.js create mode 100644 templates/login.html create mode 100644 templates/settings.html create mode 100644 tests/__init__.py create mode 100644 tests/test_launch.py diff --git a/.gitignore b/.gitignore index 3fcac9c..4a713f4 100644 --- a/.gitignore +++ b/.gitignore @@ -6,7 +6,7 @@ __pycache__/ *.log # Виртуальное окружение -# venv/ +.venv/ # env/ # IDE diff --git a/GPT_chat.code-workspace b/GPT_chat.code-workspace new file mode 100644 index 0000000..8dd0818 --- /dev/null +++ b/GPT_chat.code-workspace @@ -0,0 +1,13 @@ +{ + "folders": [ + { + "name": "GPT_chat", + "path": "." + }, + { + "name": "data", + "path": "../Free-GPT4-WEB-API/src/data" + } +], + "settings": {} +} diff --git a/data/cookies.json b/data/cookies.json new file mode 100644 index 0000000..1560bc1 --- /dev/null +++ b/data/cookies.json @@ -0,0 +1 @@ +{"field": "value"} \ No newline at end of file diff --git a/data/proxies.json b/data/proxies.json new file mode 100644 index 0000000..909cc00 --- /dev/null +++ b/data/proxies.json @@ -0,0 +1 @@ +[{"protocol": "socks5", "username": "usr", "password": "pass", "ip": "0.0.0.0", "port": "8080"}, {"protocol": "https", "username": "usr", "password": "pass", "ip": "0.0.0.1", "port": "443"}] \ No newline at end of file diff --git a/data/settings.db b/data/settings.db new file mode 100644 index 0000000000000000000000000000000000000000..a07596926c35a4da10cb49736f7f469aeaef4e1d GIT binary patch literal 12288 zcmeI$K~LK-6bEoSowlY@$Sze+m3(BTl#6rzb*LSQOH<{_iI40pll$#rp)-0+C*~e?zm35R$zgAv07thIBH6?katuxi?@gzTbsh_^7RMtM-sIpF~ zQrELP?*_r^-cg@3U1YSh*K>cSmulh6LoRDnxmQ1}&-Lx~7Zv%&<3G$_2nav`0uX=z z1Rwwb2tWV=5P$##UV^|LkHc=*?e+#y7`59`+tJb;9PI8U{#U@XbRYIJ< ") + confirm_password = getpass.getpass("Confirm password:\n > ") + else: + set_password = False + + if (set_password): + if(password == "" or confirm_password == ""): + print("[X] Password cannot be empty") + exit() + + if ((password != confirm_password) and (data["password"] == "")): + print("[X] Passwords don't match") + exit() + else: + password = generate_password_hash(password) + confirm_password = generate_password_hash(confirm_password) + print("[V] Password set.") + try: + conn = sqlite3.connect(SETTINGS_FILE) + c = conn.cursor() + c.execute("UPDATE settings SET password = ?", (password,)) + conn.commit() + conn.close() + print("[V] Password saved.") + except Exception as error: + print("[X] Error:", error) + exit() + except Exception as error: + print("[X] Error:", error) + exit() +else: + print("[!] GUI disabled") + +# Saves the settings to the file +def save_settings(request, file): + conn = sqlite3.connect(file) + c = conn.cursor() + c.execute("UPDATE settings SET file_input = ?", (bool(request.form["file_input"] == "true"),)) + c.execute("UPDATE settings SET remove_sources = ?", (bool(request.form["remove_sources"] == "true"),)) + c.execute("UPDATE settings SET port = ?", (request.form["port"],)) + c.execute("UPDATE settings SET model = ?", (request.form["model"],)) + c.execute("UPDATE settings SET keyword = ?", (request.form["keyword"],)) + c.execute("UPDATE settings SET provider = ?", (request.form["provider"],)) + c.execute("UPDATE settings SET system_prompt = ?", (request.form["system_prompt"],)) + c.execute("UPDATE settings SET message_history = ?", (bool(request.form["message_history"] == "true"),)) + c.execute("UPDATE settings SET proxies = ?", (bool(request.form["proxies"] == "true"),)) + c.execute("UPDATE settings SET fast_api = ?", (bool(request.form["fast_api"] == "true"),)) + if (len(request.form["new_password"]) > 0): + c.execute("UPDATE settings SET password = ?", (generate_password_hash(request.form["new_password"]),)) + + file = request.files["cookie_file"] + if (bool(request.form["private_mode"] == "true")): + c.execute("UPDATE settings SET token = ?", (request.form["token"],)) + args.private_mode = True + else: + c.execute("UPDATE settings SET token = ''") + args.private_mode = False + #checks if the file is not empty + if file.filename != '': + #checks if the file is a json file + if file.filename.endswith('.json'): + #saves the file + filename = secure_filename(file.filename) + file.save(os.path.join(app.config['UPLOAD_FOLDER'], filename)) + #updates the cookie_file + c.execute("UPDATE settings SET cookie_file = ?", (os.path.join(app.config['UPLOAD_FOLDER'], filename),)) + else: + print("The file is not a json file") + + if (args.enable_proxies or bool(request.form["proxies"] == "true")): + # Extracts the proxies from the form + proxies = [] + i = 1 + while True: + if (("proxy_" + str(i)) in request.form): + proxy = request.form["proxy_" + str(i)] + if (proxy != ""): + # Checks if the proxy syntax is correct + if (proxy.count(":") == 3 and proxy.count("@") == 1): + proxy = { + "protocol": proxy.split("://")[0], + "username": proxy.split("://")[1].split(":")[0], + "password": proxy.split("://")[1].split(":")[1].split("@")[0], + "ip": proxy.split("://")[1].split(":")[1].split("@")[1], + "port": proxy.split("://")[1].split(":")[2] + } + proxies.append(proxy) + i += 1 + else: + break + + # Saves the proxies to the file proxies.json + with open(PROXIES_FILE, "w") as pf: + json.dump(proxies, pf) + pf.close() + + if (bool(request.form["fast_api"] == "true") and not args.enable_fast_api): + start_fast_api() + + conn.commit() + conn.close() + return + +# Loads the settings from the file and updates the args +def apply_settings(file): + data = load_settings(file) + args.keyword = data["keyword"] + args.file_input = data["file_input"] + args.port = data["port"] + args.provider = data["provider"] + args.model = data["model"] + args.cookie_file = data["cookie_file"] + args.token = data["token"] + args.remove_sources = data["remove_sources"] + args.system_prompt = data["system_prompt"] + args.enable_history = data["message_history"] + args.enable_proxies = data["proxies"] + args.password = data["password"] + args.enable_fast_api = data["fast_api"] + return + + +@app.route("/", methods=["GET", "POST"]) +async def index() -> str: + """ + Main function + """ + + # Starts the bot and gets the input + print("Initializing...") + question = None + + print("start") + if request.method == "GET": + question = request.args.get(args.keyword) #text + print(args.private_mode) + if (args.private_mode and request.args.get("token") != data["token"]): + return "

Invalid token

" + print("get") + else: + file = request.files["file"] + text = file.read().decode("utf-8") + question = text + print("Post reading the file", question) + + print("ici") + if question is None: + return "

Please enter a question

" + + # Gets the response from the bot + # print(PROVIDERS[args.provider].params) # supported args + print("\nCookies: " + str(len(args.cookie_file))) + print("\nInput: " + question) + if (len(args.cookie_file) != 0): + try: + cookies = json.load(open(args.cookie_file)) # Loads the cookies from the file + print("COOKIES: "+str(cookies)) + if (len(cookies) == 0): + cookies = {"a": "b"} # Dummy cookies + except Exception as error: + print("[X] Error:", error) + exit() + else: + cookies = {"a": "b"} # Dummy cookies + + + if (args.enable_history): + print("History enabled") + message_history.append({"role": "user", "content": question}) + else: + print("History disabled") + message_history.clear() + message_history.append({"role": "system", "content": args.system_prompt}) + message_history.append({"role": "user", "content": question}) + + proxy = None + if (args.enable_proxies): + # Extracts a proxy from the list + proxy = random.choice(proxies) + # Formats the proxy like https://user:password@host:port + proxy = f"{proxy['protocol']}://{proxy['username']}:{proxy['password']}@{proxy['ip']}:{proxy['port']}" + print("Proxy: " + proxy) + + if (args.provider == "Auto"): + response = ( + await g4f.ChatCompletion.create_async( + model=args.model, + messages=message_history, + cookies=cookies, + proxy=proxy + ) + ) + else: + response = ( + await g4f.ChatCompletion.create_async( + model=args.model, + provider=args.provider, + messages=message_history, + cookies=cookies, + proxy=proxy + ) + ) + + print(response) + + #Joins the response into a single string + resp_str = "" + for message in response: + resp_str += message + + # Cleans the response from the resources links + if (args.remove_sources): + if re.search(r"\[\^[0-9]+\^\]\[[0-9]+\]", resp_str): + resp_str = resp_str.split("\n\n") + if len(resp_str) > 1: + resp_str.pop(0) + resp_str = re.sub(r"\[\^[0-9]+\^\]\[[0-9]+\]", "", str(resp_str[0])) + # Returns the response + return resp_str + # return "

" + resp + "

" # Uncomment if preferred + +def auth(): + # Reads the password from the data file + data = load_settings() + # Checks if the password is set + if (data["password"] != ""): + if (request.method == "POST"): + password = request.form["password"] + if (check_password_hash(data["password"], password)): + return True + else: + return False + else: + return False + else: + return True + +@app.route("/login", methods=["GET", "POST"]) +async def login(): + if (args.enable_gui): + return render_template("login.html", **locals()) + else: + return "The GUI is disabled. In order to enable it, use the --enable-gui argument." + +@app.route("/settings", methods=["GET", "POST"]) +async def settings(): + if (request.method == "GET"): + return redirect("/login", code=302) + if (auth()): + try: + providers=PROVIDERS + generic_models=GENERIC_MODELS + data = load_settings() + proxies = json.loads(open(PROXIES_FILE).read()) + return render_template("settings.html", **locals()) + except Exception as error: + print("[X] Error:", error) + return "Error: " + str(error) + else: + return render_template("login.html", **locals()) + +@app.route("/save", methods=["POST"]) +async def save(): + if (auth()): + try: + if (request.method == "POST"): + save_settings(request, SETTINGS_FILE) + apply_settings(SETTINGS_FILE) + + return "New settings saved and applied successfully!" + else: + return render_template("login.html", **locals()) + except Exception as error: + print("[X] Error:", error) + return "Error: " + str(error) + else: + return render_template("login.html", **locals()) + +@app.route("/models", methods=["GET"]) +async def get_models(): + provider = request.args.get("provider") + if (provider == "Auto"): + return GENERIC_MODELS + try: + return PROVIDERS[provider].models + except: + return ["default"] + +@app.route("/generatetoken", methods=["GET", "POST"]) +async def get_token(): + return str(uuid4()) + +if __name__ == "__main__": +# # Starts the server, change the port if needed + app.run("0.0.0.0", port=args.port, debug=False) diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..eaac9b9 --- /dev/null +++ b/requirements.txt @@ -0,0 +1,13 @@ +curl_cffi +aiohttp +aiohttp_socks +auth +Flask[async] +g4f +Werkzeug>=3.0.3 +aiohttp_socks +nodriver +# pysqlite3 +python-multipart +uvicorn +fastapi \ No newline at end of file diff --git a/static/css/style.css b/static/css/style.css new file mode 100644 index 0000000..3cd5a16 --- /dev/null +++ b/static/css/style.css @@ -0,0 +1,73 @@ +@import url("https://fonts.googleapis.com/css2?family=Inter:wght@100;200;300;400;500;600;700;800;900&display=swap"); +/* font-family: 'Inter', sans-serif; */ + +body { + margin: 0; + padding: 0; + font-family: "Inter", sans-serif; + background-color: #e4f2f4; +} + +input::placeholder { + font-style: italic; +} + +textarea::placeholder { + font-style: italic; +} + +.inter { + font-family: "Inter", sans-serif; +} + +.darkblue { + color: #034953; +} + +.blue { + color: #007080; +} + +.label_gray { + color: #c8d9de; +} + +.label_green { + color: #035306; +} + +.label_red { + color: #8b0000; +} + +.border_red { + border-color: #8b0000; +} + +.label_darkorange { + color: #8b7b00; +} + +.darkblue_bg { + background-color: #034953; +} + +.darkgreen_bg { + background-color: #035306; +} + +.darkred_bg { + background-color: #8b0000; +} + +.blue_bg { + background-color: #007080; +} + +.lightpink_bg { + background-color: #fff2f2; +} + +.fileholder { + background-color: white !important; +} diff --git a/static/img/copy(Gregor_Cresnar).png b/static/img/copy(Gregor_Cresnar).png new file mode 100644 index 0000000000000000000000000000000000000000..a9368a65490fdffc9089f4ffe7ee5eaee98d12b6 GIT binary patch literal 4098 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 literal 0 HcmV?d00001 diff --git a/static/img/favicon(Nicoladipa).png b/static/img/favicon(Nicoladipa).png new file mode 100644 index 0000000000000000000000000000000000000000..6ed54889affead9694a54c07d45df4b2e45428cc GIT binary patch literal 77372 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¨0yl`2Qv- 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�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"!~X$(Z5V5Ho~XXVz(Yh`bWnV3#8g!)T+e4J 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 bd31fdSKwPigTrG)(5|t8nSRN&yV3s-^>1{g literal 0 HcmV?d00001 diff --git a/static/js/script.js b/static/js/script.js new file mode 100644 index 0000000..4577d64 --- /dev/null +++ b/static/js/script.js @@ -0,0 +1,252 @@ +// Turns on the button +function turnOn(idOn, idOff, set) { + document.getElementById(idOff).style.color = "#C8D9DE"; + document.getElementById(idOn).style.color = "#035306"; + document.getElementById(set).style.color = "#035306"; +} + +// Turns off the button +function turnOff(idOn, idOff, set) { + document.getElementById(idOff).style.color = "#8B0000"; + document.getElementById(idOn).style.color = "#C8D9DE"; + document.getElementById(set).style.color = "#8B0000"; +} + +// Changes the button text and color +function changeButton(buttonID) { + document.getElementById(buttonID).style.backgroundColor = "#035306"; + document.getElementById(buttonID).textContent = "Change"; +} + +// Hides an element and shows another +function replaceElement(idToHide, idToShow) { + document.getElementById(idToHide).hidden = true; + document.getElementById(idToShow).hidden = false; +} + +// Shows an element +function showElement(idToShow) { + element = document.getElementById(idToShow); + element.hidden = false; +} + +// Hides an element +function hideElement(idToHide) { + element = document.getElementById(idToHide); + element.hidden = true; +} + +// Hides a composed warning +function hideWarning(idToHide) { + document.getElementById(idToHide).classList.add("hidden"); +} + +// Shows a composed warning +function showWarning(idToShow) { + document.getElementById(idToShow).classList.remove("hidden"); +} + +// Copies the text in the given id to the clipboard +function copyTextToClipboardFromName(name) { + var copyText = document.getElementsByName(name)[0].value; + navigator.clipboard.writeText(copyText); +} + +// Replaces the element in the given ID with the given text +function replaceElementWithText(id, text) { + var element = document.getElementById(id); + var originalElement = element; + // Creates a new element + var newElement = document.createElement("p"); + // Adds some content to the new element + newElement.textContent = text; + newElement.classList.add("darkblue"); + newElement.classList.add("inline-block"); + newElement.id = id; + // Replaces the old element with the new one + element.parentNode.replaceChild(newElement, element); + + return originalElement; +} + +function copy(name, id, text) { + copyTextToClipboardFromName(name); + var oldElement = replaceElementWithText(id, text); + setTimeout( + (param) => { + var textElement = document.getElementById(id); + textElement.parentNode.replaceChild(param, textElement); + }, + 2000, + oldElement, + ); +} + +function createToken(targetID) { + $.ajax({ + url: "/generatetoken", + data: {}, + success: function (response) { + var tokenText = document.getElementById(targetID).innerText; + if (tokenText.length == 0) { + document.getElementById(targetID).innerText = response; + document.getElementById("token").value = response; + } + }, + }); +} + +function addProxy() { + // Gets the number of proxy input fields in 'proxy_list_div' + var proxyListDiv = document.getElementById("proxy_list_div"); + var proxyList = proxyListDiv.getElementsByTagName("input"); + + // Checks if there's already an empty proxy input field + for (var i = 0; i < proxyList.length; i++) { + if (proxyList[i].value.length == 0) { + return; + } + } + + // adds a new proxy input field + var newProxyDiv = document.createElement("div"); + newProxyDiv.classList.add("flex", "justify-start", "mb-3"); + + var newProxy = document.createElement("input"); + newProxy.type = "text"; + newProxy.name = "proxy_" + (proxyList.length + 1); + newProxy.id = newProxy.name; + newProxy.classList.add( + "input", + "outline-none", + "py-1", + "px-2", + "rounded-lg", + "inter", + "w-full", + ); + newProxy.placeholder = "protocol://user:password@host:port"; + newProxy.setAttribute("onchange", "checkAllProxies()"); + newProxyDiv.appendChild(newProxy); + + // adds the 'delete' image button to the new proxy input field + var deleteButton = document.createElement("img"); + deleteButton.src = "static/img/delete(Anggara).png"; + deleteButton.classList.add( + "inline-block", + "mx-2", + "p-1", + "hover:brightness-125", + ); + deleteButton.width = 32; + deleteButton.onclick = function () { + newProxyDiv.remove(); + }; + newProxyDiv.appendChild(deleteButton); + + document.getElementById("proxy_list_div").appendChild(newProxyDiv); +} + +function deleteElement(id) { + document.getElementById(id).remove(); +} + +// Checks if the proxy syntax is correct +function checkProxySyntax(proxy) { + var proxyRegex = + /^((http|https|socks4|socks5):\/\/)?([a-zA-Z0-9]+:[a-zA-Z0-9]+@)?([a-zA-Z0-9.-]+):([0-9]+)$/; + return proxyRegex.test(proxy); +} + +// Warns the user if the proxy syntax is incorrect +function warnProxySyntax(proxy, proxyID) { + if (checkProxySyntax(proxy)) { + document + .getElementById(proxyID) + .classList.remove("border_red", "label_red", "lightpink_bg"); + } else { + document + .getElementById(proxyID) + .classList.add("border_red", "border", "label_red", "lightpink_bg"); + } +} + +// Checks the syntax at every proxy input field at input change +function checkAllProxies() { + var proxyListDiv = document.getElementById("proxy_list_div"); + var proxyList = proxyListDiv.getElementsByTagName("input"); + for (var i = 0; i < proxyList.length; i++) { + warnProxySyntax(proxyList[i].value, proxyList[i].id); + } +} + +// Checks if new password and confirm password match +function checkPasswordMatch() { + var newPassword = document.getElementById("new_password").value; + var confirmPassword = document.getElementById("confirm_password").value; + if (newPassword == confirmPassword) { + if (newPassword.length > 0) { + replaceElement("error_password", "success_password"); + return true; + } + } else { + replaceElement("success_password", "error_password"); + } + return false; +} + +// Opens the update password form +function openPasswordUpdate() { + replaceElement("open_password_update", "cancel_password_update"); + showElement("password_update"); +} + +// Closes the update password form +function cancelPasswordUpdate() { + hideElement("password_update"); + hideElement("success_password"); + hideElement("error_password"); + replaceElement("cancel_password_update", "open_password_update"); + document.getElementById("new_password").value = ""; + document.getElementById("confirm_password").value = ""; +} + +// Enables the save button if the password is correct +function enableSaveButton() { + var pass_length = document.getElementById("password").value.length; + var isPasswordUpdateClosed = document.getElementById("password_update").hidden; + if ((checkPasswordMatch() || isPasswordUpdateClosed) && pass_length > 0) { + replaceElement('save_label_dummy', 'save_label'); + } else { + replaceElement('save_label', 'save_label_dummy'); + } +} + +// Gets available models for choosen A.I. Provider +$(document).ready(function () { + $("#provider").change(function () { + var inputValue = $(this).val(); + $.ajax({ + url: "/models", + data: { + provider: inputValue, + }, + success: function (response) { + var select = document.getElementById("model"); + + // Remove existing models + while (select.firstChild) { + select.removeChild(select.firstChild); + } + + // Add the new models + for (var i = 0; i < response.length; i++) { + var option = document.createElement("option"); + option.innerText = response[i]; + option.value = response[i]; + select.add(option); + } + }, + }); + }); +}); diff --git a/templates/login.html b/templates/login.html new file mode 100644 index 0000000..5cf6f6a --- /dev/null +++ b/templates/login.html @@ -0,0 +1,49 @@ + + + + + + + + + + + + + Login + + + {% block content %} + + + + + + +
+ Logo + +

FreeGPT4

+

Server settings

+
+ +
+
+
+
+
+ +
+
+ +
+
+
+ + {% endblock %} + + + + + diff --git a/templates/settings.html b/templates/settings.html new file mode 100644 index 0000000..cde3b59 --- /dev/null +++ b/templates/settings.html @@ -0,0 +1,292 @@ + + + + + + + + + + + + Settings + + + {% block content %} + + + + + + +
+ Logo + +

FreeGPT4

+

Server settings

+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
File input support: + {% if data['file_input'] %} + + +

-

+ + + {% else %} + + +

-

+ + + {% endif %} +
Show sources: + {% if data['remove_sources'] %} + + +

-

+ + + {% else %} + + +

-

+ + + {% endif %} +
Message history: + {% if data['message_history'] %} + + +

-

+ + + {% else %} + + +

-

+ + + {% endif %} +
+ Private Mode: +
+ + + {% if data['token']|length > 0 %} + + {% else %} + +
+ {% if data['token'] %} + + +

-

+ + + {% else %} + + +

-

+ + + {% endif %} +
+ Proxies: +
+ {% if data['proxies'] %} +
+ {% else %} + +
+ {% if data['proxies'] %} + + +

-

+ + + {% else %} + + +

-

+ + + {% endif %} +
+ Fast API: +
+ +
+ {% if data['fast_api'] %} + + +

-

+ + + {% else %} + + +

-

+ + + {% endif %} +
+ Server port: +
+ +
+ + + +
A.I. Provider: + + + +
A.I. Model: + + + +
Cookies: + + + {% if data['cookie_file']|length == 0 %} + + {% else %} + + {% endif %} + +
Input keyword: + + + +
+ Password: + + + + + + +
+ System Prompt: + +
+ +
+ +
+ +
+ + + + +
+
+ + {% endblock %} + + + + + + diff --git a/tests/__init__.py b/tests/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/tests/test_launch.py b/tests/test_launch.py new file mode 100644 index 0000000..82e6984 --- /dev/null +++ b/tests/test_launch.py @@ -0,0 +1,4 @@ +from src.FreeGPT4_Server import index + +def test_index(): + assert index()