From 873f9e37d66e310babd190ba2c17c7abd754c5f0 Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Sat, 24 May 2025 16:46:21 -0400 Subject: [PATCH 01/12] add interval parsing --- ...ing.anomalies.parse_anomaly_response.json} | 12 +- sigllm/primitives/prompting/anomalies.py | 70 ++++++++ sigllm/primitives/transformation.py | 41 ----- tests/primitives/prompting/test_anomalies.py | 159 +++++++++++++++++- tests/primitives/test_transformation.py | 55 ------ 5 files changed, 237 insertions(+), 100 deletions(-) rename sigllm/primitives/jsons/{sigllm.primitives.transformation.parse_anomaly_response.json => sigllm.primitives.prompting.anomalies.parse_anomaly_response.json} (63%) diff --git a/sigllm/primitives/jsons/sigllm.primitives.transformation.parse_anomaly_response.json b/sigllm/primitives/jsons/sigllm.primitives.prompting.anomalies.parse_anomaly_response.json similarity index 63% rename from sigllm/primitives/jsons/sigllm.primitives.transformation.parse_anomaly_response.json rename to sigllm/primitives/jsons/sigllm.primitives.prompting.anomalies.parse_anomaly_response.json index a7ff470..13b327d 100644 --- a/sigllm/primitives/jsons/sigllm.primitives.transformation.parse_anomaly_response.json +++ b/sigllm/primitives/jsons/sigllm.primitives.prompting.anomalies.parse_anomaly_response.json @@ -1,5 +1,5 @@ { - "name": "sigllm.primitives.transformation.parse_anomaly_response", + "name": "sigllm.primitives.prompting.anomalies.parse_anomaly_response", "contributors": ["Salim Cherkaoui"], "description": "Parse LLM responses to extract anomaly values from text format.", "classifiers": { @@ -7,7 +7,7 @@ "subtype": "parser" }, "modalities": ["text"], - "primitive": "sigllm.primitives.transformation.parse_anomaly_response", + "primitive": "sigllm.primitives.prompting.anomalies.parse_anomaly_response", "produce": { "args": [ { @@ -21,5 +21,13 @@ "type": "ndarray" } ] + }, + "hyperparameters": { + "fixed": { + "interval": { + "type": "bool", + "default": false + } + } } } \ No newline at end of file diff --git a/sigllm/primitives/prompting/anomalies.py b/sigllm/primitives/prompting/anomalies.py index 82c462f..cf646d8 100644 --- a/sigllm/primitives/prompting/anomalies.py +++ b/sigllm/primitives/prompting/anomalies.py @@ -4,9 +4,79 @@ This module contains functions that help filter LLMs results to get the final anomalies. """ +import ast +import re import numpy as np +PATTERN = r'\[([\d\s,]+)\]' + +def _clean_response(text): + text = text.strip().lower() + text = re.sub(r",+", ",", text) + + if 'no anomalies' in text or 'no anomaly' in text: + return '' + + return text + +def _parse_list_response(text): + clean = _clean_response(text) + + # match anything that consists of digits and commas + match = re.search(PATTERN, clean) + + if match: + values = match.group(1) + values = [val.strip() for val in values.split(',') if val.strip()] + return ','.join(values) + + return '' + +def _parse_interval_response(text): + clean = _clean_response(text) + match = re.finditer(PATTERN, clean) + + if match: + values = list() + for m in match: + interval = ast.literal_eval(m.group()) + if len(interval) == 2: + start, end = ast.literal_eval(m.group()) + values.extend(list(range(start, end+1))) + + return values + + return [] + +def parse_anomaly_response(X, interval=False): + """Parse a list of lists of LLM responses to extract anomaly values and format them as strings. + + Args: + X (List[List[str]]): + List of lists of response texts from the LLM in the format + "Answer: no anomalies" or "Answer: [val1, val2, ..., valN]." + values must be within brackets. + interval (bool): + Whether to parse the response as a list "Answer: [val1, val2, ..., valN]." + or list of intervals "Answer: [[s1, e1], [s2, e2], ..., [sn, en]]." + + Returns: + List[List[str]]: + List of lists of parsed responses where each element is either + "val1,val2,...,valN" if anomalies are found, or empty string if + no anomalies are present. + """ + method = _parse_list_response + if interval: + method = _parse_interval_response + + result = [] + for response_list in X: + parsed_list = [method(response) for response in response_list] + result.append(parsed_list) + + return result def val2idx(y, X): """Convert detected anomalies values into indices. diff --git a/sigllm/primitives/transformation.py b/sigllm/primitives/transformation.py index b8ee151..5965861 100644 --- a/sigllm/primitives/transformation.py +++ b/sigllm/primitives/transformation.py @@ -184,44 +184,3 @@ def transform(self, X, minimum=0, decimal=2): values = X * 10 ** (-decimal) return values + minimum - - -def parse_anomaly_response(X): - """Parse a list of lists of LLM responses to extract anomaly values and format them as strings. - - Args: - X (List[List[str]]): - List of lists of response texts from the LLM in the format - "Answer: no anomalies" or "Answer: [val1, val2, ..., valN]." - values must be within brackets. - - Returns: - List[List[str]]: - List of lists of parsed responses where each element is either - "val1,val2,...,valN" if anomalies are found, or empty string if - no anomalies are present. - """ - - def _parse_single_response(text): - text = text.strip().lower() - - if 'no anomalies' in text or 'no anomaly' in text: - return '' - - # match anything that consists of digits and commas - pattern = r'\[([\d\s,]+)\]' - match = re.search(pattern, text) - - if match: - values = match.group(1) - values = [val.strip() for val in values.split(',') if val.strip()] - return ','.join(values) - - return '' - - result = [] - for response_list in X: - parsed_list = [_parse_single_response(response) for response in response_list] - result.append(parsed_list) - - return result diff --git a/tests/primitives/prompting/test_anomalies.py b/tests/primitives/prompting/test_anomalies.py index 4722123..9cf37cc 100644 --- a/tests/primitives/prompting/test_anomalies.py +++ b/tests/primitives/prompting/test_anomalies.py @@ -1,4 +1,5 @@ # -*- coding: utf-8 -*- +import unittest import numpy as np from pytest import fixture @@ -8,6 +9,10 @@ format_anomalies, merge_anomalous_sequences, val2idx, + _clean_response, + _parse_list_response, + _parse_interval_response, + parse_anomaly_response ) @@ -100,10 +105,160 @@ def test_val2idx(anomalous_val, windows): # timestamp2interval - - def test_format_anomalies(idx_list, timestamp): expected = [(1000, 1820, 0), (5950, 6950, 0), (7390, 8390, 0), (11530, 12840, 0)] result = format_anomalies(idx_list, timestamp) assert expected == result + + +def test_clean_response_no_anomalies(): + test_cases = [ + "no anomalies", + "NO ANOMALIES", + " no anomalies ", + "There are no anomalies in this data", + "No anomaly detected", + " No anomaly ", + ] + for text in test_cases: + assert _clean_response(text) == "" + + +def test_clean_response_with_anomalies(): + test_cases = [ + ("[1, 2, 3]", "[1, 2, 3]"), + (" [1, 2, 3] ", "[1, 2, 3]"), + ("Anomalies found at [1, 2, 3]", "anomalies found at [1, 2, 3]"), + ("ANOMALIES AT [1, 2, 3]", "anomalies at [1, 2, 3]"), + ] + for input_text, expected in test_cases: + assert _clean_response(input_text) == expected + + +def test_parse_list_response_valid_cases(): + test_cases = [ + ("[1, 2, 3]", "1,2,3"), + (" [1, 2, 3] ", "1,2,3"), + ("Anomalies found at [1, 2, 3]", "1,2,3"), + ("[1,2,3]", "1,2,3"), + ("[1, 2, 3, 4, 5]", "1,2,3,4,5"), + ] + for input_text, expected in test_cases: + assert _parse_list_response(input_text) == expected + + +def test_parse_list_response_invalid_cases(): + test_cases = [ + "no anomalies", + "[]", + "[ ]", + "text with [no numbers]", + "text with [letters, and, symbols]", + " ", + ] + for text in test_cases: + assert _parse_list_response(text) == "" + + +def test_parse_list_response_edge_cases(): + test_cases = [ + ("[1,2,3,]", "1,2,3"), # trailing comma + ("[1,,2,3]", "1,2,3"), # double comma + ("[1, 2, 3], [5]", "1,2,3") # two lists + ] + for input_text, expected in test_cases: + assert _parse_list_response(input_text) == expected + + +def test_parse_interval_response_valid_cases(): + test_cases = [ + ("[[1, 3]]", [1, 2, 3]), + (" [[1, 3]] ", [1, 2, 3]), + ("Anomalies found at [[1, 3]]", [1, 2, 3]), + ("[[1, 3], [5, 7]]", [1, 2, 3, 5, 6, 7]), + ("[[1, 3], [5, 7], [8, 9]]", [1, 2, 3, 5, 6, 7, 8, 9]), + ("[[1, 3], [4, 6],]", [1, 2, 3, 4, 5, 6]), + ("[[1, 2], [3]]", [1, 2]), + ("[[1,,3]]", [1, 2, 3]), + ("[[0, 10]]", list(range(11))) + ] + for input_text, expected in test_cases: + assert _parse_interval_response(input_text) == expected + + +def test_parse_interval_response_invalid_cases(): + test_cases = [ + "[]", + "[[]]", + "text with [no numbers]", + "[[1]]", # single number instead of pair + "[[1, 2, 3]]", # triple instead of pair + ] + for text in test_cases: + assert _parse_interval_response(text) == [] + + +def test_parse_interval_response_multiple_matches(): + test_cases = [ + ("Found [[1, 3]] and [[5, 7]]", [1, 2, 3, 5, 6, 7]), + ("[[1, 2]] in first part and [[3, 4]] in second", [1, 2, 3, 4]), + ("Multiple intervals: [[1, 3]], [[4, 6]], [[7, 9]]", [1, 2, 3, 4, 5, 6, 7, 8, 9]), + ("[[1, 2]] and [[1, 2]] and [[1, 2]]", [1, 2, 1, 2, 1, 2]) + ] + for input_text, expected in test_cases: + assert _parse_interval_response(input_text) == expected + + +class ParseAnomalyResponseTest(unittest.TestCase): + def test_no_anomalies(self): + data = [['Answer: no anomalies'], ['Answer: no anomaly'], ['no anomaly, with extra']] + expected = [[''], [''], ['']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) + + def test_single_anomaly(self): + data = [['Answer: [123]'], ['Answer: [456]', 'answer: [789]']] + expected = [['123'], ['456', '789']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) + + def test_multiple_anomalies(self): + data = [['Answer: [123, 456, 789]'], ['Answer: [111, 222, 333]']] + expected = [['123,456,789'], ['111,222,333']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) + + def test_mixed_responses(self): + data = [['Answer: no anomalies', 'Answer: [123, 456]'], ['Answer: [789]', 'no anomaly']] + expected = [['', '123,456'], ['789', '']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) + + def test_different_formats(self): + data = [ + ['Answer: [123, 456]', 'Answer: [ 789 , 101 ]'], + ['Answer: [1,2,3]', 'Answer: [ 4 , 5 , 6 ]'], + ] + expected = [['123,456', '789,101'], ['1,2,3', '4,5,6']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) + + def test_empty_responses(self): + data = [[''], ['Answer: no anomalies'], ['answer'], ['no anomly']] + expected = [[''], [''], [''], ['']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) + + def test_invalid_format(self): + data = [['Answer: invalid format'], ['Answer: [123, abc]']] + expected = [[''], ['']] + + output = parse_anomaly_response(data) + self.assertEqual(output, expected) \ No newline at end of file diff --git a/tests/primitives/test_transformation.py b/tests/primitives/test_transformation.py index 538ceef..29052fd 100644 --- a/tests/primitives/test_transformation.py +++ b/tests/primitives/test_transformation.py @@ -9,7 +9,6 @@ _from_string_to_integer, format_as_integer, format_as_string, - parse_anomaly_response, ) @@ -342,57 +341,3 @@ def test_float2scalar_scalar2float_integration(): output = scalar2float.transform(transformed, minimum, decimal) np.testing.assert_allclose(output, expected, rtol=1e-2) - - -class ParseAnomalyResponseTest(unittest.TestCase): - def test_no_anomalies(self): - data = [['Answer: no anomalies'], ['Answer: no anomaly'], ['no anomaly, with extra']] - expected = [[''], [''], ['']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) - - def test_single_anomaly(self): - data = [['Answer: [123]'], ['Answer: [456]', 'answer: [789]']] - expected = [['123'], ['456', '789']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) - - def test_multiple_anomalies(self): - data = [['Answer: [123, 456, 789]'], ['Answer: [111, 222, 333]']] - expected = [['123,456,789'], ['111,222,333']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) - - def test_mixed_responses(self): - data = [['Answer: no anomalies', 'Answer: [123, 456]'], ['Answer: [789]', 'no anomaly']] - expected = [['', '123,456'], ['789', '']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) - - def test_different_formats(self): - data = [ - ['Answer: [123, 456]', 'Answer: [ 789 , 101 ]'], - ['Answer: [1,2,3]', 'Answer: [ 4 , 5 , 6 ]'], - ] - expected = [['123,456', '789,101'], ['1,2,3', '4,5,6']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) - - def test_empty_responses(self): - data = [[''], ['Answer: no anomalies'], ['answer'], ['no anomly']] - expected = [[''], [''], [''], ['']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) - - def test_invalid_format(self): - data = [['Answer: invalid format'], ['Answer: [123, abc]']] - expected = [[''], ['']] - - output = parse_anomaly_response(data) - self.assertEqual(output, expected) From 69983677f4e18650235883b3e3daface3e8bc29b Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Sat, 24 May 2025 17:02:09 -0400 Subject: [PATCH 02/12] change primitive name --- sigllm/pipelines/prompter/mistral_prompter_0shot.json | 2 +- sigllm/pipelines/prompter/mistral_prompter_1shot.json | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sigllm/pipelines/prompter/mistral_prompter_0shot.json b/sigllm/pipelines/prompter/mistral_prompter_0shot.json index 40188e0..48b02c7 100644 --- a/sigllm/pipelines/prompter/mistral_prompter_0shot.json +++ b/sigllm/pipelines/prompter/mistral_prompter_0shot.json @@ -7,7 +7,7 @@ "sigllm.primitives.transformation.format_as_string", "sigllm.primitives.prompting.huggingface.HF", - "sigllm.primitives.transformation.parse_anomaly_response", + "sigllm.primitives.prompting.anomalies.parse_anomaly_response", "sigllm.primitives.transformation.format_as_integer", "sigllm.primitives.prompting.anomalies.val2idx", "sigllm.primitives.prompting.anomalies.find_anomalies_in_windows", diff --git a/sigllm/pipelines/prompter/mistral_prompter_1shot.json b/sigllm/pipelines/prompter/mistral_prompter_1shot.json index 62dc8ce..eb729a3 100644 --- a/sigllm/pipelines/prompter/mistral_prompter_1shot.json +++ b/sigllm/pipelines/prompter/mistral_prompter_1shot.json @@ -12,7 +12,7 @@ "sigllm.primitives.transformation.format_as_string", "sigllm.primitives.prompting.huggingface.HF", - "sigllm.primitives.transformation.parse_anomaly_response", + "sigllm.primitives.prompting.anomalies.parse_anomaly_response", "sigllm.primitives.transformation.format_as_integer", "sigllm.primitives.prompting.anomalies.val2idx", "sigllm.primitives.prompting.anomalies.find_anomalies_in_windows", From fe9d6ede1fed00c9f8c780e41235793fd50f5abb Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Sat, 24 May 2025 17:19:32 -0400 Subject: [PATCH 03/12] fix lint --- sigllm/primitives/prompting/anomalies.py | 12 ++- tests/primitives/prompting/test_anomalies.py | 98 ++++++++++---------- 2 files changed, 58 insertions(+), 52 deletions(-) diff --git a/sigllm/primitives/prompting/anomalies.py b/sigllm/primitives/prompting/anomalies.py index cf646d8..298cb76 100644 --- a/sigllm/primitives/prompting/anomalies.py +++ b/sigllm/primitives/prompting/anomalies.py @@ -4,6 +4,7 @@ This module contains functions that help filter LLMs results to get the final anomalies. """ + import ast import re @@ -11,15 +12,17 @@ PATTERN = r'\[([\d\s,]+)\]' + def _clean_response(text): text = text.strip().lower() - text = re.sub(r",+", ",", text) + text = re.sub(r',+', ',', text) if 'no anomalies' in text or 'no anomaly' in text: return '' return text + def _parse_list_response(text): clean = _clean_response(text) @@ -33,6 +36,7 @@ def _parse_list_response(text): return '' + def _parse_interval_response(text): clean = _clean_response(text) match = re.finditer(PATTERN, clean) @@ -43,12 +47,13 @@ def _parse_interval_response(text): interval = ast.literal_eval(m.group()) if len(interval) == 2: start, end = ast.literal_eval(m.group()) - values.extend(list(range(start, end+1))) - + values.extend(list(range(start, end + 1))) + return values return [] + def parse_anomaly_response(X, interval=False): """Parse a list of lists of LLM responses to extract anomaly values and format them as strings. @@ -78,6 +83,7 @@ def parse_anomaly_response(X, interval=False): return result + def val2idx(y, X): """Convert detected anomalies values into indices. diff --git a/tests/primitives/prompting/test_anomalies.py b/tests/primitives/prompting/test_anomalies.py index 9cf37cc..e494680 100644 --- a/tests/primitives/prompting/test_anomalies.py +++ b/tests/primitives/prompting/test_anomalies.py @@ -5,14 +5,14 @@ from pytest import fixture from sigllm.primitives.prompting.anomalies import ( + _clean_response, + _parse_interval_response, + _parse_list_response, find_anomalies_in_windows, format_anomalies, merge_anomalous_sequences, + parse_anomaly_response, val2idx, - _clean_response, - _parse_list_response, - _parse_interval_response, - parse_anomaly_response ) @@ -114,23 +114,23 @@ def test_format_anomalies(idx_list, timestamp): def test_clean_response_no_anomalies(): test_cases = [ - "no anomalies", - "NO ANOMALIES", - " no anomalies ", - "There are no anomalies in this data", - "No anomaly detected", - " No anomaly ", + 'no anomalies', + 'NO ANOMALIES', + ' no anomalies ', + 'There are no anomalies in this data', + 'No anomaly detected', + ' No anomaly ', ] for text in test_cases: - assert _clean_response(text) == "" + assert _clean_response(text) == '' def test_clean_response_with_anomalies(): test_cases = [ - ("[1, 2, 3]", "[1, 2, 3]"), - (" [1, 2, 3] ", "[1, 2, 3]"), - ("Anomalies found at [1, 2, 3]", "anomalies found at [1, 2, 3]"), - ("ANOMALIES AT [1, 2, 3]", "anomalies at [1, 2, 3]"), + ('[1, 2, 3]', '[1, 2, 3]'), + (' [1, 2, 3] ', '[1, 2, 3]'), + ('Anomalies found at [1, 2, 3]', 'anomalies found at [1, 2, 3]'), + ('ANOMALIES AT [1, 2, 3]', 'anomalies at [1, 2, 3]'), ] for input_text, expected in test_cases: assert _clean_response(input_text) == expected @@ -138,11 +138,11 @@ def test_clean_response_with_anomalies(): def test_parse_list_response_valid_cases(): test_cases = [ - ("[1, 2, 3]", "1,2,3"), - (" [1, 2, 3] ", "1,2,3"), - ("Anomalies found at [1, 2, 3]", "1,2,3"), - ("[1,2,3]", "1,2,3"), - ("[1, 2, 3, 4, 5]", "1,2,3,4,5"), + ('[1, 2, 3]', '1,2,3'), + (' [1, 2, 3] ', '1,2,3'), + ('Anomalies found at [1, 2, 3]', '1,2,3'), + ('[1,2,3]', '1,2,3'), + ('[1, 2, 3, 4, 5]', '1,2,3,4,5'), ] for input_text, expected in test_cases: assert _parse_list_response(input_text) == expected @@ -150,22 +150,22 @@ def test_parse_list_response_valid_cases(): def test_parse_list_response_invalid_cases(): test_cases = [ - "no anomalies", - "[]", - "[ ]", - "text with [no numbers]", - "text with [letters, and, symbols]", - " ", + 'no anomalies', + '[]', + '[ ]', + 'text with [no numbers]', + 'text with [letters, and, symbols]', + ' ', ] for text in test_cases: - assert _parse_list_response(text) == "" + assert _parse_list_response(text) == '' def test_parse_list_response_edge_cases(): test_cases = [ - ("[1,2,3,]", "1,2,3"), # trailing comma - ("[1,,2,3]", "1,2,3"), # double comma - ("[1, 2, 3], [5]", "1,2,3") # two lists + ('[1,2,3,]', '1,2,3'), # trailing comma + ('[1,,2,3]', '1,2,3'), # double comma + ('[1, 2, 3], [5]', '1,2,3'), # two lists ] for input_text, expected in test_cases: assert _parse_list_response(input_text) == expected @@ -173,15 +173,15 @@ def test_parse_list_response_edge_cases(): def test_parse_interval_response_valid_cases(): test_cases = [ - ("[[1, 3]]", [1, 2, 3]), - (" [[1, 3]] ", [1, 2, 3]), - ("Anomalies found at [[1, 3]]", [1, 2, 3]), - ("[[1, 3], [5, 7]]", [1, 2, 3, 5, 6, 7]), - ("[[1, 3], [5, 7], [8, 9]]", [1, 2, 3, 5, 6, 7, 8, 9]), - ("[[1, 3], [4, 6],]", [1, 2, 3, 4, 5, 6]), - ("[[1, 2], [3]]", [1, 2]), - ("[[1,,3]]", [1, 2, 3]), - ("[[0, 10]]", list(range(11))) + ('[[1, 3]]', [1, 2, 3]), + (' [[1, 3]] ', [1, 2, 3]), + ('Anomalies found at [[1, 3]]', [1, 2, 3]), + ('[[1, 3], [5, 7]]', [1, 2, 3, 5, 6, 7]), + ('[[1, 3], [5, 7], [8, 9]]', [1, 2, 3, 5, 6, 7, 8, 9]), + ('[[1, 3], [4, 6],]', [1, 2, 3, 4, 5, 6]), + ('[[1, 2], [3]]', [1, 2]), + ('[[1,,3]]', [1, 2, 3]), + ('[[0, 10]]', list(range(11))), ] for input_text, expected in test_cases: assert _parse_interval_response(input_text) == expected @@ -189,11 +189,11 @@ def test_parse_interval_response_valid_cases(): def test_parse_interval_response_invalid_cases(): test_cases = [ - "[]", - "[[]]", - "text with [no numbers]", - "[[1]]", # single number instead of pair - "[[1, 2, 3]]", # triple instead of pair + '[]', + '[[]]', + 'text with [no numbers]', + '[[1]]', # single number instead of pair + '[[1, 2, 3]]', # triple instead of pair ] for text in test_cases: assert _parse_interval_response(text) == [] @@ -201,10 +201,10 @@ def test_parse_interval_response_invalid_cases(): def test_parse_interval_response_multiple_matches(): test_cases = [ - ("Found [[1, 3]] and [[5, 7]]", [1, 2, 3, 5, 6, 7]), - ("[[1, 2]] in first part and [[3, 4]] in second", [1, 2, 3, 4]), - ("Multiple intervals: [[1, 3]], [[4, 6]], [[7, 9]]", [1, 2, 3, 4, 5, 6, 7, 8, 9]), - ("[[1, 2]] and [[1, 2]] and [[1, 2]]", [1, 2, 1, 2, 1, 2]) + ('Found [[1, 3]] and [[5, 7]]', [1, 2, 3, 5, 6, 7]), + ('[[1, 2]] in first part and [[3, 4]] in second', [1, 2, 3, 4]), + ('Multiple intervals: [[1, 3]], [[4, 6]], [[7, 9]]', [1, 2, 3, 4, 5, 6, 7, 8, 9]), + ('[[1, 2]] and [[1, 2]] and [[1, 2]]', [1, 2, 1, 2, 1, 2]), ] for input_text, expected in test_cases: assert _parse_interval_response(input_text) == expected @@ -261,4 +261,4 @@ def test_invalid_format(self): expected = [[''], ['']] output = parse_anomaly_response(data) - self.assertEqual(output, expected) \ No newline at end of file + self.assertEqual(output, expected) From 9dee38ae0332b93b82d9c705cbe908210ec49fbe Mon Sep 17 00:00:00 2001 From: sarahmish Date: Tue, 3 Jun 2025 17:46:18 -0400 Subject: [PATCH 04/12] multivariate pipeline --- ...m.primitives.prompting.huggingface.HF.json | 5 +++ ...reprocessing.rolling_window_sequences.json | 4 +++ sigllm/primitives/prompting/anomalies.py | 6 ++++ sigllm/primitives/prompting/huggingface.py | 33 +++++++++++++++---- .../prompting/huggingface_messages.json | 3 +- .../prompting/timeseries_preprocessing.py | 5 +-- 6 files changed, 47 insertions(+), 9 deletions(-) diff --git a/sigllm/primitives/jsons/sigllm.primitives.prompting.huggingface.HF.json b/sigllm/primitives/jsons/sigllm.primitives.prompting.huggingface.HF.json index b78afc8..78bf38d 100644 --- a/sigllm/primitives/jsons/sigllm.primitives.prompting.huggingface.HF.json +++ b/sigllm/primitives/jsons/sigllm.primitives.prompting.huggingface.HF.json @@ -17,6 +17,11 @@ "name": "X", "type": "ndarray" }, + { + "name": "dim", + "type": "int", + "default": 1 + }, { "name": "normal", "type": "ndarray", diff --git a/sigllm/primitives/jsons/sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences.json b/sigllm/primitives/jsons/sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences.json index 23658e8..44baca7 100644 --- a/sigllm/primitives/jsons/sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences.json +++ b/sigllm/primitives/jsons/sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences.json @@ -36,6 +36,10 @@ { "name": "step_size", "type": "int" + }, + { + "name": "dim", + "type": "int" } ] }, diff --git a/sigllm/primitives/prompting/anomalies.py b/sigllm/primitives/prompting/anomalies.py index 298cb76..64985d7 100644 --- a/sigllm/primitives/prompting/anomalies.py +++ b/sigllm/primitives/prompting/anomalies.py @@ -14,6 +14,7 @@ def _clean_response(text): + print(text) text = text.strip().lower() text = re.sub(r',+', ',', text) @@ -78,6 +79,7 @@ def parse_anomaly_response(X, interval=False): result = [] for response_list in X: + print(response_list) parsed_list = [method(response) for response in response_list] result.append(parsed_list) @@ -131,6 +133,9 @@ def find_anomalies_in_windows(y, alpha=0.5): ndarray: A 2-dimensional array containing final anomalous indices of each windows. """ + if isinstance(y, list): + y = np.array(y, dtype=object) + idx_list = [] for samples in y: min_vote = np.ceil(alpha * len(samples)) @@ -203,6 +208,7 @@ def format_anomalies(y, timestamp, padding_size=50): if len(y) == 0: return [] + y = y[y < len(timestamp)].astype(int) y = timestamp[y] # Convert list of indices into list of timestamps start, end = timestamp[0], timestamp[-1] interval = timestamp[1] - timestamp[0] diff --git a/sigllm/primitives/prompting/huggingface.py b/sigllm/primitives/prompting/huggingface.py index 301253e..03e8d08 100644 --- a/sigllm/primitives/prompting/huggingface.py +++ b/sigllm/primitives/prompting/huggingface.py @@ -1,5 +1,5 @@ # -*- coding: utf-8 -*- - +import re import json import logging import os @@ -23,6 +23,20 @@ DEFAULT_MODEL = 'mistralai/Mistral-7B-Instruct-v0.2' +def get_examples(text, k=3): + """ + Extracts the content within the first three sets of parentheses in a string. + + Args: + text (str): Input string. + + Returns: + list: + A list containing the content within the first three sets of parentheses. + """ + matches = re.findall(r'\(([^)]*)\)', text) + return matches[:k] + class HF: """Prompt Pretrained models on HuggingFace to detect anomalies in a time series. @@ -61,7 +75,7 @@ def __init__( raw=False, samples=10, padding=0, - restrict_tokens=False, + restrict_tokens=False ): self.name = name self.sep = sep @@ -72,7 +86,6 @@ def __init__( self.samples = samples self.padding = padding self.restrict_tokens = restrict_tokens - self.tokenizer = AutoTokenizer.from_pretrained(self.name, use_fast=False) # special tokens @@ -111,12 +124,14 @@ def __init__( self.model.eval() - def detect(self, X, normal=None, **kwargs): + def detect(self, X, dim=1, normal=None, **kwargs): """Use HF to detect anomalies of a signal. Args: X (ndarray): - Input sequences of strings containing signal values + Input sequences of strings containing signal values. + dim (int, optional): + Number of dimensions of the time series. Default to None. normal (str, optional): A normal reference sequence for one-shot prompting. If None, zero-shot prompting is used. Default to None. @@ -140,7 +155,13 @@ def detect(self, X, normal=None, **kwargs): if self.restrict_tokens: user_message = PROMPTS['user_message'] else: - user_message = PROMPTS['user_message_2'] + user_message = PROMPTS['user_message_unrestricted'] + + if dim > 1: + examples = get_examples(text) + examples = ' '.join([f'({ex})' for ex in examples]) + + user_message = PROMPTS['user_message_multivariate'].format(dim, examples) # Combine messages with one-shot example if provided message = ' '.join([ diff --git a/sigllm/primitives/prompting/huggingface_messages.json b/sigllm/primitives/prompting/huggingface_messages.json index e329949..3668ad1 100644 --- a/sigllm/primitives/prompting/huggingface_messages.json +++ b/sigllm/primitives/prompting/huggingface_messages.json @@ -1,6 +1,7 @@ { "system_message": "You are an expert in time series analysis. Your task is to detect anomalies in time series data.", "user_message": "Below is a [SEQUENCE], please return the anomalies in that sequence in [RESPONSE]. Only return the numbers. [SEQUENCE]", - "user_message_2": "Below is a [SEQUENCE], analyze the following time series and identify any anomalies. If you find anomalies, provide their values in the format [first_anomaly, ..., last_anomaly]. If no anomalies are found, respond with 'no anomalies'. Be concise, do not write code, do not perform any calculations, just give your answers as told.: [SEQUENCE]", + "user_message_unrestricted": "Below is a [SEQUENCE], analyze the following time series and identify any anomalies. If you find anomalies, provide their values in the format [first_anomaly, ..., last_anomaly]. If no anomalies are found, respond with 'no anomalies'. Be concise, do not write code, do not perform any calculations, just give your answers as told.: [SEQUENCE]", + "user_message_multivariate": "Below is a multivariate time series of {} dimensions with the following format \"{}\".\nYour job is to detect ranges of anomalies in this time series, in terms of the x-axis coordinates. List one by one in a list.\nFor example, if ranges (incluing two endpoints) [5, 12], [71, 74], and [105, 131], are anomalies, then output \"[[5,12], [71, 74], [105, 131]]\".\nIf no anomalies are found, respond with 'no anomalies'. Be concise, do not write code, do not perform any calculations, just give your answers as told.\n[SEQUENCE]\n", "one_shot_prefix": "Here is a normal reference of the time series: [NORMAL]" } \ No newline at end of file diff --git a/sigllm/primitives/prompting/timeseries_preprocessing.py b/sigllm/primitives/prompting/timeseries_preprocessing.py index fee3de9..82dc3a2 100644 --- a/sigllm/primitives/prompting/timeseries_preprocessing.py +++ b/sigllm/primitives/prompting/timeseries_preprocessing.py @@ -29,7 +29,8 @@ def rolling_window_sequences(X, window_size=500, step_size=100): index = range(len(X)) out_X = list() X_index = list() - + dim = X.shape[1] + start = 0 max_start = len(X) - window_size + 1 while start < max_start: @@ -37,4 +38,4 @@ def rolling_window_sequences(X, window_size=500, step_size=100): out_X.append(X[start:end]) X_index.append(index[start]) start = start + step_size - return np.asarray(out_X), np.asarray(X_index), window_size, step_size + return np.asarray(out_X), np.asarray(X_index), window_size, step_size, dim From fcda8f05e2a1ca699c35b1fc2717a8cdc015ff41 Mon Sep 17 00:00:00 2001 From: sarahmish Date: Wed, 18 Jun 2025 17:20:11 -0400 Subject: [PATCH 05/12] multivariate pipeline --- .../mistral_prompter_multivariate_0shot.json | 68 + sigllm/primitives/prompting/anomalies.py | 1 + .../prompting/huggingface_messages.json | 2 +- ...ltivariate-mistral-prompter-pipeline.ipynb | 1722 +++++++++++++++++ 4 files changed, 1792 insertions(+), 1 deletion(-) create mode 100644 sigllm/pipelines/prompter/mistral_prompter_multivariate_0shot.json create mode 100644 tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb diff --git a/sigllm/pipelines/prompter/mistral_prompter_multivariate_0shot.json b/sigllm/pipelines/prompter/mistral_prompter_multivariate_0shot.json new file mode 100644 index 0000000..3f0d608 --- /dev/null +++ b/sigllm/pipelines/prompter/mistral_prompter_multivariate_0shot.json @@ -0,0 +1,68 @@ +{ + "primitives": [ + "mlstars.custom.timeseries_preprocessing.time_segments_aggregate", + "sklearn.impute.SimpleImputer", + "sigllm.primitives.transformation.Float2Scalar", + "sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences", + "sigllm.primitives.transformation.format_as_string", + "sigllm.primitives.prompting.huggingface.HF", + "sigllm.primitives.prompting.anomalies.parse_anomaly_response", + "sigllm.primitives.prompting.anomalies.find_anomalies_in_windows", + "sigllm.primitives.prompting.anomalies.merge_anomalous_sequences", + "sigllm.primitives.prompting.anomalies.format_anomalies" + ], + "init_params": { + "mlstars.custom.timeseries_preprocessing.time_segments_aggregate#1": { + "time_column": "timestamp", + "interval": 21600, + "method": "mean" + }, + "sigllm.primitives.transformation.Float2Scalar#1": { + "decimal": 2, + "rescale": true + }, + "sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences#1": { + "window_size": 100, + "step_size": 40 + }, + "sigllm.primitives.transformation.format_as_string#1": { + "space": false + }, + "sigllm.primitives.prompting.huggingface.HF#1": { + "name": "mistralai/Mistral-7B-Instruct-v0.2", + "samples": 1, + "temp": 0.01 + }, + "sigllm.primitives.prompting.anomalies.parse_anomaly_response#1": { + "interval": true + }, + "sigllm.primitives.prompting.anomalies.find_anomalies_in_windows#1": { + "alpha": 0.4 + }, + "sigllm.primitives.prompting.anomalies.merge_anomalous_sequences#1": { + "beta": 0.5 + } + }, + "input_names": { + "sigllm.primitives.prompting.huggingface.HF#1": { + "X": "X_str" + }, + "sigllm.primitives.prompting.anomalies.parse_anomaly_response#1": { + "X": "y_hat" + } + }, + "output_names": { + "mlstars.custom.timeseries_preprocessing.time_segments_aggregate#1": { + "index": "timestamp" + }, + "sigllm.primitives.transformation.format_as_string#1": { + "X": "X_str" + }, + "sigllm.primitives.prompting.huggingface.HF#1": { + "y": "y_hat" + }, + "sigllm.primitives.prompting.anomalies.parse_anomaly_response#1": { + "X": "y" + } + } +} \ No newline at end of file diff --git a/sigllm/primitives/prompting/anomalies.py b/sigllm/primitives/prompting/anomalies.py index 21490db..fff0e4c 100644 --- a/sigllm/primitives/prompting/anomalies.py +++ b/sigllm/primitives/prompting/anomalies.py @@ -206,6 +206,7 @@ def format_anomalies(y, timestamp, padding_size=50): if len(y) == 0: return [] + print(y) y = y[y < len(timestamp)].astype(int) y = timestamp[y] # Convert list of indices into list of timestamps start, end = timestamp[0], timestamp[-1] diff --git a/sigllm/primitives/prompting/huggingface_messages.json b/sigllm/primitives/prompting/huggingface_messages.json index 3668ad1..f13c291 100644 --- a/sigllm/primitives/prompting/huggingface_messages.json +++ b/sigllm/primitives/prompting/huggingface_messages.json @@ -2,6 +2,6 @@ "system_message": "You are an expert in time series analysis. Your task is to detect anomalies in time series data.", "user_message": "Below is a [SEQUENCE], please return the anomalies in that sequence in [RESPONSE]. Only return the numbers. [SEQUENCE]", "user_message_unrestricted": "Below is a [SEQUENCE], analyze the following time series and identify any anomalies. If you find anomalies, provide their values in the format [first_anomaly, ..., last_anomaly]. If no anomalies are found, respond with 'no anomalies'. Be concise, do not write code, do not perform any calculations, just give your answers as told.: [SEQUENCE]", - "user_message_multivariate": "Below is a multivariate time series of {} dimensions with the following format \"{}\".\nYour job is to detect ranges of anomalies in this time series, in terms of the x-axis coordinates. List one by one in a list.\nFor example, if ranges (incluing two endpoints) [5, 12], [71, 74], and [105, 131], are anomalies, then output \"[[5,12], [71, 74], [105, 131]]\".\nIf no anomalies are found, respond with 'no anomalies'. Be concise, do not write code, do not perform any calculations, just give your answers as told.\n[SEQUENCE]\n", + "user_message_multivariate": "Below is a multivariate time series of {} dimensions with the following format \"{}\".\nYour job is to detect ranges of anomalies in this time series, in terms of the x-axis coordinates. List one by one in a list.\nFor example, if ranges (including two endpoints) [5, 12], [71, 74], and [105, 131], are anomalies, then output \"[[5,12], [71, 74], [105, 131]]\".\nIf no anomalies are found, respond with 'no anomalies'. Be concise, do not write code, do not perform any calculations, just give your answers as told.\n[SEQUENCE]\n", "one_shot_prefix": "Here is a normal reference of the time series: [NORMAL]" } \ No newline at end of file diff --git a/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb b/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb new file mode 100644 index 0000000..ac1b621 --- /dev/null +++ b/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb @@ -0,0 +1,1722 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "76f73dbe-645a-4ed5-b042-ab14a1e330ea", + "metadata": {}, + "outputs": [], + "source": [ + "import warnings; warnings.simplefilter('ignore')" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "67b19cca-149e-4ec1-8cff-11e712c34c29", + "metadata": {}, + "source": [ + "This notebook requires **gpu** to run. See [mistral documentation](https://huggingface.co/mistralai/Mistral-7B-Instruct-v0.2) for memory requirements.\n", + "## 1. Data" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "32c83a5a", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8532, 26)" + ] + }, + "execution_count": 2, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "from orion.data import load_signal\n", + "\n", + "data = load_signal('multivariate/E-2-test')\n", + "data.shape" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "8ae34e69", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "import matplotlib.pyplot as plt\n", + "\n", + "plt.plot(data['0']);" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "6b16f040-63b1-4171-8b1c-90c4d721d641", + "metadata": {}, + "source": [ + "if you want a quick test of how this pipeline works, uncomment the cell below to save time. We will look at a small segment of the time series." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "1029c7ee-8a42-4452-8bc0-20c0fb45b8d9", + "metadata": {}, + "outputs": [], + "source": [ + "# start = 900\n", + "# end = start + 200\n", + "\n", + "# data = data.iloc[start: end]\n", + "\n", + "# plt.plot(data['value']);" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "409dabf0-be06-41fc-8793-01872c2a3055", + "metadata": {}, + "source": [ + "## 2. Pipeline" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "262441fe-841b-4555-bf57-249305b59f92", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + "2025-06-03 17:27:01.638671: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2025-06-03 17:27:01.638704: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2025-06-03 17:27:01.638730: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-06-03 17:27:01.645996: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", + "2025-06-03 17:27:02.501589: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", + "Loading checkpoint shards: 100%|██████████| 3/3 [00:04<00:00, 1.33s/it]\n" + ] + } + ], + "source": [ + "from mlblocks import MLPipeline\n", + "pipeline = MLPipeline('mistral_prompter_multivariate_0shot')" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "be80a076", + "metadata": {}, + "outputs": [], + "source": [ + "hyperparameters = {\n", + " \"mlstars.custom.timeseries_preprocessing.time_segments_aggregate#1\": {\n", + " \"interval\": 21600\n", + " }, \n", + " \"sigllm.primitives.prompting.anomalies.find_anomalies_in_windows#1\": {\n", + " \"alpha\": 1.0\n", + " },\n", + " \"sigllm.primitives.prompting.anomalies.merge_anomalous_sequences#1\": {\n", + " \"beta\": 1.0\n", + " },\n", + " \"sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences#1\": {\n", + " \"window_size\": 200,\n", + " \"step_size\": 50\n", + " },\n", + " \"sigllm.primitives.prompting.anomalies.format_anomalies#1\": {\n", + " \"padding_size\": 5\n", + " }\n", + "}\n", + "\n", + "pipeline.set_hyperparameters(hyperparameters)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "9292817b-75d5-4526-a1b8-7475bcb787c5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "{'sigllm.primitives.prompting.huggingface.HF#1': {'X': 'X_str'},\n", + " 'sigllm.primitives.prompting.anomalies.parse_anomaly_response#1': {'X': 'y_hat'}}" + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipeline.input_names" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "d1190b42", + "metadata": {}, + "source": [ + "### step-by-step execution\n", + "\n", + "MLPipelines are compose of a squence of primitives, these primitives apply tranformation and calculation operations to the data and updates the variables within the pipeline. To view the primitives used by the pipeline, we access its primtivies attribute.\n", + "\n", + "The mistral-detector contains 10 primitives. we will observe how the context (which are the variables held within the pipeline) are updated after the execution of each primitive." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "2e548714", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "['mlstars.custom.timeseries_preprocessing.time_segments_aggregate',\n", + " 'sklearn.impute.SimpleImputer',\n", + " 'sigllm.primitives.transformation.Float2Scalar',\n", + " 'sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences',\n", + " 'sigllm.primitives.transformation.format_as_string',\n", + " 'sigllm.primitives.prompting.huggingface.HF',\n", + " 'sigllm.primitives.prompting.anomalies.parse_anomaly_response',\n", + " 'sigllm.primitives.prompting.anomalies.find_anomalies_in_windows',\n", + " 'sigllm.primitives.prompting.anomalies.merge_anomalous_sequences',\n", + " 'sigllm.primitives.prompting.anomalies.format_anomalies']" + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "pipeline.primitives" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "af16a62a-c4cb-424f-bcdc-cdfaa0a51977", + "metadata": {}, + "source": [ + "#### time segment aggerate\n", + "this primitive creates an equi-spaced time series by aggregating values over fixed specified interval.\n", + "\n", + "* **input**: `X` which is an n-dimensional sequence of values.\n", + "* **output**:\n", + " * `X` sequence of aggregated values, one column for each aggregation method.\n", + " * `timestamp` sequence of timestamp values." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "f683c7f7", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['X', 'timestamp'])" + ] + }, + "execution_count": 9, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 0\n", + "context = pipeline.fit(data, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "533566d5", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "entry at 1285027200 has value [-0.10844419 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. ]\n", + "entry at 1285048800 has value [-0.15899597 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. ]\n", + "entry at 1285070400 has value [-0.20976827 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. ]\n", + "entry at 1285092000 has value [-0.20976827 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. ]\n", + "entry at 1285113600 has value [-0.26076418 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. 0. 0. 0. 0. 0.\n", + " 0. ]\n" + ] + } + ], + "source": [ + "for i, x in list(zip(context['timestamp'], context['X']))[:5]:\n", + " print(\"entry at {} has value {}\".format(i, x))" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "a488bc32", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(8532, 25)" + ] + }, + "execution_count": 11, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['X'].shape" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "d7e8110b-6d0a-4e67-9346-5317f137b05c", + "metadata": {}, + "source": [ + "#### Single Imputer\n", + "this primitive is an imputation transformer for filling missing values.\n", + "\n", + "* **input**: `X` which is an n-dimensional sequence of values.\n", + "* **output**: `y` which is a transformed version of `X`." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "35c41874", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'X'])" + ] + }, + "execution_count": 12, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 1\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "d4aa81d9-f6ee-49bd-894b-ec64445b7edb", + "metadata": {}, + "source": [ + "#### Float2Scalar\n", + "this primitive converts float values into scalar up to certain decimal points.\n", + "\n", + "* **input**: `y` which is an n-dimensional sequence of values in float type.\n", + "* **output**: `X` which is a transformed version of `y` in scalar." + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "b49c4fbf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'X', 'minimum', 'decimal'])" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 2\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "f7571fa1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "entry at 1285027200 has value [89 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99\n", + " 99]\n", + "entry at 1285048800 has value [84 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99\n", + " 99]\n", + "entry at 1285070400 has value [79 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99\n", + " 99]\n", + "entry at 1285092000 has value [79 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99\n", + " 99]\n", + "entry at 1285113600 has value [73 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99\n", + " 99]\n" + ] + } + ], + "source": [ + "for i, x in list(zip(context['timestamp'], context['X']))[:5]:\n", + " print(\"entry at {} has value {}\".format(i, x))" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "fd1a9ba6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "-0.9999999999999998" + ] + }, + "execution_count": 15, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['minimum']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "3914c439-0452-4151-93d2-9aa0ec0d3442", + "metadata": {}, + "source": [ + "#### Rolling Window\n", + "this primitive generates many sub-sequences of the original sequence. it uses a rolling window approach to create the sub-sequences out of time series data.\n", + "* **input**: `X` which is an 1-dimensional sequence to iterate over\n", + "* **output**: \n", + " * `X` input sequences\n", + " * `first_index`: first index value of each input sequences" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "bd160c3e", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'X', 'first_index', 'window_size', 'step_size', 'dim'])" + ] + }, + "execution_count": 16, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 3\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "ab08a9a9", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "X shape = (167, 200, 25)\n", + "Timestamp shape = (8532,)\n", + "First index shape = (167,)\n" + ] + } + ], + "source": [ + "# after slicing X into multiple sub-sequences\n", + "# we obtain a 3 dimensional matrix X where\n", + "# the shape indicates (# slices, window size, 1)\n", + "\n", + "print(\"X shape = {}\\nTimestamp shape = {}\\nFirst index shape = {}\".format(\n", + " context['X'].shape, context['timestamp'].shape, context['first_index'].shape))" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "f201cbc8-0c88-4489-a7b0-b5060ac785a1", + "metadata": {}, + "source": [ + "#### Format as string\n", + "this primitive converts each sequence of scalar values into string. \n", + "* **input**: `X` which is an n-dimensional sequence of values\n", + "* **output**: `X_str` which is a string representation version of X" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "3a1836db-cd6f-4a39-8f00-6a09c620c5f0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X', 'X_str'])" + ] + }, + "execution_count": 18, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 4\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "1259df2c-d656-42a8-973c-b15cf8e031d4", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "'89,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,199,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,199,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,94,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,104,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,109,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,114,199,199,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,199,199,99,99,119,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,199,199,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,199,199,99,99,123,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,133,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,133,99,99,99,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,138,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,138,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,104,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,89,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,199,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,94,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,104,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,109,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,114,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,119,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,133,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,133,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,138,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,138,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,94,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99'" + ] + }, + "execution_count": 19, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['X_str'].flatten().tolist()[0]" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "d05e85ce-6111-494f-88c0-4fc566386b43", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "str" + ] + }, + "execution_count": 20, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "type(context['X_str'][0][0])" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "a2411064", + "metadata": {}, + "source": [ + "when inspecting the time series, we can see that we have a single list consisting of 200 values (according the set `window_size`) and it is now of string type, ready to be an input to an LLM." + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "7f403aca-ba56-42d3-bcae-b665a234c710", + "metadata": {}, + "source": [ + "#### HF\n", + "this primitive prompts a huggingface model to detect the anomalies\n", + "* **input**: `X_str` input sequence\n", + "* **output**: `y_hat` detected anomalous values" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "b4711e98-c522-4464-b645-607f76e89063", + "metadata": {}, + "outputs": [ + { + "name": "stderr", + "output_type": "stream", + "text": [ + " 0%| | 0/167 [00:00 2\u001b[0m context \u001b[38;5;241m=\u001b[39m \u001b[43mpipeline\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcontext\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstart_\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m context\u001b[38;5;241m.\u001b[39mkeys()\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/mlblocks/mlpipeline.py:805\u001b[0m, in \u001b[0;36mMLPipeline.fit\u001b[0;34m(self, X, y, output_, start_, debug, **kwargs)\u001b[0m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fit_block(block, block_name, context, debug_info)\n\u001b[1;32m 804\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fit_pending \u001b[38;5;129;01mor\u001b[39;00m output_blocks:\n\u001b[0;32m--> 805\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_produce_block\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 806\u001b[0m \u001b[43m \u001b[49m\u001b[43mblock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mblock_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_variables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdebug_info\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m \u001b[38;5;66;03m# We already captured the output from this block\u001b[39;00m\n\u001b[1;32m 809\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m block_name \u001b[38;5;129;01min\u001b[39;00m output_blocks:\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/mlblocks/mlpipeline.py:679\u001b[0m, in \u001b[0;36mMLPipeline._produce_block\u001b[0;34m(self, block, block_name, context, output_variables, outputs, debug_info)\u001b[0m\n\u001b[1;32m 677\u001b[0m memory_before \u001b[38;5;241m=\u001b[39m process\u001b[38;5;241m.\u001b[39mmemory_info()\u001b[38;5;241m.\u001b[39mrss\n\u001b[1;32m 678\u001b[0m start \u001b[38;5;241m=\u001b[39m datetime\u001b[38;5;241m.\u001b[39mutcnow()\n\u001b[0;32m--> 679\u001b[0m block_outputs \u001b[38;5;241m=\u001b[39m \u001b[43mblock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproduce\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mproduce_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 680\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m datetime\u001b[38;5;241m.\u001b[39mutcnow() \u001b[38;5;241m-\u001b[39m start\n\u001b[1;32m 681\u001b[0m memory_after \u001b[38;5;241m=\u001b[39m process\u001b[38;5;241m.\u001b[39mmemory_info()\u001b[38;5;241m.\u001b[39mrss\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/mlblocks/mlblock.py:331\u001b[0m, in \u001b[0;36mMLBlock.produce\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 329\u001b[0m produce_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_method_kwargs(produce_kwargs, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mproduce_args)\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_class:\n\u001b[0;32m--> 331\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minstance\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproduce_method\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mproduce_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 333\u001b[0m produce_kwargs\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_hyperparameters())\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprimitive(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mproduce_kwargs)\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/sigllm/primitives/prompting/huggingface.py:192\u001b[0m, in \u001b[0;36mHF.detect\u001b[0;34m(self, X, dim, normal, **kwargs)\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrestrict_tokens:\n\u001b[1;32m 190\u001b[0m generate_kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbad_words_ids\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minvalid_tokens\n\u001b[0;32m--> 192\u001b[0m generate_ids \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mtokenized_input\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mgenerate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 194\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrestrict_tokens:\n\u001b[1;32m 195\u001b[0m responses \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtokenizer\u001b[38;5;241m.\u001b[39mbatch_decode(\n\u001b[1;32m 196\u001b[0m generate_ids[:, input_length:],\n\u001b[1;32m 197\u001b[0m skip_special_tokens\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 198\u001b[0m clean_up_tokenization_spaces\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 199\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/torch/utils/_contextlib.py:116\u001b[0m, in \u001b[0;36mcontext_decorator..decorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mdecorate_context\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ctx_factory():\n\u001b[0;32m--> 116\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/transformers/generation/utils.py:2326\u001b[0m, in \u001b[0;36mGenerationMixin.generate\u001b[0;34m(self, inputs, generation_config, logits_processor, stopping_criteria, prefix_allowed_tokens_fn, synced_gpus, assistant_model, streamer, negative_prompt_ids, negative_prompt_attention_mask, use_model_defaults, **kwargs)\u001b[0m\n\u001b[1;32m 2318\u001b[0m input_ids, model_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_expand_inputs_for_generation(\n\u001b[1;32m 2319\u001b[0m input_ids\u001b[38;5;241m=\u001b[39minput_ids,\n\u001b[1;32m 2320\u001b[0m expand_size\u001b[38;5;241m=\u001b[39mgeneration_config\u001b[38;5;241m.\u001b[39mnum_return_sequences,\n\u001b[1;32m 2321\u001b[0m is_encoder_decoder\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39mis_encoder_decoder,\n\u001b[1;32m 2322\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs,\n\u001b[1;32m 2323\u001b[0m )\n\u001b[1;32m 2325\u001b[0m \u001b[38;5;66;03m# 12. run sample (it degenerates to greedy search when `generation_config.do_sample=False`)\u001b[39;00m\n\u001b[0;32m-> 2326\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sample\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2327\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2328\u001b[0m \u001b[43m \u001b[49m\u001b[43mlogits_processor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprepared_logits_processor\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2329\u001b[0m \u001b[43m \u001b[49m\u001b[43mstopping_criteria\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprepared_stopping_criteria\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2330\u001b[0m \u001b[43m \u001b[49m\u001b[43mgeneration_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgeneration_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2331\u001b[0m \u001b[43m \u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msynced_gpus\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2332\u001b[0m \u001b[43m \u001b[49m\u001b[43mstreamer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstreamer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2333\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmodel_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2334\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2336\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m generation_mode \u001b[38;5;129;01min\u001b[39;00m (GenerationMode\u001b[38;5;241m.\u001b[39mBEAM_SAMPLE, GenerationMode\u001b[38;5;241m.\u001b[39mBEAM_SEARCH):\n\u001b[1;32m 2337\u001b[0m \u001b[38;5;66;03m# 11. interleave input_ids with `num_beams` additional sequences per batch\u001b[39;00m\n\u001b[1;32m 2338\u001b[0m input_ids, model_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_expand_inputs_for_generation(\n\u001b[1;32m 2339\u001b[0m input_ids\u001b[38;5;241m=\u001b[39minput_ids,\n\u001b[1;32m 2340\u001b[0m expand_size\u001b[38;5;241m=\u001b[39mgeneration_config\u001b[38;5;241m.\u001b[39mnum_beams,\n\u001b[1;32m 2341\u001b[0m is_encoder_decoder\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39mis_encoder_decoder,\n\u001b[1;32m 2342\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs,\n\u001b[1;32m 2343\u001b[0m )\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/transformers/generation/utils.py:3277\u001b[0m, in \u001b[0;36mGenerationMixin._sample\u001b[0;34m(self, input_ids, logits_processor, stopping_criteria, generation_config, synced_gpus, streamer, **model_kwargs)\u001b[0m\n\u001b[1;32m 3274\u001b[0m model_forward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_compiled_call(generation_config\u001b[38;5;241m.\u001b[39mcompile_config)\n\u001b[1;32m 3276\u001b[0m is_prefill \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m-> 3277\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_has_unfinished_sequences\u001b[49m\u001b[43m(\u001b[49m\u001b[43mthis_peer_finished\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_ids\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 3278\u001b[0m \u001b[38;5;66;03m# prepare model inputs\u001b[39;00m\n\u001b[1;32m 3279\u001b[0m model_inputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprepare_inputs_for_generation(input_ids, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs)\n\u001b[1;32m 3281\u001b[0m \u001b[38;5;66;03m# prepare variable output controls (note: some models won't accept all output controls)\u001b[39;00m\n", + "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/transformers/generation/utils.py:2477\u001b[0m, in \u001b[0;36mGenerationMixin._has_unfinished_sequences\u001b[0;34m(self, this_peer_finished, synced_gpus, device)\u001b[0m\n\u001b[1;32m 2475\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m this_peer_finished_flag\u001b[38;5;241m.\u001b[39mitem() \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0.0\u001b[39m:\n\u001b[1;32m 2476\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 2477\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m this_peer_finished:\n\u001b[1;32m 2478\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 2479\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m\n", + "\u001b[0;31mKeyboardInterrupt\u001b[0m: " + ] + } + ], + "source": [ + "step = 5\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 35, + "id": "d587d1d3-9325-4d45-9e15-d69d2d16bb6d", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(163, 1)" + ] + }, + "execution_count": 35, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(context['y_hat']), len(context['y_hat'][0])" + ] + }, + { + "cell_type": "code", + "execution_count": 23, + "id": "480cb8d1", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['No anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['No anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['If no anomalies are found, respond with \\'no anomalies\\'. Otherwise, list the ranges of anomalies in the format \"[[x1, x2], [x3, x4], ...]\".\\nIn this case, based on a visual inspection of the data, there do not appear to be any obvious anomalies. Therefore, the response is \\'no anomalies\\'.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['No anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.'],\n", + " ['no anomalies.']]" + ] + }, + "execution_count": 23, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['y_hat']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "dc70e55b-4a3e-43d8-83f8-b998fa88ee29", + "metadata": {}, + "source": [ + "#### format as integer\n", + "this primitive converts each sequences of string values into integers.\n", + "* **input**: `y_hat` which is a sequence of string values\n", + "* **output**: `y` which is an integer representation version of `y_hat`" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "5ac4fc58-055d-4210-b330-0832508c1cf4", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['If no anomalies are found, respond with \\'no anomalies\\'. Otherwise, list the ranges of anomalies in the format \"[[x1, x2], [x3, x4], ...]\".\\nIn this case, based on a visual inspection of the data, there do not appear to be any obvious anomalies. Therefore, the response is \\'no anomalies\\'.']\n", + "If no anomalies are found, respond with 'no anomalies'. Otherwise, list the ranges of anomalies in the format \"[[x1, x2], [x3, x4], ...]\".\n", + "In this case, based on a visual inspection of the data, there do not appear to be any obvious anomalies. Therefore, the response is 'no anomalies'.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['No anomalies.']\n", + "No anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n", + "['no anomalies.']\n", + "no anomalies.\n" + ] + }, + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y'])" + ] + }, + "execution_count": 24, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 6\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 25, + "id": "a934005e-5bce-4a47-831a-3cf1f0c92f28", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[[[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]],\n", + " [[]]]" + ] + }, + "execution_count": 25, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['y']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "6b1ff549-c823-4a31-b324-19ee21a8c193", + "metadata": {}, + "source": [ + "#### Val2Idx\n", + "this primitive converts integer values into indices they appear in the sequence\n", + "* **input**: \n", + " * `y` sequences of anomalous values\n", + " * `X` input sequences\n", + "* **output**: \n", + " * `y` sequences of anomalous indices" + ] + }, + { + "cell_type": "code", + "execution_count": 26, + "id": "32b4ccf9-d8fa-4110-bc22-717d07e3ae0b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y'])" + ] + }, + "execution_count": 26, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 7\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 27, + "id": "339db91e-cd35-4ae8-abc5-3ba52b6c0bbd", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "(163, 0)" + ] + }, + "execution_count": 27, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['y'].shape" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "bbcf3479-7ff2-4a81-86c0-e678a8f735c6", + "metadata": {}, + "source": [ + "#### find_anomalies_in_windows\n", + "* **input**: `y` n-dimensional array of multiple anomalous indices sequences\n", + "* **output**: `y` array of each window's anomalous indices sequences" + ] + }, + { + "cell_type": "code", + "execution_count": 28, + "id": "17ce8982-2ba3-4508-a526-8a9960e0ecd3", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y'])" + ] + }, + "execution_count": 28, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 8\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 29, + "id": "5274e7a0-acf5-4b9f-9cb4-070357fc7c10", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "array([], dtype=object)" + ] + }, + "execution_count": 29, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['y']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "03002457-e136-445d-811a-97c20eb47d5d", + "metadata": {}, + "source": [ + "#### merge_anomalous_sequences\n", + "* **input**: \n", + " * `y` array of each window's anomalous indices sequences\n", + " * `first_index` first indices of input sequences\n", + " * `window_size` size of each window\n", + " * `step_size` step of rolling windows\n", + "* **output**: \n", + " * `y` anomalous indices of the input timeseries" + ] + }, + { + "cell_type": "code", + "execution_count": 30, + "id": "bd219c08-29b2-4809-934b-287dfac4e4fa", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y', 'anomalies'])" + ] + }, + "execution_count": 30, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 9\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 31, + "id": "57f900db-d712-4ff1-986b-7f4dc1accda0", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[]" + ] + }, + "execution_count": 31, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "context['anomalies']" + ] + }, + { + "attachments": {}, + "cell_type": "markdown", + "id": "2eeac9a9-613a-43b8-abd9-6e455bf82a62", + "metadata": {}, + "source": [ + "#### format_anomalies\n", + "* **input**: \n", + " * `y` sequence of anomalous indices\n", + " * `timestamp` sequence of timestamp of the input series\n", + "* **output**:\n", + " * `anomalies` array containing start-index, end-index, score for each anomalous sequence that was found" + ] + }, + { + "cell_type": "code", + "execution_count": 32, + "id": "a37daebf-7091-4dab-93dc-928c7163778b", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "0" + ] + }, + "execution_count": 32, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "len(context['anomalies'])" + ] + }, + { + "cell_type": "code", + "execution_count": 33, + "id": "60064037-5ed6-49f3-ae13-5f4952f5eabf", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
startendscore
\n", + "
" + ], + "text/plain": [ + "Empty DataFrame\n", + "Columns: [start, end, score]\n", + "Index: []" + ] + }, + "execution_count": 33, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "import pandas as pd\n", + "\n", + "pd.DataFrame(context['anomalies'], columns=['start', 'end', 'score'])" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "98b221ef-ff0c-4705-9697-e2d240ff756e", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "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3n//faxevRpFRUX45S9/2eHH15xwHPvq1atx8803Y/369VixYgUcDgcuuOAC1NfXq55rwYIFKC4uVv499dRTHXpsLQnHsQPAaaedpjqutWvXqu6P1PO+adMm1XGvWLECAPDrX/9a9Vxded7betxCdXU15s6dixkzZgTcF6l/60Jzxx6pf+tCc8cO9Iy/9bDzUI8BwPPRRx+1+XG/+MUvPL/97W+V7ydNmuS5+eable9dLpcnNzfXs2TJEo/H4/FUV1d7TCaT5/3331e22b17tweAZ926de0/gFPQUceuVVZW5gHgWb16tXLbOeec47n11lvbsZfh0VHH/uCDD3rGjBkTcvtoOu+33nqrZ+DAgR63263c1p3Oe1uO+/LLL/fcd999Qc9vpP+tN3fsWpH2t97csffEv/Vw4AhOhNu6dSu+//57nHPOOQCApqYmbN68GQUFBco2er0eBQUFWLduHQBg8+bNcDgcqm2GDRuGvn37Ktv0BNpjD6ampgYAkJaWprr97bffRnp6OkaOHInFixejoaEhrPva0UId+/79+5Gbm4sBAwZgzpw5KCwsVO6LlvPe1NSEf/zjH7j22msDmu32tPP++uuv49ChQ3jwwQcD7ov0v/Xmjj2YSPpbb82xR8PfekuistlmNOjTpw/Ky8vhdDrx0EMP4brrrgMAVFRUwOVyISsrS7V9VlYW9uzZAwAoKSlBTEwMUlJSArYpKSnplP0/FaGOXcvtduO2227D1KlTMXLkSOX2q666Cv369UNubi62b9+Oe+65B3v37sWHH37YWYfQbs0d++TJk/HGG29g6NChKC4uxsMPP4yzzjoLO3fuRGJiYtSc948//hjV1dW45pprVLf3tPO+f/9+3Hvvvfj2229hNAa+lUfy33pLx64VSX/rrTn2SP9bby0GOBHq22+/RV1dHdavX497770XgwYNwpVXXtnVu9UpWnvsN998M3bu3BkwN3399dcrX48aNQo5OTmYMWMGDh48iIEDB4Z9/09Fc8d+4YUXKtuNHj0akydPRr9+/fDPf/4T8+fP76pd7jCtPe+vvvoqLrzwQuTm5qpu70nn3eVy4aqrrsLDDz+MIUOGdPXudKr2HHuk/K239tgj/W+9tRjgRKj+/fsD8P7RlpaW4qGHHsKVV16J9PR0GAyGgGz50tJSZGdnAwCys7PR1NSE6upqVYQv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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "index, anomalies = list(map(context.get, ['timestamp', 'anomalies']))\n", + "\n", + "plt.plot(data['timestamp'], data['0'], label='original')\n", + "\n", + "for ano in anomalies:\n", + " plt.axvspan(*ano[:2], color='r', alpha=0.2, label='detected anomalies')\n", + "plt.legend(['original', 'detected anomalies']);" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "ee002d85-571a-4ecd-8f9d-99cb84808d7f", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "sigllm", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.16" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} From 3eae8344a090c6c524f8d0f711a3ac829879d796 Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Fri, 1 Aug 2025 07:57:51 -0700 Subject: [PATCH 06/12] fix lint --- sigllm/primitives/prompting/anomalies.py | 1 - sigllm/primitives/prompting/huggingface.py | 26 +++++++++---------- .../prompting/timeseries_preprocessing.py | 2 +- 3 files changed, 14 insertions(+), 15 deletions(-) diff --git a/sigllm/primitives/prompting/anomalies.py b/sigllm/primitives/prompting/anomalies.py index fff0e4c..21490db 100644 --- a/sigllm/primitives/prompting/anomalies.py +++ b/sigllm/primitives/prompting/anomalies.py @@ -206,7 +206,6 @@ def format_anomalies(y, timestamp, padding_size=50): if len(y) == 0: return [] - print(y) y = y[y < len(timestamp)].astype(int) y = timestamp[y] # Convert list of indices into list of timestamps start, end = timestamp[0], timestamp[-1] diff --git a/sigllm/primitives/prompting/huggingface.py b/sigllm/primitives/prompting/huggingface.py index 03e8d08..9d7c873 100644 --- a/sigllm/primitives/prompting/huggingface.py +++ b/sigllm/primitives/prompting/huggingface.py @@ -1,8 +1,8 @@ # -*- coding: utf-8 -*- -import re import json import logging import os +import re import torch from tqdm import tqdm @@ -23,19 +23,19 @@ DEFAULT_MODEL = 'mistralai/Mistral-7B-Instruct-v0.2' + def get_examples(text, k=3): - """ - Extracts the content within the first three sets of parentheses in a string. + """Extracts the content within the first three sets of parentheses in a string. - Args: - text (str): Input string. + Args: + text (str): Input string. - Returns: - list: - A list containing the content within the first three sets of parentheses. - """ - matches = re.findall(r'\(([^)]*)\)', text) - return matches[:k] + Returns: + list: + A list containing the content within the first three sets of parentheses. + """ + matches = re.findall(r'\(([^)]*)\)', text) + return matches[:k] class HF: @@ -75,7 +75,7 @@ def __init__( raw=False, samples=10, padding=0, - restrict_tokens=False + restrict_tokens=False, ): self.name = name self.sep = sep @@ -131,7 +131,7 @@ def detect(self, X, dim=1, normal=None, **kwargs): X (ndarray): Input sequences of strings containing signal values. dim (int, optional): - Number of dimensions of the time series. Default to None. + Number of dimensions of the time series. Default to 1. normal (str, optional): A normal reference sequence for one-shot prompting. If None, zero-shot prompting is used. Default to None. diff --git a/sigllm/primitives/prompting/timeseries_preprocessing.py b/sigllm/primitives/prompting/timeseries_preprocessing.py index 82dc3a2..6d6d7d7 100644 --- a/sigllm/primitives/prompting/timeseries_preprocessing.py +++ b/sigllm/primitives/prompting/timeseries_preprocessing.py @@ -30,7 +30,7 @@ def rolling_window_sequences(X, window_size=500, step_size=100): out_X = list() X_index = list() dim = X.shape[1] - + start = 0 max_start = len(X) - window_size + 1 while start < max_start: From 3a20509edea30027f94f8c6c1f08212f30aec40f Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Fri, 1 Aug 2025 08:22:48 -0700 Subject: [PATCH 07/12] add dim tests --- .../prompting/timeseries_preprocessing.py | 6 +++- .../test_timeseries_preprocessing.py | 29 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/sigllm/primitives/prompting/timeseries_preprocessing.py b/sigllm/primitives/prompting/timeseries_preprocessing.py index 6d6d7d7..b2ea5bc 100644 --- a/sigllm/primitives/prompting/timeseries_preprocessing.py +++ b/sigllm/primitives/prompting/timeseries_preprocessing.py @@ -26,10 +26,14 @@ def rolling_window_sequences(X, window_size=500, step_size=100): * rolling window sequences. * first index value of each input sequence. """ + if X.ndim == 1: + dim = 1 + else: + dim = X.shape[1] + index = range(len(X)) out_X = list() X_index = list() - dim = X.shape[1] start = 0 max_start = len(X) - window_size + 1 diff --git a/tests/primitives/prompting/test_timeseries_preprocessing.py b/tests/primitives/prompting/test_timeseries_preprocessing.py index 7973b40..2a8849a 100644 --- a/tests/primitives/prompting/test_timeseries_preprocessing.py +++ b/tests/primitives/prompting/test_timeseries_preprocessing.py @@ -31,6 +31,35 @@ def test_rolling_window_sequences(values, window_size, step_size): np.array([0, 1, 2, 3, 4]), 3, 1, + 1 + ) + + result = rolling_window_sequences(values, window_size, step_size) + + if len(result) != len(expected): + raise AssertionError('Tuples has different length') + + for arr1, arr2 in zip(result, expected): + np.testing.assert_equal(arr1, arr2) + + +def test_rolling_window_sequences_multivariate(window_size, step_size): + values = np.array([ + [0.555, 2.345], + [1.501, 5.903], + [9.116, 3.068], + [7.432, 4.532] + ]) + + expected = ( + np.array([ + [[0.555, 2.345], [1.501, 5.903], [9.116, 3.068]], + [[1.501, 5.903], [9.116, 3.068], [7.432, 4.532]], + ]), + np.array([0, 1]), + 3, + 1, + 2 ) result = rolling_window_sequences(values, window_size, step_size) From 61f93e445d24bae24ee60de8f913eae2640c665d Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Fri, 1 Aug 2025 08:23:22 -0700 Subject: [PATCH 08/12] fix lint --- .../prompting/test_timeseries_preprocessing.py | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/tests/primitives/prompting/test_timeseries_preprocessing.py b/tests/primitives/prompting/test_timeseries_preprocessing.py index 2a8849a..28707f0 100644 --- a/tests/primitives/prompting/test_timeseries_preprocessing.py +++ b/tests/primitives/prompting/test_timeseries_preprocessing.py @@ -31,7 +31,7 @@ def test_rolling_window_sequences(values, window_size, step_size): np.array([0, 1, 2, 3, 4]), 3, 1, - 1 + 1, ) result = rolling_window_sequences(values, window_size, step_size) @@ -44,12 +44,7 @@ def test_rolling_window_sequences(values, window_size, step_size): def test_rolling_window_sequences_multivariate(window_size, step_size): - values = np.array([ - [0.555, 2.345], - [1.501, 5.903], - [9.116, 3.068], - [7.432, 4.532] - ]) + values = np.array([[0.555, 2.345], [1.501, 5.903], [9.116, 3.068], [7.432, 4.532]]) expected = ( np.array([ @@ -59,7 +54,7 @@ def test_rolling_window_sequences_multivariate(window_size, step_size): np.array([0, 1]), 3, 1, - 2 + 2, ) result = rolling_window_sequences(values, window_size, step_size) From cdb1563743b7f8a27c0ef35d066d7a0a3a46e06c Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Thu, 21 Aug 2025 11:14:38 -0400 Subject: [PATCH 09/12] update tutorial --- ...ltivariate-mistral-prompter-pipeline.ipynb | 1231 +++++------------ 1 file changed, 346 insertions(+), 885 deletions(-) diff --git a/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb b/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb index ac1b621..580f26f 100644 --- a/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb +++ b/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb @@ -52,7 +52,7 @@ "outputs": [ { "data": { - "image/png": "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", + "image/png": "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", "text/plain": [ "
" ] @@ -78,17 +78,17 @@ }, { "cell_type": "code", - "execution_count": 4, + "execution_count": null, "id": "1029c7ee-8a42-4452-8bc0-20c0fb45b8d9", "metadata": {}, "outputs": [], "source": [ "# start = 900\n", - "# end = start + 200\n", + "# end = start + 400\n", "\n", "# data = data.iloc[start: end]\n", "\n", - "# plt.plot(data['value']);" + "# plt.plot(data['0']);" ] }, { @@ -102,7 +102,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 5, "id": "262441fe-841b-4555-bf57-249305b59f92", "metadata": {}, "outputs": [ @@ -110,13 +110,14 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-06-03 17:27:01.638671: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", - "2025-06-03 17:27:01.638704: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", - "2025-06-03 17:27:01.638730: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", - "2025-06-03 17:27:01.645996: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "2025-08-21 10:39:00.042451: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2025-08-21 10:39:00.075478: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2025-08-21 10:39:00.075513: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2025-08-21 10:39:00.075545: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-08-21 10:39:00.082435: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", - "2025-06-03 17:27:02.501589: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", - "Loading checkpoint shards: 100%|██████████| 3/3 [00:04<00:00, 1.33s/it]\n" + "2025-08-21 10:39:00.757008: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", + "Loading checkpoint shards: 100%|██████████| 3/3 [00:04<00:00, 1.50s/it]\n" ] } ], @@ -143,8 +144,8 @@ " \"beta\": 1.0\n", " },\n", " \"sigllm.primitives.prompting.timeseries_preprocessing.rolling_window_sequences#1\": {\n", - " \"window_size\": 200,\n", - " \"step_size\": 50\n", + " \"window_size\": 50,\n", + " \"step_size\": 50\n", " },\n", " \"sigllm.primitives.prompting.anomalies.format_anomalies#1\": {\n", " \"padding_size\": 5\n", @@ -154,28 +155,6 @@ "pipeline.set_hyperparameters(hyperparameters)" ] }, - { - "cell_type": "code", - "execution_count": 7, - "id": "9292817b-75d5-4526-a1b8-7475bcb787c5", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "{'sigllm.primitives.prompting.huggingface.HF#1': {'X': 'X_str'},\n", - " 'sigllm.primitives.prompting.anomalies.parse_anomaly_response#1': {'X': 'y_hat'}}" - ] - }, - "execution_count": 7, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "pipeline.input_names" - ] - }, { "attachments": {}, "cell_type": "markdown", @@ -191,7 +170,7 @@ }, { "cell_type": "code", - "execution_count": 8, + "execution_count": 7, "id": "2e548714", "metadata": {}, "outputs": [ @@ -210,7 +189,7 @@ " 'sigllm.primitives.prompting.anomalies.format_anomalies']" ] }, - "execution_count": 8, + "execution_count": 7, "metadata": {}, "output_type": "execute_result" } @@ -236,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 9, + "execution_count": 8, "id": "f683c7f7", "metadata": {}, "outputs": [ @@ -246,7 +225,7 @@ "dict_keys(['X', 'timestamp'])" ] }, - "execution_count": 9, + "execution_count": 8, "metadata": {}, "output_type": "execute_result" } @@ -259,7 +238,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 9, "id": "533566d5", "metadata": {}, "outputs": [ @@ -302,7 +281,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 10, "id": "a488bc32", "metadata": {}, "outputs": [ @@ -312,7 +291,7 @@ "(8532, 25)" ] }, - "execution_count": 11, + "execution_count": 10, "metadata": {}, "output_type": "execute_result" } @@ -336,7 +315,7 @@ }, { "cell_type": "code", - "execution_count": 12, + "execution_count": 11, "id": "35c41874", "metadata": {}, "outputs": [ @@ -346,7 +325,7 @@ "dict_keys(['timestamp', 'X'])" ] }, - "execution_count": 12, + "execution_count": 11, "metadata": {}, "output_type": "execute_result" } @@ -372,7 +351,7 @@ }, { "cell_type": "code", - "execution_count": 13, + "execution_count": 12, "id": "b49c4fbf", "metadata": {}, "outputs": [ @@ -382,7 +361,7 @@ "dict_keys(['timestamp', 'X', 'minimum', 'decimal'])" ] }, - "execution_count": 13, + "execution_count": 12, "metadata": {}, "output_type": "execute_result" } @@ -395,7 +374,7 @@ }, { "cell_type": "code", - "execution_count": 14, + "execution_count": 13, "id": "f7571fa1", "metadata": {}, "outputs": [ @@ -423,7 +402,7 @@ }, { "cell_type": "code", - "execution_count": 15, + "execution_count": 14, "id": "fd1a9ba6", "metadata": {}, "outputs": [ @@ -433,7 +412,7 @@ "-0.9999999999999998" ] }, - "execution_count": 15, + "execution_count": 14, "metadata": {}, "output_type": "execute_result" } @@ -458,7 +437,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "id": "bd160c3e", "metadata": {}, "outputs": [ @@ -468,7 +447,7 @@ "dict_keys(['timestamp', 'minimum', 'decimal', 'X', 'first_index', 'window_size', 'step_size', 'dim'])" ] }, - "execution_count": 16, + "execution_count": 15, "metadata": {}, "output_type": "execute_result" } @@ -481,7 +460,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "id": "ab08a9a9", "metadata": {}, "outputs": [ @@ -489,9 +468,9 @@ "name": "stdout", "output_type": "stream", "text": [ - "X shape = (167, 200, 25)\n", + "X shape = (170, 50, 25)\n", "Timestamp shape = (8532,)\n", - "First index shape = (167,)\n" + "First index shape = (170,)\n" ] } ], @@ -518,7 +497,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "id": "3a1836db-cd6f-4a39-8f00-6a09c620c5f0", "metadata": {}, "outputs": [ @@ -528,7 +507,7 @@ "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X', 'X_str'])" ] }, - "execution_count": 18, + "execution_count": 17, "metadata": {}, "output_type": "execute_result" } @@ -541,17 +520,17 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "id": "1259df2c-d656-42a8-973c-b15cf8e031d4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "'89,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,199,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,199,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,94,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,104,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,109,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,114,199,199,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,199,199,99,99,119,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,199,199,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,199,199,99,99,123,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,133,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,133,99,99,99,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,138,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,138,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,104,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,89,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,37,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,199,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,94,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,104,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,109,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,114,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,119,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,128,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,133,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,133,99,99,99,99,199,199,99,99,99,99,99,99,99,99,99,99,199,199,99,99,199,199,99,99,138,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,138,199,99,199,99,199,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,123,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,94,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99'" + "'89,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,84,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,79,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,73,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,68,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,63,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,58,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,53,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,48,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,42,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99,99'" ] }, - "execution_count": 19, + "execution_count": 18, "metadata": {}, "output_type": "execute_result" } @@ -560,27 +539,6 @@ "context['X_str'].flatten().tolist()[0]" ] }, - { - "cell_type": "code", - "execution_count": 20, - "id": "d05e85ce-6111-494f-88c0-4fc566386b43", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "str" - ] - }, - "execution_count": 20, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "type(context['X_str'][0][0])" - ] - }, { "attachments": {}, "cell_type": "markdown", @@ -604,7 +562,7 @@ }, { "cell_type": "code", - "execution_count": 21, + "execution_count": 19, "id": "b4711e98-c522-4464-b645-607f76e89063", "metadata": {}, "outputs": [ @@ -612,850 +570,277 @@ "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/167 [00:00 2\u001b[0m context \u001b[38;5;241m=\u001b[39m \u001b[43mpipeline\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mfit\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mcontext\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mstart_\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstep\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 3\u001b[0m context\u001b[38;5;241m.\u001b[39mkeys()\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/mlblocks/mlpipeline.py:805\u001b[0m, in \u001b[0;36mMLPipeline.fit\u001b[0;34m(self, X, y, output_, start_, debug, **kwargs)\u001b[0m\n\u001b[1;32m 802\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_fit_block(block, block_name, context, debug_info)\n\u001b[1;32m 804\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m fit_pending \u001b[38;5;129;01mor\u001b[39;00m output_blocks:\n\u001b[0;32m--> 805\u001b[0m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_produce_block\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 806\u001b[0m \u001b[43m \u001b[49m\u001b[43mblock\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mblock_name\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mcontext\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutput_variables\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43moutputs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdebug_info\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 808\u001b[0m \u001b[38;5;66;03m# We already captured the output from this block\u001b[39;00m\n\u001b[1;32m 809\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m block_name \u001b[38;5;129;01min\u001b[39;00m output_blocks:\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/mlblocks/mlpipeline.py:679\u001b[0m, in \u001b[0;36mMLPipeline._produce_block\u001b[0;34m(self, block, block_name, context, output_variables, outputs, debug_info)\u001b[0m\n\u001b[1;32m 677\u001b[0m memory_before \u001b[38;5;241m=\u001b[39m process\u001b[38;5;241m.\u001b[39mmemory_info()\u001b[38;5;241m.\u001b[39mrss\n\u001b[1;32m 678\u001b[0m start \u001b[38;5;241m=\u001b[39m datetime\u001b[38;5;241m.\u001b[39mutcnow()\n\u001b[0;32m--> 679\u001b[0m block_outputs \u001b[38;5;241m=\u001b[39m \u001b[43mblock\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproduce\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mproduce_args\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 680\u001b[0m elapsed \u001b[38;5;241m=\u001b[39m datetime\u001b[38;5;241m.\u001b[39mutcnow() \u001b[38;5;241m-\u001b[39m start\n\u001b[1;32m 681\u001b[0m memory_after \u001b[38;5;241m=\u001b[39m process\u001b[38;5;241m.\u001b[39mmemory_info()\u001b[38;5;241m.\u001b[39mrss\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/mlblocks/mlblock.py:331\u001b[0m, in \u001b[0;36mMLBlock.produce\u001b[0;34m(self, **kwargs)\u001b[0m\n\u001b[1;32m 329\u001b[0m produce_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_get_method_kwargs(produce_kwargs, \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mproduce_args)\n\u001b[1;32m 330\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_class:\n\u001b[0;32m--> 331\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;43mgetattr\u001b[39;49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43minstance\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mproduce_method\u001b[49m\u001b[43m)\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mproduce_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 333\u001b[0m produce_kwargs\u001b[38;5;241m.\u001b[39mupdate(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_hyperparameters())\n\u001b[1;32m 334\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprimitive(\u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mproduce_kwargs)\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/sigllm/primitives/prompting/huggingface.py:192\u001b[0m, in \u001b[0;36mHF.detect\u001b[0;34m(self, X, dim, normal, **kwargs)\u001b[0m\n\u001b[1;32m 189\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrestrict_tokens:\n\u001b[1;32m 190\u001b[0m generate_kwargs[\u001b[38;5;124m'\u001b[39m\u001b[38;5;124mbad_words_ids\u001b[39m\u001b[38;5;124m'\u001b[39m] \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39minvalid_tokens\n\u001b[0;32m--> 192\u001b[0m generate_ids \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mmodel\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mgenerate\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mtokenized_input\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mgenerate_kwargs\u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 194\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mrestrict_tokens:\n\u001b[1;32m 195\u001b[0m responses \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mtokenizer\u001b[38;5;241m.\u001b[39mbatch_decode(\n\u001b[1;32m 196\u001b[0m generate_ids[:, input_length:],\n\u001b[1;32m 197\u001b[0m skip_special_tokens\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mTrue\u001b[39;00m,\n\u001b[1;32m 198\u001b[0m clean_up_tokenization_spaces\u001b[38;5;241m=\u001b[39m\u001b[38;5;28;01mFalse\u001b[39;00m,\n\u001b[1;32m 199\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/torch/utils/_contextlib.py:116\u001b[0m, in \u001b[0;36mcontext_decorator..decorate_context\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m 113\u001b[0m \u001b[38;5;129m@functools\u001b[39m\u001b[38;5;241m.\u001b[39mwraps(func)\n\u001b[1;32m 114\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mdecorate_context\u001b[39m(\u001b[38;5;241m*\u001b[39margs, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mkwargs):\n\u001b[1;32m 115\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m ctx_factory():\n\u001b[0;32m--> 116\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[43mfunc\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43margs\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mkwargs\u001b[49m\u001b[43m)\u001b[49m\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/transformers/generation/utils.py:2326\u001b[0m, in \u001b[0;36mGenerationMixin.generate\u001b[0;34m(self, inputs, generation_config, logits_processor, stopping_criteria, prefix_allowed_tokens_fn, synced_gpus, assistant_model, streamer, negative_prompt_ids, negative_prompt_attention_mask, use_model_defaults, **kwargs)\u001b[0m\n\u001b[1;32m 2318\u001b[0m input_ids, model_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_expand_inputs_for_generation(\n\u001b[1;32m 2319\u001b[0m input_ids\u001b[38;5;241m=\u001b[39minput_ids,\n\u001b[1;32m 2320\u001b[0m expand_size\u001b[38;5;241m=\u001b[39mgeneration_config\u001b[38;5;241m.\u001b[39mnum_return_sequences,\n\u001b[1;32m 2321\u001b[0m is_encoder_decoder\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39mis_encoder_decoder,\n\u001b[1;32m 2322\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs,\n\u001b[1;32m 2323\u001b[0m )\n\u001b[1;32m 2325\u001b[0m \u001b[38;5;66;03m# 12. run sample (it degenerates to greedy search when `generation_config.do_sample=False`)\u001b[39;00m\n\u001b[0;32m-> 2326\u001b[0m result \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_sample\u001b[49m\u001b[43m(\u001b[49m\n\u001b[1;32m 2327\u001b[0m \u001b[43m \u001b[49m\u001b[43minput_ids\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2328\u001b[0m \u001b[43m \u001b[49m\u001b[43mlogits_processor\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprepared_logits_processor\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2329\u001b[0m \u001b[43m \u001b[49m\u001b[43mstopping_criteria\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mprepared_stopping_criteria\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2330\u001b[0m \u001b[43m \u001b[49m\u001b[43mgeneration_config\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mgeneration_config\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2331\u001b[0m \u001b[43m \u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43msynced_gpus\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2332\u001b[0m \u001b[43m \u001b[49m\u001b[43mstreamer\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43mstreamer\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2333\u001b[0m \u001b[43m \u001b[49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[38;5;241;43m*\u001b[39;49m\u001b[43mmodel_kwargs\u001b[49m\u001b[43m,\u001b[49m\n\u001b[1;32m 2334\u001b[0m \u001b[43m \u001b[49m\u001b[43m)\u001b[49m\n\u001b[1;32m 2336\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m generation_mode \u001b[38;5;129;01min\u001b[39;00m (GenerationMode\u001b[38;5;241m.\u001b[39mBEAM_SAMPLE, GenerationMode\u001b[38;5;241m.\u001b[39mBEAM_SEARCH):\n\u001b[1;32m 2337\u001b[0m \u001b[38;5;66;03m# 11. interleave input_ids with `num_beams` additional sequences per batch\u001b[39;00m\n\u001b[1;32m 2338\u001b[0m input_ids, model_kwargs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39m_expand_inputs_for_generation(\n\u001b[1;32m 2339\u001b[0m input_ids\u001b[38;5;241m=\u001b[39minput_ids,\n\u001b[1;32m 2340\u001b[0m expand_size\u001b[38;5;241m=\u001b[39mgeneration_config\u001b[38;5;241m.\u001b[39mnum_beams,\n\u001b[1;32m 2341\u001b[0m is_encoder_decoder\u001b[38;5;241m=\u001b[39m\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig\u001b[38;5;241m.\u001b[39mis_encoder_decoder,\n\u001b[1;32m 2342\u001b[0m \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs,\n\u001b[1;32m 2343\u001b[0m )\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/transformers/generation/utils.py:3277\u001b[0m, in \u001b[0;36mGenerationMixin._sample\u001b[0;34m(self, input_ids, logits_processor, stopping_criteria, generation_config, synced_gpus, streamer, **model_kwargs)\u001b[0m\n\u001b[1;32m 3274\u001b[0m model_forward \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_compiled_call(generation_config\u001b[38;5;241m.\u001b[39mcompile_config)\n\u001b[1;32m 3276\u001b[0m is_prefill \u001b[38;5;241m=\u001b[39m \u001b[38;5;28;01mTrue\u001b[39;00m\n\u001b[0;32m-> 3277\u001b[0m \u001b[38;5;28;01mwhile\u001b[39;00m \u001b[38;5;28;43mself\u001b[39;49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43m_has_unfinished_sequences\u001b[49m\u001b[43m(\u001b[49m\u001b[43mthis_peer_finished\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43msynced_gpus\u001b[49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mdevice\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[43minput_ids\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mdevice\u001b[49m\u001b[43m)\u001b[49m:\n\u001b[1;32m 3278\u001b[0m \u001b[38;5;66;03m# prepare model inputs\u001b[39;00m\n\u001b[1;32m 3279\u001b[0m model_inputs \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprepare_inputs_for_generation(input_ids, \u001b[38;5;241m*\u001b[39m\u001b[38;5;241m*\u001b[39mmodel_kwargs)\n\u001b[1;32m 3281\u001b[0m \u001b[38;5;66;03m# prepare variable output controls (note: some models won't accept all output controls)\u001b[39;00m\n", - "File \u001b[0;32m~/miniconda3/envs/sigllm/lib/python3.10/site-packages/transformers/generation/utils.py:2477\u001b[0m, in \u001b[0;36mGenerationMixin._has_unfinished_sequences\u001b[0;34m(self, this_peer_finished, synced_gpus, device)\u001b[0m\n\u001b[1;32m 2475\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m this_peer_finished_flag\u001b[38;5;241m.\u001b[39mitem() \u001b[38;5;241m==\u001b[39m \u001b[38;5;241m0.0\u001b[39m:\n\u001b[1;32m 2476\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[0;32m-> 2477\u001b[0m \u001b[38;5;28;01melif\u001b[39;00m this_peer_finished:\n\u001b[1;32m 2478\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mFalse\u001b[39;00m\n\u001b[1;32m 2479\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m \u001b[38;5;28;01mTrue\u001b[39;00m\n", - "\u001b[0;31mKeyboardInterrupt\u001b[0m: " - ] - } - ], - "source": [ - "step = 5\n", - "context = pipeline.fit(**context, start_=step, output_=step)\n", - "context.keys()" - ] - }, - { - "cell_type": "code", - "execution_count": 35, - "id": "d587d1d3-9325-4d45-9e15-d69d2d16bb6d", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "(163, 1)" - ] - }, - "execution_count": 35, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "len(context['y_hat']), len(context['y_hat'][0])" - ] - }, - { - "cell_type": "code", - "execution_count": 23, - "id": "480cb8d1", - "metadata": {}, - "outputs": [ - { - "data": { - "text/plain": [ - "[['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['No anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['No anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['If no anomalies are found, respond with \\'no anomalies\\'. Otherwise, list the ranges of anomalies in the format \"[[x1, x2], [x3, x4], ...]\".\\nIn this case, based on a visual inspection of the data, there do not appear to be any obvious anomalies. Therefore, the response is \\'no anomalies\\'.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['No anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.'],\n", - " ['no anomalies.']]" - ] - }, - "execution_count": 23, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "context['y_hat']" - ] - }, - { - "attachments": {}, - "cell_type": "markdown", - "id": "dc70e55b-4a3e-43d8-83f8-b998fa88ee29", - "metadata": {}, - "source": [ - "#### format as integer\n", - "this primitive converts each sequences of string values into integers.\n", - "* **input**: `y_hat` which is a sequence of string values\n", - "* **output**: `y` which is an integer representation version of `y_hat`" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "5ac4fc58-055d-4210-b330-0832508c1cf4", - "metadata": {}, - "outputs": [ - { - "name": "stdout", + "name": "stderr", "output_type": "stream", "text": [ - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['If no anomalies are found, respond with \\'no anomalies\\'. Otherwise, list the ranges of anomalies in the format \"[[x1, x2], [x3, x4], ...]\".\\nIn this case, based on a visual inspection of the data, there do not appear to be any obvious anomalies. Therefore, the response is \\'no anomalies\\'.']\n", - "If no anomalies are found, respond with 'no anomalies'. Otherwise, list the ranges of anomalies in the format \"[[x1, x2], [x3, x4], ...]\".\n", - "In this case, based on a visual inspection of the data, there do not appear to be any obvious anomalies. Therefore, the response is 'no anomalies'.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['No anomalies.']\n", - "No anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n", - "['no anomalies.']\n", - "no anomalies.\n" + " 1%| | 1/170 [00:03<10:47, 3.83s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 1%| | 2/170 [00:07<10:15, 3.66s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 2%|▏ | 3/170 [00:10<09:49, 3.53s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 2%|▏ | 4/170 [00:14<09:43, 3.52s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 3%|▎ | 5/170 [00:17<09:33, 3.48s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 4%|▎ | 6/170 [00:21<09:36, 3.52s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 4%|▍ | 7/170 [00:24<09:38, 3.55s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 5%|▍ | 8/170 [00:33<14:16, 5.29s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 5%|▌ | 9/170 [00:37<12:48, 4.77s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 6%|▌ | 10/170 [00:41<11:47, 4.42s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 6%|▋ | 11/170 [00:44<11:01, 4.16s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 7%|▋ | 12/170 [00:48<10:24, 3.95s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 8%|▊ | 13/170 [00:51<09:54, 3.79s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 8%|▊ | 14/170 [00:55<09:45, 3.76s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 9%|▉ | 15/170 [00:58<09:40, 3.74s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 9%|▉ | 16/170 [01:02<09:34, 3.73s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 10%|█ | 17/170 [01:06<09:30, 3.73s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 11%|█ | 18/170 [01:10<09:22, 3.70s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 11%|█ | 19/170 [01:13<09:11, 3.65s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 12%|█▏ | 20/170 [01:17<09:04, 3.63s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 12%|█▏ | 21/170 [01:20<08:58, 3.61s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 13%|█▎ | 22/170 [01:24<08:59, 3.65s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 14%|█▎ | 23/170 [01:28<08:55, 3.65s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 14%|█▍ | 24/170 [01:31<08:55, 3.67s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 15%|█▍ | 25/170 [01:35<08:59, 3.72s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 15%|█▌ | 26/170 [01:39<08:51, 3.69s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 16%|█▌ | 27/170 [01:42<08:39, 3.63s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 16%|█▋ | 28/170 [01:46<08:36, 3.63s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 17%|█▋ | 29/170 [01:50<08:41, 3.70s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 18%|█▊ | 30/170 [01:54<08:40, 3.72s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 18%|█▊ | 31/170 [01:57<08:35, 3.71s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 19%|█▉ | 32/170 [02:01<08:31, 3.71s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 19%|█▉ | 33/170 [02:05<08:23, 3.68s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 20%|██ | 34/170 [02:08<08:15, 3.64s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 21%|██ | 35/170 [02:12<08:09, 3.62s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 21%|██ | 36/170 [02:15<08:03, 3.61s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 22%|██▏ | 37/170 [02:28<14:05, 6.36s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 22%|██▏ | 38/170 [02:32<12:20, 5.61s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 23%|██▎ | 39/170 [02:36<10:59, 5.03s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 24%|██▎ | 40/170 [02:39<09:59, 4.62s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 24%|██▍ | 41/170 [02:43<09:26, 4.39s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 25%|██▍ | 42/170 [02:47<09:03, 4.25s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 25%|██▌ | 43/170 [02:51<08:44, 4.13s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 26%|██▌ | 44/170 [02:55<08:29, 4.04s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 26%|██▋ | 45/170 [02:59<08:16, 3.98s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 27%|██▋ | 46/170 [03:02<08:11, 3.96s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 28%|██▊ | 47/170 [03:06<07:58, 3.89s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 28%|██▊ | 48/170 [03:10<07:55, 3.90s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 29%|██▉ | 49/170 [03:14<07:46, 3.85s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 29%|██▉ | 50/170 [03:18<07:38, 3.82s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 30%|███ | 51/170 [03:21<07:33, 3.81s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 31%|███ | 52/170 [03:25<07:31, 3.83s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 31%|███ | 53/170 [03:29<07:31, 3.86s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 32%|███▏ | 54/170 [03:33<07:25, 3.84s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 32%|███▏ | 55/170 [03:37<07:22, 3.85s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 33%|███▎ | 56/170 [03:41<07:21, 3.87s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 34%|███▎ | 57/170 [03:45<07:30, 3.98s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 34%|███▍ | 58/170 [03:49<07:19, 3.92s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 35%|███▍ | 59/170 [03:53<07:18, 3.95s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 35%|███▌ | 60/170 [03:57<07:14, 3.95s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 36%|███▌ | 61/170 [04:01<07:16, 4.00s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 36%|███▋ | 62/170 [04:05<07:22, 4.10s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 37%|███▋ | 63/170 [04:09<07:14, 4.06s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 38%|███▊ | 64/170 [04:13<07:10, 4.06s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 38%|███▊ | 65/170 [04:17<06:59, 3.99s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 39%|███▉ | 66/170 [04:21<07:02, 4.07s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 39%|███▉ | 67/170 [04:25<06:51, 3.99s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 40%|████ | 68/170 [04:29<06:50, 4.02s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 41%|████ | 69/170 [04:33<06:35, 3.91s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 41%|████ | 70/170 [04:37<06:33, 3.94s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 42%|████▏ | 71/170 [04:41<06:27, 3.92s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 42%|████▏ | 72/170 [04:45<06:28, 3.96s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 43%|████▎ | 73/170 [04:49<06:18, 3.90s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 44%|████▎ | 74/170 [04:53<06:16, 3.92s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 44%|████▍ | 75/170 [04:57<06:14, 3.94s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 45%|████▍ | 76/170 [05:01<06:25, 4.10s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 45%|████▌ | 77/170 [05:05<06:16, 4.05s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 46%|████▌ | 78/170 [05:09<06:14, 4.07s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 46%|████▋ | 79/170 [05:13<06:08, 4.05s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 47%|████▋ | 80/170 [05:17<06:08, 4.09s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 48%|████▊ | 81/170 [05:21<05:53, 3.97s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 48%|████▊ | 82/170 [05:25<05:55, 4.04s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 49%|████▉ | 83/170 [05:29<05:47, 3.99s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 49%|████▉ | 84/170 [05:33<05:53, 4.11s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 50%|█████ | 85/170 [05:37<05:41, 4.02s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 51%|█████ | 86/170 [05:41<05:33, 3.97s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 51%|█████ | 87/170 [05:45<05:27, 3.94s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 52%|█████▏ | 88/170 [05:49<05:24, 3.96s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 52%|█████▏ | 89/170 [05:53<05:22, 3.98s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 53%|█████▎ | 90/170 [05:57<05:17, 3.97s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 54%|█████▎ | 91/170 [06:01<05:16, 4.01s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 54%|█████▍ | 92/170 [06:05<05:14, 4.03s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 55%|█████▍ | 93/170 [06:11<05:56, 4.63s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 55%|█████▌ | 94/170 [06:15<05:42, 4.50s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 56%|█████▌ | 95/170 [06:20<05:32, 4.44s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 56%|█████▋ | 96/170 [06:24<05:16, 4.28s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 57%|█████▋ | 97/170 [06:28<05:10, 4.25s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 58%|█████▊ | 98/170 [06:32<04:59, 4.16s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 58%|█████▊ | 99/170 [06:36<04:51, 4.11s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 59%|█████▉ | 100/170 [06:40<04:47, 4.11s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 59%|█████▉ | 101/170 [06:45<05:12, 4.53s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 60%|██████ | 102/170 [06:50<05:07, 4.52s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 61%|██████ | 103/170 [06:54<04:56, 4.42s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 61%|██████ | 104/170 [06:58<04:46, 4.35s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 62%|██████▏ | 105/170 [07:02<04:38, 4.29s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 62%|██████▏ | 106/170 [07:06<04:33, 4.27s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 63%|██████▎ | 107/170 [07:10<04:23, 4.18s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 64%|██████▎ | 108/170 [07:16<04:50, 4.69s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 64%|██████▍ | 109/170 [07:21<04:37, 4.55s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 65%|██████▍ | 110/170 [07:26<04:57, 4.96s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 65%|██████▌ | 111/170 [07:30<04:34, 4.65s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 66%|██████▌ | 112/170 [07:44<07:04, 7.32s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 66%|██████▋ | 113/170 [07:48<06:05, 6.42s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 67%|██████▋ | 114/170 [07:53<05:33, 5.96s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 68%|██████▊ | 115/170 [07:57<04:57, 5.40s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 68%|██████▊ | 116/170 [08:01<04:31, 5.03s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 69%|██████▉ | 117/170 [08:06<04:12, 4.76s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 69%|██████▉ | 118/170 [08:10<03:58, 4.58s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 70%|███████ | 119/170 [08:14<03:51, 4.54s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 71%|███████ | 120/170 [08:19<03:46, 4.52s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 71%|███████ | 121/170 [08:23<03:41, 4.53s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 72%|███████▏ | 122/170 [08:27<03:32, 4.42s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 72%|███████▏ | 123/170 [08:32<03:27, 4.42s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 73%|███████▎ | 124/170 [08:36<03:23, 4.43s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 74%|███████▎ | 125/170 [08:41<03:23, 4.52s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 74%|███████▍ | 126/170 [08:45<03:16, 4.47s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 75%|███████▍ | 127/170 [08:49<03:07, 4.37s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 75%|███████▌ | 128/170 [08:54<03:03, 4.38s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 76%|███████▌ | 129/170 [08:58<02:58, 4.34s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 76%|███████▋ | 130/170 [09:07<03:48, 5.71s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 77%|███████▋ | 131/170 [09:12<03:29, 5.36s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 78%|███████▊ | 132/170 [09:16<03:11, 5.05s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 78%|███████▊ | 133/170 [09:21<03:02, 4.94s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 79%|███████▉ | 134/170 [09:25<02:49, 4.72s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 79%|███████▉ | 135/170 [09:30<02:46, 4.75s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 80%|████████ | 136/170 [09:34<02:38, 4.65s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 81%|████████ | 137/170 [09:38<02:27, 4.48s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 81%|████████ | 138/170 [09:42<02:21, 4.43s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 82%|████████▏ | 139/170 [09:47<02:15, 4.37s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 82%|████████▏ | 140/170 [09:51<02:12, 4.43s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 83%|████████▎ | 141/170 [09:56<02:09, 4.48s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 84%|████████▎ | 142/170 [10:00<02:05, 4.47s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 84%|████████▍ | 143/170 [10:04<01:56, 4.32s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 85%|████████▍ | 144/170 [10:09<01:55, 4.46s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 85%|████████▌ | 145/170 [10:13<01:50, 4.42s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 86%|████████▌ | 146/170 [10:18<01:44, 4.36s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 86%|████████▋ | 147/170 [10:22<01:40, 4.38s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 87%|████████▋ | 148/170 [10:26<01:34, 4.30s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 88%|████████▊ | 149/170 [10:31<01:32, 4.41s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 88%|████████▊ | 150/170 [10:35<01:27, 4.35s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 89%|████████▉ | 151/170 [10:39<01:21, 4.29s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 89%|████████▉ | 152/170 [10:43<01:17, 4.31s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 90%|█████████ | 153/170 [10:48<01:13, 4.31s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 91%|█████████ | 154/170 [10:52<01:09, 4.34s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 91%|█████████ | 155/170 [10:56<01:04, 4.28s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 92%|█████████▏| 156/170 [11:01<00:59, 4.25s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 92%|█████████▏| 157/170 [11:07<01:02, 4.84s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 93%|█████████▎| 158/170 [11:11<00:55, 4.64s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 94%|█████████▎| 159/170 [11:15<00:50, 4.61s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 94%|█████████▍| 160/170 [11:22<00:50, 5.08s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 95%|█████████▍| 161/170 [11:26<00:43, 4.88s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 95%|█████████▌| 162/170 [11:30<00:37, 4.70s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 96%|█████████▌| 163/170 [11:35<00:32, 4.57s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 96%|█████████▋| 164/170 [11:39<00:27, 4.54s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 97%|█████████▋| 165/170 [11:44<00:22, 4.50s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 98%|█████████▊| 166/170 [11:48<00:18, 4.59s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 98%|█████████▊| 167/170 [11:52<00:13, 4.47s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 99%|█████████▉| 168/170 [11:57<00:08, 4.45s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + " 99%|█████████▉| 169/170 [12:01<00:04, 4.49s/it]Setting `pad_token_id` to `eos_token_id`:2 for open-end generation.\n", + "100%|██████████| 170/170 [12:06<00:00, 4.27s/it]\n" ] }, { "data": { "text/plain": [ - "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y'])" + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'X', 'y_hat'])" ] }, - "execution_count": 24, + "execution_count": 19, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "step = 6\n", + "step = 5\n", "context = pipeline.fit(**context, start_=step, output_=step)\n", "context.keys()" ] }, { "cell_type": "code", - "execution_count": 25, - "id": "a934005e-5bce-4a47-831a-3cf1f0c92f28", + "execution_count": 37, + "id": "d587d1d3-9325-4d45-9e15-d69d2d16bb6d", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[[[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]],\n", - " [[]]]" + "(170, 1)" ] }, - "execution_count": 25, + "execution_count": 37, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "context['y']" + "len(context['y_hat']), len(context['y_hat'][0])" ] }, { "attachments": {}, "cell_type": "markdown", - "id": "6b1ff549-c823-4a31-b324-19ee21a8c193", + "id": "dc70e55b-4a3e-43d8-83f8-b998fa88ee29", "metadata": {}, "source": [ - "#### Val2Idx\n", - "this primitive converts integer values into indices they appear in the sequence\n", - "* **input**: \n", - " * `y` sequences of anomalous values\n", - " * `X` input sequences\n", - "* **output**: \n", - " * `y` sequences of anomalous indices" + "#### parse_anomaly_response\n", + "this primitive parses the LLM output to find a list of intervals.\n", + "* **input**: `y_hat` which is a sequence of string output from the LLM\n", + "* **output**: `y` which is a list of indices of anomalies found in `y_hat`" ] }, { "cell_type": "code", - "execution_count": 26, - "id": "32b4ccf9-d8fa-4110-bc22-717d07e3ae0b", + "execution_count": 38, + "id": "5ac4fc58-055d-4210-b330-0832508c1cf4", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y'])" + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'anomalies', 'X', 'y'])" ] }, - "execution_count": 26, + "execution_count": 38, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "step = 7\n", + "step = 6\n", "context = pipeline.fit(**context, start_=step, output_=step)\n", "context.keys()" ] }, { "cell_type": "code", - "execution_count": 27, - "id": "339db91e-cd35-4ae8-abc5-3ba52b6c0bbd", + "execution_count": 39, + "id": "a934005e-5bce-4a47-831a-3cf1f0c92f28", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "(163, 0)" + "170" ] }, - "execution_count": 27, + "execution_count": 39, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "context['y'].shape" + "len(context['y'])" ] }, { @@ -1471,46 +856,46 @@ }, { "cell_type": "code", - "execution_count": 28, + "execution_count": 40, "id": "17ce8982-2ba3-4508-a526-8a9960e0ecd3", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y'])" + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'anomalies', 'X', 'y'])" ] }, - "execution_count": 28, + "execution_count": 40, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "step = 8\n", + "step = 7\n", "context = pipeline.fit(**context, start_=step, output_=step)\n", "context.keys()" ] }, { "cell_type": "code", - "execution_count": 29, + "execution_count": 48, "id": "5274e7a0-acf5-4b9f-9cb4-070357fc7c10", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "array([], dtype=object)" + "(150,)" ] }, - "execution_count": 29, + "execution_count": 48, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "context['y']" + "context['y'].shape" ] }, { @@ -1531,40 +916,47 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 42, "id": "bd219c08-29b2-4809-934b-287dfac4e4fa", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'X', 'y', 'anomalies'])" + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'anomalies', 'X', 'y'])" ] }, - "execution_count": 30, + "execution_count": 42, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "step = 9\n", + "step = 8\n", "context = pipeline.fit(**context, start_=step, output_=step)\n", "context.keys()" ] }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 43, "id": "57f900db-d712-4ff1-986b-7f4dc1accda0", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "[]" + "[(1292587200, 1292954400, 0),\n", + " (1294833600, 1295892000, 0),\n", + " (1323907200, 1324274400, 0),\n", + " (1326153600, 1327212000, 0),\n", + " (1404907200, 1405274400, 0),\n", + " (1407045600, 1408212000, 0),\n", + " (1424347200, 1424714400, 0),\n", + " (1426507200, 1427284800, 0)]" ] }, - "execution_count": 31, + "execution_count": 43, "metadata": {}, "output_type": "execute_result" } @@ -1589,17 +981,40 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 44, + "id": "6d3dc6c5", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "dict_keys(['timestamp', 'minimum', 'decimal', 'first_index', 'window_size', 'step_size', 'dim', 'X_str', 'y_hat', 'anomalies', 'X', 'y'])" + ] + }, + "execution_count": 44, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "step = 9\n", + "context = pipeline.fit(**context, start_=step, output_=step)\n", + "context.keys()" + ] + }, + { + "cell_type": "code", + "execution_count": 45, "id": "a37daebf-7091-4dab-93dc-928c7163778b", "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "0" + "8" ] }, - "execution_count": 32, + "execution_count": 45, "metadata": {}, "output_type": "execute_result" } @@ -1610,7 +1025,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 46, "id": "60064037-5ed6-49f3-ae13-5f4952f5eabf", "metadata": {}, "outputs": [ @@ -1641,17 +1056,71 @@ " \n", " \n", " \n", + " \n", + " 0\n", + " 1292587200\n", + " 1292954400\n", + " 0\n", + " \n", + " \n", + " 1\n", + " 1294833600\n", + " 1295892000\n", + " 0\n", + " \n", + " \n", + " 2\n", + " 1323907200\n", + " 1324274400\n", + " 0\n", + " \n", + " \n", + " 3\n", + " 1326153600\n", + " 1327212000\n", + " 0\n", + " \n", + " \n", + " 4\n", + " 1404907200\n", + " 1405274400\n", + " 0\n", + " \n", + " \n", + " 5\n", + " 1407045600\n", + " 1408212000\n", + " 0\n", + " \n", + " \n", + " 6\n", + " 1424347200\n", + " 1424714400\n", + " 0\n", + " \n", + " \n", + " 7\n", + " 1426507200\n", + " 1427284800\n", + " 0\n", + " \n", " \n", "\n", "" ], "text/plain": [ - "Empty DataFrame\n", - "Columns: [start, end, score]\n", - "Index: []" + " start end score\n", + "0 1292587200 1292954400 0\n", + "1 1294833600 1295892000 0\n", + "2 1323907200 1324274400 0\n", + "3 1326153600 1327212000 0\n", + "4 1404907200 1405274400 0\n", + "5 1407045600 1408212000 0\n", + "6 1424347200 1424714400 0\n", + "7 1426507200 1427284800 0" ] }, - "execution_count": 33, + "execution_count": 46, "metadata": {}, "output_type": "execute_result" } @@ -1659,18 +1128,18 @@ "source": [ "import pandas as pd\n", "\n", - "pd.DataFrame(context['anomalies'], columns=['start', 'end', 'score'])" + "pd.DataFrame(list(context['anomalies']), columns=['start', 'end', 'score'])" ] }, { "cell_type": "code", - "execution_count": null, + "execution_count": 47, "id": "98b221ef-ff0c-4705-9697-e2d240ff756e", "metadata": {}, "outputs": [ { "data": { - "image/png": "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3n//faxevRpFRUX45S9/2eHH15xwHPvq1atx8803Y/369VixYgUcDgcuuOAC1NfXq55rwYIFKC4uVv499dRTHXpsLQnHsQPAaaedpjqutWvXqu6P1PO+adMm1XGvWLECAPDrX/9a9Vxded7betxCdXU15s6dixkzZgTcF6l/60Jzxx6pf+tCc8cO9Iy/9bDzUI8BwPPRRx+1+XG/+MUvPL/97W+V7ydNmuS5+eable9dLpcnNzfXs2TJEo/H4/FUV1d7TCaT5/3331e22b17tweAZ926de0/gFPQUceuVVZW5gHgWb16tXLbOeec47n11lvbsZfh0VHH/uCDD3rGjBkTcvtoOu+33nqrZ+DAgR63263c1p3Oe1uO+/LLL/fcd999Qc9vpP+tN3fsWpH2t97csffEv/Vw4AhOhNu6dSu+//57nHPOOQCApqYmbN68GQUFBco2er0eBQUFWLduHQBg8+bNcDgcqm2GDRuGvn37Ktv0BNpjD6ampgYAkJaWprr97bffRnp6OkaOHInFixejoaEhrPva0UId+/79+5Gbm4sBAwZgzpw5KCwsVO6LlvPe1NSEf/zjH7j22msDmu32tPP++uuv49ChQ3jwwQcD7ov0v/Xmjj2YSPpbb82xR8PfekuistlmNOjTpw/Ky8vhdDrx0EMP4brrrgMAVFRUwOVyISsrS7V9VlYW9uzZAwAoKSlBTEwMUlJSArYpKSnplP0/FaGOXcvtduO2227D1KlTMXLkSOX2q666Cv369UNubi62b9+Oe+65B3v37sWHH37YWYfQbs0d++TJk/HGG29g6NChKC4uxsMPP4yzzjoLO3fuRGJiYtSc948//hjV1dW45pprVLf3tPO+f/9+3Hvvvfj2229hNAa+lUfy33pLx64VSX/rrTn2SP9bby0GOBHq22+/RV1dHdavX497770XgwYNwpVXXtnVu9UpWnvsN998M3bu3BkwN3399dcrX48aNQo5OTmYMWMGDh48iIEDB4Z9/09Fc8d+4YUXKtuNHj0akydPRr9+/fDPf/4T8+fP76pd7jCtPe+vvvoqLrzwQuTm5qpu70nn3eVy4aqrrsLDDz+MIUOGdPXudKr2HHuk/K239tgj/W+9tRjgRKj+/fsD8P7RlpaW4qGHHsKVV16J9PR0GAyGgGz50tJSZGdnAwCys7PR1NSE6upqVYQv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", + "image/png": "iVBORw0KGgoAAAANSUhEUgAAAkMAAAGvCAYAAABYV9H/AAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjUsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvWftoOwAAAAlwSFlzAAAPYQAAD2EBqD+naQAA07ZJREFUeJzsnXmcFMX5/z8zs/fNuQtyg3KoHIIQxAMFBTVG8zNGExOUGIwHyVfxJBEPTMQr3n5jYsTjGw3GRE2MBkUUjYiAIIqAKAgs1+5y7S67y14z8/tjpnuqu5/qqj5mZo96v17obHVd3V1d9dRTTz0ViEajUSgUCoVCoVB0UoLproBCoVAoFApFOlHCkEKhUCgUik6NEoYUCoVCoVB0apQwpFAoFAqFolOjhCGFQqFQKBSdGiUMKRQKhUKh6NQoYUihUCgUCkWnRglDCoVCoVAoOjUZ6a5AOohEItizZw8KCwsRCATSXR2FQqFQKBQSRKNRHD58GL1790Yw6J8+p1MKQ3v27EHfvn3TXQ2FQqFQKBQu2LlzJ/r06eNbfp1SGCosLAQQe5hFRUVprg2HhgZg+fLY70mTgLw8a7j5WmeHemZaWFZWLLy5WT0zReeivX8XDQ3A5s3A0KGqH1SgtrYWffv21cdxv+iUwpC2NFZUVNR2haGMDCA/P/a7qCjxoWvhmZlAS4vxWmeHemZamPbhHD6snpmic9Hev4uMDKCgQPWDCgN+m7goA2qFQqFQKBSdGiUMKRQKhUKh6NR0ymUyWcLhMFpaWtJTeFMTEAolfmtW81p4MBj7P3uts0M9My1MU6mqZ6aTmZmJkPa8FAqFohOjhCGCaDSKiooKVFdXp68SkQjQrVvs9549icFbCw8EgGjUeK2zQz0zLUx7Rjk56pkxlJSUoKysTLmYUCgUnRolDBFoglDPnj2Rl5eXnoEiHI7tmABihoHaDF4L14Qh9lpnh3pmWhgrTKpnhmg0ioaGBlRVVQEAevXqleYaKRQKRfpQwpCJcDisC0LdNC1DeioCtLbGfufkGIWh1taEMMRe6+xQz0wLY5+femYAgNzcXABAVVUVevbsqZbMFApFp0WtFZjQbITy1DZNRSdAa+dps41TKBSKNoAShjgoGwpFZ0C1c4VCoVDCkEKhUCgUik5OUoWhDz/8EOeddx569+6NQCCA119/XZhm2bJlOOGEE5CdnY0hQ4bgueees8R58sknMWDAAOTk5GDChAlYtWqV/5XvJNx5550YPXq0ozSTJ0/Gddddl/Z6KBQKhULhB0kVhurr6zFq1Cg8+eSTUvG3bduGc889F6effjrWrVuH6667Dj//+c/x9ttv63FefvllzJkzB3fccQfWrl2LUaNGYdq0afquGIUzbrzxRixdutRRmldffRV33313kmqkUCgUCkVqSepusrPPPhtnn322dPynnnoKAwcOxO9//3sAwPDhw/HRRx/h4YcfxrRp0wAADz30EGbNmoWZM2fqad58800sXLgQt956q/830UGJRqMIh8MoKChAQUGBo7Rdu3ZNUq0UCoVCoUg9bcpmaMWKFZg6daohbNq0aVixYgUAoLm5GWvWrDHECQaDmDp1qh6HoqmpCbW1tYZ/HZGmpib86le/Qs+ePZGTk4OTTz4Zq1evBhBbfgwEAvjPf/6DsWPHIjs7Gx999JFleaq1tRW/+tWvUFJSgm7duuGWW27BZZddhgsuuECPY14mGzBgAO655x787Gc/Q2FhIfr164c//elPhrrdcsstOOaYY5CXl4dBgwZh3rx5ageTQtGGeOC9b3H5s6vwybcH0l0VhSLltClhqKKiAqWlpYaw0tJS1NbW4siRI9i/fz/C4TAZp6KigpvvggULUFxcrP/r27evo3pFo1E0NLem/F80GnVUz5tvvhn/+Mc/8Pzzz2Pt2rUYMmQIpk2bhoMHD+pxbr31Vtx7773YtGkTRo4cacnjvvvuw4svvohnn30Wy5cvR21trZSt1+9//3uMGzcOn332Ga655hpcffXV2Lx5s369sLAQzz33HDZu3IhHH30UTz/9NB5++GFH96dQKJJDZVMUT360A8s278Of//ttuqujUKScTuF0ce7cuZgzZ47+d21trSOB6EhLGCNuf1sc0Wc23jAReVlyjvDq6+vxhz/8Ac8995y+NPn0009jyZIleOaZZ3DiiScCAObPn48zzzyTm8/jjz+OuXPn4vvf/z4A4IknnsBbb70lLP+cc87BNddcAyCmBXr44Yfx/vvvY+jQoQCA2267TY87YMAA3HjjjVi0aBFuvvlmqftTKBTJ40g48buxJZK+iigUaaJNCUNlZWWorKw0hFVWVqKoqAi5ubkIhUIIhUJknLKyMm6+2dnZyM7OTkqd2wpbt25FS0sLJk2a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", "text/plain": [ "
" ] @@ -1688,19 +1157,11 @@ " plt.axvspan(*ano[:2], color='r', alpha=0.2, label='detected anomalies')\n", "plt.legend(['original', 'detected anomalies']);" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "ee002d85-571a-4ecd-8f9d-99cb84808d7f", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { "kernelspec": { - "display_name": "sigllm", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -1714,7 +1175,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.10.16" + "version": "3.10.18" } }, "nbformat": 4, From 61a57db1b461e8d3c91f1c4e31beb0e1ea426a07 Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish Date: Thu, 21 Aug 2025 11:53:04 -0400 Subject: [PATCH 10/12] update tutorial output --- ...ltivariate-mistral-prompter-pipeline.ipynb | 425 +++++++++--------- 1 file changed, 214 insertions(+), 211 deletions(-) diff --git a/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb b/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb index 580f26f..f8ae36b 100644 --- a/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb +++ b/tutorials/pipelines/multivariate-mistral-prompter-pipeline.ipynb @@ -78,7 +78,7 @@ }, { "cell_type": "code", - "execution_count": null, + "execution_count": 4, "id": "1029c7ee-8a42-4452-8bc0-20c0fb45b8d9", "metadata": {}, "outputs": [], @@ -110,13 +110,13 @@ "name": "stderr", "output_type": "stream", "text": [ - "2025-08-21 10:39:00.042451: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n", - "2025-08-21 10:39:00.075478: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", - "2025-08-21 10:39:00.075513: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", - "2025-08-21 10:39:00.075545: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", - "2025-08-21 10:39:00.082435: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", + "2025-08-21 11:15:59.875347: I tensorflow/tsl/cuda/cudart_stub.cc:28] Could not find cuda drivers on your machine, GPU will not be used.\n", + "2025-08-21 11:15:59.908851: E tensorflow/compiler/xla/stream_executor/cuda/cuda_dnn.cc:9342] Unable to register cuDNN factory: Attempting to register factory for plugin cuDNN when one has already been registered\n", + "2025-08-21 11:15:59.908885: E tensorflow/compiler/xla/stream_executor/cuda/cuda_fft.cc:609] Unable to register cuFFT factory: Attempting to register factory for plugin cuFFT when one has already been registered\n", + "2025-08-21 11:15:59.908914: E tensorflow/compiler/xla/stream_executor/cuda/cuda_blas.cc:1518] Unable to register cuBLAS factory: Attempting to register factory for plugin cuBLAS when one has already been registered\n", + "2025-08-21 11:15:59.915930: I tensorflow/core/platform/cpu_feature_guard.cc:182] This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.\n", "To enable the following instructions: AVX2 AVX512F FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.\n", - "2025-08-21 10:39:00.757008: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", + "2025-08-21 11:16:00.590843: W tensorflow/compiler/tf2tensorrt/utils/py_utils.cc:38] TF-TRT Warning: Could not find TensorRT\n", "Loading checkpoint shards: 100%|██████████| 3/3 [00:04<00:00, 1.50s/it]\n" ] } @@ -570,183 +570,177 @@ "name": "stderr", "output_type": "stream", "text": [ - " 0%| | 0/170 [00:00 Date: Tue, 2 Sep 2025 14:42:14 -0400 Subject: [PATCH 11/12] update docstrings on `get --- sigllm/primitives/prompting/huggingface.py | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/sigllm/primitives/prompting/huggingface.py b/sigllm/primitives/prompting/huggingface.py index 9d7c873..32ca792 100644 --- a/sigllm/primitives/prompting/huggingface.py +++ b/sigllm/primitives/prompting/huggingface.py @@ -25,14 +25,17 @@ def get_examples(text, k=3): - """Extracts the content within the first three sets of parentheses in a string. + """Extracts the content within the first k sets of parentheses in a string. Args: - text (str): Input string. + text (str): + Input string. + k (int): + Number of examples to return. Returns: list: - A list containing the content within the first three sets of parentheses. + A list containing the content within the first k sets of parentheses. """ matches = re.findall(r'\(([^)]*)\)', text) return matches[:k] From 9a10724cca94cc5ad928f833542a8cac4dbf0f63 Mon Sep 17 00:00:00 2001 From: Sarah Alnegheimish <40212131+sarahmish@users.noreply.github.com> Date: Tue, 2 Sep 2025 14:50:59 -0400 Subject: [PATCH 12/12] remove trailing whitespace --- sigllm/primitives/prompting/huggingface.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sigllm/primitives/prompting/huggingface.py b/sigllm/primitives/prompting/huggingface.py index 32ca792..9974a50 100644 --- a/sigllm/primitives/prompting/huggingface.py +++ b/sigllm/primitives/prompting/huggingface.py @@ -28,7 +28,7 @@ def get_examples(text, k=3): """Extracts the content within the first k sets of parentheses in a string. Args: - text (str): + text (str): Input string. k (int): Number of examples to return.