andreinigo commited on
Commit
d641425
1 Parent(s): 6150c31

Upload utils.py

Browse files
Files changed (1) hide show
  1. utils.py +39 -6
utils.py CHANGED
@@ -3,8 +3,10 @@ import re
3
  from reportlab.lib.pagesizes import letter
4
  from reportlab.pdfgen import canvas
5
  from reportlab.pdfbase.pdfmetrics import stringWidth
 
6
 
7
- def generate_premisa():
 
8
  response = openai.ChatCompletion.create(
9
  model="gpt-4-1106-preview",
10
  messages=[
@@ -20,12 +22,30 @@ def generate_premisa():
20
  premisa = output.split("Premisa:")[1]
21
  return titulo, premisa
22
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
23
  def generate_outline(premisa):
24
  response = openai.ChatCompletion.create(
25
  model="gpt-4-1106-preview",
26
  messages=[
27
- {"role": "system", "content": "Eres un guionista de comedia de televisi贸n especializado en crear conflictos interesantes y comedia de situaci贸n. El usuario te dar谩 una premisa y t煤 te encargas de desarrollarla con la siguiente estructura: 1. Incidente incitante:... \n2. Desarrollo del problema:... \n3. Cl铆max:... \n4. Resoluci贸n:..."},
28
- {"role": "user", "content": "Desarrolla una situaci贸n c贸mica para una serie de comedia situacional. La serie tiene la siguiente premisa:"+ premisa}
29
  ],
30
  temperature=0.5,
31
  )
@@ -40,6 +60,7 @@ def separar_escenas(outline):
40
 
41
  return outline_list
42
 
 
43
  def generate_characters(outline):
44
  response = openai.ChatCompletion.create(
45
  model="gpt-4-1106-preview",
@@ -51,6 +72,7 @@ def generate_characters(outline):
51
  )
52
  return response.choices[0].message.content
53
 
 
54
  def generate_scenes(outline):
55
  response = openai.ChatCompletion.create(
56
  model="gpt-4-1106-preview",
@@ -62,6 +84,7 @@ def generate_scenes(outline):
62
  )
63
  return response.choices[0].message.content
64
 
 
65
  def generate_dialogues_all(chars,scenes):
66
  response = openai.ChatCompletion.create(
67
  model="gpt-4-1106-preview",
@@ -73,6 +96,7 @@ def generate_dialogues_all(chars,scenes):
73
  )
74
  return response.choices[0].message.content
75
 
 
76
  def generate_dialogues1(chars,scene1):
77
  response = openai.ChatCompletion.create(
78
  model="gpt-4-1106-preview",
@@ -84,6 +108,7 @@ def generate_dialogues1(chars,scene1):
84
  )
85
  return response.choices[0].message.content
86
 
 
87
  def generate_dialogues2(chars,scene1,dial1,scene2):
88
  response = openai.ChatCompletion.create(
89
  model="gpt-4-1106-preview",
@@ -97,6 +122,7 @@ def generate_dialogues2(chars,scene1,dial1,scene2):
97
  )
98
  return response.choices[0].message.content
99
 
 
100
  def generate_dialogues3(chars,scene1,dial1,scene2,dial2,scene3):
101
  response = openai.ChatCompletion.create(
102
  model="gpt-4-1106-preview",
@@ -112,6 +138,7 @@ def generate_dialogues3(chars,scene1,dial1,scene2,dial2,scene3):
112
  )
113
  return response.choices[0].message.content
114
 
 
115
  def generate_dialogues4(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4):
116
  response = openai.ChatCompletion.create(
117
  model="gpt-4-1106-preview",
@@ -129,6 +156,7 @@ def generate_dialogues4(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4):
129
  )
130
  return response.choices[0].message.content
131
 
 
132
  def generate_dialogues5(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial4,scene5):
133
  response = openai.ChatCompletion.create(
134
  model="gpt-4-1106-preview",
@@ -148,6 +176,7 @@ def generate_dialogues5(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial
148
  )
149
  return response.choices[0].message.content
150
 
 
151
  def generate_dialogues6(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial4,scene5,dial5,scene6):
152
  response = openai.ChatCompletion.create(
153
  model="gpt-4-1106-preview",
@@ -169,8 +198,12 @@ def generate_dialogues6(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial
169
  )
170
  return response.choices[0].message.content
171
 
172
- def dramatron(premisa):
173
- outline = generate_outline(premisa)
 
 
 
 
174
  print('Outline: '+outline)
175
  chars = generate_characters(outline)
176
  print('Characters: '+chars)
@@ -190,7 +223,7 @@ def dramatron(premisa):
190
  esc5 = generate_dialogues6(chars,scenes_sep[0],esc0,scenes_sep[1],esc1,scenes_sep[2],esc2,scenes_sep[3],esc3,scenes_sep[4],esc4,scenes_sep[5])
191
  print('Scene 6: '+esc5)
192
  all_esc = esc0 + '\n' + esc1 + '\n' + esc2 + '\n' + esc3 + '\n' + esc4 + '\n' + esc5
193
- return all_esc
194
 
195
 
196
  def ajustar_linea(linea, max_ancho, fuente, tamano_fuente):
 
3
  from reportlab.lib.pagesizes import letter
4
  from reportlab.pdfgen import canvas
5
  from reportlab.pdfbase.pdfmetrics import stringWidth
6
+ import backoff
7
 
8
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
9
+ def generate_premisa_serie():
10
  response = openai.ChatCompletion.create(
11
  model="gpt-4-1106-preview",
12
  messages=[
 
22
  premisa = output.split("Premisa:")[1]
23
  return titulo, premisa
24
 
25
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
26
+ def generate_premisa_episodio(prem_serie, keywords):
27
+ response = openai.ChatCompletion.create(
28
+ model="gpt-4-1106-preview",
29
+ messages=[
30
+ {"role": "system", "content": "Eres el comediante Bill Burr, un guionista de comedia de televisi贸n chistoso, creativo y original. Eres especialista en sit-coms de sarcasmo. Te dan una premisa de una serie y palabras clave para que generes la premisa de un episodio. Sigue el formato T铆tulo: \n Premisa:"},
31
+ {"role": "user", "content": "La serie trata de"+prem_serie+". El episodio debe tratar de "+keywords+". Inventa una premisa para el episodio."}
32
+ ],
33
+ temperature=0.4,
34
+ )
35
+ output = response.choices[0].message.content
36
+
37
+ titulo = output.split("Premisa:")[0]
38
+ titulo = titulo.split('"')[1]
39
+ premisa = output.split("Premisa:")[1]
40
+ return titulo, premisa
41
+
42
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
43
  def generate_outline(premisa):
44
  response = openai.ChatCompletion.create(
45
  model="gpt-4-1106-preview",
46
  messages=[
47
+ {"role": "system", "content": "Eres un guionista de comedia de televisi贸n especializado en crear conflictos interesantes y comedia de situaci贸n. No uses estilos como negritas, it谩licas, subrayado. El usuario te dar谩 una premisa y t煤 te encargas de desarrollarla con la siguiente estructura: 1. Incidente incitante:... \n2. Desarrollo del problema:... \n3. Cl铆max:... \n4. Resoluci贸n:..."},
48
+ {"role": "user", "content": "Desarrolla una situaci贸n c贸mica para una serie de comedia situacional. El episodio tiene la siguiente premisa:"+ premisa}
49
  ],
50
  temperature=0.5,
51
  )
 
60
 
61
  return outline_list
62
 
63
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
64
  def generate_characters(outline):
65
  response = openai.ChatCompletion.create(
66
  model="gpt-4-1106-preview",
 
72
  )
73
  return response.choices[0].message.content
74
 
75
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
76
  def generate_scenes(outline):
77
  response = openai.ChatCompletion.create(
78
  model="gpt-4-1106-preview",
 
84
  )
85
  return response.choices[0].message.content
86
 
87
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
88
  def generate_dialogues_all(chars,scenes):
89
  response = openai.ChatCompletion.create(
90
  model="gpt-4-1106-preview",
 
96
  )
97
  return response.choices[0].message.content
98
 
99
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
100
  def generate_dialogues1(chars,scene1):
101
  response = openai.ChatCompletion.create(
102
  model="gpt-4-1106-preview",
 
108
  )
109
  return response.choices[0].message.content
110
 
111
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
112
  def generate_dialogues2(chars,scene1,dial1,scene2):
113
  response = openai.ChatCompletion.create(
114
  model="gpt-4-1106-preview",
 
122
  )
123
  return response.choices[0].message.content
124
 
125
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
126
  def generate_dialogues3(chars,scene1,dial1,scene2,dial2,scene3):
127
  response = openai.ChatCompletion.create(
128
  model="gpt-4-1106-preview",
 
138
  )
139
  return response.choices[0].message.content
140
 
141
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
142
  def generate_dialogues4(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4):
143
  response = openai.ChatCompletion.create(
144
  model="gpt-4-1106-preview",
 
156
  )
157
  return response.choices[0].message.content
158
 
159
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
160
  def generate_dialogues5(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial4,scene5):
161
  response = openai.ChatCompletion.create(
162
  model="gpt-4-1106-preview",
 
176
  )
177
  return response.choices[0].message.content
178
 
179
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
180
  def generate_dialogues6(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial4,scene5,dial5,scene6):
181
  response = openai.ChatCompletion.create(
182
  model="gpt-4-1106-preview",
 
198
  )
199
  return response.choices[0].message.content
200
 
201
+ def dramatron(premisa_serie,keywords):
202
+ prem_ep = generate_premisa_episodio(premisa_serie, keywords)
203
+ titulo = prem_ep[0]
204
+ prem_ep = prem_ep[1]
205
+ print(titulo+': '+prem_ep)
206
+ outline = generate_outline(prem_ep)
207
  print('Outline: '+outline)
208
  chars = generate_characters(outline)
209
  print('Characters: '+chars)
 
223
  esc5 = generate_dialogues6(chars,scenes_sep[0],esc0,scenes_sep[1],esc1,scenes_sep[2],esc2,scenes_sep[3],esc3,scenes_sep[4],esc4,scenes_sep[5])
224
  print('Scene 6: '+esc5)
225
  all_esc = esc0 + '\n' + esc1 + '\n' + esc2 + '\n' + esc3 + '\n' + esc4 + '\n' + esc5
226
+ return titulo, prem_ep, outline, chars, scenes, all_esc
227
 
228
 
229
  def ajustar_linea(linea, max_ancho, fuente, tamano_fuente):