2024-01-31 16:14:51 +08:00
|
|
|
# flake8: noqa: E402
|
|
|
|
import os
|
|
|
|
import sys
|
|
|
|
from functools import wraps
|
|
|
|
|
|
|
|
sys.path.append(os.path.join(os.path.dirname(__file__), ".."))
|
|
|
|
|
|
|
|
|
2024-01-31 16:15:30 +08:00
|
|
|
from chatmark import Checkbox, Form, TextEditor # noqa: #402
|
2024-01-31 16:14:51 +08:00
|
|
|
|
|
|
|
|
|
|
|
class MissEditConfirmFieldException(Exception):
|
|
|
|
pass
|
|
|
|
|
2024-01-31 16:15:30 +08:00
|
|
|
|
2024-01-31 16:14:51 +08:00
|
|
|
def edit_confirm(response):
|
|
|
|
need_regenerate = Checkbox(["Need Regenerate"])
|
|
|
|
edit_text = TextEditor(response)
|
|
|
|
feedback_text = TextEditor("")
|
|
|
|
confirmation_form = Form(
|
|
|
|
[
|
|
|
|
"Edit AI Response:",
|
|
|
|
edit_text,
|
|
|
|
"Need Regenerate?",
|
|
|
|
need_regenerate,
|
|
|
|
"Feedback if Regenerate:",
|
2024-01-31 16:15:30 +08:00
|
|
|
feedback_text,
|
2024-01-31 16:14:51 +08:00
|
|
|
]
|
|
|
|
)
|
|
|
|
confirmation_form.render()
|
|
|
|
if len(need_regenerate.selections) > 0:
|
|
|
|
return True, feedback_text.new_text
|
|
|
|
return False, edit_text.new_text
|
|
|
|
|
|
|
|
|
|
|
|
def llm_edit_confirm(edit_confirm_fun=edit_confirm):
|
|
|
|
def decorator(func):
|
|
|
|
@wraps(func)
|
|
|
|
def wrapper(*args, **kwargs):
|
|
|
|
nonlocal edit_confirm_fun
|
|
|
|
if not edit_confirm_fun:
|
|
|
|
raise MissEditConfirmFieldException()
|
|
|
|
|
|
|
|
while True:
|
|
|
|
response = func(*args, **kwargs)
|
|
|
|
if not response:
|
|
|
|
return response
|
|
|
|
|
|
|
|
do_regenerate, new_response = edit_confirm_fun(response)
|
|
|
|
if do_regenerate:
|
|
|
|
kwargs["__user_request__"] = {"role": "user", "content": new_response}
|
|
|
|
else:
|
|
|
|
return new_response if new_response else response
|
2024-01-31 16:15:30 +08:00
|
|
|
|
2024-01-31 16:14:51 +08:00
|
|
|
return wrapper
|
2024-01-31 16:15:30 +08:00
|
|
|
|
2024-01-31 16:14:51 +08:00
|
|
|
return decorator
|