andreinigo commited on
Commit
1fe8c04
·
1 Parent(s): 997749b

Upload 2 files

Browse files
Files changed (2) hide show
  1. app.py +0 -2
  2. utils.py +47 -34
app.py CHANGED
@@ -3,8 +3,6 @@ import openai
3
  import os
4
  import gradio as gr
5
 
6
- openai.api_key = os.environ.get("OPENAI_API_KEY")
7
-
8
  # Generate the app using gradio, running dramatron which is in utils.py and has the outputs titulo, prem_ep, outline, chars, scenes, all_esc
9
 
10
  demo = gr.Interface(
 
3
  import os
4
  import gradio as gr
5
 
 
 
6
  # Generate the app using gradio, running dramatron which is in utils.py and has the outputs titulo, prem_ep, outline, chars, scenes, all_esc
7
 
8
  demo = gr.Interface(
utils.py CHANGED
@@ -4,10 +4,15 @@ 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.error.RateLimitError)
 
 
 
 
9
  def generate_premisa_serie():
10
- response = openai.ChatCompletion.create(
11
  model="gpt-4-1106-preview",
12
  messages=[
13
  {"role": "system", "content": "Eres un guionista de comedia de televisión chistoso, creativo y original. Eres especialista en sarcasmo. Sigue el formato Título: \n Premisa:"},
@@ -22,9 +27,11 @@ def generate_premisa_serie():
22
  premisa = output.split("Premisa:")[1]
23
  return titulo, premisa
24
 
25
- @backoff.on_exception(backoff.expo, openai.error.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:"},
@@ -39,9 +46,11 @@ def generate_premisa_episodio(prem_serie, keywords):
39
  premisa = output.split("Premisa:")[1]
40
  return titulo, premisa
41
 
42
- @backoff.on_exception(backoff.expo, openai.error.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:..."},
@@ -60,9 +69,11 @@ def separar_escenas(outline):
60
 
61
  return outline_list
62
 
63
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
 
 
64
  def generate_characters(outline):
65
- response = openai.ChatCompletion.create(
66
  model="gpt-4-1106-preview",
67
  messages=[
68
  {"role": "system", "content": "Eres un escritor de una comedia situacional. Desarrolla en un enunciado a cada uno de los personajes dado un outline. El usuario te va a dar el outline al que te tienes que apegar. Usa un salto de línea para cada personaje."},
@@ -72,9 +83,11 @@ def generate_characters(outline):
72
  )
73
  return response.choices[0].message.content
74
 
75
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
 
 
76
  def generate_scenes(outline):
77
- response = openai.ChatCompletion.create(
78
  model="gpt-4-1106-preview",
79
  messages=[
80
  {"role": "system", "content": "Eres un escritor de una comedia situacional. Enlista las escenas que formaran el episodio a partir de un outline. El usuario te va a dar el outline al que te tienes que apegar así como sus reglas de conteo de escenas. Usa un salto de línea para cada escena, no uses negritas y usa un renglón por escena separando por dos puntos el nombre de la escena y la descripción."},
@@ -84,21 +97,11 @@ def generate_scenes(outline):
84
  )
85
  return response.choices[0].message.content
86
 
87
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
88
- def generate_dialogues_all(chars,scenes):
89
- response = openai.ChatCompletion.create(
90
- model="gpt-4-1106-preview",
91
- messages=[
92
- {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el guión de manera extensa con debates irónicos y sarcásticos para las escenas de un episodio. El guión debe durar 7 (siete) cuartillas. El usuario te da las escenas que tienes que desarrollar y las características de los personajes. Usa el formato de guión de Final Draft."},
93
- {"role": "user", "content": scenes + "\n Los personajes son los siguientes:\n"+chars}
94
- ],
95
- temperature=0.3,
96
- )
97
- return response.choices[0].message.content
98
-
99
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
100
  def generate_dialogues1(chars,scene1):
101
- response = openai.ChatCompletion.create(
102
  model="gpt-4-1106-preview",
103
  messages=[
104
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para la escena de un episodio. El usuario te da la escena que tienes que desarrollar y las características de los personajes. Usa el formato de Final Draft."},
@@ -108,9 +111,11 @@ def generate_dialogues1(chars,scene1):
108
  )
109
  return response.choices[0].message.content
110
 
111
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
 
 
112
  def generate_dialogues2(chars,scene1,dial1,scene2):
113
- response = openai.ChatCompletion.create(
114
  model="gpt-4-1106-preview",
115
  messages=[
116
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
@@ -122,9 +127,11 @@ def generate_dialogues2(chars,scene1,dial1,scene2):
122
  )
123
  return response.choices[0].message.content
124
 
125
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
 
 
126
  def generate_dialogues3(chars,scene1,dial1,scene2,dial2,scene3):
127
- response = openai.ChatCompletion.create(
128
  model="gpt-4-1106-preview",
129
  messages=[
130
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
@@ -138,9 +145,11 @@ def generate_dialogues3(chars,scene1,dial1,scene2,dial2,scene3):
138
  )
139
  return response.choices[0].message.content
140
 
141
- @backoff.on_exception(backoff.expo, openai.error.RateLimitError)
 
 
142
  def generate_dialogues4(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4):
143
- response = openai.ChatCompletion.create(
144
  model="gpt-4-1106-preview",
145
  messages=[
146
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
@@ -156,9 +165,11 @@ def generate_dialogues4(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4):
156
  )
157
  return response.choices[0].message.content
158
 
159
- @backoff.on_exception(backoff.expo, openai.error.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",
163
  messages=[
164
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo satírico, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar y las instrucciones. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
@@ -176,9 +187,11 @@ def generate_dialogues5(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial
176
  )
177
  return response.choices[0].message.content
178
 
179
- @backoff.on_exception(backoff.expo, openai.error.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",
183
  messages=[
184
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar y las instrucciones. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
 
4
  from reportlab.pdfgen import canvas
5
  from reportlab.pdfbase.pdfmetrics import stringWidth
6
  import backoff
7
+ import os
8
 
9
+ client = openai.Client(api_key=os.environ.get("OPENAI_API_KEY"))
10
+
11
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
12
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
13
+ @backoff.on_exception(backoff.expo, openai.APIError)
14
  def generate_premisa_serie():
15
+ response = client.chat.completions.create(
16
  model="gpt-4-1106-preview",
17
  messages=[
18
  {"role": "system", "content": "Eres un guionista de comedia de televisión chistoso, creativo y original. Eres especialista en sarcasmo. Sigue el formato Título: \n Premisa:"},
 
27
  premisa = output.split("Premisa:")[1]
28
  return titulo, premisa
29
 
30
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
31
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
32
+ @backoff.on_exception(backoff.expo, openai.APIError)
33
  def generate_premisa_episodio(prem_serie, keywords):
34
+ response = client.chat.completions.create(
35
  model="gpt-4-1106-preview",
36
  messages=[
37
  {"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:"},
 
46
  premisa = output.split("Premisa:")[1]
47
  return titulo, premisa
48
 
49
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
50
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
51
+ @backoff.on_exception(backoff.expo, openai.APIError)
52
  def generate_outline(premisa):
53
+ response = client.chat.completions.create(
54
  model="gpt-4-1106-preview",
55
  messages=[
56
  {"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:..."},
 
69
 
70
  return outline_list
71
 
72
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
73
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
74
+ @backoff.on_exception(backoff.expo, openai.APIError)
75
  def generate_characters(outline):
76
+ response = client.chat.completions.create(
77
  model="gpt-4-1106-preview",
78
  messages=[
79
  {"role": "system", "content": "Eres un escritor de una comedia situacional. Desarrolla en un enunciado a cada uno de los personajes dado un outline. El usuario te va a dar el outline al que te tienes que apegar. Usa un salto de línea para cada personaje."},
 
83
  )
84
  return response.choices[0].message.content
85
 
86
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
87
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
88
+ @backoff.on_exception(backoff.expo, openai.APIError)
89
  def generate_scenes(outline):
90
+ response = client.chat.completions.create(
91
  model="gpt-4-1106-preview",
92
  messages=[
93
  {"role": "system", "content": "Eres un escritor de una comedia situacional. Enlista las escenas que formaran el episodio a partir de un outline. El usuario te va a dar el outline al que te tienes que apegar así como sus reglas de conteo de escenas. Usa un salto de línea para cada escena, no uses negritas y usa un renglón por escena separando por dos puntos el nombre de la escena y la descripción."},
 
97
  )
98
  return response.choices[0].message.content
99
 
100
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
101
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
102
+ @backoff.on_exception(backoff.expo, openai.APIError)
 
 
 
 
 
 
 
 
 
 
103
  def generate_dialogues1(chars,scene1):
104
+ response = client.chat.completions.create(
105
  model="gpt-4-1106-preview",
106
  messages=[
107
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para la escena de un episodio. El usuario te da la escena que tienes que desarrollar y las características de los personajes. Usa el formato de Final Draft."},
 
111
  )
112
  return response.choices[0].message.content
113
 
114
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
115
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
116
+ @backoff.on_exception(backoff.expo, openai.APIError)
117
  def generate_dialogues2(chars,scene1,dial1,scene2):
118
+ response = client.chat.completions.create(
119
  model="gpt-4-1106-preview",
120
  messages=[
121
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
 
127
  )
128
  return response.choices[0].message.content
129
 
130
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
131
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
132
+ @backoff.on_exception(backoff.expo, openai.APIError)
133
  def generate_dialogues3(chars,scene1,dial1,scene2,dial2,scene3):
134
+ response = client.chat.completions.create(
135
  model="gpt-4-1106-preview",
136
  messages=[
137
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
 
145
  )
146
  return response.choices[0].message.content
147
 
148
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
149
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
150
+ @backoff.on_exception(backoff.expo, openai.APIError)
151
  def generate_dialogues4(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4):
152
+ response = client.chat.completions.create(
153
  model="gpt-4-1106-preview",
154
  messages=[
155
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
 
165
  )
166
  return response.choices[0].message.content
167
 
168
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
169
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
170
+ @backoff.on_exception(backoff.expo, openai.APIError)
171
  def generate_dialogues5(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial4,scene5):
172
+ response = client.chat.completions.create(
173
  model="gpt-4-1106-preview",
174
  messages=[
175
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo satírico, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar y las instrucciones. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},
 
187
  )
188
  return response.choices[0].message.content
189
 
190
+ @backoff.on_exception(backoff.expo, openai.RateLimitError)
191
+ @backoff.on_exception(backoff.expo, openai.APIConnectionError)
192
+ @backoff.on_exception(backoff.expo, openai.APIError)
193
  def generate_dialogues6(chars,scene1,dial1,scene2,dial2,scene3,dial3,scene4,dial4,scene5,dial5,scene6):
194
+ response = client.chat.completions.create(
195
  model="gpt-4-1106-preview",
196
  messages=[
197
  {"role": "system", "content": "Eres un escritor sarcástico de comedia situacional con humor negro. Escribe el diálogo de manera concisa, realista, irónico y sarcástico para una escena de un episodio. El usuario te da la escena que tienes que desarrollar y las instrucciones. Es muy importante que tomes en cuenta las escenas anteriores. Usa el formato de Final Draft. Los personajes son los siguientes:"+chars},