Ceetar commited on
Commit
03963fa
1 Parent(s): 90a7e3d

crude version, but working

Browse files
Files changed (2) hide show
  1. .vscode/settings.json +5 -0
  2. app.py +117 -15
.vscode/settings.json ADDED
@@ -0,0 +1,5 @@
 
 
 
 
 
 
1
+ {
2
+ "editor.formatOnPaste": true,
3
+ "editor.detectIndentation": false,
4
+ "python.formatting.provider": "black"
5
+ }
app.py CHANGED
@@ -1,18 +1,121 @@
1
  import gradio as gr
2
  import openai
3
  import os
 
4
  import random
5
-
 
 
 
 
 
 
 
6
  from dotenv import load_dotenv
7
  from openai import OpenAI
 
 
8
 
9
  load_dotenv()
10
 
 
11
  openai.api_key = os.getenv('OPENAI_API_KEY')
12
- print(openai.api_key)
13
- print (os.environ.get("OPENAI_API_KEY"))
14
  client = openai.OpenAI(organization='org-eiNl8e4nk93VLQFDb4EBz9JG')
15
  #openai.api_key = os.environ['openai'] #for huggingface i think
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  #generates an AI description of your character
18
  def describe(names,wis,char,str,int,dex,con):
@@ -43,21 +146,19 @@ def describe(names,wis,char,str,int,dex,con):
43
  if not result :
44
  result = "Could you be any more boring?"
45
 
 
 
46
 
47
- return result
48
-
49
- #generates an AI description of your character
50
  def makeName():
51
 
52
- prom=f"We're generating Dungeons and Dragons characters for a new campaign, and we need a name."
53
- prom+=f" Please imagine and give me just a character name for the player to use."
54
  completion = client.completions.create(
55
  model='gpt-3.5-turbo-instruct',
56
  prompt=prom,
57
  max_tokens=50,
58
- temperature=0.77,
59
- frequency_penalty=0.2,
60
- presence_penalty= 0.25)
61
 
62
  result =completion.choices[0].text
63
  #print(dict(completion).get('usage'))
@@ -69,7 +170,7 @@ def makeName():
69
  result = "The Doctor"
70
 
71
 
72
- return result
73
 
74
  def stat( ndice, dicerank):
75
  # return ndice + dicerank
@@ -101,13 +202,14 @@ with gr.Blocks() as statBlock:
101
 
102
  rollButt = gr.Button(value="Roll Stats")
103
  describeButt = gr.Button(value="Generate Description")
104
-
105
  outputBox=gr.Textbox(label="The character",show_label=True)
106
-
 
107
  nameButt.click(makeName,inputs=[],outputs=[nameBox])
108
  rollButt.click(stat, inputs=[dice,gr.Number(value=6, visible=False,precision=0)],outputs=[wisBox,charBox,strBox,intBox,dexBox,conBox])
109
  describeButt.click(describe, outputs=[outputBox],inputs=[nameBox,wisBox,charBox,strBox,intBox,dexBox,conBox])
 
110
  statBlock.launch()
111
 
112
 
113
-
 
1
  import gradio as gr
2
  import openai
3
  import os
4
+ import IPython
5
  import random
6
+ import requests
7
+ import json
8
+ import time
9
+ import math
10
+ import io
11
+
12
+ from stability_sdk import client as sclient
13
+ from io import BytesIO
14
  from dotenv import load_dotenv
15
  from openai import OpenAI
16
+ from PIL import Image
17
+ import stability_sdk.interfaces.gooseai.generation.generation_pb2 as generation
18
 
19
  load_dotenv()
20
 
21
+ sdurl = "https://stablediffusionapi.com/api/v3/text2img"
22
  openai.api_key = os.getenv('OPENAI_API_KEY')
23
+ #print(openai.api_key)
24
+ #print (os.environ.get("OPENAI_API_KEY"))
25
  client = openai.OpenAI(organization='org-eiNl8e4nk93VLQFDb4EBz9JG')
26
  #openai.api_key = os.environ['openai'] #for huggingface i think
