twinkle-toes commited on
Commit
4f3a32c
1 Parent(s): 56441c0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +47 -10
app.py CHANGED
@@ -108,8 +108,8 @@ class Validator:
108
  for order in self.obj["prompt_order"]:
109
  if Validator.is_valid_prompt_order(order) and order["character_id"] == 100001 and all(lambda o: o["identifier"] in known_prompt_ids for o in order["order"]):
110
  seen_cid0 = True
111
- if Validator.is_valid_prompt_order_list(self.obj["prompt_order"]) and all(lambda o: o["identifier"] in known_prompt_ids for o in self.obj["prompt_order"]):
112
- seen_cid0 = True
113
  if not seen_cid0:
114
  self.valid = False
115
 
@@ -143,6 +143,37 @@ class Validator:
143
  v.validate_ordering()
144
  return v.valid
145
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
146
  def load_from_file(path):
147
  with open(path, "r") as f:
148
  try:
@@ -150,10 +181,11 @@ def load_from_file(path):
150
  except Exception:
151
  raise gr.Error("File is not valid JSON")
152
  return None, True
 
153
  if not Validator.is_valid_preset(obj):
154
  raise gr.Error("File is not a valid preset")
155
  return None, True
156
- return gr.update(selected=1), obj, False
157
 
158
  def load_from_url(url):
159
  resp = requests.get(url)
@@ -165,10 +197,11 @@ def load_from_url(url):
165
  except Exception:
166
  raise gr.Error("URL is not valid JSON")
167
  return None, True
 
168
  if not Validator.is_valid_preset(obj):
169
  raise gr.Error("URL is not a valid preset")
170
  return None, True
171
- return gr.update(selected=1), obj, False
172
 
173
  def render_prompt(prompt, enabled=True):
174
  with gr.Accordion(prompt["name"] + ("" if enabled else " (DISABLED)"), open=enabled or prompt.get("marker", False)):
@@ -181,20 +214,21 @@ def render_prompt(prompt, enabled=True):
181
  gr.Code(prompt["content"], container=False)
182
 
183
  with gr.Blocks() as demo:
184
- preset_error = gr.State(False)
185
  preset = gr.State(None)
 
186
 
187
  gr.Markdown("# SillyTavern preset viewer")
188
 
189
  with gr.Tabs() as tabs:
190
  with gr.TabItem("Upload", id=0):
191
  file = gr.File(label="Upload a preset (.json)", file_types=[".json"])
192
- file.upload(fn=load_from_file, inputs=[file], outputs=[tabs, preset, preset_error])
193
  url_input = gr.Textbox(label="Enter a URL to a preset (.json) - press Enter to submit")
194
- url_input.submit(fn=load_from_url, inputs=[url_input], outputs=[tabs, preset, preset_error])
195
  with gr.TabItem("Viewer", id=1):
196
- @gr.render(inputs=[preset_error, preset])
197
- def render_preset(preset_error, preset):
198
  if preset_error:
199
  gr.Markdown("Error loading preset")
200
  return
@@ -202,12 +236,15 @@ with gr.Blocks() as demo:
202
  gr.Markdown("No preset loaded, enter a URL or upload a file")
203
  else:
204
  gr.Markdown("Preset loaded and validated")
 
 
205
  prompt_map = {p["identifier"]: p for p in preset["prompts"]}
206
  gr.Markdown("# Preset")
207
  for order in (next(o for o in preset["prompt_order"] if o["character_id"] == 100001)["order"] if isinstance(preset["prompt_order"], list) else preset["prompt_order"]):
208
  prompt = prompt_map[order["identifier"]]
209
  render_prompt(prompt, order["enabled"])
210
- with gr.Accordion("# All prompts", open=False):
 
211
  for prompt in prompt_map.values():
212
  render_prompt(prompt)
213
 
 
108
  for order in self.obj["prompt_order"]:
109
  if Validator.is_valid_prompt_order(order) and order["character_id"] == 100001 and all(lambda o: o["identifier"] in known_prompt_ids for o in order["order"]):
110
  seen_cid0 = True
111
+ # if Validator.is_valid_prompt_order_list(self.obj["prompt_order"]) and all(lambda o: o["identifier"] in known_prompt_ids for o in self.obj["prompt_order"]):
112
+ # seen_cid0 = True
113
  if not seen_cid0:
114
  self.valid = False
115
 
 
143
  v.validate_ordering()
144
  return v.valid
