psaiops 0.0.13__py3-none-any.whl → 0.0.15__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of psaiops might be problematic. Click here for more details.

@@ -128,50 +128,69 @@ def update_computation_state(
128
128
  token_num: float,
129
129
  topk_num: float,
130
130
  topp_num: float,
131
+ token_idx: float,
132
+ layer_idx: float,
133
+ head_idx: float,
131
134
  prompt_str: str,
132
135
  device_str: str,
133
136
  model_obj: object,
134
137
  tokenizer_obj: object,
135
138
  ) -> tuple:
136
139
  # sanitize the inputs
137
- __limit = max(1, min(128, int(token_num)))
138
- __topk = max(1, min(128, int(token_num)))
139
- __topp = max(0.0, min(1.0, float(token_num)))
140
- __prompt = prompt_str.strip()
141
- __device = device_str if (device_str in ['cpu', 'cuda']) else 'cpu'
140
+ __token_num = max(1, min(128, int(token_num)))
141
+ __topk_num = max(1, min(8, int(topk_num)))
142
+ __topp_num = max(0.0, min(1.0, float(topp_num)))
143
+ __token_idx = max(0, min(__token_num, int(token_idx)))
144
+ __layer_idx = max(0, int(layer_idx))
145
+ __head_idx = max(0, int(head_idx))
146
+ __prompt_str = prompt_str.strip()
147
+ __device_str = device_str if (device_str in ['cpu', 'cuda']) else 'cpu'
142
148
  # handle all exceptions at once
143
149
  try:
144
150
  # dictionary {'input_ids': _, 'attention_mask': _}
145
- __inputs = psaiops.score.attention.lib.preprocess_token_ids(
151
+ __input_data = psaiops.score.attention.lib.preprocess_token_ids(
146
152
  tokenizer_obj=tokenizer_obj,
147
- prompt_str=__prompt,
148
- device_str=__device)
153
+ prompt_str=__prompt_str,
154
+ device_str=__device_str)
149
155
  # parse the inputs
150
- __input_dim = int(__inputs['input_ids'].shape[-1])
156
+ __input_dim = int(__input_data['input_ids'].shape[-1])
151
157
  # tensor (1, T)
152
- __outputs = psaiops.score.attention.lib.generate_token_ids(
158
+ __output_data = psaiops.score.attention.lib.generate_token_ids(
153
159
  model_obj=model_obj,
154
- input_args=__inputs,
155
- token_num=__limit,
156
- topk_num=__topk,
157
- topp_num=__topp)
160
+ input_args=__input_data,
161
+ token_num=__token_num,
162
+ topk_num=__topk_num,
163
+ topp_num=__topp_num)
158
164
  # tensor (L, S, H, T, T)
159
- __attentions = psaiops.score.attention.lib.compute_attention_weights(
165
+ __attention_data = psaiops.score.attention.lib.compute_attention_weights(
160
166
  model_obj=model_obj,
161
- token_obj=__outputs)
167
+ token_obj=__output_data)
168
+ # reduce the layer, sample, head and output token axes => tensor (T,)
169
+ __score_data = psaiops.score.attention.lib.reduce_attention_weights(
170
+ attention_data=__attention_data,
171
+ token_idx=__token_idx,
172
+ layer_idx=__layer_idx,
173
+ head_idx=__head_idx,
174
+ input_dim=__input_dim)
175
+ # translate the scores into integer labels
176
+ __labels = psaiops.score.attention.lib.postprocess_attention_scores(
177
+ attention_data=__score_data,
178
+ input_dim=__input_dim,
179
+ token_idx=__token_idx)
162
180
  # detokenize the IDs