27
+ os.environ['STABILITY_HOST'] = 'grpc.stability.ai:443'
28
+ stability_api = sclient.StabilityInference(
29
+ key=os.getenv('STABILITY_KEY'),
30
+ verbose=True,
31
+ engine="stable-diffusion-xl-1024-v1-0"
32
+ )
33
+
34
+
35
+
36
+ #generates an AI picture of your char
37
+ def draw(thechar):
38
+ thechar=thechar.split("$$$")[0].strip()
39
+ moretime=50
40
+ cfg=8.0
41
+ noinit=0
42
+ r2="1"
43
+ r3="1"
44
+ filename="drunkgrogu"+str(r2)+".png"
45
+ filenamefilter="calvin"+str(r3)+".png"
46
+ #await ctx.channel.send(file=discord.File(filename))
47
+ #stable-diffusion-xl-1024-v0-9
48
+ notoldguy="bad anatomy, fuzzy, out of focus, cut off, low res"
49
+
50
+ try :
51
+ if noinit :
52
+ print("initimg")
53
+ answers = stability_api.generate(
54
+ prompt=[generation.Prompt(text=thechar,parameters=generation.PromptParameters(weight=1)),
55
+ generation.Prompt(text=notoldguy,parameters=generation.PromptParameters(weight=-1))],
56
+ steps=moretime, # defaults to 50 if not specified
57
+ )
58
+ else :
59
+ print("noinitimg:"+thechar+"\nneg:"+notoldguy)
60
+ answers = stability_api.generate(
61
+ prompt=[generation.Prompt(text=thechar,parameters=generation.PromptParameters(weight=1)),
62
+ generation.Prompt(text=notoldguy,parameters=generation.PromptParameters(weight=-1))],
63
+ cfg_scale=cfg,
64
+ steps=moretime, # defaults to 50 if not specified
65
+ width=1024,
66
+ height=1024
67
+ )
68
+ except Exception as eeeee :
69
+ print(eeeee)
70
+
71
+
72
+ try :
73
+ # iterating over the generator produces the api response
74
+ for resp in answers:
75
+ #print(resp)
76
+ for artifact in resp.artifacts:
77
+ #print("fin rease:"+str(artifact.finish_reason))
78
+ if artifact.finish_reason == generation.FILTER:
79
+ if random.randrange(0,2)==1 :
80
+ print("await ctx.channel.send(file=discord.File(filenamefilter))")
81
+ else :
82
+ print(" await ctx.channel.send(file=discord.File(filename))")
83
+ #warnings.warn("Your request activated the API's safety filters and could not be processed. Please modify the prompt and try again.")
84
+ if artifact.type == generation.ARTIFACT_IMAGE:
85
+ #print("we got an image")
86
+ img = Image.open(io.BytesIO(artifact.binary))
87
+ #oldoldguy=oldoldguy.replace("|","--")
88
+ # oldoldguy = oldoldguy.replace("*","")
89
+ #metadata = PngInfo()
90
+ #metadata.add_text("prompt", oldguy)
91
+ thechar=thechar.replace("Character Description","")
92
+ filename="dndChar"+str(math.trunc(time.time()))+thechar[:80].replace("\n","").replace(",","")
93
+
94
+ filename=filename[:245]+".png"
95
+ img.save(filename)
96
+
97
+ ##filename="image5r"+str(math.trunc(time.time()))+".png"
98
+ #print(str(img))
99
+ ##filename=filename[:245]+".png"
100
+ #print(filename)
101
+ ##img.save(filename)
102
+ #filename="image5r"+str(math.trunc(time.time()))+".png"
103
+ #img.save(filename)
104
+ #display(img)
105
+
106
+ except Exception as eeee :
107
+
108
+ print(eeee.details)
109
+ print("Error. Have a random image instead:");
110
+
111
+
112
+ #print(response.text)
113
+ #print(response.output)
114
+ print(filename)
115
+ imageBox = gr.Image(value=Image.open(filename))
116
+ imageBox2 = img
117
+ return img
118
+
119
 
120
  #generates an AI description of your character
121
  def describe(names,wis,char,str,int,dex,con):
 
146
  if not result :
147
  result = "Could you be any more boring?"
148
 
149
+ #draw(result.split("$$$")[0],outputs=imageBox2)
150
+ return result#result.replace("$$$","")
151
 
152
+ #generates an AI nam,
 
 
153
  def makeName():
154
 
155
+ prom=f"We're generating Dungeons and Dragons characters for a new campaign, and we need a good, original name."
156
+ prom+=f" Please imagine and give me just a character name for the player to use. Be creative and fun. No duds."
157
  completion = client.completions.create(
158
  model='gpt-3.5-turbo-instruct',
159
  prompt=prom,
160
  max_tokens=50,
161
+ temperature=0.97)
 
 
162
 
163
  result =completion.choices[0].text
164
  #print(dict(completion).get('usage'))
 
170
  result = "The Doctor"
171
 
172
 
173
+ return result.strip()
174
 
175
  def stat( ndice, dicerank):
176
  # return ndice + dicerank
 
202
 
203
  rollButt = gr.Button(value="Roll Stats")
204
  describeButt = gr.Button(value="Generate Description")
205
+ imgButt = gr.Button(value="Generate Image")
206
  outputBox=gr.Textbox(label="The character",show_label=True)
207
+ imageBox = gr.Image()
208
+ imageBox2 = gr.Image()
209
  nameButt.click(makeName,inputs=[],outputs=[nameBox])
210
  rollButt.click(stat, inputs=[dice,gr.Number(value=6, visible=False,precision=0)],outputs=[wisBox,charBox,strBox,intBox,dexBox,conBox])
211
  describeButt.click(describe, outputs=[outputBox],inputs=[nameBox,wisBox,charBox,strBox,intBox,dexBox,conBox])
212
+ imgButt.click(draw,inputs=[outputBox],outputs=[imageBox2])
213
  statBlock.launch()
214
 
215