Spaces:
Running
Running
transformers js streaming code
Browse files
app.py
CHANGED
|
@@ -1089,20 +1089,20 @@ def parse_transformers_js_output(text):
|
|
| 1089 |
|
| 1090 |
# Multiple patterns to match the three code blocks with different variations
|
| 1091 |
html_patterns = [
|
| 1092 |
-
r'```html\s*\n([\s\S]
|
| 1093 |
-
r'```htm\s*\n([\s\S]
|
| 1094 |
-
r'```\s*(?:index\.html|html)\s*\n([\s\S]
|
| 1095 |
]
|
| 1096 |
|
| 1097 |
js_patterns = [
|
| 1098 |
-
r'```javascript\s*\n([\s\S]
|
| 1099 |
-
r'```js\s*\n([\s\S]
|
| 1100 |
-
r'```\s*(?:index\.js|javascript)\s*\n([\s\S]
|
| 1101 |
]
|
| 1102 |
|
| 1103 |
css_patterns = [
|
| 1104 |
-
r'```css\s*\n([\s\S]
|
| 1105 |
-
r'```\s*(?:style\.css|css)\s*\n([\s\S]
|
| 1106 |
]
|
| 1107 |
|
| 1108 |
# Extract HTML content
|
|
@@ -3920,13 +3920,18 @@ This will help me create a better design for you."""
|
|
| 3920 |
# Handle transformers.js output differently
|
| 3921 |
if language == "transformers.js":
|
| 3922 |
files = parse_transformers_js_output(content)
|
| 3923 |
-
|
| 3924 |
-
|
| 3925 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 3926 |
yield {
|
| 3927 |
-
code_output: gr.update(value=
|
| 3928 |
history_output: history_to_chatbot_messages(_history),
|
| 3929 |
-
sandbox:
|
| 3930 |
}
|
| 3931 |
elif has_existing_content:
|
| 3932 |
# Model is returning search/replace changes for transformers.js - apply them
|
|
@@ -5562,9 +5567,11 @@ with gr.Blocks(
|
|
| 5562 |
def toggle_editors(language, code_text):
|
| 5563 |
if language == "transformers.js":
|
| 5564 |
files = parse_transformers_js_output(code_text or "")
|
|
|
|
|
|
|
| 5565 |
return [
|
| 5566 |
-
gr.update(visible=
|
| 5567 |
-
gr.update(visible=
|
| 5568 |
gr.update(value=files.get('index.html', '')),
|
| 5569 |
gr.update(value=files.get('index.js', '')),
|
| 5570 |
gr.update(value=files.get('style.css', '')),
|
|
@@ -5588,11 +5595,13 @@ with gr.Blocks(
|
|
| 5588 |
if language != "transformers.js":
|
| 5589 |
return [gr.update(), gr.update(), gr.update(), gr.update()]
|
| 5590 |
files = parse_transformers_js_output(code_text or "")
|
|
|
|
|
|
|
| 5591 |
return [
|
| 5592 |
gr.update(value=files.get('index.html', '')),
|
| 5593 |
gr.update(value=files.get('index.js', '')),
|
| 5594 |
gr.update(value=files.get('style.css', '')),
|
| 5595 |
-
gr.update(visible=
|
| 5596 |
]
|
| 5597 |
|
| 5598 |
# Keep multi-file editors in sync when code_output changes and language is transformers.js
|
|
|
|
| 1089 |
|
| 1090 |
# Multiple patterns to match the three code blocks with different variations
|
| 1091 |
html_patterns = [
|
| 1092 |
+
r'```html\s*\n([\s\S]*?)(?:```|\Z)',
|
| 1093 |
+
r'```htm\s*\n([\s\S]*?)(?:```|\Z)',
|
| 1094 |
+
r'```\s*(?:index\.html|html)\s*\n([\s\S]*?)(?:```|\Z)'
|
| 1095 |
]
|
| 1096 |
|
| 1097 |
js_patterns = [
|
| 1098 |
+
r'```javascript\s*\n([\s\S]*?)(?:```|\Z)',
|
| 1099 |
+
r'```js\s*\n([\s\S]*?)(?:```|\Z)',
|
| 1100 |
+
r'```\s*(?:index\.js|javascript|js)\s*\n([\s\S]*?)(?:```|\Z)'
|
| 1101 |
]
|
| 1102 |
|
| 1103 |
css_patterns = [
|
| 1104 |
+
r'```css\s*\n([\s\S]*?)(?:```|\Z)',
|
| 1105 |
+
r'```\s*(?:style\.css|css)\s*\n([\s\S]*?)(?:```|\Z)'
|
| 1106 |
]
|
| 1107 |
|
| 1108 |
# Extract HTML content
|
|
|
|
| 3920 |
# Handle transformers.js output differently
|
| 3921 |
if language == "transformers.js":
|
| 3922 |
files = parse_transformers_js_output(content)
|
| 3923 |
+
|
| 3924 |
+
# Stream ALL code by merging current parts into a single HTML (inline CSS & JS)
|
| 3925 |
+
has_any_part = any([files.get('index.html'), files.get('index.js'), files.get('style.css')])
|
| 3926 |
+
if has_any_part:
|
| 3927 |
+
merged_html = build_transformers_inline_html(files)
|
| 3928 |
+
preview_val = None
|
| 3929 |
+
if files['index.html'] and files['index.js'] and files['style.css']:
|
| 3930 |
+
preview_val = send_transformers_to_sandbox(files)
|
| 3931 |
yield {
|
| 3932 |
+
code_output: gr.update(value=merged_html, language="html"),
|
| 3933 |
history_output: history_to_chatbot_messages(_history),
|
| 3934 |
+
sandbox: preview_val or "<div style='padding:1em;color:#888;text-align:center;'>Generating transformers.js app...</div>",
|
| 3935 |
}
|
| 3936 |
elif has_existing_content:
|
| 3937 |
# Model is returning search/replace changes for transformers.js - apply them
|
|
|
|
| 5567 |
def toggle_editors(language, code_text):
|
| 5568 |
if language == "transformers.js":
|
| 5569 |
files = parse_transformers_js_output(code_text or "")
|
| 5570 |
+
# Hide multi-file editors until all files exist; show single code until then
|
| 5571 |
+
editors_visible = True if (files.get('index.html') and files.get('index.js') and files.get('style.css')) else False
|
| 5572 |
return [
|
| 5573 |
+
gr.update(visible=not editors_visible), # code_output shown if editors hidden
|
| 5574 |
+
gr.update(visible=editors_visible), # tjs_group shown only when complete
|
| 5575 |
gr.update(value=files.get('index.html', '')),
|
| 5576 |
gr.update(value=files.get('index.js', '')),
|
| 5577 |
gr.update(value=files.get('style.css', '')),
|
|
|
|
| 5595 |
if language != "transformers.js":
|
| 5596 |
return [gr.update(), gr.update(), gr.update(), gr.update()]
|
| 5597 |
files = parse_transformers_js_output(code_text or "")
|
| 5598 |
+
# Only reveal the multi-file editors when all three files are present
|
| 5599 |
+
editors_visible = True if (files.get('index.html') and files.get('index.js') and files.get('style.css')) else None
|
| 5600 |
return [
|
| 5601 |
gr.update(value=files.get('index.html', '')),
|
| 5602 |
gr.update(value=files.get('index.js', '')),
|
| 5603 |
gr.update(value=files.get('style.css', '')),
|
| 5604 |
+
gr.update(visible=editors_visible) if editors_visible is not None else gr.update(),
|
| 5605 |
]
|
| 5606 |
|
| 5607 |
# Keep multi-file editors in sync when code_output changes and language is transformers.js
|