Spaces:
Runtime error
Runtime error
frankaging
commited on
Commit
·
3d0e95b
1
Parent(s):
de8f900
claude impl
Browse files
app.py
CHANGED
|
@@ -13,7 +13,7 @@ HF_TOKEN = os.environ.get("HF_TOKEN")
|
|
| 13 |
login(token=HF_TOKEN)
|
| 14 |
|
| 15 |
MAX_MAX_NEW_TOKENS = 2048
|
| 16 |
-
DEFAULT_MAX_NEW_TOKENS =
|
| 17 |
MAX_INPUT_TOKEN_LENGTH = 4096
|
| 18 |
|
| 19 |
def load_jsonl(jsonl_path):
|
|
@@ -133,6 +133,9 @@ def generate(
|
|
| 133 |
partial_text.append(token_str)
|
| 134 |
yield "".join(partial_text)
|
| 135 |
|
|
|
|
|
|
|
|
|
|
| 136 |
def filter_concepts(search_text: str):
|
| 137 |
if not search_text.strip():
|
| 138 |
return concept_list[:500]
|
|
@@ -140,11 +143,6 @@ def filter_concepts(search_text: str):
|
|
| 140 |
return filtered[:500]
|
| 141 |
|
| 142 |
def add_concept_to_list(selected_concept, user_slider_val, current_list):
|
| 143 |
-
"""
|
| 144 |
-
Return exactly 2 values:
|
| 145 |
-
1) The updated list of concepts (list of dicts).
|
| 146 |
-
2) A Gradio update for the removal dropdown’s choices.
|
| 147 |
-
"""
|
| 148 |
if not selected_concept:
|
| 149 |
return current_list, gr.update(choices=_build_remove_choices(current_list))
|
| 150 |
|
|
@@ -156,78 +154,69 @@ def add_concept_to_list(selected_concept, user_slider_val, current_list):
|
|
| 156 |
"display_mag": user_slider_val,
|
| 157 |
"internal_mag": internal_mag,
|
| 158 |
}
|
| 159 |
-
|
|
|
|
| 160 |
return updated_list, gr.update(choices=_build_remove_choices(updated_list))
|
| 161 |
|
| 162 |
def remove_concept_from_list(selected_text, current_list):
|
| 163 |
-
"""
|
| 164 |
-
Return exactly 2 values:
|
| 165 |
-
1) The updated list of concepts (list of dicts).
|
| 166 |
-
2) A Gradio update for the removal dropdown’s choices.
|
| 167 |
-
"""
|
| 168 |
if not selected_text:
|
| 169 |
return current_list, gr.update(choices=_build_remove_choices(current_list))
|
| 170 |
-
|
|
|
|
|
|
|
| 171 |
return updated_list, gr.update(choices=_build_remove_choices(updated_list))
|
| 172 |
|
| 173 |
-
def _build_remove_choices(subspaces):
|
| 174 |
-
return [x["text"] for x in subspaces]
|
| 175 |
-
|
| 176 |
def update_dropdown_choices(search_text):
|
| 177 |
filtered = filter_concepts(search_text)
|
| 178 |
return gr.update(choices=filtered)
|
| 179 |
|
| 180 |
with gr.Blocks(css="style.css") as demo:
|
| 181 |
-
|
| 182 |
-
|
| 183 |
-
|
| 184 |
-
if pv_model and concept_list:
|
| 185 |
-
default_concept = "words related to time travel and its consequences"
|
| 186 |
-
default_subspaces = [{
|
| 187 |
-
"text": default_concept,
|
| 188 |
-
"idx": concept_id_map[default_concept],
|
| 189 |
-
"display_mag": 3,
|
| 190 |
-
"internal_mag": 150.0,
|
| 191 |
-
}]
|
| 192 |
-
|
| 193 |
-
selected_subspaces = gr.State(default_subspaces)
|
| 194 |
with gr.Row():
|
| 195 |
# Left side: bigger chat area
|
| 196 |
with gr.Column(scale=7):
|
| 197 |
chat_interface = gr.ChatInterface(
|
| 198 |
fn=generate,
|
| 199 |
-
title="
|
|
|
|
| 200 |
type="messages",
|
| 201 |
additional_inputs=[selected_subspaces],
|
| 202 |
)
|
|
|
|
| 203 |
# Right side: concept management
|
| 204 |
with gr.Column(scale=3):
|
| 205 |
-
gr.Markdown("
|
| 206 |
-
|
| 207 |
-
|
| 208 |
-
|
| 209 |
-
|
| 210 |
-
|
| 211 |
-
|
| 212 |
-
|
| 213 |
-
|
| 214 |
-
|
| 215 |
-
|
| 216 |
-
|
| 217 |
-
|
| 218 |
-
|
| 219 |
-
|
| 220 |
-
|
| 221 |
-
|
|
|
|
|
|
|
|
|
|
| 222 |
|
| 223 |
-
#
|
| 224 |
-
|
|
|
|
| 225 |
remove_dropdown = gr.Dropdown(
|
| 226 |
-
label="
|
| 227 |
-
choices=
|
| 228 |
-
multiselect=False
|
| 229 |
)
|
| 230 |
-
remove_button = gr.Button("Remove", variant="secondary")
|
| 231 |
|
| 232 |
# Wire up events
|
| 233 |
# When the search box changes, update the concept dropdown choices:
|
|
@@ -253,4 +242,5 @@ with gr.Blocks(css="style.css") as demo:
|
|
| 253 |
[selected_subspaces, remove_dropdown]
|
| 254 |
)
|
| 255 |
|
| 256 |
-
demo.launch()
|
|
|
|
|
|
| 13 |
login(token=HF_TOKEN)
|
| 14 |
|
| 15 |
MAX_MAX_NEW_TOKENS = 2048
|
| 16 |
+
DEFAULT_MAX_NEW_TOKENS = 256 # smaller default to save memory
|
| 17 |
MAX_INPUT_TOKEN_LENGTH = 4096
|
| 18 |
|
| 19 |
def load_jsonl(jsonl_path):
|
|
|
|
| 133 |
partial_text.append(token_str)
|
| 134 |
yield "".join(partial_text)
|
| 135 |
|
| 136 |
+
def _build_remove_choices(subspaces):
|
| 137 |
+
return [f"(+{x['display_mag']:.1f}*) {x['text']}" for x in subspaces]
|
| 138 |
+
|
| 139 |
def filter_concepts(search_text: str):
|
| 140 |
if not search_text.strip():
|
| 141 |
return concept_list[:500]
|
|
|
|
| 143 |
return filtered[:500]
|
| 144 |
|
| 145 |
def add_concept_to_list(selected_concept, user_slider_val, current_list):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 146 |
if not selected_concept:
|
| 147 |
return current_list, gr.update(choices=_build_remove_choices(current_list))
|
| 148 |
|
|
|
|
| 154 |
"display_mag": user_slider_val,
|
| 155 |
"internal_mag": internal_mag,
|
| 156 |
}
|
| 157 |
+
# Add to the beginning of the list
|
| 158 |
+
updated_list = [new_entry] + current_list
|
| 159 |
return updated_list, gr.update(choices=_build_remove_choices(updated_list))
|
| 160 |
|
| 161 |
def remove_concept_from_list(selected_text, current_list):
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 162 |
if not selected_text:
|
| 163 |
return current_list, gr.update(choices=_build_remove_choices(current_list))
|
| 164 |
+
|
| 165 |
+
# Remove based on the full formatted text
|
| 166 |
+
updated_list = [x for x in current_list if f"(+{x['display_mag']:.1f}*) {x['text']}" != selected_text]
|
| 167 |
return updated_list, gr.update(choices=_build_remove_choices(updated_list))
|
| 168 |
|
|
|
|
|
|
|
|
|
|
| 169 |
def update_dropdown_choices(search_text):
|
| 170 |
filtered = filter_concepts(search_text)
|
| 171 |
return gr.update(choices=filtered)
|
| 172 |
|
| 173 |
with gr.Blocks(css="style.css") as demo:
|
| 174 |
+
# Remove default subspaces
|
| 175 |
+
selected_subspaces = gr.State([])
|
| 176 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 177 |
with gr.Row():
|
| 178 |
# Left side: bigger chat area
|
| 179 |
with gr.Column(scale=7):
|
| 180 |
chat_interface = gr.ChatInterface(
|
| 181 |
fn=generate,
|
| 182 |
+
title="Language Model Concept Steering",
|
| 183 |
+
description="Steer responses by selecting concepts on the right →",
|
| 184 |
type="messages",
|
| 185 |
additional_inputs=[selected_subspaces],
|
| 186 |
)
|
| 187 |
+
|
| 188 |
# Right side: concept management
|
| 189 |
with gr.Column(scale=3):
|
| 190 |
+
gr.Markdown("## Steer Model Responses")
|
| 191 |
+
|
| 192 |
+
# Concept Search and Selection
|
| 193 |
+
with gr.Group():
|
| 194 |
+
search_box = gr.Textbox(
|
| 195 |
+
label="Search Concepts",
|
| 196 |
+
placeholder="Find concepts to steer the model (e.g. 'time travel')",
|
| 197 |
+
)
|
| 198 |
+
concept_dropdown = gr.Dropdown(
|
| 199 |
+
label="Select a Concept",
|
| 200 |
+
interactive=True,
|
| 201 |
+
)
|
| 202 |
+
concept_magnitude = gr.Slider(
|
| 203 |
+
label="Steering Intensity",
|
| 204 |
+
minimum=-5,
|
| 205 |
+
maximum=5,
|
| 206 |
+
step=0.1, # Allow 1 decimal point
|
| 207 |
+
value=3,
|
| 208 |
+
)
|
| 209 |
+
add_button = gr.Button("Add Concept to Steering")
|
| 210 |
|
| 211 |
+
# Current Steering Concepts
|
| 212 |
+
gr.Markdown("## Current Steering Concepts")
|
| 213 |
+
with gr.Group():
|
| 214 |
remove_dropdown = gr.Dropdown(
|
| 215 |
+
label="Select a Current Steering Concept to Stop",
|
| 216 |
+
choices=[],
|
| 217 |
+
multiselect=False,
|
| 218 |
)
|
| 219 |
+
remove_button = gr.Button("Remove Current Steering Concept", variant="secondary")
|
| 220 |
|
| 221 |
# Wire up events
|
| 222 |
# When the search box changes, update the concept dropdown choices:
|
|
|
|
| 242 |
[selected_subspaces, remove_dropdown]
|
| 243 |
)
|
| 244 |
|
| 245 |
+
demo.launch(share=True)
|
| 246 |
+
|