This commit is contained in:
Mykeehu 2025-06-04 09:56:43 +00:00 committed by GitHub
commit 872df4cdf7
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -578,7 +578,6 @@ def chatbot_wrapper(text, state, regenerate=False, _continue=False, loading_mess
visible_text = None visible_text = None
stopping_strings = get_stopping_strings(state) stopping_strings = get_stopping_strings(state)
is_stream = state['stream'] is_stream = state['stream']
# Prepare the input # Prepare the input
if not (regenerate or _continue): if not (regenerate or _continue):
visible_text = html.escape(text) visible_text = html.escape(text)
@ -598,8 +597,6 @@ def chatbot_wrapper(text, state, regenerate=False, _continue=False, loading_mess
# Apply extensions # Apply extensions
text, visible_text = apply_extensions('chat_input', text, visible_text, state) text, visible_text = apply_extensions('chat_input', text, visible_text, state)
text = apply_extensions('input', text, state, is_chat=True) text = apply_extensions('input', text, state, is_chat=True)
# Current row index
output['internal'].append([text, '']) output['internal'].append([text, ''])
output['visible'].append([visible_text, '']) output['visible'].append([visible_text, ''])
# Add metadata with timestamp # Add metadata with timestamp
@ -644,16 +641,14 @@ def chatbot_wrapper(text, state, regenerate=False, _continue=False, loading_mess
'internal': output['internal'], 'internal': output['internal'],
'metadata': output['metadata'] 'metadata': output['metadata']
} }
# Generate the prompt # Generate the prompt
kwargs = { kwargs = {
'_continue': _continue, '_continue': _continue,
'history': output if _continue else { 'history': output if _continue else {
k: (v[:-1] if k in ['internal', 'visible'] else v) k: (v[:-1] if k in ['internal', 'visible'] else v)
for k, v in output.items() for k, v in output.items()
}
} }
}
prompt = apply_extensions('custom_generate_chat_prompt', text, state, **kwargs) prompt = apply_extensions('custom_generate_chat_prompt', text, state, **kwargs)
if prompt is None: if prompt is None:
prompt = generate_chat_prompt(text, state, **kwargs) prompt = generate_chat_prompt(text, state, **kwargs)
@ -665,27 +660,61 @@ def chatbot_wrapper(text, state, regenerate=False, _continue=False, loading_mess
# Generate # Generate
reply = None reply = None
for j, reply in enumerate(generate_reply(prompt, state, stopping_strings=stopping_strings, is_chat=True, for_ui=for_ui)): for j, reply in enumerate(generate_reply(prompt, state, stopping_strings=stopping_strings, is_chat=True, for_ui=for_ui)):
# Handle start_with text (add to both internal and visible)
if state.get('start_with', '') and j == 0 and not _continue and not regenerate:
start_text = state['start_with']
# Add to internal (English) version
reply = start_text + " " + reply
# Add to visible (translated) version
translated_start = apply_extensions('output', start_text, state, is_chat=True)
state['start_with'] = '' # Clear it after using
# Extract the reply # Extract the reply
if state['mode'] in ['chat', 'chat-instruct']: if state['mode'] in ['chat', 'chat-instruct']:
visible_reply = re.sub("(<USER>|<user>|{{user}})", state['name1'], reply) visible_reply = re.sub("(<USER>|<user>|{{user}})", state['name1'], reply)
else: else:
visible_reply = reply visible_reply = reply
visible_reply = html.escape(visible_reply) visible_reply = html.escape(visible_reply)
if shared.stop_everything: if shared.stop_everything:
output['visible'][-1][1] = apply_extensions('output', output['visible'][-1][1], state, is_chat=True) output['visible'][-1][1] = apply_extensions('output', output['visible'][-1][1], state, is_chat=True)
yield output yield output
return return
if _continue: if _continue:
output['internal'][-1] = [text, last_reply[0] + reply] # Separate already existing content from new content
output['visible'][-1] = [visible_text, last_reply[1] + visible_reply] original_internal = output['internal'][-1][1]
elif not (j == 0 and visible_reply.strip() == ''): original_visible = output['visible'][-1][1]
output['internal'][-1] = [text, reply.lstrip(' ')]
output['visible'][-1] = [visible_text, visible_reply.lstrip(' ')]
# Get only the new generated part
new_content = reply[len(original_internal):] if reply.startswith(original_internal) else reply
new_content = new_content.lstrip()
# Translate only the new part
translated_new = apply_extensions('output', new_content, state, is_chat=True)
# Update both internal and visible versions
updated_internal = original_internal + " " + new_content
updated_visible = original_visible + " " + translated_new
output['internal'][-1] = [text, updated_internal]
output['visible'][-1] = [visible_text, updated_visible]
row_idx = len(output['internal']) - 1
key = f"assistant_{row_idx}"
current_idx = output['metadata'][key]['current_version_index']
output['metadata'][key]['versions'][current_idx].update({
'content': output['internal'][row_idx][1],
'visible_content': output['visible'][row_idx][1]
})
if is_stream:
yield output
elif not (j == 0 and visible_reply.strip() == ''):
# For normal generation, translate the whole reply
translated_reply = apply_extensions('output', visible_reply.lstrip(' '), state, is_chat=True)
output['internal'][-1] = [text, reply.lstrip(' ')]
output['visible'][-1] = [visible_text, translated_reply]
# Keep version metadata in sync during streaming (for regeneration) # Keep version metadata in sync during streaming (for regeneration)
if regenerate: if regenerate:
row_idx = len(output['internal']) - 1 row_idx = len(output['internal']) - 1
@ -695,11 +724,8 @@ def chatbot_wrapper(text, state, regenerate=False, _continue=False, loading_mess
'content': output['internal'][row_idx][1], 'content': output['internal'][row_idx][1],
'visible_content': output['visible'][row_idx][1] 'visible_content': output['visible'][row_idx][1]
}) })
if is_stream:
if is_stream: yield output
yield output
output['visible'][-1][1] = apply_extensions('output', output['visible'][-1][1], state, is_chat=True)
# Final sync for version metadata (in case streaming was disabled) # Final sync for version metadata (in case streaming was disabled)
if regenerate: if regenerate: