Spaces:
Runtime error
Runtime error
remove wgpu, add documentation
Browse files- app.py +56 -173
- requirements.txt +0 -3
app.py
CHANGED
@@ -1,137 +1,9 @@
|
|
1 |
import gradio as gr
|
2 |
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
|
3 |
-
from wgpu.utils.shadertoy import *
|
4 |
-
from wgpu.gui.offscreen import WgpuCanvas as OffscreenCanvas, run as run_offscreen
|
5 |
-
import wgpu
|
6 |
-
import time
|
7 |
-
import ctypes
|
8 |
import datasets
|
9 |
-
from PIL import Image
|
10 |
import asyncio
|
11 |
import numpy as np
|
12 |
|
13 |
-
# reimplement the Shadertoy class with offscreen canvas!
|
14 |
-
class ShadertoyCustom(Shadertoy):
|
15 |
-
def __init__(self, shader_code, resolution=(800, 450), canvas_class=WgpuCanvas, run_fn=run):
|
16 |
-
self._canvas_class = canvas_class
|
17 |
-
self._fun_fn = run_fn
|
18 |
-
super().__init__(shader_code, resolution)
|
19 |
-
self._uniform_data = UniformArray(
|
20 |
-
("mouse", "f", 4),
|
21 |
-
("resolution", "f", 3),
|
22 |
-
("time", "f", 1),
|
23 |
-
("time_delta", "f", 1),
|
24 |
-
("frame", "I", 1),
|
25 |
-
)
|
26 |
-
|
27 |
-
self._shader_code = shader_code
|
28 |
-
self._uniform_data["resolution"] = resolution + (1,)
|
29 |
-
|
30 |
-
self._prepare_render()
|
31 |
-
self._bind_events()
|
32 |
-
|
33 |
-
def _prepare_render(self):
|
34 |
-
import wgpu.backends.rs # noqa
|
35 |
-
|
36 |
-
self._canvas = self._canvas_class(title="Shadertoy", size=self.resolution, max_fps=60)
|
37 |
-
|
38 |
-
adapter = wgpu.request_adapter(
|
39 |
-
canvas=self._canvas, power_preference="high-performance"
|
40 |
-
)
|
41 |
-
self._device = adapter.request_device()
|
42 |
-
|
43 |
-
self._present_context = self._canvas.get_context()
|
44 |
-
|
45 |
-
# We use "bgra8unorm" not "bgra8unorm-srgb" here because we want to let the shader fully control the color-space.
|
46 |
-
self._present_context.configure(
|
47 |
-
device=self._device, format=wgpu.TextureFormat.bgra8unorm
|
48 |
-
)
|
49 |
-
|
50 |
-
shader_type = self.shader_type
|
51 |
-
if shader_type == "glsl":
|
52 |
-
vertex_shader_code = vertex_code_glsl
|
53 |
-
frag_shader_code = (
|
54 |
-
builtin_variables_glsl + self.shader_code + fragment_code_glsl
|
55 |
-
)
|
56 |
-
elif shader_type == "wgsl":
|
57 |
-
vertex_shader_code = vertex_code_wgsl
|
58 |
-
frag_shader_code = (
|
59 |
-
builtin_variables_wgsl + self.shader_code + fragment_code_wgsl
|
60 |
-
)
|
61 |
-
|
62 |
-
vertex_shader_program = self._device.create_shader_module(
|
63 |
-
label="triangle_vert", code=vertex_shader_code
|
64 |
-
)
|
65 |
-
frag_shader_program = self._device.create_shader_module(
|
66 |
-
label="triangle_frag", code=frag_shader_code
|
67 |
-
)
|
68 |
-
|
69 |
-
self._uniform_buffer = self._device.create_buffer(
|
70 |
-
size=self._uniform_data.nbytes,
|
71 |
-
usage=wgpu.BufferUsage.UNIFORM | wgpu.BufferUsage.COPY_DST,
|
72 |
-
)
|
73 |
-
|
74 |
-
bind_group_layout = self._device.create_bind_group_layout(
|
75 |
-
entries=binding_layout
|
76 |
-
)
|
77 |
-
|
78 |
-
self._bind_group = self._device.create_bind_group(
|
79 |
-
layout=bind_group_layout,
|
80 |
-
entries=[
|
81 |
-
{
|
82 |
-
"binding": 0,
|
83 |
-
"resource": {
|
84 |
-
"buffer": self._uniform_buffer,
|
85 |
-
"offset": 0,
|
86 |
-
"size": self._uniform_data.nbytes,
|
87 |
-
},
|
88 |
-
},
|
89 |
-
],
|
90 |
-
)
|
91 |
-
|
92 |
-
self._render_pipeline = self._device.create_render_pipeline(
|
93 |
-
layout=self._device.create_pipeline_layout(
|
94 |
-
bind_group_layouts=[bind_group_layout]
|
95 |
-
),
|
96 |
-
vertex={
|
97 |
-
"module": vertex_shader_program,
|
98 |
-
"entry_point": "main",
|
99 |
-
"buffers": [],
|
100 |
-
},
|
101 |
-
primitive={
|
102 |
-
"topology": wgpu.PrimitiveTopology.triangle_list,
|
103 |
-
"front_face": wgpu.FrontFace.ccw,
|
104 |
-
"cull_mode": wgpu.CullMode.none,
|
105 |
-
},
|
106 |
-
depth_stencil=None,
|
107 |
-
multisample=None,
|
108 |
-
fragment={
|
109 |
-
"module": frag_shader_program,
|
110 |
-
"entry_point": "main",
|
111 |
-
"targets": [
|
112 |
-
{
|
113 |
-
"format": wgpu.TextureFormat.bgra8unorm,
|
114 |
-
"blend": {
|
115 |
-
"color": (
|
116 |
-
wgpu.BlendFactor.one,
|
117 |
-
wgpu.BlendFactor.zero,
|
118 |
-
wgpu.BlendOperation.add,
|
119 |
-
),
|
120 |
-
"alpha": (
|
121 |
-
wgpu.BlendFactor.one,
|
122 |
-
wgpu.BlendFactor.zero,
|
123 |
-
wgpu.BlendOperation.add,
|
124 |
-
),
|
125 |
-
},
|
126 |
-
},
|
127 |
-
],
|
128 |
-
},
|
129 |
-
)
|
130 |
-
|
131 |
-
def show(self, time: float = 0.0):
|
132 |
-
self._canvas.request_draw(self._draw_frame)
|
133 |
-
self._fun_fn()
|
134 |
-
|
135 |
def make_script(shader_code):
|
136 |
# code copied and fixed(escaping single quotes to double quotes!!!) from https://webglfundamentals.org/webgl/webgl-shadertoy.html
|
137 |
script = ("""
|
@@ -358,23 +230,54 @@ def make_iframe(shader_code): #keep a single function?
|
|
358 |
return f"""<iframe width="640" height="512" srcdoc=\'{script}\' allowfullscreen></iframe>"""
|
359 |
|
360 |
|
361 |
-
|
362 |
# Welcome to the interactive shadercoding demo.
|
363 |
-
|
364 |
-
|
365 |
-
|
366 |
-
|
367 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
368 |
|
369 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
- [x] use embedded Shadertoy for reference/attribution (done, but some errors)
|
371 |
-
- [] working render implementation on CPU only space (
|
372 |
- [~] generate variations of return statements [ShaderEval task1](https://huggingface.co/spaces/Vipitis/ShaderEval) (needs to be reworked using the other parts)
|
373 |
-
- [] generation history stating which function and orig/generated returns. (use State ??). do it as comments in the code?
|
374 |
- [x] generate whole functions (seems to work quite well)
|
375 |
-
- []
|
376 |
-
- []
|
377 |
-
- []
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
378 |
"""
|
379 |
|
380 |
passes_dataset = datasets.load_dataset("Vipitis/Shadertoys")
|
@@ -389,23 +292,6 @@ GLSL_LANGUAGE = Language('./build/my-languages.so', 'glsl')
|
|
389 |
parser = Parser()
|
390 |
parser.set_language(GLSL_LANGUAGE)
|
391 |
|
392 |
-
|
393 |
-
async def get_image(code, time= 0.0, resolution=(512, 420)):
|
394 |
-
tree = parser.parse(bytes(code, "utf8"))
|
395 |
-
if tree.root_node.has_error:
|
396 |
-
print("ERROR in the tree, aborting.")
|
397 |
-
raise gr.Error("the code seems to have issues")
|
398 |
-
return None
|
399 |
-
shader = ShadertoyCustom(code, resolution, OffscreenCanvas, run_offscreen) #pass offscreen canvas here.
|
400 |
-
shader._uniform_data["time"] = time #set any time you want
|
401 |
-
shader._canvas.request_draw(shader._draw_frame)
|
402 |
-
# frame = shader._canvas.snapshot().data
|
403 |
-
frame = np.asarray(shader._canvas.draw())
|
404 |
-
img = Image.fromarray(frame)
|
405 |
-
# remove transparent pixels
|
406 |
-
img = img.convert('RGB')
|
407 |
-
return img
|
408 |
-
|
409 |
def grab_sample(sample_idx):
|
410 |
sample_pass = all_single_passes[sample_idx]
|
411 |
sample_code = sample_pass["code"]
|
@@ -454,7 +340,7 @@ def get_full_replacement(orig_code, retn_start_idx, retn_end_idx, prediction) ->
|
|
454 |
variation = orig_code[:retn_start_idx] + generated + orig_code[retn_end_idx:]
|
455 |
return variation
|
456 |
|
457 |
-
def alter_return(orig_code, func_idx=0, pipeline=PIPE): #default pipeline can't be passed as gloabl?
|
458 |
"""
|
459 |
Replaces the return statement of a function with a generated one.
|
460 |
Args:
|
@@ -467,6 +353,9 @@ def alter_return(orig_code, func_idx=0, pipeline=PIPE): #default pipeline can't
|
|
467 |
if pipeline is None:
|
468 |
print("no pipeline found, loading default one")
|
469 |
pipeline = _make_pipeline()
|
|
|
|
|
|
|
470 |
|
471 |
retrns = []
|
472 |
retrn_start_idx = orig_code.find("return")
|
@@ -499,7 +388,8 @@ def _line_chr2char(text, line_idx, chr_idx):
|
|
499 |
char_idx += chr_idx
|
500 |
return char_idx
|
501 |
|
502 |
-
|
|
|
503 |
"""
|
504 |
Replaces the body of a function with a generated one.
|
505 |
Args:
|
@@ -561,7 +451,7 @@ def construct_embed(source_url):
|
|
561 |
return f'<iframe width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/{shader_id}?gui=true&t=0&paused=true&muted=true" allowfullscreen></iframe>'
|
562 |
|
563 |
with gr.Blocks() as site:
|
564 |
-
|
565 |
model_cp = gr.Textbox(value="Vipitis/santacoder-finetuned-Shadertoys-fine", label="Model Checkpoint (Enter to load!)", interactive=True)
|
566 |
sample_idx = gr.Slider(minimum=0, maximum=num_samples, value=3211, label="pick sample from dataset", step=1.0)
|
567 |
func_dropdown = gr.Dropdown(label="chose a function to modify") #breaks if I add a string in before that?
|
@@ -569,31 +459,24 @@ with gr.Blocks() as site:
|
|
569 |
gen_return_button = gr.Button("generate a alternate return statement", label="generate return")
|
570 |
gen_func_button = gr.Button("generate an alternate function body", label="generate function")
|
571 |
# update_funcs_button = gr.Button("update functions", label="update functions")
|
572 |
-
render_button = gr.Button("render frame0 (can carsh the sapce on invalid shadercode)",label="render frame")
|
573 |
-
time_slider = gr.Slider(minimum=0, maximum=10, value=0, label="time (update on release, also used to pick other functions as a bodge)", step=0.02)
|
574 |
with gr.Row():
|
575 |
with gr.Column():
|
576 |
source_embed = gr.HTML('<iframe width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/WsBcWV?gui=true&t=0&paused=true&muted=true" allowfullscreen></iframe>', label="How this shader originally renders")
|
577 |
-
rendered_frame = gr.Image(shape=(512, 420), label=f"rendered frame preview", type="pil") #colors are messed up?
|
578 |
our_embed = gr.HTML(label="glsl render of the current code")
|
579 |
sample_code = gr.Code(label="Current Code (will update changes you generate)", language=None)
|
580 |
-
|
|
|
|
|
581 |
sample_pass = gr.State(value={})
|
582 |
pipe = gr.State(value=PIPE)
|
583 |
funcs = gr.State(value=[])
|
584 |
# hist_state = gr.State(Value={})
|
585 |
# history_table = gr.JSON()
|
586 |
|
587 |
-
model_cp.submit(fn=_make_pipeline, inputs=[model_cp], outputs=[pipe])
|
588 |
-
sample_idx.release(fn=grab_sample, inputs=[sample_idx], outputs=[sample_pass, sample_code, source_embed])
|
589 |
-
|
590 |
-
gen_return_button.click(fn=alter_return, inputs=[sample_code, time_slider, pipe], outputs=[sample_code])
|
591 |
gen_func_button.click(fn=alter_body, inputs=[sample_code, func_dropdown, funcs, pipe], outputs=[sample_code, pipe])
|
592 |
-
# run_button.click(fn=add_history, inputs=[time_slider, sample_pass, sample_code, hist_state], outputs=[history_table, hist_state])
|
593 |
-
# sample_idx.release(fn=construct_embed, inputs=[sample_idx], outputs=[source_embed]) #twice to make have different outputs?
|
594 |
sample_code.change(fn=list_dropdown, inputs=[sample_code], outputs=[funcs, func_dropdown]) # to update this after generation, so spans aren't messed up
|
595 |
sample_code.change(fn=make_iframe, inputs=[sample_code], outputs=[our_embed]) #twice could cause issues, find better ways.
|
596 |
-
time_slider.release(fn=lambda code, time: asyncio.run(get_image(code, time)), inputs=[sample_code, time_slider], outputs=rendered_frame)
|
597 |
-
render_button.click(fn=lambda code: asyncio.run(get_image(code)), inputs=[sample_code], outputs=rendered_frame)
|
598 |
-
# run_button.click(fn=print, inputs=[model_cp, sample_idx], outputs=output)
|
599 |
site.launch()
|
|
|
1 |
import gradio as gr
|
2 |
from transformers import pipeline, AutoModelForCausalLM, AutoTokenizer
|
|
|
|
|
|
|
|
|
|
|
3 |
import datasets
|
|
|
4 |
import asyncio
|
5 |
import numpy as np
|
6 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
7 |
def make_script(shader_code):
|
8 |
# code copied and fixed(escaping single quotes to double quotes!!!) from https://webglfundamentals.org/webgl/webgl-shadertoy.html
|
9 |
script = ("""
|
|
|
230 |
return f"""<iframe width="640" height="512" srcdoc=\'{script}\' allowfullscreen></iframe>"""
|
231 |
|
232 |
|
233 |
+
intro_text = """
|
234 |
# Welcome to the interactive shadercoding demo.
|
235 |
+
This gives you access to a filtered version of the [Shadertoys](https://huggingface.co/datasets/Vipitis/Shadertoys) dataset, only shaders that consist of a single pass are available.
|
236 |
+
And then lets you use code generation models to make alterations to part of the shadercode.
|
237 |
+
|
238 |
+
## How To Use:
|
239 |
+
1. Load any Model for [`text-generation`](https://huggingface.co/models?pipeline_tag=text-generation) and hit ENTER.
|
240 |
+
2. Use the slider to sample a shader from the dataset.
|
241 |
+
- The original shader will be embedding on the left, click on title to get to the source.
|
242 |
+
- The shadercode will be displayed on the right, this is interactive.
|
243 |
+
- A preview of the currently displayed shadercode will be displayed on the lower left. (hover to advance time)
|
244 |
+
3. use the dropdown to select a function to modify.
|
245 |
+
4. press either button to make modifications to that function
|
246 |
+
5. you can also edit the code manually.
|
247 |
+
"""
|
248 |
|
249 |
+
outro_text ="""
|
250 |
+
## Models to try (look at [ShaderEval](https://huggingface.co/spaces/Vipitis/ShaderEval) for an indication of how helpful they will be):
|
251 |
+
- [gpt2](https://huggingface.co/gpt2) baseline for language models, really struggles with shadercode.
|
252 |
+
- [bigscience/bloom-1b1](https://huggingface.co/bigscience/bloom-1b1) a newer and larger freely available model. Does understand a big of code.
|
253 |
+
- [codeparrot/codeparrot-small](https://huggingface.co/codeparrot/codeparrot-small) a model trained on code, but not on shadercode. Manages to graps the patterns.
|
254 |
+
- [salesforce/codegen-2B-multi](https://huggingface.co/salesforce/codegen-2B-multi) a larger model that indicates some potential.
|
255 |
+
- [bigcode/santacoder](https://huggingface.co/bigcode/santacoder) a model trained on subset of [TheStack](https://huggingface.co/datasets/bigcode/the-stack), struggles with shadercode.
|
256 |
+
- [Vipitis/santacoder-finetuned-the-stack-glsl](https://huggingface.co/Vipitis/santacoder-finetuned-the-stack-glsl) fine-tuned by me on the glsl subset of [TheStack](https://huggingface.co/datasets/bigcode/the-stack), is an improvement.
|
257 |
+
- [Vipitis/santacoder-finetuned-Shadertoys](https://huggingface.co/Vipitis/santacoder-finetuned-Shadertoys) fine-tuned by me on whole shaders from [Shadertoys](https://huggingface.co/datasets/Vipitis/Shadertoys). Does overfit quite a bit with greedy decoding.
|
258 |
+
- [Vipitis/santacoder-finetuned-Shadertoys-fine](https://huggingface.co/Vipitis/santacoder-finetuned-Shadertoys-fine) fine-tuned by me just functions from [Shadertoys-fine](https://huggingface.co/datasets/Vipitis/Shadertoys-fine). Memorizes the exact function about half the time.
|
259 |
+
- [bigcode/starcoder](https://huggingface.co/bigcode/starcoder) a very large model which I haven't tried yet.
|
260 |
+
- **any other model you want to**
|
261 |
+
|
262 |
+
## TODO (feel free to contribute with a [Pull-Request](https://huggingface.co/Vipitis/santacoder-finetuned-the-stack-glsl/discussions?status=open&type=pull_request)):
|
263 |
- [x] use embedded Shadertoy for reference/attribution (done, but some errors)
|
264 |
+
- [~] working render implementation on CPU only space (as webgl via webglfundamentals, ccs needs fixing for iframe (or hijack Shadertoy iframe))
|
265 |
- [~] generate variations of return statements [ShaderEval task1](https://huggingface.co/spaces/Vipitis/ShaderEval) (needs to be reworked using the other parts)
|
|
|
266 |
- [x] generate whole functions (seems to work quite well)
|
267 |
+
- [] dropdown for model selection (from curated list or all supported models?)
|
268 |
+
- [] generation history stating which function and orig/generated returns. (use State ??). do it as comments in the code?
|
269 |
+
- [] display errros/issues to the user (raise gr.Error could be one idea, but highlighting in the code would be awesome)
|
270 |
+
- [] generate whole shaders (via prompts guidance, recursive from errors)
|
271 |
+
- [] accordion with generation parameters (as pipeline_kwargs?) look up starcoder playround and take "inspiration" from there
|
272 |
+
- [] support FIM task for better model context
|
273 |
+
- [] gradio examples
|
274 |
+
|
275 |
+
### Notes:
|
276 |
+
- this is meant as a resource to show code generation for a "creative" task.
|
277 |
+
- the goal is not to not replace shader artists, but aims to be an assistant instead.
|
278 |
+
- the space still lacks quite a lot of features, but will continue to evolve.
|
279 |
+
- this demo can be useful to sannity check evaluation results, where the academic numbers are made.
|
280 |
+
- If you create a remix with these tools, please attribute the original creator of your starting point when sharing the results. (And perhaps share in the [discussion tab](https://huggingface.co/Vipitis/santacoder-finetuned-the-stack-glsl/discussions?status=open&type=discussion) too)
|
281 |
"""
|
282 |
|
283 |
passes_dataset = datasets.load_dataset("Vipitis/Shadertoys")
|
|
|
292 |
parser = Parser()
|
293 |
parser.set_language(GLSL_LANGUAGE)
|
294 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
295 |
def grab_sample(sample_idx):
|
296 |
sample_pass = all_single_passes[sample_idx]
|
297 |
sample_code = sample_pass["code"]
|
|
|
340 |
variation = orig_code[:retn_start_idx] + generated + orig_code[retn_end_idx:]
|
341 |
return variation
|
342 |
|
343 |
+
def alter_return(orig_code, func_idx="0:", pipeline=PIPE): #default pipeline can't be passed as gloabl?
|
344 |
"""
|
345 |
Replaces the return statement of a function with a generated one.
|
346 |
Args:
|
|
|
353 |
if pipeline is None:
|
354 |
print("no pipeline found, loading default one")
|
355 |
pipeline = _make_pipeline()
|
356 |
+
|
357 |
+
print(f"{func_idx=}")
|
358 |
+
func_idx = int(func_idx.split(":")[0].strip())
|
359 |
|
360 |
retrns = []
|
361 |
retrn_start_idx = orig_code.find("return")
|
|
|
388 |
char_idx += chr_idx
|
389 |
return char_idx
|
390 |
|
391 |
+
|
392 |
+
def alter_body(old_code, func_id: str, funcs_list: list, pipeline=PIPE):
|
393 |
"""
|
394 |
Replaces the body of a function with a generated one.
|
395 |
Args:
|
|
|
451 |
return f'<iframe width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/{shader_id}?gui=true&t=0&paused=true&muted=true" allowfullscreen></iframe>'
|
452 |
|
453 |
with gr.Blocks() as site:
|
454 |
+
top_md = gr.Markdown(intro_text)
|
455 |
model_cp = gr.Textbox(value="Vipitis/santacoder-finetuned-Shadertoys-fine", label="Model Checkpoint (Enter to load!)", interactive=True)
|
456 |
sample_idx = gr.Slider(minimum=0, maximum=num_samples, value=3211, label="pick sample from dataset", step=1.0)
|
457 |
func_dropdown = gr.Dropdown(label="chose a function to modify") #breaks if I add a string in before that?
|
|
|
459 |
gen_return_button = gr.Button("generate a alternate return statement", label="generate return")
|
460 |
gen_func_button = gr.Button("generate an alternate function body", label="generate function")
|
461 |
# update_funcs_button = gr.Button("update functions", label="update functions")
|
|
|
|
|
462 |
with gr.Row():
|
463 |
with gr.Column():
|
464 |
source_embed = gr.HTML('<iframe width="640" height="360" frameborder="0" src="https://www.shadertoy.com/embed/WsBcWV?gui=true&t=0&paused=true&muted=true" allowfullscreen></iframe>', label="How this shader originally renders")
|
|
|
465 |
our_embed = gr.HTML(label="glsl render of the current code")
|
466 |
sample_code = gr.Code(label="Current Code (will update changes you generate)", language=None)
|
467 |
+
bot_md = gr.Markdown(outro_text)
|
468 |
+
|
469 |
+
|
470 |
sample_pass = gr.State(value={})
|
471 |
pipe = gr.State(value=PIPE)
|
472 |
funcs = gr.State(value=[])
|
473 |
# hist_state = gr.State(Value={})
|
474 |
# history_table = gr.JSON()
|
475 |
|
476 |
+
model_cp.submit(fn=_make_pipeline, inputs=[model_cp], outputs=[pipe]) # how can we trigger this on load?
|
477 |
+
sample_idx.release(fn=grab_sample, inputs=[sample_idx], outputs=[sample_pass, sample_code, source_embed])
|
478 |
+
gen_return_button.click(fn=alter_return, inputs=[sample_code, func_dropdown, pipe], outputs=[sample_code])
|
|
|
479 |
gen_func_button.click(fn=alter_body, inputs=[sample_code, func_dropdown, funcs, pipe], outputs=[sample_code, pipe])
|
|
|
|
|
480 |
sample_code.change(fn=list_dropdown, inputs=[sample_code], outputs=[funcs, func_dropdown]) # to update this after generation, so spans aren't messed up
|
481 |
sample_code.change(fn=make_iframe, inputs=[sample_code], outputs=[our_embed]) #twice could cause issues, find better ways.
|
|
|
|
|
|
|
482 |
site.launch()
|
requirements.txt
CHANGED
@@ -1,11 +1,8 @@
|
|
1 |
transformers
|
2 |
datasets
|
3 |
jsonlines
|
4 |
-
wgpu
|
5 |
torch
|
6 |
pillow
|
7 |
gradio
|
8 |
-
numpy
|
9 |
-
glfw
|
10 |
jupylet
|
11 |
tree-sitter
|
|
|
1 |
transformers
|
2 |
datasets
|
3 |
jsonlines
|
|
|
4 |
torch
|
5 |
pillow
|
6 |
gradio
|
|
|
|
|
7 |
jupylet
|
8 |
tree-sitter
|