extensions.py 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. import extensions
  2. import modules.shared as shared
  3. import gradio as gr
  4. extension_state = {}
  5. available_extensions = []
  6. def load_extensions():
  7. global extension_state
  8. for i,ext in enumerate(shared.args.extensions):
  9. if ext in available_extensions:
  10. print(f'Loading the extension "{ext}"... ', end='')
  11. ext_string = f"extensions.{ext}.script"
  12. exec(f"import {ext_string}")
  13. extension_state[ext] = [True, i]
  14. print(f'Ok.')
  15. def apply_extensions(text, typ):
  16. for ext in sorted(extension_state, key=lambda x : extension_state[x][1]):
  17. if extension_state[ext][0] == True:
  18. ext_string = f"extensions.{ext}.script"
  19. if typ == "input" and hasattr(eval(ext_string), "input_modifier"):
  20. text = eval(f"{ext_string}.input_modifier(text)")
  21. elif typ == "output" and hasattr(eval(ext_string), "output_modifier"):
  22. text = eval(f"{ext_string}.output_modifier(text)")
  23. elif typ == "bot_prefix" and hasattr(eval(ext_string), "bot_prefix_modifier"):
  24. text = eval(f"{ext_string}.bot_prefix_modifier(text)")
  25. return text
  26. def update_extensions_parameters(*kwargs):
  27. i = 0
  28. for ext in sorted(extension_state, key=lambda x : extension_state[x][1]):
  29. if extension_state[ext][0] == True:
  30. params = eval(f"extensions.{ext}.script.params")
  31. for param in params:
  32. if len(kwargs) >= i+1:
  33. params[param] = eval(f"kwargs[{i}]")
  34. i += 1
  35. def get_params(name):
  36. return eval(f"extensions.{name}.script.params")
  37. def create_extensions_block():
  38. extensions_ui_elements = []
  39. default_values = []
  40. if not (shared.args.chat or shared.args.cai_chat):
  41. gr.Markdown('## Extensions parameters')
  42. for ext in sorted(extension_state, key=lambda x : extension_state[x][1]):
  43. if extension_state[ext][0] == True:
  44. params = get_params(ext)
  45. for param in params:
  46. _id = f"{ext}-{param}"
  47. default_value = shared.settings[_id] if _id in shared.settings else params[param]
  48. default_values.append(default_value)
  49. if type(params[param]) == str:
  50. extensions_ui_elements.append(gr.Textbox(value=default_value, label=f"{ext}-{param}"))
  51. elif type(params[param]) in [int, float]:
  52. extensions_ui_elements.append(gr.Number(value=default_value, label=f"{ext}-{param}"))
  53. elif type(params[param]) == bool:
  54. extensions_ui_elements.append(gr.Checkbox(value=default_value, label=f"{ext}-{param}"))
  55. update_extensions_parameters(*default_values)
  56. btn_extensions = gr.Button("Apply")
  57. btn_extensions.click(update_extensions_parameters, [*extensions_ui_elements], [])