Upload 3 files
Browse files- lab.py +214 -0
- theme_dropdown.py +57 -0
- themes/theme_schema@0.0.1.json +1 -0
lab.py
ADDED
@@ -0,0 +1,214 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import torch
|
2 |
+
import gradio as gr
|
3 |
+
from uuid import uuid4
|
4 |
+
from threading import Thread
|
5 |
+
from transformers import AutoTokenizer, AutoModelForCausalLM, TextIteratorStreamer
|
6 |
+
|
7 |
+
from theme_dropdown import create_theme_dropdown
|
8 |
+
|
9 |
+
|
10 |
+
model_name = "./models/red250"
|
11 |
+
max_new_tokens = 2048
|
12 |
+
device = 'cuda' if torch.cuda.is_available() else 'cpu'
|
13 |
+
|
14 |
+
|
15 |
+
DEFAULT_SYSTEM_MESSAGE = """
|
16 |
+
A chat between a curious user and an artificial intelligence assistant. The assistant gives helpful, detailed, and polite answers to the user's questions.
|
17 |
+
"""
|
18 |
+
|
19 |
+
VISION_TOKEN = '<img>'
|
20 |
+
VISION_TOKENS = '\n' + VISION_TOKEN * 32 + '\n'
|
21 |
+
EOT_TOKEN = "<EOT>"
|
22 |
+
|
23 |
+
PROMPT_TEMPLATE = "USER:{user}<EOT>ASSISTANT:{assistant}{eos_token}"
|
24 |
+
|
25 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
26 |
+
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16).to(device)
|
27 |
+
|
28 |
+
dropdown, js = create_theme_dropdown()
|
29 |
+
|
30 |
+
def get_uuid():
|
31 |
+
return str(uuid4())
|
32 |
+
|
33 |
+
|
34 |
+
def add_text(message, history):
|
35 |
+
# Append the user's message to the conversation history
|
36 |
+
return "", history + [[message, ""]]
|
37 |
+
|
38 |
+
|
39 |
+
def add_media(media, history):
|
40 |
+
media_name = media.name
|
41 |
+
media_format = media_name.split(".")[-1]
|
42 |
+
if media_format in ["jpg", "jpeg", "png"]:
|
43 |
+
media_type = "image"
|
44 |
+
history = history + [[(media_name, media_type), ""]]
|
45 |
+
return history
|
46 |
+
|
47 |
+
|
48 |
+
def convert_history_to_text(history):
|
49 |
+
conversations = []
|
50 |
+
add_vision_tokens = False
|
51 |
+
for item in history[:-1]:
|
52 |
+
if isinstance(item[0], tuple):
|
53 |
+
add_vision_tokens = True
|
54 |
+
else:
|
55 |
+
if add_vision_tokens:
|
56 |
+
conversation = PROMPT_TEMPLATE.format(
|
57 |
+
media=VISION_TOKENS,
|
58 |
+
user=item[0],
|
59 |
+
assistant=item[1],
|
60 |
+
eos_token=EOT_TOKEN,
|
61 |
+
)
|
62 |
+
add_vision_tokens = False
|
63 |
+
else:
|
64 |
+
conversation = PROMPT_TEMPLATE.format(
|
65 |
+
media='',
|
66 |
+
user=item[0],
|
67 |
+
assistant=item[1],
|
68 |
+
eos_token=EOT_TOKEN,
|
69 |
+
)
|
70 |
+
conversations.append(conversation)
|
71 |
+
|
72 |
+
text = "".join(conversations)
|
73 |
+
last = PROMPT_TEMPLATE.format(
|
74 |
+
media='',
|
75 |
+
user=history[-1][0],
|
76 |
+
assistant=history[-1][1],
|
77 |
+
eos_token='',
|
78 |
+
)
|
79 |
+
text += last
|
80 |
+
|
81 |
+
return text
|
82 |
+
|
83 |
+
|
84 |
+
def bot(history, temperature, top_k, sys_msg):
|
85 |
+
print(f"history: {history}")
|
86 |
+
|
87 |
+
# Construct the input message string for the model by concatenating the current system message and conversation history
|
88 |
+
messages = sys_msg + convert_history_to_text(history)
|
89 |
+
input_ids = tokenizer(messages, return_tensors="pt").input_ids.to(device)
|
90 |
+
streamer = TextIteratorStreamer(tokenizer, timeout=10.0, skip_prompt=True, skip_special_tokens=True)
|
91 |
+
generation_kwargs = dict(
|
92 |
+
input_ids=input_ids,
|
93 |
+
temperature=temperature,
|
94 |
+
max_new_tokens=max_new_tokens,
|
95 |
+
top_k=top_k,
|
96 |
+
streamer=streamer,
|
97 |
+
)
|
98 |
+
|
99 |
+
thread = Thread(target=model.generate, kwargs=generation_kwargs)
|
100 |
+
thread.start()
|
101 |
+
|
102 |
+
# Initialize an empty string to store the generated text
|
103 |
+
generated_text = ""
|
104 |
+
for new_text in streamer:
|
105 |
+
generated_text += new_text
|
106 |
+
history[-1][1] = generated_text
|
107 |
+
yield history
|
108 |
+
|
109 |
+
|
110 |
+
with gr.Blocks(theme='sudeepshouche/minimalist') as demo:
|
111 |
+
with gr.Row().style(equal_height=True):
|
112 |
+
with gr.Column(scale=12):
|
113 |
+
gr.Markdown(
|
114 |
+
"""
|
115 |
+
# Visual Assistant Lab
|
116 |
+
"""
|
117 |
+
)
|
118 |
+
with gr.Column(scale=2):
|
119 |
+
with gr.Box():
|
120 |
+
dropdown.render()
|
121 |
+
toggle_dark = gr.Button(value="Toggle Dark").style(full_width=True)
|
122 |
+
dropdown.change(None, dropdown, None, _js=js)
|
123 |
+
toggle_dark.click(lambda: None, None, None, _js="() => {document.body.classList.toggle('dark')}")
|
124 |
+
# conversation_id = gr.State(get_uuid)
|
125 |
+
with gr.Row():
|
126 |
+
with gr.Accordion("System Message", open=False):
|
127 |
+
sys_msg = gr.Textbox(
|
128 |
+
value=DEFAULT_SYSTEM_MESSAGE,
|
129 |
+
label="System Message",
|
130 |
+
info="Instruct the AI Assistant to set its beaviour",
|
131 |
+
show_label=False,
|
132 |
+
)
|
133 |
+
with gr.Row():
|
134 |
+
chatbot = gr.Chatbot(label="Assistant").style(height=500)
|
135 |
+
with gr.Row():
|
136 |
+
with gr.Accordion("Advanced Settings:", open=False):
|
137 |
+
with gr.Row().style(equal_height=True):
|
138 |
+
with gr.Column():
|
139 |
+
temperature = gr.Slider(
|
140 |
+
label="Temperature",
|
141 |
+
value=0.1,
|
142 |
+
minimum=0.0,
|
143 |
+
maximum=1.0,
|
144 |
+
step=0.1,
|
145 |
+
interactive=True,
|
146 |
+
info="Higher values produce more diverse outputs",
|
147 |
+
)
|
148 |
+
with gr.Column():
|
149 |
+
top_k = gr.Slider(
|
150 |
+
label="Top-k",
|
151 |
+
value=0,
|
152 |
+
minimum=0.0,
|
153 |
+
maximum=200,
|
154 |
+
step=1,
|
155 |
+
interactive=True,
|
156 |
+
info="Sample from a shortlist of top-k tokens — 0 to disable and sample from all tokens.",
|
157 |
+
)
|
158 |
+
with gr.Row().style(equal_height=True):
|
159 |
+
with gr.Column(scale=12):
|
160 |
+
msg = gr.Textbox(
|
161 |
+
label="Chat Message Box",
|
162 |
+
placeholder="Hi! Type here, Press [Enter] to send...",
|
163 |
+
show_label=False,
|
164 |
+
).style(container=False)
|
165 |
+
with gr.Column(scale=2):
|
166 |
+
send = gr.Button("Send")
|
167 |
+
with gr.Row().style(equal_height=True):
|
168 |
+
media = gr.UploadButton("Upload files", file_types=["image", "video", "audio"])
|
169 |
+
stop = gr.Button("Stop")
|
170 |
+
clear = gr.Button("Clear")
|
171 |
+
|
172 |
+
send_event = msg.submit(
|
173 |
+
fn=add_text,
|
174 |
+
inputs=[msg, chatbot],
|
175 |
+
outputs=[msg, chatbot],
|
176 |
+
queue=False,
|
177 |
+
).then(
|
178 |
+
fn=bot,
|
179 |
+
inputs=[chatbot, temperature, top_k, sys_msg],
|
180 |
+
outputs=chatbot,
|
181 |
+
queue=True,
|
182 |
+
)
|
183 |
+
|
184 |
+
media.upload(
|
185 |
+
fn=add_media,
|
186 |
+
inputs=[media, chatbot],
|
187 |
+
outputs=[chatbot],
|
188 |
+
)
|
189 |
+
|
190 |
+
send_click_event = send.click(
|
191 |
+
fn=add_text,
|
192 |
+
inputs=[msg, chatbot],
|
193 |
+
outputs=[msg, chatbot],
|
194 |
+
queue=False,
|
195 |
+
).then(
|
196 |
+
fn=bot,
|
197 |
+
inputs=[chatbot, temperature, top_k, sys_msg],
|
198 |
+
outputs=chatbot,
|
199 |
+
queue=True,
|
200 |
+
)
|
201 |
+
|
202 |
+
stop.click(
|
203 |
+
fn=None,
|
204 |
+
inputs=None,
|
205 |
+
outputs=None,
|
206 |
+
cancels=[send_event, send_click_event],
|
207 |
+
queue=False,
|
208 |
+
)
|
209 |
+
clear.click(lambda: None, None, chatbot, queue=False)
|
210 |
+
|
211 |
+
|
212 |
+
if __name__ == "__main__":
|
213 |
+
demo.queue(max_size=128, concurrency_count=2)
|
214 |
+
demo.launch()
|
theme_dropdown.py
ADDED
@@ -0,0 +1,57 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import os
|
2 |
+
import pathlib
|
3 |
+
|
4 |
+
from gradio.themes.utils import ThemeAsset
|
5 |
+
|
6 |
+
|
7 |
+
def create_theme_dropdown():
|
8 |
+
import gradio as gr
|
9 |
+
|
10 |
+
asset_path = pathlib.Path(__file__).parent / "themes"
|
11 |
+
themes = []
|
12 |
+
for theme_asset in os.listdir(str(asset_path)):
|
13 |
+
themes.append(
|
14 |
+
(ThemeAsset(theme_asset), gr.Theme.load(str(asset_path / theme_asset)))
|
15 |
+
)
|
16 |
+
|
17 |
+
def make_else_if(theme_asset):
|
18 |
+
return f"""
|
19 |
+
else if (theme == '{str(theme_asset[0].version)}') {{
|
20 |
+
var theme_css = `{theme_asset[1]._get_theme_css()}`
|
21 |
+
}}"""
|
22 |
+
|
23 |
+
head, tail = themes[0], themes[1:]
|
24 |
+
if_statement = f"""
|
25 |
+
if (theme == "{str(head[0].version)}") {{
|
26 |
+
var theme_css = `{head[1]._get_theme_css()}`
|
27 |
+
}} {" ".join(make_else_if(t) for t in tail)}
|
28 |
+
"""
|
29 |
+
|
30 |
+
latest_to_oldest = sorted([t[0] for t in themes], key=lambda asset: asset.version)[
|
31 |
+
::-1
|
32 |
+
]
|
33 |
+
latest_to_oldest = [str(t.version) for t in latest_to_oldest]
|
34 |
+
|
35 |
+
component = gr.Dropdown(
|
36 |
+
choices=latest_to_oldest,
|
37 |
+
value=latest_to_oldest[0],
|
38 |
+
render=False,
|
39 |
+
label="Select Version",
|
40 |
+
).style(container=False)
|
41 |
+
|
42 |
+
return (
|
43 |
+
component,
|
44 |
+
f"""
|
45 |
+
(theme) => {{
|
46 |
+
if (!document.querySelector('.theme-css')) {{
|
47 |
+
var theme_elem = document.createElement('style');
|
48 |
+
theme_elem.classList.add('theme-css');
|
49 |
+
document.head.appendChild(theme_elem);
|
50 |
+
}} else {{
|
51 |
+
var theme_elem = document.querySelector('.theme-css');
|
52 |
+
}}
|
53 |
+
{if_statement}
|
54 |
+
theme_elem.innerHTML = theme_css;
|
55 |
+
}}
|
56 |
+
""",
|
57 |
+
)
|
themes/theme_schema@0.0.1.json
ADDED
@@ -0,0 +1 @@
|
|
|
|
|
1 |
+
{"theme": {"_font": [{"__gradio_font__": true, "name": "Source Sans Pro", "class": "google"}, {"__gradio_font__": true, "name": "ui-sans-serif", "class": "font"}, {"__gradio_font__": true, "name": "system-ui", "class": "font"}, {"__gradio_font__": true, "name": "sans-serif", "class": "font"}], "_font_mono": [{"__gradio_font__": true, "name": "IBM Plex Mono", "class": "google"}, {"__gradio_font__": true, "name": "ui-monospace", "class": "font"}, {"__gradio_font__": true, "name": "Consolas", "class": "font"}, {"__gradio_font__": true, "name": "monospace", "class": "font"}], "_stylesheets": ["https://fonts.googleapis.com/css2?family=Source+Sans+Pro:wght@400;600&display=swap", "https://fonts.googleapis.com/css2?family=IBM+Plex+Mono:wght@400;600&display=swap"], "background_fill_primary": "white", "background_fill_primary_dark": "*neutral_950", "background_fill_secondary": "*neutral_50", "background_fill_secondary_dark": "*neutral_900", "block_background_fill": "*background_fill_primary", "block_background_fill_dark": "*neutral_800", "block_border_color": "*border_color_primary", "block_border_color_dark": "*border_color_primary", "block_border_width": "1px", "block_info_text_color": "*body_text_color_subdued", "block_info_text_color_dark": "*body_text_color_subdued", "block_info_text_size": "*text_sm", "block_info_text_weight": "400", "block_label_background_fill": "*background_fill_primary", "block_label_background_fill_dark": "*background_fill_secondary", "block_label_border_color": "*border_color_primary", "block_label_border_color_dark": "*border_color_primary", "block_label_border_width": "1px", "block_label_margin": "0", "block_label_padding": "*spacing_sm *spacing_lg", "block_label_radius": "calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px) 0", "block_label_right_radius": "0 calc(*radius_lg - 1px) 0 calc(*radius_lg - 1px)", "block_label_text_color": "*neutral_500", "block_label_text_color_dark": "*neutral_200", "block_label_text_size": "*text_sm", "block_label_text_weight": "400", "block_padding": "*spacing_xl calc(*spacing_xl + 2px)", "block_radius": "*radius_lg", "block_shadow": "none", "block_title_background_fill": "none", "block_title_border_color": "none", "block_title_border_width": "0px", "block_title_padding": "0", "block_title_radius": "none", "block_title_text_color": "*neutral_500", "block_title_text_color_dark": "*neutral_200", "block_title_text_size": "*text_md", "block_title_text_weight": "400", "body_background_fill": "*background_fill_primary", "body_background_fill_dark": "*background_fill_primary", "body_text_color": "*neutral_800", "body_text_color_dark": "*neutral_100", "body_text_color_subdued": "*neutral_400", "body_text_color_subdued_dark": "*neutral_400", "body_text_size": "*text_md", "body_text_weight": "400", "border_color_accent": "*primary_300", "border_color_accent_dark": "*neutral_600", "border_color_primary": "*neutral_200", "border_color_primary_dark": "*neutral_700", "button_border_width": "*input_border_width", "button_border_width_dark": "*input_border_width", "button_cancel_background_fill": "*button_secondary_background_fill", "button_cancel_background_fill_dark": "*button_secondary_background_fill", "button_cancel_background_fill_hover": "*button_cancel_background_fill", "button_cancel_background_fill_hover_dark": "*button_cancel_background_fill", "button_cancel_border_color": "*button_secondary_border_color", "button_cancel_border_color_dark": "*button_secondary_border_color", "button_cancel_border_color_hover": "*button_cancel_border_color", "button_cancel_border_color_hover_dark": "*button_cancel_border_color", "button_cancel_text_color": "*button_secondary_text_color", "button_cancel_text_color_dark": "*button_secondary_text_color", "button_cancel_text_color_hover": "*button_cancel_text_color", "button_cancel_text_color_hover_dark": "*button_cancel_text_color", "button_large_padding": "*spacing_lg calc(2 * *spacing_lg)", "button_large_radius": "*radius_lg", "button_large_text_size": "*text_lg", "button_large_text_weight": "600", "button_primary_background_fill": "*primary_200", "button_primary_background_fill_dark": "*primary_700", "button_primary_background_fill_hover": "*button_primary_background_fill", "button_primary_background_fill_hover_dark": "*button_primary_background_fill", "button_primary_border_color": "*primary_200", "button_primary_border_color_dark": "*primary_600", "button_primary_border_color_hover": "*button_primary_border_color", "button_primary_border_color_hover_dark": "*button_primary_border_color", "button_primary_text_color": "*primary_600", "button_primary_text_color_dark": "white", "button_primary_text_color_hover": "*button_primary_text_color", "button_primary_text_color_hover_dark": "*button_primary_text_color", "button_secondary_background_fill": "*neutral_200", "button_secondary_background_fill_dark": "*neutral_600", "button_secondary_background_fill_hover": "*button_secondary_background_fill", "button_secondary_background_fill_hover_dark": "*button_secondary_background_fill", "button_secondary_border_color": "*neutral_200", "button_secondary_border_color_dark": "*neutral_600", "button_secondary_border_color_hover": "*button_secondary_border_color", "button_secondary_border_color_hover_dark": "*button_secondary_border_color", "button_secondary_text_color": "*neutral_700", "button_secondary_text_color_dark": "white", "button_secondary_text_color_hover": "*button_secondary_text_color", "button_secondary_text_color_hover_dark": "*button_secondary_text_color", "button_shadow": "none", "button_shadow_active": "none", "button_shadow_hover": "none", "button_small_padding": "*spacing_sm calc(2 * *spacing_sm)", "button_small_radius": "*radius_lg", "button_small_text_size": "*text_md", "button_small_text_weight": "400", "button_transition": "background-color 0.2s ease", "checkbox_background_color": "*background_fill_primary", "checkbox_background_color_dark": "*neutral_800", "checkbox_background_color_focus": "*checkbox_background_color", "checkbox_background_color_focus_dark": "*checkbox_background_color", "checkbox_background_color_hover": "*checkbox_background_color", "checkbox_background_color_hover_dark": "*checkbox_background_color", "checkbox_background_color_selected": "*secondary_600", "checkbox_background_color_selected_dark": "*secondary_600", "checkbox_border_color": "*neutral_300", "checkbox_border_color_dark": "*neutral_700", "checkbox_border_color_focus": "*secondary_500", "checkbox_border_color_focus_dark": "*secondary_500", "checkbox_border_color_hover": "*neutral_300", "checkbox_border_color_hover_dark": "*neutral_600", "checkbox_border_color_selected": "*secondary_600", "checkbox_border_color_selected_dark": "*secondary_600", "checkbox_border_radius": "*radius_sm", "checkbox_border_width": "*input_border_width", "checkbox_border_width_dark": "*input_border_width", "checkbox_check": "url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e\")", "checkbox_label_background_fill": "*button_secondary_background_fill", "checkbox_label_background_fill_dark": "*button_secondary_background_fill", "checkbox_label_background_fill_hover": "*button_secondary_background_fill_hover", "checkbox_label_background_fill_hover_dark": "*button_secondary_background_fill_hover", "checkbox_label_background_fill_selected": "*checkbox_label_background_fill", "checkbox_label_background_fill_selected_dark": "*checkbox_label_background_fill", "checkbox_label_border_color": "*border_color_primary", "checkbox_label_border_color_dark": "*border_color_primary", "checkbox_label_border_color_hover": "*checkbox_label_border_color", "checkbox_label_border_color_hover_dark": "*checkbox_label_border_color", "checkbox_label_border_width": "*input_border_width", "checkbox_label_border_width_dark": "*input_border_width", "checkbox_label_gap": "*spacing_lg", "checkbox_label_padding": "*spacing_md calc(2 * *spacing_md)", "checkbox_label_shadow": "none", "checkbox_label_text_color": "*body_text_color", "checkbox_label_text_color_dark": "*body_text_color", "checkbox_label_text_color_selected": "*checkbox_label_text_color", "checkbox_label_text_color_selected_dark": "*checkbox_label_text_color", "checkbox_label_text_size": "*text_md", "checkbox_label_text_weight": "400", "checkbox_shadow": "*input_shadow", "color_accent": "*primary_500", "color_accent_soft": "*primary_50", "color_accent_soft_dark": "*neutral_700", "container_radius": "*radius_lg", "embed_radius": "*radius_lg", "error_background_fill": "#fee2e2", "error_background_fill_dark": "*background_fill_primary", "error_border_color": "#fecaca", "error_border_color_dark": "*border_color_primary", "error_border_width": "1px", "error_text_color": "#ef4444", "error_text_color_dark": "#ef4444", "font": "'Source Sans Pro', 'ui-sans-serif', 'system-ui', sans-serif", "font_mono": "'IBM Plex Mono', 'ui-monospace', 'Consolas', monospace", "form_gap_width": "0px", "input_background_fill": "*neutral_100", "input_background_fill_dark": "*neutral_700", "input_background_fill_focus": "*secondary_500", "input_background_fill_focus_dark": "*secondary_600", "input_background_fill_hover": "*input_background_fill", "input_background_fill_hover_dark": "*input_background_fill", "input_border_color": "*border_color_primary", "input_border_color_dark": "*border_color_primary", "input_border_color_focus": "*secondary_300", "input_border_color_focus_dark": "*neutral_700", "input_border_color_hover": "*input_border_color", "input_border_color_hover_dark": "*input_border_color", "input_border_width": "0px", "input_padding": "*spacing_xl", "input_placeholder_color": "*neutral_400", "input_placeholder_color_dark": "*neutral_500", "input_radius": "*radius_lg", "input_shadow": "none", "input_shadow_focus": "*input_shadow", "input_text_size": "*text_md", "input_text_weight": "400", "layout_gap": "*spacing_xxl", "link_text_color": "*secondary_600", "link_text_color_active": "*secondary_600", "link_text_color_active_dark": "*secondary_500", "link_text_color_dark": "*secondary_500", "link_text_color_hover": "*secondary_700", "link_text_color_hover_dark": "*secondary_400", "link_text_color_visited": "*secondary_500", "link_text_color_visited_dark": "*secondary_600", "loader_color": "*color_accent", "name": "base", "neutral_100": "#f3f4f6", "neutral_200": "#e5e7eb", "neutral_300": "#d1d5db", "neutral_400": "#9ca3af", "neutral_50": "#f9fafb", "neutral_500": "#6b7280", "neutral_600": "#4b5563", "neutral_700": "#374151", "neutral_800": "#1f2937", "neutral_900": "#111827", "neutral_950": "#0b0f19", "panel_background_fill": "*background_fill_secondary", "panel_background_fill_dark": "*background_fill_secondary", "panel_border_color": "*border_color_primary", "panel_border_color_dark": "*border_color_primary", "panel_border_width": "0", "primary_100": "#dbeafe", "primary_200": "#bfdbfe", "primary_300": "#93c5fd", "primary_400": "#60a5fa", "primary_50": "#eff6ff", "primary_500": "#3b82f6", "primary_600": "#2563eb", "primary_700": "#1d4ed8", "primary_800": "#1e40af", "primary_900": "#1e3a8a", "primary_950": "#1d3660", "prose_header_text_weight": "600", "prose_text_size": "*text_md", "prose_text_weight": "400", "radio_circle": "url(\"data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e\")", "radius_lg": "8px", "radius_md": "6px", "radius_sm": "4px", "radius_xl": "12px", "radius_xs": "2px", "radius_xxl": "22px", "radius_xxs": "1px", "secondary_100": "#dbeafe", "secondary_200": "#bfdbfe", "secondary_300": "#93c5fd", "secondary_400": "#60a5fa", "secondary_50": "#eff6ff", "secondary_500": "#3b82f6", "secondary_600": "#2563eb", "secondary_700": "#1d4ed8", "secondary_800": "#1e40af", "secondary_900": "#1e3a8a", "secondary_950": "#1d3660", "section_header_text_size": "*text_md", "section_header_text_weight": "400", "shadow_drop": "rgba(0,0,0,0.05) 0px 1px 2px 0px", "shadow_drop_lg": "0 1px 3px 0 rgb(0 0 0 / 0.1), 0 1px 2px -1px rgb(0 0 0 / 0.1)", "shadow_inset": "rgba(0,0,0,0.05) 0px 2px 4px 0px inset", "shadow_spread": "3px", "shadow_spread_dark": "1px", "slider_color": "auto", "spacing_lg": "8px", "spacing_md": "6px", "spacing_sm": "4px", "spacing_xl": "10px", "spacing_xs": "2px", "spacing_xxl": "16px", "spacing_xxs": "1px", "stat_background_fill": "*primary_300", "stat_background_fill_dark": "*primary_500", "table_border_color": "*neutral_300", "table_border_color_dark": "*neutral_700", "table_even_background_fill": "white", "table_even_background_fill_dark": "*neutral_950", "table_odd_background_fill": "*neutral_50", "table_odd_background_fill_dark": "*neutral_900", "table_radius": "*radius_lg", "table_row_focus": "*color_accent_soft", "table_row_focus_dark": "*color_accent_soft", "text_lg": "16px", "text_md": "14px", "text_sm": "12px", "text_xl": "22px", "text_xs": "10px", "text_xxl": "26px", "text_xxs": "9px"}, "version": "0.0.1"}
|