Spaces:
Sleeping
Sleeping
File size: 6,129 Bytes
cb4d130 749c207 a6fdb22 e274157 a6fdb22 bbcfa4f 749c207 a47c93c c3cb308 cb4d130 2128058 9bb28d5 2128058 9bb28d5 2128058 9bb28d5 2128058 9bb28d5 2128058 9bb28d5 2128058 9bb28d5 ecf8f43 9bb28d5 2128058 ecf8f43 749c207 9bb28d5 749c207 9bb28d5 749c207 bbcfa4f 749c207 bbcfa4f 5271f8c 97dfa77 9bb28d5 749c207 9bb28d5 749c207 9bb28d5 749c207 9bb28d5 cabc6e8 9bb28d5 cabc6e8 9bb28d5 61c03a5 9bb28d5 61c03a5 9bb28d5 f5ca184 f036dba 9bb28d5 f036dba 2977ec4 9bb28d5 61c03a5 f036dba 9bb28d5 017e4bb f5ca184 9bb28d5 61c03a5 017e4bb cabc6e8 749c207 23a0289 810312c 6039386 23a0289 b3bfa5a 8a85d4d b6726de 8a85d4d 810312c 749c207 cabc6e8 9bb28d5 f5ca184 749c207 |
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 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 |
import gradio as gr
import requests
import os
import re
from run_model import run
# WARNING: It is not recommended to hardcode sensitive data like API tokens in code.
# Consider using environment variables or other secure methods for production applications.
API_URL = os.environ["DATASAUR_API_URL"]
API_TOKEN = os.environ["DATASAUR_API_KEY"]
import re
import json
def extract_json_from_text(text):
"""
Extracts JSON content from text that starts with { and ends with }.
Returns the parsed JSON object with category_fix and suggestion keys.
Parameters:
text (str): Input text that may contain JSON content.
Returns:
dict: Dictionary with 'category_fix' and 'suggestion' keys, or None if not found.
"""
# First, try to directly parse as JSON
try:
parsed = json.loads(text)
if "category_fix" in parsed and "suggestion" in parsed:
return parsed
except json.JSONDecodeError:
pass # Fall back to regex if not valid JSON
# Fallback: use regex to extract JSON content between { and }
match = re.search(r'\{[^{}]*\}', text)
if match:
try:
json_str = match.group(0)
parsed = json.loads(json_str)
if "category_fix" in parsed and "suggestion" in parsed:
return parsed
except json.JSONDecodeError:
pass
return None
def magic_function(input_text):
"""
Sends text to the Datasaur deployment API and returns the processed JSON with category_fix and suggestion.
"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_TOKEN}",
}
data = {
"messages": [{"role": "user", "content": f"Time Entry Input: `{input_text}`"}]
}
try:
"""
response = requests.post(API_URL, headers=headers, json=data)
response.raise_for_status() # Raise an exception for bad status codes (4xx or 5xx)
response_json = response.json()
# Extract content from a standard chat completion response structure.
# This may need adjustment if the API has a different format.
content = response_json.get("choices", [{}])[0].get("message", {}).get("content", "Error: Could not parse response.")
"""
content = run(input_text)
print(content)
result = extract_json_from_text(content)
if result:
return result
else:
return {"category_fix": "ERROR", "suggestion": "Could not parse response"}
except requests.exceptions.RequestException as e:
return {"category_fix": "ERROR", "suggestion": f"API Request Error: {e}"}
except (ValueError, KeyError, IndexError):
# Handle cases where response is not valid JSON or structure is unexpected
return {"category_fix": "ERROR", "suggestion": f"Error processing API response: {response.text}"}
def handle_magic_click(current_text, current_button_text):
"""
When the magic button is clicked, this function gets the improved text,
and returns the new and previous text to update the UI.
If category_fix == "COMPLIANT", make text area light green, hide previous text, lock text area, and change button to Reset.
"""
if current_button_text == "Reset":
# Reset to initial state
return (
gr.update(label="Your Text", value="", elem_classes="", interactive=True), # text_area - reset and unlock
"", # previous_text_area - clear
gr.update(visible=False), # previous_text_area visibility - hide
gr.update(value="", visible=False), # category_label - hide
gr.update(value="Magic Button") # button text - reset
)
result = magic_function(current_text)
category_fix = result.get("category_fix", "")
suggestion = result.get("suggestion", "")
print(current_text)
print(category_fix)
print(suggestion)
print()
if category_fix == "COMPLIANT":
# COMPLIANT case - no changes to input, green background, lock, add checklist, change button to Reset
return (
gr.update(label="Your Text ✓", value=current_text, elem_classes="success-text", interactive=False), # text_area - keep original, green, lock
current_text, # previous_text_area - store current
gr.update(visible=False), # previous_text_area visibility - hide
gr.update(value=f"**{category_fix}**", visible=True), # category_label - show category in bold
gr.update(value="Reset") # button text - change to Reset
)
else:
# Non-compliant case - show suggestion, show previous text, show category
return (
gr.update(label="Your Text", value=suggestion, elem_classes="", interactive=True), # text_area - show suggestion, normal style, unlocked
current_text, # previous_text_area - store current
gr.update(visible=True), # previous_text_area visibility - show
gr.update(value=f"**{category_fix}**", visible=True), # category_label - show category in bold
gr.update(value="Magic Button") # button text - keep as Magic Button
)
with gr.Blocks(
theme=gr.themes.Default(primary_hue="blue", secondary_hue="sky"),
css="""
.success-text { background-color: #d4edda !important; }
"""
) as demo:
gr.Markdown("# Time Entry Improvement")
with gr.Row():
with gr.Column(scale=4):
text_area = gr.Textbox(label="Your Text", lines=5)
previous_text_area = gr.Textbox(label="Previous Text", lines=5, visible=False)
category_label = gr.Markdown("", visible=False)
with gr.Column(scale=1):
magic_button = gr.Button("Magic Button")
magic_button.click(
fn=handle_magic_click,
inputs=[text_area, magic_button],
outputs=[text_area, previous_text_area, previous_text_area, category_label, magic_button]
)
if __name__ == "__main__":
demo.launch()
|