145
 
146
+ def maybe_convert_to_original_format(obj):
147
+ if obj.get("version") != 1:
148
+ return obj, False
149
+ # Synthesize a traditional preset
150
+ builtin_prompts = [{
151
+ "name": x[0],
152
+ "identifier": x[1],
153
+ "system_prompt": True,
154
+ "marker": True,
155
+ } for x in [
156
+ ("Chat Examples", "dialogueExamples"),
157
+ ("Chat History", "chatHistory"),
158
+ ("World Info (after)", "worldInfoAfter"),
159
+ ("World Info (before)", "worldInfoBefore"),
160
+ ("Enhance Definitions", "enhanceDefinitions"),
161
+ ("Char Description", "charDescription"),
162
+ ("Char Personality", "charPersonality"),
163
+ ("Scenario", "scenario"),
164
+ ("Persona Description", "personaDescription"),
165
+ ("JB", "jailbreak"),
166
+ ]]
167
+ return {
168
+ "prompts": obj["data"]["prompts"] + builtin_prompts
169
+ "prompt_order": [{
170
+ "character_id": 100001,
171
+ "order": obj["data"]["prompt_order"],
172
+ }]
173
+ }, True
174
+
175
+ CONVERT_MESSAGE = "This preset was converted from version 1 to the traditional format, there may be inconsistencies."
176
+
177
  def load_from_file(path):
178
  with open(path, "r") as f:
179
  try:
 
181
  except Exception:
182
  raise gr.Error("File is not valid JSON")
183
  return None, True
184
+ obj, modified = maybe_convert_to_original_format(obj)
185
  if not Validator.is_valid_preset(obj):
186
  raise gr.Error("File is not a valid preset")
187
  return None, True
188
+ return gr.update(selected=1), obj, CONVERT_MESSAGE if modified else None
189
 
190
  def load_from_url(url):
191
  resp = requests.get(url)
 
197
  except Exception:
198
  raise gr.Error("URL is not valid JSON")
199
  return None, True
200
+ obj, modified = maybe_convert_to_original_format(obj)
201
  if not Validator.is_valid_preset(obj):
202
  raise gr.Error("URL is not a valid preset")
203
  return None, True
204
+ return gr.update(selected=1), obj, CONVERT_MESSAGE if modified else None
205
 
206
  def render_prompt(prompt, enabled=True):
207
  with gr.Accordion(prompt["name"] + ("" if enabled else " (DISABLED)"), open=enabled or prompt.get("marker", False)):
 
214
  gr.Code(prompt["content"], container=False)
215
 
216
  with gr.Blocks() as demo:
217
+ # preset_error = gr.State(False)
218
  preset = gr.State(None)
219
+ load_extra = gr.State(None)
220
 
221
  gr.Markdown("# SillyTavern preset viewer")
222
 
223
  with gr.Tabs() as tabs:
224
  with gr.TabItem("Upload", id=0):
225
  file = gr.File(label="Upload a preset (.json)", file_types=[".json"])
226
+ file.upload(fn=load_from_file, inputs=[file], outputs=[tabs, preset, load_extra])
227
  url_input = gr.Textbox(label="Enter a URL to a preset (.json) - press Enter to submit")
228
+ url_input.submit(fn=load_from_url, inputs=[url_input], outputs=[tabs, preset, load_extra])
229
  with gr.TabItem("Viewer", id=1):
230
+ @gr.render(inputs=[preset_error, preset, load_extra])
231
+ def render_preset(preset_error, preset, load_extra):
232
  if preset_error:
233
  gr.Markdown("Error loading preset")
234
  return
 
236
  gr.Markdown("No preset loaded, enter a URL or upload a file")
237
  else:
238
  gr.Markdown("Preset loaded and validated")
239
+ if load_extra is not None:
240
+ gr.Markdown(load_extra)
241
  prompt_map = {p["identifier"]: p for p in preset["prompts"]}
242
  gr.Markdown("# Preset")
243
  for order in (next(o for o in preset["prompt_order"] if o["character_id"] == 100001)["order"] if isinstance(preset["prompt_order"], list) else preset["prompt_order"]):
244
  prompt = prompt_map[order["identifier"]]
245
  render_prompt(prompt, order["enabled"])
246
+ gr.Markdown("# All prompts")
247
+ with gr.Accordion("All prompts", open=False):
248
  for prompt in prompt_map.values():
249
  render_prompt(prompt)
250