blue-assistant 4.53.1__py3-none-any.whl → 4.66.1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
blue_assistant/README.py CHANGED
@@ -17,14 +17,17 @@ items = [
17
17
 
18
18
 
19
19
  def build():
20
- return README.build(
21
- items=items,
22
- path=os.path.join(file.path(__file__), ".."),
23
- ICON=ICON,
24
- NAME=NAME,
25
- VERSION=VERSION,
26
- REPO_NAME=REPO_NAME,
20
+ return all(
21
+ README.build(
22
+ items=readme.get("items", []),
23
+ path=os.path.join(file.path(__file__), readme["path"]),
24
+ ICON=ICON,
25
+ NAME=NAME,
26
+ VERSION=VERSION,
27
+ REPO_NAME=REPO_NAME,
28
+ )
29
+ for readme in [
30
+ {"items": items, "path": ".."},
31
+ {"path": "docs/blue-amo-01.md"},
32
+ ]
27
33
  )
28
-
29
-
30
-
@@ -4,7 +4,7 @@ ICON = "🧠"
4
4
 
5
5
  DESCRIPTION = f"{ICON} An AI Assistant."
6
6
 
7
- VERSION = "4.53.1"
7
+ VERSION = "4.66.1"
8
8
 
9
9
  REPO_NAME = "blue-assistant"
10
10
 
blue_assistant/config.env CHANGED
@@ -1 +1,3 @@
1
- BLUE_ASSISTANT_TEST_OBJECT=blue-amo
1
+ BLUE_ASSISTANT_DEFAULT_MODEL=gpt-4o
2
+
3
+ BLUE_ASSISTANT_MAX_TOKEN=2000
blue_assistant/env.py CHANGED
@@ -5,7 +5,13 @@ load_env(__name__)
5
5
  load_config(__name__)
6
6
 
7
7
 
8
- BLUE_ASSISTANT_TEST_OBJECT = os.getenv(
9
- "BLUE_ASSISTANT_TEST_OBJECT",
8
+ BLUE_ASSISTANT_DEFAULT_MODEL = os.getenv(
9
+ "BLUE_ASSISTANT_DEFAULT_MODEL",
10
10
  "",
11
11
  )
12
+
13
+ BLUE_ASSISTANT_MAX_TOKEN_str = os.getenv("BLUE_ASSISTANT_MAX_TOKEN", "")
14
+ try:
15
+ BLUE_ASSISTANT_MAX_TOKEN = int(BLUE_ASSISTANT_MAX_TOKEN_str)
16
+ except Exception:
17
+ BLUE_ASSISTANT_MAX_TOKEN = 2000
@@ -28,7 +28,7 @@ parser.add_argument(
28
28
  parser.add_argument(
29
29
  "--verbose",
30
30
  type=int,
31
- default=0,
31
+ default=1,
32
32
  help="0 | 1",
33
33
  )
34
34
  parser.add_argument(
@@ -58,11 +58,12 @@ if args.task == "list":
58
58
  elif args.task == "run":
59
59
  success, script = load_script(
60
60
  script_name=args.script_name,
61
+ object_name=args.object_name,
61
62
  verbose=args.verbose == 1,
62
63
  )
63
64
 
64
65
  if success:
65
- success = script.run(object_name=args.object_name)
66
+ success = script.run()
66
67
  else:
67
68
  success = None
68
69
 
@@ -1,4 +1,4 @@
1
- from typing import List, Dict, Tuple, Type
1
+ from typing import List
2
2
 
3
3
  from blue_assistant.script.actions.generic import GenericAction
4
4
  from blue_assistant.script.actions.generate_image import GenerateImageAction
@@ -12,29 +12,3 @@ list_of_actions: List[GenericAction] = [
12
12
  GenerateTextAction,
13
13
  WorkInProgressAction,
14
14
  ]
15
-
16
-
17
- def get_action_class(
18
- action_name: str,
19
- ) -> Tuple[bool, Type[GenericAction]]:
20
- for action_class in list_of_actions:
21
- if action_class.name == action_name:
22
- return True, action_class
23
-
24
- logger.error(f"{action_name}: action not found.")
25
- return False, GenericAction
26
-
27
-
28
- def perform_action(
29
- action_name: str,
30
- node: Dict,
31
- ) -> Tuple[bool, Dict]:
32
- success, action_class = get_action_class(action_name=action_name)
33
- if not success:
34
- return False, {
35
- "error": f"{action_name}: action not found.",
36
- }
37
-
38
- action_object = action_class(node=node)
39
-
40
- return action_object.perform()
@@ -0,0 +1,48 @@
1
+ from typing import List, Dict, Tuple, Type
2
+
3
+ from blueness import module
4
+ from blue_assistant.script.actions.generic import GenericAction
5
+ from blue_assistant.script.repository.base.classes import BaseScript
6
+ from blue_assistant.script.actions import list_of_actions
7
+
8
+ from blue_assistant import NAME
9
+ from blue_assistant.logger import logger
10
+
11
+ NAME = module.name(__file__, NAME)
12
+
13
+
14
+ def get_action_class(
15
+ action_name: str,
16
+ ) -> Tuple[bool, Type[GenericAction]]:
17
+ for action_class in list_of_actions:
18
+ if action_class.name == action_name:
19
+ return True, action_class
20
+
21
+ logger.error(f"{action_name}: action not found.")
22
+ return False, GenericAction
23
+
24
+
25
+ def perform_action(
26
+ script: BaseScript,
27
+ node_name: str,
28
+ ) -> bool:
29
+ action_name = script.nodes[node_name].get("action", "unknown")
30
+
31
+ success, action_class = get_action_class(action_name=action_name)
32
+ if not success:
33
+ return success
34
+
35
+ logger.info(
36
+ "{}.perform_action: {} == {} on {}".format(
37
+ NAME,
38
+ action_name,
39
+ action_class.__name__,
40
+ node_name,
41
+ )
42
+ )
43
+
44
+ action_object = action_class(
45
+ script=script,
46
+ )
47
+
48
+ return action_object.perform(node_name=node_name)
@@ -9,13 +9,13 @@ from blue_assistant.logger import logger
9
9
  class GenerateImageAction(GenericAction):
10
10
  name = file.name(__file__)
11
11
 
12
- def perform(self) -> Tuple[bool, Dict]:
13
- success, generic_metadata = super().perform()
14
- if not success:
15
- return success, generic_metadata
12
+ def perform(
13
+ self,
14
+ node_name: str,
15
+ ) -> bool:
16
+ if not super().perform(node_name=node_name):
17
+ return False
16
18
 
17
- logger.info(f"🪄 generating image ...: {self.node}")
18
- metadata = {}
19
+ logger.info(f"🪄 generating image ...: {node_name}")
19
20
 
20
- metadata.update(generic_metadata)
21
- return True, metadata
21
+ return True
@@ -1,21 +1,93 @@
1
- from typing import Dict, Tuple
1
+ from typing import Dict, Tuple, List
2
+ from openai import OpenAI
3
+ import pprint
2
4
 
5
+ from blueness import module
3
6
  from blue_objects import file
7
+ from openai_commands.env import OPENAI_API_KEY
4
8
 
9
+ from blue_assistant import NAME
10
+ from blue_assistant.env import BLUE_ASSISTANT_DEFAULT_MODEL, BLUE_ASSISTANT_MAX_TOKEN
5
11
  from blue_assistant.script.actions.generic import GenericAction
6
12
  from blue_assistant.logger import logger
7
13
 
14
+ NAME = module.name(__file__, NAME)
15
+
8
16
 
9
17
  class GenerateTextAction(GenericAction):
10
18
  name = file.name(__file__)
11
19
 
12
- def perform(self) -> Tuple[bool, Dict]:
13
- success, generic_metadata = super().perform()
14
- if not success:
15
- return success, generic_metadata
20
+ def perform(
21
+ self,
22
+ node_name: str,
23
+ ) -> bool:
24
+ if not OPENAI_API_KEY:
25
+ logger.error("OPENAI_API_KEY is not set.")
26
+ return False
27
+
28
+ if not super().perform(node_name=node_name):
29
+ return False
30
+
31
+ messages: List = []
32
+ node_history = self.script.get_history(node_name)
33
+ logger.info("node history: {}".format(node_history))
34
+ for successor in reversed(node_history):
35
+ messages += [
36
+ {
37
+ "role": "user",
38
+ "content": [
39
+ {
40
+ "type": "text",
41
+ "text": self.script.apply_vars(
42
+ self.script.nodes[successor]["prompt"]
43
+ ),
44
+ }
45
+ ],
46
+ }
47
+ ]
48
+
49
+ if self.script.G.nodes[successor]["completed"]:
50
+ messages += [
51
+ {
52
+ "role": "assistant",
53
+ "content": [
54
+ {
55
+ "type": "text",
56
+ "text": self.script.nodes[successor]["output"],
57
+ }
58
+ ],
59
+ }
60
+ ]
61
+
62
+ if self.script.verbose:
63
+ logger.info(f"messages: {pprint.pformat(messages)}")
64
+
65
+ client = OpenAI(api_key=OPENAI_API_KEY)
66
+
67
+ try:
68
+ response = client.chat.completions.create(
69
+ messages=messages,
70
+ model=BLUE_ASSISTANT_DEFAULT_MODEL,
71
+ max_tokens=BLUE_ASSISTANT_MAX_TOKEN,
72
+ )
73
+ except Exception as e:
74
+ logger.error(str(e))
75
+ return False
76
+
77
+ if self.script.verbose:
78
+ logger.info("response: {}".format(response))
79
+
80
+ if not response.choices:
81
+ logger.error("no choice.")
82
+ return False
83
+
84
+ output = response.choices[0].message.content
85
+ logger.info(f"🗣️ output: {output}")
86
+
87
+ self.script.G.nodes[node_name]["output"] = output
16
88
 
17
- logger.info(f"🪄 generating text ...: {self.node}")
18
- metadata = {}
89
+ var_name = self.script.nodes[node_name].get("output", "")
90
+ if var_name:
91
+ self.script.vars[var_name] = output
19
92
 
20
- metadata.update(generic_metadata)
21
- return True, metadata
93
+ return True
@@ -4,6 +4,7 @@ from blueness import module
4
4
  from blue_objects import file
5
5
 
6
6
  from blue_assistant import NAME
7
+ from blue_assistant.script.repository.base.classes import BaseScript
7
8
  from blue_assistant.logger import logger
8
9
 
9
10
  NAME = module.name(__file__, NAME)
@@ -12,14 +13,22 @@ NAME = module.name(__file__, NAME)
12
13
  class GenericAction:
13
14
  name = file.name(__file__)
14
15
 
15
- def __init__(self, node: Dict):
16
- self.node = node
16
+ def __init__(
17
+ self,
18
+ script: BaseScript,
19
+ ):
20
+ self.script = script
17
21
 
18
- def perform(self) -> Tuple[bool, Dict]:
22
+ def perform(
23
+ self,
24
+ node_name: str,
25
+ ) -> bool:
19
26
  logger.info(
20
- "{}.perform({}) ...".format(
27
+ "{}.perform({}) on {}.{} ...".format(
21
28
  NAME,
22
29
  self.__class__.__name__,
30
+ self.script.name,
31
+ node_name,
23
32
  ),
24
33
  )
25
- return True, {}
34
+ return True
@@ -1,17 +1,27 @@
1
- from typing import Tuple
1
+ from typing import Tuple, Type
2
2
 
3
3
  from blue_assistant.script.repository import list_of_script_classes
4
- from blue_assistant.script.repository.generic import GenericScript
4
+ from blue_assistant.script.repository.base.classes import BaseScript
5
5
  from blue_assistant.logger import logger
6
6
 
7
7
 
8
8
  def load_script(
9
9
  script_name: str,
10
+ object_name: str,
10
11
  verbose: bool = False,
11
- ) -> Tuple[bool, GenericScript]:
12
- for script_class in list_of_script_classes:
13
- if script_class.name == script_name:
14
- return True, script_class(verbose=verbose)
12
+ ) -> Tuple[bool, BaseScript]:
13
+ found: bool = False
14
+ script_class: Type[BaseScript] = BaseScript
15
+ for script_class_option in list_of_script_classes:
16
+ if script_class_option.name == script_name:
17
+ found = True
18
+ script_class = script_class_option
19
+ break
15
20
 
16
- logger.error(f"{script_name}: script not found.")
17
- return False, GenericScript(verbose=verbose)
21
+ if not found:
22
+ logger.error(f"{script_name}: script not found.")
23
+
24
+ return found, script_class(
25
+ object_name=object_name,
26
+ verbose=verbose,
27
+ )
@@ -1,6 +1,6 @@
1
1
  from typing import List, Type
2
2
 
3
- from blue_assistant.script.repository.generic import GenericScript
3
+ from blue_assistant.script.repository.generic.classes import GenericScript
4
4
  from blue_assistant.script.repository.blue_amo.classes import BlueAmoScript
5
5
  from blue_assistant.script.repository.hue.classes import HueScript
6
6
  from blue_assistant.script.repository.moon_datasets.classes import MiningOnMoonScript
@@ -8,94 +8,59 @@ from blue_objects import file, path
8
8
  from blue_objects.metadata import post_to_object
9
9
 
10
10
  from blue_assistant import NAME
11
- from blue_assistant.script.actions import perform_action
11
+ from blue_assistant.script.repository.base.classes import BaseScript
12
+ from blue_assistant.script.actions.functions import perform_action
12
13
  from blue_assistant.logger import logger
13
14
 
14
15
 
15
16
  NAME = module.name(__file__, NAME)
16
17
 
17
18
 
18
- class GenericScript:
19
+ class GenericScript(BaseScript):
19
20
  name = path.name(file.path(__file__))
20
21
 
21
- def __init__(
22
- self,
23
- verbose: bool = False,
24
- ):
25
- self.verbose = verbose
26
-
27
- metadata_filename = os.path.join(
28
- file.path(__file__),
29
- f"../{self.name}",
30
- "metadata.yaml",
31
- )
32
- self.metadata: Dict
33
- success, self.metadata = file.load_yaml(metadata_filename)
34
- assert success, f"cannot load {self.name}/metadata.yaml"
35
-
36
- logger.info("loaded {} node(s)".format(len(self.nodes)))
37
-
38
- logger.info("loaded {} variable(s)".format(len(self.vars)))
39
- if verbose:
40
- for var_name, var_value in self.vars.items():
41
- logger.info("{}: {}".format(var_name, var_value))
42
-
43
- @property
44
- def script(self) -> str:
45
- return self.metadata.get("script", {})
46
-
47
- @property
48
- def nodes(self) -> str:
49
- return self.metadata.get("script", {}).get("nodes", [])
50
-
51
- @property
52
- def vars(self) -> str:
53
- return self.metadata.get("script", {}).get("vars", {})
54
-
55
22
  def run(
56
23
  self,
57
- object_name: str,
58
24
  ) -> bool:
59
- logger.info(
60
- "{}.run: {}:{} -> {}".format(
61
- NAME,
62
- self.__class__.__name__,
63
- self.name,
64
- object_name,
65
- )
66
- )
67
-
68
- if not post_to_object(
69
- object_name,
70
- "script",
71
- self.script,
72
- ):
25
+ if not super().run():
73
26
  return False
74
27
 
75
28
  metadata: Dict[Dict] = {"nodes": {}}
76
29
  success: bool = True
77
- for node_name, node in tqdm(self.nodes.items()):
78
- logger.info(
79
- "{}{}".format(
80
- node_name,
81
- f": {node}" if self.verbose else " ...",
82
- )
83
- )
84
-
85
- assert isinstance(node, dict)
86
- success, output = perform_action(
87
- action_name=node.get("action", "unknown"),
88
- node=node,
89
- )
90
- metadata["nodes"][node_name] = {
91
- "success": success,
92
- "output": output,
93
- }
94
- if not success:
95
- break
30
+ while (
31
+ not all(self.G.nodes[node]["completed"] for node in self.G.nodes)
32
+ and success
33
+ ):
34
+ for node_name in tqdm(self.G.nodes):
35
+ if self.G.nodes[node_name]["completed"]:
36
+ continue
37
+
38
+ pending_dependencies = [
39
+ node_name_
40
+ for node_name_ in self.G.successors(node_name)
41
+ if not self.G.nodes[node_name_]["completed"]
42
+ ]
43
+ if pending_dependencies:
44
+ logger.info(
45
+ 'node "{}": {} pending dependenci(es): {}'.format(
46
+ node_name,
47
+ len(pending_dependencies),
48
+ ", ".join(pending_dependencies),
49
+ )
50
+ )
51
+ continue
52
+
53
+ if not perform_action(
54
+ script=self,
55
+ node_name=node_name,
56
+ ):
57
+ success = False
58
+ break
59
+
60
+ self.G.nodes[node_name]["completed"] = True
96
61
 
97
62
  if not post_to_object(
98
- object_name,
63
+ self.object_name,
99
64
  "output",
100
65
  metadata,
101
66
  ):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: blue_assistant
3
- Version: 4.53.1
3
+ Version: 4.66.1
4
4
  Summary: 🧠 An AI Assistant.
5
5
  Home-page: https://github.com/kamangir/blue-assistant
6
6
  Author: Arash Abadpour (Kamangir)
@@ -16,7 +16,9 @@ Requires-Dist: blueness
16
16
  Requires-Dist: blue-options
17
17
  Requires-Dist: abcli
18
18
  Requires-Dist: openai_commands
19
+ Requires-Dist: blueflow
19
20
  Requires-Dist: boto3
21
+ Requires-Dist: openai
20
22
  Requires-Dist: geojson
21
23
  Requires-Dist: geopandas
22
24
  Requires-Dist: matplotlib
@@ -28,6 +30,8 @@ Requires-Dist: pylint
28
30
  Requires-Dist: pytest
29
31
  Requires-Dist: python-dotenv[cli]
30
32
  Requires-Dist: tqdm
33
+ Requires-Dist: networkx
34
+ Requires-Dist: pydot
31
35
  Dynamic: author
32
36
  Dynamic: author-email
33
37
  Dynamic: classifier
@@ -68,4 +72,4 @@ graph LR
68
72
 
69
73
  [![pylint](https://github.com/kamangir/blue-assistant/actions/workflows/pylint.yml/badge.svg)](https://github.com/kamangir/blue-assistant/actions/workflows/pylint.yml) [![pytest](https://github.com/kamangir/blue-assistant/actions/workflows/pytest.yml/badge.svg)](https://github.com/kamangir/blue-assistant/actions/workflows/pytest.yml) [![bashtest](https://github.com/kamangir/blue-assistant/actions/workflows/bashtest.yml/badge.svg)](https://github.com/kamangir/blue-assistant/actions/workflows/bashtest.yml) [![PyPI version](https://img.shields.io/pypi/v/blue-assistant.svg)](https://pypi.org/project/blue-assistant/) [![PyPI - Downloads](https://img.shields.io/pypi/dd/blue-assistant)](https://pypistats.org/packages/blue-assistant)
70
74
 
71
- built by 🌀 [`blue_options-4.207.1`](https://github.com/kamangir/awesome-bash-cli), based on 🧠 [`blue_assistant-4.53.1`](https://github.com/kamangir/blue-assistant).
75
+ built by 🌀 [`blue_options-4.207.1`](https://github.com/kamangir/awesome-bash-cli), based on 🧠 [`blue_assistant-4.66.1`](https://github.com/kamangir/blue-assistant).
@@ -1,8 +1,8 @@
1
- blue_assistant/README.py,sha256=q6EWCy7zojQESGDF-2xEoXS1Bl0wRJTe2jw_1QM_WYw,600
2
- blue_assistant/__init__.py,sha256=ijv5qglSsBVMM0y7yEZ0y93LdWuwIKBCbQpDONBb8qk,310
1
+ blue_assistant/README.py,sha256=Nzr3v-VSa8CISkqkLHd8ILyY_WiJ7x2igYPH-lYpzEY,795
2
+ blue_assistant/__init__.py,sha256=0v_LdK6vN-oGFPitqPD_ntVE3VlcyYyrddqz4xbjDnM,310
3
3
  blue_assistant/__main__.py,sha256=URtal70XZc0--3FDTYWcLtnGOqBYjMX9gt-L1k8hDXI,361
4
- blue_assistant/config.env,sha256=es6XIU6yOA69IV0WXtLru5uTM5Dvvmq-q6BJmcE8NyY,36
5
- blue_assistant/env.py,sha256=TG2YL5jn7qJApHIGi7IuXvqcPFT771zXKJHomGC63Z4,189
4
+ blue_assistant/config.env,sha256=JV9zx17FflIPmV1hK-yuM0GlrUjkGuaQ_EzPFPTkoXM,66
5
+ blue_assistant/env.py,sha256=rgIlKVsALrRD1sYJV3SkFfzIvWNavix2HN0sSy2cCi4,391
6
6
  blue_assistant/functions.py,sha256=ajz1GSNU9xYVrFEDSz6Xwg7amWQ_yvW75tQa1ZvRIWc,3
7
7
  blue_assistant/host.py,sha256=SapEe4s9J-7gV3F9JuWEmSfslCeWuJ5f7a-nFObFBrI,208
8
8
  blue_assistant/logger.py,sha256=3MfsXwivdRfVPjAjqdQld3iOg9JB6olbACL8t8gIRgI,105
@@ -26,22 +26,23 @@ blue_assistant/help/__main__.py,sha256=cVejR7OpoWPg0qLbm-PZf5TuJS27x49jzfiyCLyzE
26
26
  blue_assistant/help/functions.py,sha256=9WsmXGMN-R7sqlkGLK0nY90Peg8Gah4rIu75QbLhImo,689
27
27
  blue_assistant/help/script.py,sha256=wvS_5FWu9LAsaDDq7UoxXEadRwGseYqwu2P-9dNc5Bo,1077
28
28
  blue_assistant/script/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
29
- blue_assistant/script/__main__.py,sha256=KLsDL226oI4aQDGeWEYfMdawIa766hCDNj8LZbeRjjI,1519
30
- blue_assistant/script/load.py,sha256=9hzXmHzJ9t8VcWna-oZbo7GWYDUnHou5LUMWD9l0HmA,555
31
- blue_assistant/script/actions/__init__.py,sha256=Hu7M_RpqbJN1xOi6v7qypGc42VRc7qL3oWuDf2ON0NE,1149
32
- blue_assistant/script/actions/generate_image.py,sha256=mKRWOJ2wqarkSqbhkSmF_wpQKq30lUhHw7Xb0beFmLc,570
33
- blue_assistant/script/actions/generate_text.py,sha256=_yRn_fKe9Fbu6-5r6T_F38LuLvNkBXdA7CEQIl_YcYE,568
34
- blue_assistant/script/actions/generic.py,sha256=jdut1FJwEmYJ8IH20QOlbHr4eKq5lakF-ydJRdxKsCc,535
29
+ blue_assistant/script/__main__.py,sha256=D5APoSVe-l5H0Nrgyq5do4cSbmRyYmflq1x_Dd5d1fM,1529
30
+ blue_assistant/script/load.py,sha256=Bd5L9HBL0Yh1MLGAyGrQX3XQLH-UiOWLsHJvzCmNs3g,773
31
+ blue_assistant/script/actions/__init__.py,sha256=8Sp6avoJGDXVORvx5mvkxTNaxjz_KevKN4Wb8qLZHsQ,487
32
+ blue_assistant/script/actions/functions.py,sha256=0fiihOWbFiwZEXV6t9oxJaxJ5E5X-k3weqGTOKTu3sA,1233
33
+ blue_assistant/script/actions/generate_image.py,sha256=bGDdP9XfBtFFFNL4d7DA7_FJvsFKadPOgwVAXkFgyjE,477
34
+ blue_assistant/script/actions/generate_text.py,sha256=rKDjY_keN_E_vdboQ_SqG2APyUanpAKRDVGCxzghO3k,2817
35
+ blue_assistant/script/actions/generic.py,sha256=dIjqocIEpLEb1BI76kHivVpDUG5QpeZHLA2onsYn1SU,731
35
36
  blue_assistant/script/actions/wip.py,sha256=K4kJE4bn3u6o-QWTESPydO_eD54zOwZbU9WLAO94z1Q,171
36
- blue_assistant/script/repository/__init__.py,sha256=daNjBpj8gflXHcw5LR7vsIlDkRYH5-thMzJL3Al7Dnk,565
37
+ blue_assistant/script/repository/__init__.py,sha256=WFkbe-6yyljpmeVpXgLhOPt-YRc7BwkRNzPO-7Wz0Dg,573
37
38
  blue_assistant/script/repository/blue_amo/__init__.py,sha256=WjL9GIlN-DBnbUMJ8O_FxTp0rcVGlsIS3H9YtXEefTk,76
38
39
  blue_assistant/script/repository/blue_amo/classes.py,sha256=RY1gjZVPX8xu7nfeiZoTL8RTpu73RsoaNv4ZoGv9NNs,234
39
40
  blue_assistant/script/repository/generic/__init__.py,sha256=kLffGsQMQAFJTw6IZBE5eBxvshP1x9wwHHR4hsDJblo,75
40
- blue_assistant/script/repository/generic/classes.py,sha256=Rpctzo1E8XD30woNymDNu7oFgBOdVsW6GzWHuIHQ3y0,2656
41
+ blue_assistant/script/repository/generic/classes.py,sha256=X6h-cWFleUQF9flyq6ClYSdi5ysGOTsy156w8jT1wvY,1964
41
42
  blue_assistant/script/repository/moon_datasets/__init__.py,sha256=aCtmP2avh3yKAJ668S3GsLR9vbBOm5zt9FSFCqy_tAs,86
42
43
  blue_assistant/script/repository/moon_datasets/classes.py,sha256=68zThDhjF9gGRnsw8EKNLGOMBFbCSljt0jGovuOzCAc,197
43
- blue_assistant-4.53.1.dist-info/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
44
- blue_assistant-4.53.1.dist-info/METADATA,sha256=gJZxJdSYagLNbM9EzJS6wyAg7wTrmzmKXsR66nRsixg,2534
45
- blue_assistant-4.53.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
46
- blue_assistant-4.53.1.dist-info/top_level.txt,sha256=ud0BkBbdOVze13bNqHuhZj1rwCztaBtDf5ChEYzASOs,15
47
- blue_assistant-4.53.1.dist-info/RECORD,,
44
+ blue_assistant-4.66.1.dist-info/LICENSE,sha256=ogEPNDSH0_dhiv_lT3ifVIdgIzHAqNA_SemnxUfPBJk,7048
45
+ blue_assistant-4.66.1.dist-info/METADATA,sha256=o9HM9_F9s8xZ0lhJhtngCE2qqdbASHaRGOMzhuFw4XE,2625
46
+ blue_assistant-4.66.1.dist-info/WHEEL,sha256=In9FTNxeP60KnTkGw7wk6mJPYd_dQSjEZmXdBdMCI-8,91
47
+ blue_assistant-4.66.1.dist-info/top_level.txt,sha256=ud0BkBbdOVze13bNqHuhZj1rwCztaBtDf5ChEYzASOs,15
48
+ blue_assistant-4.66.1.dist-info/RECORD,,