|
import os |
|
import random |
|
import gradio as gr |
|
import openai |
|
|
|
team_list=['Ana','Ashe','Baptiste','Bastion','Brigitte','Cassidy','Doomfist','Dva','Echo','Genji','Hanzo','JunkerQueen','Junkrat','Kiriko','Lucio','Mei','Mercy','Moira','Orisa','Pharah','Reaper','Reinhardt','Roadhog','Sigma','Sojourn','Soldier76','Sombra','Symmetra','Torbjorn','Tracer','Widowmaker','Winston','Wrecking Ball','Zarya','Zenyatta','None'] |
|
|
|
val_team_list=["Astra", "Breach", "Brimstone", "Chamber", "Cypher", "Jett", "Kay", "Killjoy", "Neon", "Omen", "Phoenix", "Raze", "Reyna", "Sage", "Skye", "Sova", "Viper","Yoru","None"] |
|
|
|
|
|
openai.api_key = os.getenv("OPENAI_API_KEY") |
|
|
|
|
|
|
|
def process_squad(Team): |
|
if len(Team) == 1: |
|
return " "+Team[0] |
|
else: |
|
constructor = "" |
|
for hero in Team: |
|
constructor += f' {hero},' |
|
constructor = constructor[:-1] |
|
return constructor |
|
|
|
def chat(Mode, Me, Teammate, Opponents, history): |
|
history = history or [] |
|
teammate_string = str(Teammate) |
|
if not Me or Me=="None": |
|
history.append((str(Teammate)+str(Opponents), "Please select the hero you're playing")) |
|
return history, history |
|
print(Me) |
|
message = "Playing Overwatch2 as " + str(Me) |
|
|
|
if not Teammate or Teammate == "None": |
|
message += ", " |
|
else: |
|
print(Teammate) |
|
message += f' with {teammate_string} on my team, ' |
|
if not Opponents: |
|
message += "how should I play to win games?" |
|
else: |
|
message += f' how do we counter{process_squad(Opponents)}?' |
|
if Mode == "Bronze": |
|
message += " Give sarcastic advice." |
|
|
|
response = openai.Completion.create(model="text-davinci-003", prompt=message, temperature=0.7, max_tokens=100)['choices'][0]['text'] |
|
index = response.rfind('.') |
|
response = response[:index+1] |
|
|
|
if not Teammate or Teammate == "None": |
|
chat_msg = f'{Me} v {",".join(Opponents)}' |
|
else: |
|
chat_msg = f'{Me},{Teammate} v {",".join(Opponents)}'.lower() |
|
print(response) |
|
history.append((chat_msg, response)) |
|
return history, history |
|
|
|
chatbot = gr.Chatbot().style(color_map=("grey", "blue")) |
|
chatbot2 = gr.Chatbot().style(color_map=("grey", "red")) |
|
|
|
def chat2(Mode,Me, Opponent, history): |
|
history = history or [] |
|
if not Me or Me=="None": |
|
history.append((str(Opponent), "Please select the agent you're playing")) |
|
return history, history |
|
print(Me) |
|
message = "Playing Valorant as " + str(Me) |
|
|
|
if not Opponent or Opponent == "None": |
|
message += ", give advice on playstle." |
|
else: |
|
message += f', how do I counter {Opponent}?' |
|
if Mode == "Bronze": |
|
message += " Give sarcastic advice." |
|
response = openai.Completion.create(model="text-davinci-003", prompt=message, temperature=0.65, max_tokens=100)['choices'][0]['text'] |
|
|
|
history.append((f'{Me} v {Opponent}', response)) |
|
return history, history |
|
|
|
chatbot = gr.Chatbot().style(color_map=("grey", "blue")) |
|
|
|
demo1 = gr.Interface( |
|
chat, |
|
[ |
|
gr.Radio(["Normal", "Bronze"],value="Normal"), |
|
gr.Dropdown(team_list), |
|
gr.Dropdown(team_list), |
|
gr.Dropdown(team_list, value=[team_list[random.randint(1,30)]], multiselect=True), |
|
|
|
"state" |
|
], |
|
[chatbot, "state"], |
|
allow_flagging="never", |
|
|
|
description="Please select the hero you play. Choose less than two other heroes for best advice.", |
|
css="footer {visibility: hidden}" |
|
) |
|
|
|
demo2 = gr.Interface( |
|
chat2, |
|
[ |
|
gr.Radio(["Normal", "Bronze"],value="Normal"), |
|
gr.Dropdown(val_team_list, value=[]), |
|
gr.Dropdown(val_team_list, value=[val_team_list[random.randint(1,12)]]), |
|
"state" |
|
], |
|
[chatbot2, "state"], |
|
allow_flagging="never", |
|
css="footer {visibility: hidden}" |
|
) |
|
demo = gr.TabbedInterface([demo1, demo2], ["Overwatch 2 Coach", "Valorant Coach"],title="GPT-3 Game Coaching",css="footer {visibility: hidden}") |
|
|
|
demo.launch() |
|
|