Spaces:
Sleeping
Sleeping
File size: 3,878 Bytes
171f2ef 9602bb7 de239b9 171f2ef 9602bb7 21916d9 fdbc2bf 9602bb7 de239b9 12932a7 de239b9 171f2ef 9602bb7 171f2ef 9602bb7 de239b9 0d2c9df fdbc2bf de239b9 fdbc2bf 0d2c9df 171f2ef de239b9 12932a7 de239b9 9602bb7 171f2ef 12932a7 171f2ef de239b9 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import gradio as gr
from comp import generate_response
import re
# --- Constants ---
WORKFLOW_SYSTEM_PROMPT = """You are an expert in analyzing conversations and extracting user workflows.
Based on the provided chat history, identify the user's main goal or intent.
Then, break down the conversation into a series of actionable steps that represent the workflow to achieve that goal.
The output should be in two parts, clearly separated:
**Intent**: [A concise description of the user's goal]
**Steps**:
[A numbered list of steps]
"""
# --- Helper Functions ---
def parse_workflow_response(response):
intent_match = re.search(r"\*\*Intent\*\*:\s*(.*)", response, re.IGNORECASE)
steps_match = re.search(r"\*\*Steps\*\*:\s*(.*)", response, re.DOTALL | re.IGNORECASE)
intent = intent_match.group(1).strip() if intent_match else "Could not determine intent."
steps = steps_match.group(1).strip() if steps_match else "Could not determine steps."
return intent, steps
# --- Gradio UI ---
with gr.Blocks() as demo:
gr.Markdown("# Ling Playground")
with gr.Row():
with gr.Column(scale=2):
gr.Markdown("## Chat")
chat_chatbot = gr.Chatbot(label="Chat", bubble_full_width=False)
with gr.Row():
chat_msg = gr.Textbox(
label="Your Message",
scale=4,
)
send_btn = gr.Button("Send", scale=1)
with gr.Column(scale=1):
gr.Markdown("## Workflow Extraction")
intent_textbox = gr.Textbox(label="Task Intent", interactive=False)
steps_textbox = gr.Textbox(
label="Extracted Steps", interactive=False, lines=15
)
chat_clear = gr.ClearButton([chat_msg, chat_chatbot, intent_textbox, steps_textbox])
def user(user_message, history):
return "", history + [[user_message, None]]
def bot(history):
user_message = history[-1][0]
history[-1][1] = ""
# Main chat model call (uses default system prompt)
for response in generate_response(user_message, history[:-1]):
if "</think>" in response:
parts = response.split("</think>", 1)
thinking_text = parts[0].replace("<think>", "")
body_text = parts[1]
md_output = f"**Thinking...**\n```\n{thinking_text}\n```\n\n{body_text}"
history[-1][1] = md_output
else:
history[-1][1] = response
yield history
def update_workflow(history):
if not history or not history[-1][0]:
return "", ""
# The last user message is the main prompt for the workflow agent
user_message = history[-1][0]
# The rest of the conversation is the history
chat_history_for_workflow = history[:-1]
# Call the model with the workflow system prompt
full_response = ""
for response in generate_response(
user_message,
chat_history_for_workflow,
system_prompt=WORKFLOW_SYSTEM_PROMPT
):
full_response = response
intent, steps = parse_workflow_response(full_response)
return intent, steps
# Handler for pressing Enter in the textbox
( chat_msg.submit(user, [chat_msg, chat_chatbot], [chat_msg, chat_chatbot], queue=False)
.then(bot, chat_chatbot, chat_chatbot)
.then(update_workflow, chat_chatbot, [intent_textbox, steps_textbox])
)
# Handler for clicking the Send button
( send_btn.click(user, [chat_msg, chat_chatbot], [chat_msg, chat_chatbot], queue=False)
.then(bot, chat_chatbot, chat_chatbot)
.then(update_workflow, chat_chatbot, [intent_textbox, steps_textbox])
)
if __name__ == "__main__":
demo.launch(share=True) |