Spaces:
Running
Running
add gradio lite for preview
Browse files
app.py
CHANGED
|
@@ -38,6 +38,8 @@ def get_gradio_language(language):
|
|
| 38 |
# Map composite options to a supported syntax highlighting
|
| 39 |
if language == "streamlit":
|
| 40 |
return "python"
|
|
|
|
|
|
|
| 41 |
return language if language in GRADIO_SUPPORTED_LANGUAGES else None
|
| 42 |
|
| 43 |
# Search/Replace Constants
|
|
@@ -1603,6 +1605,47 @@ def send_streamlit_to_stlite(code: str) -> str:
|
|
| 1603 |
iframe = f'<iframe src="{data_uri}" width="100%" height="920px" sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-presentation" allow="display-capture"></iframe>'
|
| 1604 |
return iframe
|
| 1605 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1606 |
def demo_card_click(e: gr.EventData):
|
| 1607 |
try:
|
| 1608 |
# Get the index from the event data
|
|
@@ -2456,6 +2499,8 @@ This will help me create a better design for you."""
|
|
| 2456 |
preview_val = send_to_sandbox(clean_code)
|
| 2457 |
elif language == "python" and is_streamlit_code(clean_code):
|
| 2458 |
preview_val = send_streamlit_to_stlite(clean_code)
|
|
|
|
|
|
|
| 2459 |
yield {
|
| 2460 |
code_output: gr.update(value=clean_code, language=get_gradio_language(language)),
|
| 2461 |
history_output: history_to_chatbot_messages(_history),
|
|
@@ -2471,6 +2516,8 @@ This will help me create a better design for you."""
|
|
| 2471 |
preview_val = send_to_sandbox(clean_content)
|
| 2472 |
elif language == "python" and is_streamlit_code(clean_content):
|
| 2473 |
preview_val = send_streamlit_to_stlite(clean_content)
|
|
|
|
|
|
|
| 2474 |
yield {
|
| 2475 |
code_output: gr.update(value=clean_content, language=get_gradio_language(language)),
|
| 2476 |
history_output: history_to_chatbot_messages(_history),
|
|
@@ -2482,6 +2529,8 @@ This will help me create a better design for you."""
|
|
| 2482 |
preview_val = send_to_sandbox(clean_code)
|
| 2483 |
elif language == "python" and is_streamlit_code(clean_code):
|
| 2484 |
preview_val = send_streamlit_to_stlite(clean_code)
|
|
|
|
|
|
|
| 2485 |
yield {
|
| 2486 |
code_output: gr.update(value=clean_code, language=get_gradio_language(language)),
|
| 2487 |
history_output: history_to_chatbot_messages(_history),
|
|
@@ -2608,6 +2657,8 @@ This will help me create a better design for you."""
|
|
| 2608 |
preview_val = send_to_sandbox(final_content)
|
| 2609 |
elif language == "python" and is_streamlit_code(final_content):
|
| 2610 |
preview_val = send_streamlit_to_stlite(final_content)
|
|
|
|
|
|
|
| 2611 |
yield {
|
| 2612 |
code_output: final_content,
|
| 2613 |
history: _history,
|
|
@@ -3358,9 +3409,9 @@ with gr.Blocks(
|
|
| 3358 |
lines=3,
|
| 3359 |
visible=True
|
| 3360 |
)
|
| 3361 |
-
# Language dropdown for code generation (add Streamlit as
|
| 3362 |
language_choices = [
|
| 3363 |
-
"html", "streamlit", "python", "transformers.js", "svelte", "c", "cpp", "markdown", "latex", "json", "css", "javascript", "jinja2", "typescript", "yaml", "dockerfile", "shell", "r", "sql", "sql-msSQL", "sql-mySQL", "sql-mariaDB", "sql-sqlite", "sql-cassandra", "sql-plSQL", "sql-hive", "sql-pgSQL", "sql-gql", "sql-gpSQL", "sql-sparkSQL", "sql-esper"
|
| 3364 |
]
|
| 3365 |
language_dropdown = gr.Dropdown(
|
| 3366 |
choices=language_choices,
|
|
@@ -3534,6 +3585,9 @@ with gr.Blocks(
|
|
| 3534 |
elif is_streamlit_code(code):
|
| 3535 |
preview_html = send_streamlit_to_stlite(code)
|
| 3536 |
code_lang = "python"
|
|
|
|
|
|
|
|
|
|
| 3537 |
else:
|
| 3538 |
preview_html = "<div style='padding:1em;color:#888;text-align:center;'>Preview not available for this file type.</div>"
|
| 3539 |
code_lang = "html"
|
|
@@ -3574,6 +3628,8 @@ with gr.Blocks(
|
|
| 3574 |
return gr.update(value="Static (HTML)")
|
| 3575 |
elif language == "streamlit":
|
| 3576 |
return gr.update(value="Streamlit (Python)")
|
|
|
|
|
|
|
| 3577 |
else:
|
| 3578 |
return gr.update(value="Gradio (Python)")
|
| 3579 |
|
|
@@ -3585,6 +3641,8 @@ with gr.Blocks(
|
|
| 3585 |
return send_to_sandbox(code)
|
| 3586 |
if language == "streamlit":
|
| 3587 |
return send_streamlit_to_stlite(code) if is_streamlit_code(code) else "<div style='padding:1em;color:#888;text-align:center;'>Add `import streamlit as st` to enable Streamlit preview.</div>"
|
|
|
|
|
|
|
| 3588 |
if language == "python" or is_streamlit_code(code):
|
| 3589 |
if is_streamlit_code(code):
|
| 3590 |
return send_streamlit_to_stlite(code)
|
|
|
|
| 38 |
# Map composite options to a supported syntax highlighting
|
| 39 |
if language == "streamlit":
|
| 40 |
return "python"
|
| 41 |
+
if language == "gradio":
|
| 42 |
+
return "python"
|
| 43 |
return language if language in GRADIO_SUPPORTED_LANGUAGES else None
|
| 44 |
|
| 45 |
# Search/Replace Constants
|
|
|
|
| 1605 |
iframe = f'<iframe src="{data_uri}" width="100%" height="920px" sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-presentation" allow="display-capture"></iframe>'
|
| 1606 |
return iframe
|
| 1607 |
|
| 1608 |
+
def is_gradio_code(code: str) -> bool:
|
| 1609 |
+
"""Heuristic check to determine if Python code is a Gradio app."""
|
| 1610 |
+
if not code:
|
| 1611 |
+
return False
|
| 1612 |
+
lowered = code.lower()
|
| 1613 |
+
return (
|
| 1614 |
+
"import gradio" in lowered
|
| 1615 |
+
or "from gradio" in lowered
|
| 1616 |
+
or "gr.Interface(" in code
|
| 1617 |
+
or "gr.Blocks(" in code
|
| 1618 |
+
)
|
| 1619 |
+
|
| 1620 |
+
def send_gradio_to_lite(code: str) -> str:
|
| 1621 |
+
"""Render Gradio code using gradio-lite inside a sandboxed iframe for preview."""
|
| 1622 |
+
html_doc = (
|
| 1623 |
+
"""<!doctype html>
|
| 1624 |
+
<html>
|
| 1625 |
+
<head>
|
| 1626 |
+
<meta charset=\"UTF-8\" />
|
| 1627 |
+
<meta http-equiv=\"X-UA-Compatible\" content=\"IE=edge\" />
|
| 1628 |
+
<meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\" />
|
| 1629 |
+
<title>Gradio Preview</title>
|
| 1630 |
+
<script type=\"module\" crossorigin src=\"https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.js\"></script>
|
| 1631 |
+
<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/@gradio/lite/dist/lite.css\" />
|
| 1632 |
+
<style>html,body{margin:0;padding:0;height:100%;} gradio-lite{display:block;height:100%;}</style>
|
| 1633 |
+
</head>
|
| 1634 |
+
<body>
|
| 1635 |
+
<gradio-lite>
|
| 1636 |
+
"""
|
| 1637 |
+
+ (code or "")
|
| 1638 |
+
+ """
|
| 1639 |
+
</gradio-lite>
|
| 1640 |
+
</body>
|
| 1641 |
+
</html>
|
| 1642 |
+
"""
|
| 1643 |
+
)
|
| 1644 |
+
encoded_html = base64.b64encode(html_doc.encode('utf-8')).decode('utf-8')
|
| 1645 |
+
data_uri = f"data:text/html;charset=utf-8;base64,{encoded_html}"
|
| 1646 |
+
iframe = f'<iframe src="{data_uri}" width="100%" height="920px" sandbox="allow-scripts allow-same-origin allow-forms allow-popups allow-modals allow-presentation" allow="display-capture"></iframe>'
|
| 1647 |
+
return iframe
|
| 1648 |
+
|
| 1649 |
def demo_card_click(e: gr.EventData):
|
| 1650 |
try:
|
| 1651 |
# Get the index from the event data
|
|
|
|
| 2499 |
preview_val = send_to_sandbox(clean_code)
|
| 2500 |
elif language == "python" and is_streamlit_code(clean_code):
|
| 2501 |
preview_val = send_streamlit_to_stlite(clean_code)
|
| 2502 |
+
elif language == "gradio" or (language == "python" and is_gradio_code(clean_code)):
|
| 2503 |
+
preview_val = send_gradio_to_lite(clean_code)
|
| 2504 |
yield {
|
| 2505 |
code_output: gr.update(value=clean_code, language=get_gradio_language(language)),
|
| 2506 |
history_output: history_to_chatbot_messages(_history),
|
|
|
|
| 2516 |
preview_val = send_to_sandbox(clean_content)
|
| 2517 |
elif language == "python" and is_streamlit_code(clean_content):
|
| 2518 |
preview_val = send_streamlit_to_stlite(clean_content)
|
| 2519 |
+
elif language == "gradio" or (language == "python" and is_gradio_code(clean_content)):
|
| 2520 |
+
preview_val = send_gradio_to_lite(clean_content)
|
| 2521 |
yield {
|
| 2522 |
code_output: gr.update(value=clean_content, language=get_gradio_language(language)),
|
| 2523 |
history_output: history_to_chatbot_messages(_history),
|
|
|
|
| 2529 |
preview_val = send_to_sandbox(clean_code)
|
| 2530 |
elif language == "python" and is_streamlit_code(clean_code):
|
| 2531 |
preview_val = send_streamlit_to_stlite(clean_code)
|
| 2532 |
+
elif language == "gradio" or (language == "python" and is_gradio_code(clean_code)):
|
| 2533 |
+
preview_val = send_gradio_to_lite(clean_code)
|
| 2534 |
yield {
|
| 2535 |
code_output: gr.update(value=clean_code, language=get_gradio_language(language)),
|
| 2536 |
history_output: history_to_chatbot_messages(_history),
|
|
|
|
| 2657 |
preview_val = send_to_sandbox(final_content)
|
| 2658 |
elif language == "python" and is_streamlit_code(final_content):
|
| 2659 |
preview_val = send_streamlit_to_stlite(final_content)
|
| 2660 |
+
elif language == "gradio" or (language == "python" and is_gradio_code(final_content)):
|
| 2661 |
+
preview_val = send_gradio_to_lite(final_content)
|
| 2662 |
yield {
|
| 2663 |
code_output: final_content,
|
| 2664 |
history: _history,
|
|
|
|
| 3409 |
lines=3,
|
| 3410 |
visible=True
|
| 3411 |
)
|
| 3412 |
+
# Language dropdown for code generation (add Streamlit and Gradio as first-class options)
|
| 3413 |
language_choices = [
|
| 3414 |
+
"html", "streamlit", "gradio", "python", "transformers.js", "svelte", "c", "cpp", "markdown", "latex", "json", "css", "javascript", "jinja2", "typescript", "yaml", "dockerfile", "shell", "r", "sql", "sql-msSQL", "sql-mySQL", "sql-mariaDB", "sql-sqlite", "sql-cassandra", "sql-plSQL", "sql-hive", "sql-pgSQL", "sql-gql", "sql-gpSQL", "sql-sparkSQL", "sql-esper"
|
| 3415 |
]
|
| 3416 |
language_dropdown = gr.Dropdown(
|
| 3417 |
choices=language_choices,
|
|
|
|
| 3585 |
elif is_streamlit_code(code):
|
| 3586 |
preview_html = send_streamlit_to_stlite(code)
|
| 3587 |
code_lang = "python"
|
| 3588 |
+
elif is_gradio_code(code):
|
| 3589 |
+
preview_html = send_gradio_to_lite(code)
|
| 3590 |
+
code_lang = "python"
|
| 3591 |
else:
|
| 3592 |
preview_html = "<div style='padding:1em;color:#888;text-align:center;'>Preview not available for this file type.</div>"
|
| 3593 |
code_lang = "html"
|
|
|
|
| 3628 |
return gr.update(value="Static (HTML)")
|
| 3629 |
elif language == "streamlit":
|
| 3630 |
return gr.update(value="Streamlit (Python)")
|
| 3631 |
+
elif language == "gradio":
|
| 3632 |
+
return gr.update(value="Gradio (Python)")
|
| 3633 |
else:
|
| 3634 |
return gr.update(value="Gradio (Python)")
|
| 3635 |
|
|
|
|
| 3641 |
return send_to_sandbox(code)
|
| 3642 |
if language == "streamlit":
|
| 3643 |
return send_streamlit_to_stlite(code) if is_streamlit_code(code) else "<div style='padding:1em;color:#888;text-align:center;'>Add `import streamlit as st` to enable Streamlit preview.</div>"
|
| 3644 |
+
if language == "gradio":
|
| 3645 |
+
return send_gradio_to_lite(code) if is_gradio_code(code) else "<div style='padding:1em;color:#888;text-align:center;'>Add `import gradio as gr` to enable Gradio preview.</div>"
|
| 3646 |
if language == "python" or is_streamlit_code(code):
|
| 3647 |
if is_streamlit_code(code):
|
| 3648 |
return send_streamlit_to_stlite(code)
|