Merge pull request #12 from phixxy/aiohttp

Now use a single aiohttp session
This commit is contained in:
phixxy 2023-07-17 21:55:49 -07:00 committed by GitHub
commit bfb06da556
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -142,8 +142,7 @@ async def answer_question(topic, model="gpt-3.5-turbo"):
url = "https://api.openai.com/v1/chat/completions" url = "https://api.openai.com/v1/chat/completions"
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url, headers=headers, json=data) as resp:
async with session.post(url, headers=headers, json=data) as resp:
response_data = await resp.json() response_data = await resp.json()
response = response_data['choices'][0]['message']['content'] response = response_data['choices'][0]['message']['content']
return response return response
@ -189,12 +188,11 @@ async def look_at(ctx, look=False):
url = os.getenv('stablediffusion_url') url = os.getenv('stablediffusion_url')
if url == "disabled": if url == "disabled":
return return
async with aiohttp.ClientSession() as session:
for attachment in ctx.attachments: for attachment in ctx.attachments:
if attachment.url.endswith(('.jpg', '.png')): if attachment.url.endswith(('.jpg', '.png')):
print("image seen") print("image seen")
async with session.get(attachment.url) as response: async with bot.http_session.get(attachment.url) as response:
imageName = "tmp/" + str(len(os.listdir('tmp/'))) + '.png' imageName = "tmp/" + str(len(os.listdir('tmp/'))) + '.png'
with open(imageName, 'wb') as out_file: with open(imageName, 'wb') as out_file:
@ -209,7 +207,7 @@ async def look_at(ctx, look=False):
try: try:
payload = {"image": img_link} payload = {"image": img_link}
async with session.post(f'{url}/sdapi/v1/interrogate', json=payload) as response: async with bot.http_session.post(f'{url}/sdapi/v1/interrogate', json=payload) as response:
data = await response.json() data = await response.json()
description = data.get("caption") description = data.get("caption")
description = description.split(',')[0] description = description.split(',')[0]
@ -250,8 +248,7 @@ async def react_to_msg(ctx, react):
url = "https://api.openai.com/v1/chat/completions" url = "https://api.openai.com/v1/chat/completions"
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url, headers=headers, json=data) as resp:
async with session.post(url, headers=headers, json=data) as resp:
response_data = await resp.json() response_data = await resp.json()
reaction = response_data['choices'][0]['message']['content'] reaction = response_data['choices'][0]['message']['content']
await ctx.add_reaction(reaction.strip()) await ctx.add_reaction(reaction.strip())
@ -291,8 +288,7 @@ async def chat_response(ctx, channel_vars, chat_history_string):
url = "https://api.openai.com/v1/chat/completions" url = "https://api.openai.com/v1/chat/completions"
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url, headers=headers, json=data) as resp:
async with session.post(url, headers=headers, json=data) as resp:
response_data = await resp.json() response_data = await resp.json()
response = response_data['choices'][0]['message']['content'] response = response_data['choices'][0]['message']['content']
if "Sparkytron 3000:" in response[0:17]: if "Sparkytron 3000:" in response[0:17]:
@ -351,6 +347,20 @@ async def task_loop():
else: else:
await bot_stuff.send("All daily tasks successfully ran!") await bot_stuff.send("All daily tasks successfully ran!")
async def create_session():
return aiohttp.ClientSession(timeout=30)
async def close_session(session):
await session.close()
@bot.event
async def on_connect():
bot.http_session = await create_session()
@bot.event
async def on_disconnect():
await close_session(bot.http_session)
@bot.event @bot.event
async def on_ready(): async def on_ready():
print('We have logged in as {0.user}'.format(bot)) print('We have logged in as {0.user}'.format(bot))
@ -614,8 +624,7 @@ async def meme(ctx):
async def generate_random_meme(topic): async def generate_random_meme(topic):
async with aiohttp.ClientSession() as session: async with bot.http_session.get('https://api.imgflip.com/get_memes') as resp:
async with session.get('https://api.imgflip.com/get_memes') as resp:
response_data = await resp.json() response_data = await resp.json()
response = response_data['data']['memes'] response = response_data['data']['memes']
memepics = [{'name':image['name'],'url':image['url'],'id':image['id']} for image in response] memepics = [{'name':image['name'],'url':image['url'],'id':image['id']} for image in response]
@ -651,8 +660,7 @@ async def meme(ctx):
URL = 'https://api.imgflip.com/caption_image' URL = 'https://api.imgflip.com/caption_image'
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(URL, params=params) as resp:
async with session.post(URL, params=params) as resp:
response = await resp.json() response = await resp.json()
print(f"Generated Meme = {response['success']}\nImage Link = {response['data']['url']}\nPage Link = {response['data']['page_url']}") print(f"Generated Meme = {response['success']}\nImage Link = {response['data']['url']}\nPage Link = {response['data']['page_url']}")
image_link = response['data']['url'] image_link = response['data']['url']
@ -694,9 +702,24 @@ async def meme(ctx):
brief="Runescape gold to usd" brief="Runescape gold to usd"
) )
async def rsgp(ctx, amount): async def rsgp(ctx, amount):
cost_per_bil = 27 #1b rsgp to usd output = ""
cost = (int(amount) * cost_per_bil / 1000000000) cost_per_bil = 25.50 #1b rsgp to usd
output = str(amount) + ' rsgp would cost: $' + str(cost) cost_per_bil_os = 210
gold_per_bond = 70000000
gold_per_bond_os = 7000000
cost_per_bond = 8 #dollars usd
bondcost = (int(amount)/gold_per_bond) * cost_per_bond
rwtcost = (int(amount) * cost_per_bil / 1000000000)
dollar_gp = (int(amount)*1000000000)/cost_per_bil
osbondcost = (int(amount)/gold_per_bond_os) * cost_per_bond
osrwtcost = (int(amount) * cost_per_bil_os / 1000000000)
osdollar_gp = (int(amount)*1000000000)/cost_per_bil_os
output += str(amount) + ' rs3 gp would cost: $' + str(rwtcost) + " (RWT)\n"
output += str(amount) + ' rs3 gp would cost: $' + str(bondcost) + " (Bonds)\n"
output += str(amount) + ' dollars spent on rs3 gp would be: ' + str(dollar_gp) + " (RS3 GP)\n"
output += str(amount) + ' osrs gp would cost: $' + str(rwtcost) + " (RWT)\n"
output += str(amount) + ' osrs gp would cost: $' + str(bondcost) + " (Bonds)\n"
output += str(amount) + ' dollars spent on osrs gp would be: ' + str(dollar_gp) + " (OSRS GP)\n"
await ctx.send(output) await ctx.send(output)
@bot.command( @bot.command(
@ -968,7 +991,6 @@ async def website(ctx):
if url == "disabled": if url == "disabled":
return return
file_list = [] file_list = []
async with aiohttp.ClientSession() as session:
for image in image_list: for image in image_list:
filename = image.replace(" ", "").lower() + ".png" filename = image.replace(" ", "").lower() + ".png"
payload = {"prompt": image, "steps": 25} payload = {"prompt": image, "steps": 25}
@ -1094,14 +1116,12 @@ async def draw(ctx):
negative_prompt = "" negative_prompt = ""
payload = {"prompt": prompt,"steps": 25, "negative_prompt": negative_prompt,"batch_size": amount} payload = {"prompt": prompt,"steps": 25, "negative_prompt": negative_prompt,"batch_size": amount}
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url=f'{url}/sdapi/v1/txt2img', json=payload) as resp:
async with session.post(url=f'{url}/sdapi/v1/txt2img', json=payload) as resp:
r = await resp.json() r = await resp.json()
for i in r['images']: for i in r['images']:
image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0]))) image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0])))
png_payload = {"image": "data:image/png;base64," + i} png_payload = {"image": "data:image/png;base64," + i}
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url=f'{url}/sdapi/v1/png-info', json=png_payload) as resp2:
async with session.post(url=f'{url}/sdapi/v1/png-info', json=png_payload) as resp2:
response2 = await resp2.json() response2 = await resp2.json()
pnginfo = PngImagePlugin.PngInfo() pnginfo = PngImagePlugin.PngInfo()
pnginfo.add_text("parameters", response2.get("info")) pnginfo.add_text("parameters", response2.get("info"))
@ -1274,8 +1294,7 @@ async def change_model(ctx, model_choice='0'):
await ctx.send("This command is currently disabled") await ctx.send("This command is currently disabled")
return return
async with aiohttp.ClientSession() as session: async with bot.http_session.get(url=f'{url}/sdapi/v1/options') as response:
async with session.get(url=f'{url}/sdapi/v1/options') as response:
config_json = await response.json() config_json = await response.json()
current_model = config_json["sd_model_checkpoint"] current_model = config_json["sd_model_checkpoint"]
@ -1285,8 +1304,7 @@ async def change_model(ctx, model_choice='0'):
model_id, model_name = model_choices[model_choice] model_id, model_name = model_choices[model_choice]
if current_model != model_id: if current_model != model_id:
payload = {"sd_model_checkpoint": model_id} payload = {"sd_model_checkpoint": model_id}
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url=f'{url}/sdapi/v1/options', json=payload) as response:
async with session.post(url=f'{url}/sdapi/v1/options', json=payload) as response:
output = "Changed model to: " + model_name output = "Changed model to: " + model_name
await ctx.send(output) await ctx.send(output)
return return
@ -1328,8 +1346,7 @@ async def imagine(ctx):
payload = combine_dicts(payload, key_value_pairs) payload = combine_dicts(payload, key_value_pairs)
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url, headers=headers, json=payload) as resp:
async with session.post(url, headers=headers, json=payload) as resp:
r = await resp.json() r = await resp.json()
except Exception as error: except Exception as error:
await ctx.send("My image generation service may not be running.") await ctx.send("My image generation service may not be running.")
@ -1343,8 +1360,7 @@ async def imagine(ctx):
png_payload = {"image": "data:image/png;base64," + i} png_payload = {"image": "data:image/png;base64," + i}
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url, json=png_payload) as resp:
async with session.post(url, json=png_payload) as resp:
response2 = await resp.json() response2 = await resp.json()
except Exception as error: except Exception as error:
await ctx.send("My image generation service may not be running.") await ctx.send("My image generation service may not be running.")
@ -1391,8 +1407,7 @@ async def describe(ctx):
print("Couldn't find image.") print("Couldn't find image.")
return return
async with aiohttp.ClientSession() as session: async with bot.http_session.get(file_url) as response:
async with session.get(file_url) as response:
imageName = "tmp/" + str(len(os.listdir("tmp/"))) + ".png" imageName = "tmp/" + str(len(os.listdir("tmp/"))) + ".png"
with open(imageName, 'wb') as out_file: with open(imageName, 'wb') as out_file:
print(f"Saving image: {imageName}") print(f"Saving image: {imageName}")
@ -1405,8 +1420,7 @@ async def describe(ctx):
img_link = my_open_img_file(imageName) img_link = my_open_img_file(imageName)
try: try:
payload = {"image": img_link} payload = {"image": img_link}
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url, json=payload) as response:
async with session.post(url, json=payload) as response:
r = await response.json() r = await response.json()
print(r) print(r)
await ctx.send(r.get("caption")) await ctx.send(r.get("caption"))
@ -1442,8 +1456,7 @@ async def reimagine(ctx):
key_value_pairs, prompt = extract_key_value_pairs(prompt) key_value_pairs, prompt = extract_key_value_pairs(prompt)
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.get(file_url) as response:
async with session.get(file_url) as response:
imageName = "tmp/" + str(len(os.listdir("tmp/"))) + ".png" imageName = "tmp/" + str(len(os.listdir("tmp/"))) + ".png"
with open(imageName, 'wb') as out_file: with open(imageName, 'wb') as out_file:
print(f"Saving image: {imageName}") print(f"Saving image: {imageName}")
@ -1468,15 +1481,14 @@ async def reimagine(ctx):
payload = combine_dicts(payload, key_value_pairs) payload = combine_dicts(payload, key_value_pairs)
try: try:
async with aiohttp.ClientSession() as session: async with bot.http_session.post(url=f'{url}/sdapi/v1/img2img', json=payload) as response:
async with session.post(url=f'{url}/sdapi/v1/img2img', json=payload) as response:
data = await response.json() data = await response.json()
for i in data['images']: for i in data['images']:
if not os.path.isdir("tmp/reimagined/"+ str(ctx.author.id)): if not os.path.isdir("tmp/reimagined/"+ str(ctx.author.id)):
os.makedirs("tmp/reimagined/"+ str(ctx.author.id)) os.makedirs("tmp/reimagined/"+ str(ctx.author.id))
image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0]))) image = Image.open(io.BytesIO(base64.b64decode(i.split(",",1)[0])))
png_payload = {"image": "data:image/png;base64," + i} png_payload = {"image": "data:image/png;base64," + i}
async with session.post(url=f'{url}/sdapi/v1/png-info', json=png_payload) as resp2: async with bot.http_session.post(url=f'{url}/sdapi/v1/png-info', json=png_payload) as resp2:
response2 = await resp2.json() response2 = await resp2.json()
pnginfo = PngImagePlugin.PngInfo() pnginfo = PngImagePlugin.PngInfo()
pnginfo.add_text("parameters", response2.get("info")) pnginfo.add_text("parameters", response2.get("info"))