datasaur-dev's picture
Update app.py
f036dba verified
raw
history blame
3.86 kB
import gradio as gr
import requests
import os
import re
# 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 = "https://deployment.datasaur.ai/api/deployment/8/2723/chat/completions"
API_TOKEN = os.environ["DATASAUR_API_KEY"]
import re
import json
def extract_suggestion_value(text):
"""
Extracts the value of the 'suggestion' key from a given string that may contain JSON-like content.
Parameters:
text (str): Input text containing a JSON-like 'suggestion' field.
Returns:
dict: Dictionary with the 'suggestion' key and its extracted value, or None if not found.
"""
# First, try to directly parse as JSON
try:
parsed = json.loads(text)
if "suggestion" in parsed:
return parsed["suggestion"]
except json.JSONDecodeError:
pass # Fall back to regex if not valid JSON
# Fallback: use regex to extract suggestion value
match = re.search(r'"suggestion"\s*:\s*"([^"]+)"', text)
if match:
return match.group(1)
return None
def magic_function(input_text):
"""
Sends text to the Datasaur deployment API and returns the processed text.
"""
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {API_TOKEN}",
}
data = {
"messages": [{"role": "user", "content": f"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 = extract_suggestion_value(content)
return content.strip()
except requests.exceptions.RequestException as e:
return f"API Request Error: {e}"
except (ValueError, KeyError, IndexError):
# Handle cases where response is not valid JSON or structure is unexpected
return f"Error processing API response: {response.text}"
def handle_magic_click(current_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 the improved text has no "[" or "]" characters, make text area light green and hide previous text.
"""
improved_text = magic_function(current_text)
# Check if improved text contains "[" or "]"
if "[" not in improved_text and "]" not in improved_text:
# No brackets found - make text area light green and hide previous text
return (
gr.update(value=improved_text, elem_classes="success-text"),
current_text,
gr.update(visible=False)
)
else:
# Brackets found - keep normal behavior
return improved_text, current_text, gr.update(visible=True)
with gr.Blocks(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)
with gr.Column(scale=1):
magic_button = gr.Button("Magic Button")
magic_button.click(
fn=handle_magic_click,
inputs=text_area,
outputs=[text_area, previous_text_area, previous_text_area]
)
if __name__ == "__main__":
demo.launch()