mirror of
https://github.com/csd4ni3l/debt-by-ai.git
synced 2026-01-01 12:33:44 +01:00
Add defensive mode, and a leaderboard
This commit is contained in:
69
app.py
69
app.py
@@ -2,7 +2,7 @@ from flask import Flask, render_template, request, g, redirect, url_for, Respons
|
||||
from dotenv import load_dotenv
|
||||
from google.genai import Client, types
|
||||
|
||||
from constants import OFFENSIVE_SCENARIO_PROMPT, OFFENSIVE_ANSWER_PROMPT, debt_amount_regex, evaluation_regex, AI_NAME
|
||||
from constants import OFFENSIVE_SCENARIO_PROMPT, OFFENSIVE_ANSWER_PROMPT, DEFENSIVE_SCENARIO_PROMPT, DEFENSIVE_ANSWER_PROMPT, debt_amount_regex, evaluation_regex, AI_NAME
|
||||
|
||||
import os, requests, time, re, sqlite3, flask_login, bcrypt, secrets
|
||||
|
||||
@@ -67,9 +67,38 @@ def offensive_mode():
|
||||
username = flask_login.current_user.id
|
||||
return render_template("offensive.jinja2", ai_name=AI_NAME, username=username)
|
||||
|
||||
@app.route("/defensive")
|
||||
@flask_login.login_required
|
||||
def defensive_mode():
|
||||
username = flask_login.current_user.id
|
||||
return render_template("defensive.jinja2", ai_name=AI_NAME, username=username)
|
||||
|
||||
@app.route("/leaderboard")
|
||||
@flask_login.login_required
|
||||
def leaderboard():
|
||||
return render_template("leaderboard.jinja2")
|
||||
username = flask_login.current_user.id
|
||||
leaderboard_type = request.args.get("leaderboard_type", "offended_debt_amount")
|
||||
|
||||
cur = get_db().cursor()
|
||||
|
||||
if leaderboard_type == "offended_debt_amount":
|
||||
leaderboard_type = "Offended Debt Amount"
|
||||
cur.execute("SELECT offended_debt_amount, username FROM Users ORDER BY offended_debt_amount DESC")
|
||||
elif leaderboard_type == "defended_debt_amount":
|
||||
leaderboard_type = "Defended Debt Amount"
|
||||
cur.execute("SELECT defended_debt_amount, username FROM Users ORDER BY defended_debt_amount DESC")
|
||||
elif leaderboard_type == "offensive_wins":
|
||||
leaderboard_type = "Offensive Wins"
|
||||
cur.execute("SELECT offensive_wins, username FROM Users ORDER BY offensive_wins DESC")
|
||||
elif leaderboard_type == "defensive_wins":
|
||||
leaderboard_type = "Defensive Wins"
|
||||
cur.execute("SELECT defensive_wins, username FROM Users ORDER BY defensive_wins DESC")
|
||||
|
||||
rows = cur.fetchall()
|
||||
if not rows:
|
||||
cur.close()
|
||||
|
||||
return render_template("leaderboard.jinja2", username=username, leaderboard_type=leaderboard_type, users=rows)
|
||||
|
||||
@app.route("/login", methods=["GET", "POST"])
|
||||
def login():
|
||||
@@ -149,6 +178,21 @@ def ai_prompt(prompt):
|
||||
|
||||
return response.text.replace("'''", '')
|
||||
|
||||
@app.route("/defensive_scenario")
|
||||
@flask_login.login_required
|
||||
def defensive_scenario():
|
||||
text = ""
|
||||
|
||||
while not "Debt amount: " in text or not "Scenario: " in text or not re.findall(debt_amount_regex, text):
|
||||
text = ai_prompt(DEFENSIVE_SCENARIO_PROMPT)
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
return {
|
||||
"scenario": text.split("Scenario: ")[1].split("\n")[0],
|
||||
"debt_amount": int(text.split("Debt amount: ")[1].split("$")[0])
|
||||
}
|
||||
|
||||
@app.route("/offensive_scenario")
|
||||
@flask_login.login_required
|
||||
def offensive_scenario():
|
||||
@@ -185,4 +229,25 @@ def offensive_answer():
|
||||
"final_debt_amount": text.split("Final Debt Amount: ")[1].split("$")[0]
|
||||
}
|
||||
|
||||
@app.route("/defensive_answer", methods=["POST"])
|
||||
@flask_login.login_required
|
||||
def defensive_answer():
|
||||
scenario, user_input = request.json['scenario'], request.json["user_input"]
|
||||
|
||||
if not scenario or not user_input:
|
||||
return "Missing data."
|
||||
|
||||
text = ""
|
||||
|
||||
while not re.findall(evaluation_regex, text):
|
||||
text = ai_prompt(DEFENSIVE_ANSWER_PROMPT.format_map({"scenario": scenario, "user_input": user_input, "ai_name": AI_NAME}))
|
||||
|
||||
time.sleep(0.5)
|
||||
|
||||
return {
|
||||
"story": text.split("\nEVALUATION")[0],
|
||||
"convinced": True if "Yes" in text.split("Convinced: ")[1].split("\nFinal")[0] else False,
|
||||
"final_debt_amount": text.split("Final Debt Amount: ")[1].split("$")[0]
|
||||
}
|
||||
|
||||
app.run(host=os.environ.get("HOST", "0.0.0.0"), port=os.environ.get("PORT", 8080), debug=os.environ.get("DEBUG_MODE", False))
|
||||
Reference in New Issue
Block a user