rug logo and codegen fixes
Browse files- contents.py +2 -2
- img/rug_logo_white_contour.png +0 -0
- presets.py +48 -43
contents.py
CHANGED
|
@@ -56,7 +56,7 @@ example_explanation = """
|
|
| 56 |
</ol>
|
| 57 |
<h2>Using PECoRe from Python with Inseq</h3>
|
| 58 |
<p>This demo is useful for testing out various models and methods for PECoRe attribution, but the <a href="https://inseq.org/en/latest/main_classes/cli.html#attribute-context"><code>inseq attribute-context</code></a> CLI command is the way to go if you want to run experiments on several examples, or if you want to exploit the full customizability of the Inseq API.</p>
|
| 59 |
-
<p>The utility we provide in this section allows you to generate Python and Shell code calling the Inseq CLI with the parameters you set in the interface.
|
| 60 |
<p>Once you are satisfied with the parameters you set (including context/query strings in the <code>π Demo</code> tab), just press the button and get your code snippets ready for usage! π€</p>
|
| 61 |
"""
|
| 62 |
|
|
@@ -107,7 +107,7 @@ If you use the Inseq implementation of PECoRe (<a href="https://inseq.org/en/lat
|
|
| 107 |
|
| 108 |
powered_by = """<div class="footer-custom-block"><b>Powered by</b> <a href='https://github.com/inseq-team/inseq' target='_blank'><img src="file/img/inseq_logo_white_contour.png" width=150px /></a></div>"""
|
| 109 |
|
| 110 |
-
support = """<div class="footer-custom-block"><b>
|
| 111 |
|
| 112 |
examples = [
|
| 113 |
[
|
|
|
|
| 56 |
</ol>
|
| 57 |
<h2>Using PECoRe from Python with Inseq</h3>
|
| 58 |
<p>This demo is useful for testing out various models and methods for PECoRe attribution, but the <a href="https://inseq.org/en/latest/main_classes/cli.html#attribute-context"><code>inseq attribute-context</code></a> CLI command is the way to go if you want to run experiments on several examples, or if you want to exploit the full customizability of the Inseq API.</p>
|
| 59 |
+
<p>The utility we provide in this section allows you to generate Python and Shell code calling the Inseq CLI with the parameters you set in the interface. <b>We recommend using the Python version for repeated evaluation, since it allows for model-preloading.</b></p>
|
| 60 |
<p>Once you are satisfied with the parameters you set (including context/query strings in the <code>π Demo</code> tab), just press the button and get your code snippets ready for usage! π€</p>
|
| 61 |
"""
|
| 62 |
|
|
|
|
| 107 |
|
| 108 |
powered_by = """<div class="footer-custom-block"><b>Powered by</b> <a href='https://github.com/inseq-team/inseq' target='_blank'><img src="file/img/inseq_logo_white_contour.png" width=150px /></a></div>"""
|
| 109 |
|
| 110 |
+
support = """<div class="footer-custom-block"><b>Built by <a href="https://gsarti.com" target="_blank">Gabriele Sarti</a> with the support of</b> <a href='https://www.rug.nl/research/clcg/research/cl/' target='_blank'><img src="file/img/rug_logo_white_contour.png" width=170px /></a><a href='https://projects.illc.uva.nl/indeep/' target='_blank'><img src="file/img/indeep_logo_white_contour.png" width=100px /></a><a href='https://www.esciencecenter.nl/' target='_blank'><img src="file/img/escience_logo_white_contour.png" width=120px /></a></div>"""
|
| 111 |
|
| 112 |
examples = [
|
| 113 |
[
|
img/rug_logo_white_contour.png
ADDED
|
presets.py
CHANGED
|
@@ -105,9 +105,31 @@ def update_code_snippets_fn(
|
|
| 105 |
generation_kwargs: str,
|
| 106 |
attribution_kwargs: str,
|
| 107 |
) -> tuple[str, str]:
|
| 108 |
-
|
|
|
|
|
|
|
| 109 |
kwargs_dict = json.loads(kwargs)
|
| 110 |
return nl + pad + name + '=' + str(kwargs_dict) + ',' if kwargs_dict else ''
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 111 |
nl = "\n"
|
| 112 |
tq = "\"\"\""
|
| 113 |
# Python
|
|
@@ -117,59 +139,42 @@ from inseq.commands.attribute_context import attribute_context_with_model
|
|
| 117 |
|
| 118 |
inseq_model = inseq.load_model(
|
| 119 |
"{model_name_or_path}",
|
| 120 |
-
"{attribution_method}",{
|
| 121 |
)
|
| 122 |
|
| 123 |
pecore_args = AttributeContextArgs(
|
| 124 |
-
save_path="pecore_output.json",
|
| 125 |
-
viz_path="pecore_output.html",
|
| 126 |
model_name_or_path="{model_name_or_path}",
|
| 127 |
attribution_method="{attribution_method}",
|
| 128 |
attributed_fn="{attributed_fn}",
|
| 129 |
context_sensitivity_metric="{context_sensitivity_metric}",
|
| 130 |
-
|
| 131 |
-
|
| 132 |
-
|
| 133 |
-
input_current_text=\"\"\"{input_current_text}\"\"\",
|
| 134 |
-
input_template=\"\"\"{input_template}\"\"\",
|
| 135 |
-
output_template="{output_template}",
|
| 136 |
contextless_input_current_text=\"\"\"{contextless_input_template}\"\"\",
|
|
|
|
| 137 |
contextless_output_current_text=\"\"\"{contextless_output_template}\"\"\",
|
| 138 |
-
|
| 139 |
-
|
| 140 |
-
|
| 141 |
-
output_context_text={tq + output_context_text + tq if output_context_text else None},
|
| 142 |
-
output_current_text={tq + output_current_text + tq if output_current_text else None},
|
| 143 |
-
decoder_input_output_separator={tq + decoder_input_output_separator + tq if decoder_input_output_separator else None},{get_kwargs_str(model_kwargs, "model_kwargs")}{get_kwargs_str(tokenizer_kwargs, "tokenizer_kwargs")}{get_kwargs_str(generation_kwargs, "generation_kwargs")}{get_kwargs_str(attribution_kwargs, "attribution_kwargs")}
|
| 144 |
)
|
|
|
|
| 145 |
out = attribute_context_with_model(pecore_args, loaded_model)"""
|
| 146 |
# Bash
|
| 147 |
-
bash = f"""pip install inseq
|
| 148 |
-
inseq attribute-context
|
| 149 |
-
--
|
| 150 |
-
--
|
| 151 |
-
--
|
| 152 |
-
--
|
| 153 |
-
--
|
| 154 |
-
--
|
| 155 |
-
--
|
| 156 |
-
--
|
| 157 |
-
--
|
| 158 |
-
--
|
| 159 |
-
--
|
| 160 |
-
--
|
| 161 |
-
--
|
| 162 |
-
|
| 163 |
-
--context-sensitivity-topk {context_sensitivity_topk if context_sensitivity_topk > 0 else None} \\
|
| 164 |
-
--attribution-topk {attribution_topk if attribution_topk > 0 else None} \\
|
| 165 |
-
--input-context-text "{input_context_text}" \\
|
| 166 |
-
--output-context-text "{output_context_text}" \\
|
| 167 |
-
--output-current-text "{output_current_text}" \\
|
| 168 |
-
--decoder-input-output-separator "{decoder_input_output_separator}" \\
|
| 169 |
-
--model-kwargs "{str(model_kwargs).replace(nl, "")}" \\
|
| 170 |
-
--tokenizer-kwargs "{str(tokenizer_kwargs).replace(nl, "")} \\
|
| 171 |
-
--generation-kwargs "{str(generation_kwargs).replace(nl, "")}" \\
|
| 172 |
-
--attribution-kwargs "{str(attribution_kwargs).replace(nl, "")}"
|
| 173 |
-
"""
|
| 174 |
return python, bash
|
| 175 |
|
|
|
|
| 105 |
generation_kwargs: str,
|
| 106 |
attribution_kwargs: str,
|
| 107 |
) -> tuple[str, str]:
|
| 108 |
+
if not input_current_text:
|
| 109 |
+
input_current_text = "<MISSING INPUT CURRENT TEXT, REQUIRED>"
|
| 110 |
+
def py_get_kwargs_str(kwargs: str, name: str, pad: str = " " * 4) -> str:
|
| 111 |
kwargs_dict = json.loads(kwargs)
|
| 112 |
return nl + pad + name + '=' + str(kwargs_dict) + ',' if kwargs_dict else ''
|
| 113 |
+
def py_get_if_specified(arg: str | int | float | list | None, name: str, pad: str = " " * 4) -> str:
|
| 114 |
+
if arg is None or (isinstance(arg, (str, list)) and not arg) or (isinstance(arg, (int, float)) and arg <= 0):
|
| 115 |
+
return ""
|
| 116 |
+
elif isinstance(arg, str):
|
| 117 |
+
return nl + pad + name + "=" + tq + arg + tq + ","
|
| 118 |
+
elif isinstance(arg, list):
|
| 119 |
+
return nl + pad + name + "=" + str(arg) + ","
|
| 120 |
+
else:
|
| 121 |
+
return nl + pad + name + "=" + str(arg) + ","
|
| 122 |
+
def sh_get_kwargs_str(kwargs: str, name: str, pad: str = " " * 4) -> str:
|
| 123 |
+
return nl + pad + f"--{name} " + '"' + str(kwargs).replace("\n", "").replace('"', '\\"') + '"' + " \\\\" if json.loads(kwargs) else ''
|
| 124 |
+
def sh_get_if_specified(arg: str | int | float | list | None, name: str, pad: str = " " * 4) -> str:
|
| 125 |
+
if arg is None or (isinstance(arg, (str, list)) and not arg) or (isinstance(arg, (int, float)) and arg <= 0):
|
| 126 |
+
return ""
|
| 127 |
+
elif isinstance(arg, str):
|
| 128 |
+
return nl + pad + f"--{name} " + '"' + arg.replace('"', '\\"') + '"' + " \\\\"
|
| 129 |
+
elif isinstance(arg, list):
|
| 130 |
+
return nl + pad + f"--{name} " + " ".join(str(arg)) + " \\\\"
|
| 131 |
+
else:
|
| 132 |
+
return nl + pad + f"--{name} " + str(arg) + " \\\\"
|
| 133 |
nl = "\n"
|
| 134 |
tq = "\"\"\""
|
| 135 |
# Python
|
|
|
|
| 139 |
|
| 140 |
inseq_model = inseq.load_model(
|
| 141 |
"{model_name_or_path}",
|
| 142 |
+
"{attribution_method}",{py_get_kwargs_str(model_kwargs, "model_kwargs")}{py_get_kwargs_str(tokenizer_kwargs, "tokenizer_kwargs")}
|
| 143 |
)
|
| 144 |
|
| 145 |
pecore_args = AttributeContextArgs(
|
|
|
|
|
|
|
| 146 |
model_name_or_path="{model_name_or_path}",
|
| 147 |
attribution_method="{attribution_method}",
|
| 148 |
attributed_fn="{attributed_fn}",
|
| 149 |
context_sensitivity_metric="{context_sensitivity_metric}",
|
| 150 |
+
context_sensitivity_std_threshold={context_sensitivity_std_threshold},{py_get_if_specified(context_sensitivity_topk, "context_sensitivity_topk")}
|
| 151 |
+
attribution_std_threshold={attribution_std_threshold},{py_get_if_specified(attribution_topk, "attribution_topk")}
|
| 152 |
+
input_current_text=\"\"\"{input_current_text}\"\"\",{py_get_if_specified(input_context_text, "input_context_text")}
|
|
|
|
|
|
|
|
|
|
| 153 |
contextless_input_current_text=\"\"\"{contextless_input_template}\"\"\",
|
| 154 |
+
input_template=\"\"\"{input_template}\"\"\",{py_get_if_specified(output_current_text, "output_current_text")}{py_get_if_specified(output_context_text, "output_context_text")}
|
| 155 |
contextless_output_current_text=\"\"\"{contextless_output_template}\"\"\",
|
| 156 |
+
output_template="{output_template}",{py_get_if_specified(special_tokens_to_keep, "special_tokens_to_keep")}{py_get_if_specified(decoder_input_output_separator, "decoder_input_output_separator")}
|
| 157 |
+
save_path="pecore_output.json",
|
| 158 |
+
viz_path="pecore_output.html",{py_get_kwargs_str(model_kwargs, "model_kwargs")}{py_get_kwargs_str(tokenizer_kwargs, "tokenizer_kwargs")}{py_get_kwargs_str(generation_kwargs, "generation_kwargs")}{py_get_kwargs_str(attribution_kwargs, "attribution_kwargs")}
|
|
|
|
|
|
|
|
|
|
| 159 |
)
|
| 160 |
+
|
| 161 |
out = attribute_context_with_model(pecore_args, loaded_model)"""
|
| 162 |
# Bash
|
| 163 |
+
bash = f"""# pip install inseq
|
| 164 |
+
inseq attribute-context \\\\
|
| 165 |
+
--model-name-or-path "{model_name_or_path}" \\\\
|
| 166 |
+
--attribution-method "{attribution_method}" \\\\
|
| 167 |
+
--attributed-fn "{attributed_fn}" \\\\
|
| 168 |
+
--context-sensitivity-metric "{context_sensitivity_metric}" \\\\
|
| 169 |
+
--context-sensitivity-std-threshold {context_sensitivity_std_threshold} \\\\{sh_get_if_specified(context_sensitivity_topk, "context-sensitivity-topk")}
|
| 170 |
+
--attribution-std-threshold {attribution_std_threshold} \\\\{sh_get_if_specified(attribution_topk, "attribution-topk")}
|
| 171 |
+
--input-current-text "{input_current_text}" \\\\{sh_get_if_specified(input_context_text, "input-context-text")}
|
| 172 |
+
--contextless-input-current-text "{contextless_input_template}" \\\\
|
| 173 |
+
--input-template "{input_template}" \\\\{sh_get_if_specified(output_current_text, "output-current-text")}{sh_get_if_specified(output_context_text, "output-context-text")}
|
| 174 |
+
--contextless-output-current-text "{contextless_output_template}" \\\\
|
| 175 |
+
--output-template "{output_template}" \\\\{sh_get_if_specified(special_tokens_to_keep, "special_tokens_to_keep")}{sh_get_if_specified(decoder_input_output_separator, "decoder-input-output-separator")}
|
| 176 |
+
--save-path pecore_output.json \\\\
|
| 177 |
+
--viz-path pecore_output.html \\\\{sh_get_kwargs_str(model_kwargs, "model-kwargs")}{sh_get_kwargs_str(tokenizer_kwargs, "tokenizer-kwargs")}{sh_get_kwargs_str(generation_kwargs, "generation-kwargs")}{sh_get_kwargs_str(attribution_kwargs, "attribution-kwargs")}
|
| 178 |
+
"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 179 |
return python, bash
|
| 180 |
|