163
181
  __tokens = psaiops.score.attention.lib.postprocess_token_ids(
164
182
  tokenizer_obj=tokenizer_obj,
165
- token_obj=__outputs)
166
- # update each component => (input, output, attention) states
183
+ token_obj=__output_data)
184
+ # update each component => (input, output, attention, highligh) states
167
185
  return (
168
186
  gradio.update(value=__tokens[:__input_dim]),
169
187
  gradio.update(value=__tokens[__input_dim:]),
170
- gradio.update(value=__attentions),)
188
+ gradio.update(value=__attention_data),
189
+ gradio.update(value=list(zip(__tokens, __labels))))
171
190
  except:
172
191
  raise Exception('Attention generation aborted with an error.')
173
192
  finally:
174
- return (gradio.update(), gradio.update(), gradio.update())
193
+ return (gradio.update(), gradio.update(), gradio.update(), gradio.update())
175
194
 
176
195
  def update_text_highlight(
177
196
  token_idx: float,
@@ -236,22 +255,16 @@ def create_app(title: str=TITLE, intro: str=INTRO, style: str=STYLE, model: str=
236
255
  # wire the input fields
237
256
  __button_block.click(
238
257
  fn=__compute,
239
- inputs=[__fields[__k] for __k in ['tokens_block', 'topk_block', 'topp_block', 'input_block']],
240
- outputs=[__fields[__k] for __k in ['input_state', 'output_state', 'attention_state']],
258
+ inputs=[__fields[__k] for __k in ['tokens_block', 'topk_block', 'topp_block', 'position_block', 'layer_block', 'head_block', 'input_block']],
259
+ outputs=[__fields[__k] for __k in ['input_state', 'output_state', 'attention_state', 'output_block']],
241
260
  queue=False,
242
261
  show_progress='full')
243
262
  __output_state.change(
244
263
  fn=update_position_range,
245
- inputs=[__position_block, __output],
264
+ inputs=[__position_block, __output_state],
246
265
  outputs=__position_block,
247
266
  queue=False,
248
267
  show_progress='hidden')
249
- __attention_state.change(
250
- fn=update_text_highlight,
251
- inputs=[__fields[__k] for __k in ['position_block', 'layer_block', 'head_block', 'input_state', 'output_state', 'attention_state']],
252
- outputs=__output_block,
253
- queue=False,
254
- show_progress='hidden')
255
268
  __position_block.change(
256
269
  fn=update_text_highlight,
257
270
  inputs=[__fields[__k] for __k in ['position_block', 'layer_block', 'head_block', 'input_state', 'output_state', 'attention_state']],
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: psaiops
3
- Version: 0.0.13
3
+ Version: 0.0.15
4
4
  Summary: Web apps to inspect & engineer NN activations.
5
5
  License: .github/LICENSE.md
6
6
  Author: apehex
@@ -7,9 +7,9 @@ psaiops/elements/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,
7
7
  psaiops/elements/data.py,sha256=vGYeMN11uP9gs8rV6aSDffE_TeIX5PmdzWGwUpdGE2Y,906
8
8
  psaiops/score/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
9
9
  psaiops/score/attention/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
- psaiops/score/attention/app.py,sha256=NB0LVbRb-B9HniSHRJSg3Z893DxhGh06UWwN1A1KKv4,11961
10
+ psaiops/score/attention/app.py,sha256=ylPOko30zqcJddNbqc2z3ZrUUqNxjw1EFbdZJbODUJ8,12655
11
11
  psaiops/score/attention/lib.py,sha256=kPLdmWCYbpMnd7fi4ZeCvxiGzJuvTKYSXgRAm_w02KA,6928
12
12
  psaiops/steer/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
13
- psaiops-0.0.13.dist-info/METADATA,sha256=kU4BWy4WEUlWemYWIZ8lDP1IQp8_T8twMP-cy5a8SV8,1222
14
- psaiops-0.0.13.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
15
- psaiops-0.0.13.dist-info/RECORD,,
13
+ psaiops-0.0.15.dist-info/METADATA,sha256=Ex3PrfxidXsUR1LOEi_zXpOj1nhBcCIDUAY-RkQsvWA,1222
14
+ psaiops-0.0.15.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
15
+ psaiops-0.0.15.dist-info/RECORD,,