ara-cli 0.1.9.92__py3-none-any.whl → 0.1.9.94__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.
ara_cli/prompt_handler.py CHANGED
@@ -17,47 +17,84 @@ import logging
17
17
 
18
18
  class LLMSingleton:
19
19
  _instance = None
20
- _model = None
20
+ _default_model = None
21
+ _extraction_model = None
21
22
 
22
- def __init__(self, model_id):
23
+ def __init__(self, default_model_id, extraction_model_id):
23
24
  config = ConfigManager().get_config()
24
- selected_config = config.llm_config.get(str(model_id))
25
+ default_config_data = config.llm_config.get(str(default_model_id))
25
26
 
26
- if not selected_config:
27
- raise ValueError(f"No configuration found for the model: {model_id}")
28
-
29
- LLMSingleton._model = model_id
27
+ if not default_config_data:
28
+ raise ValueError(f"No configuration found for the default model: {default_model_id}")
29
+ self.default_config_params = default_config_data.model_dump(exclude_none=True)
30
30
 
31
- # Typesafe for None values inside the config.
32
- self.config_parameters = selected_config.model_dump(exclude_none=True)
31
+ extraction_config_data = config.llm_config.get(str(extraction_model_id))
32
+ if not extraction_config_data:
33
+ raise ValueError(f"No configuration found for the extraction model: {extraction_model_id}")
34
+ self.extraction_config_params = extraction_config_data.model_dump(exclude_none=True)
33
35
 
36
+ LLMSingleton._default_model = default_model_id
37
+ LLMSingleton._extraction_model = extraction_model_id
34
38
  LLMSingleton._instance = self
35
39
 
36
40
  @classmethod
37
41
  def get_instance(cls):
38
42
  if cls._instance is None:
39
43
  config = ConfigManager().get_config()
40
- llm_config = config.llm_config
41
- model_to_use = next(iter(llm_config))
42
- default_llm = getattr(config, "default_llm", None)
43
- if default_llm and default_llm in llm_config:
44
- model_to_use = default_llm
45
- cls(model_to_use)
44
+ default_model = config.default_llm
45
+ if not default_model:
46
+ if not config.llm_config:
47
+ raise ValueError("No LLM configurations are defined in the configuration file.")
48
+ default_model = next(iter(config.llm_config))
49
+
50
+ extraction_model = getattr(config, 'extraction_llm', default_model)
51
+ if not extraction_model:
52
+ extraction_model = default_model
53
+
54
+ cls(default_model, extraction_model)
46
55
  return cls._instance
47
56
 
48
57
  @classmethod
49
- def set_model(cls, model_name):
50
- if model_name == cls._model:
58
+ def get_config_by_purpose(cls, purpose='default'):
59
+ """
60
+ purpose= 'default' or 'extraction'
61
+ """
62
+ instance = cls.get_instance()
63
+ if purpose == 'extraction':
64
+ return instance.extraction_config_params.copy()
65
+ return instance.default_config_params.copy()
66
+
67
+ @classmethod
68
+ def set_default_model(cls, model_name):
69
+ """Sets the default language model for the current session."""
70
+ cls.get_instance()
71
+ if model_name == cls._default_model:
51
72
  return cls._instance
52
- cls(model_name)
53
- print(f"Language model switched to '{model_name}'")
73
+ cls(model_name, cls._extraction_model)
54
74
  return cls._instance
55
75
 
56
76
  @classmethod
57
- def get_model(cls):
77
+ def set_extraction_model(cls, model_name):
78
+ """Sets the extraction language model for the current session."""
79
+ cls.get_instance()
80
+ if model_name == cls._extraction_model:
81
+ return cls._instance
82
+ cls(cls._default_model, model_name)
83
+ return cls._instance
84
+
85
+ @classmethod
86
+ def get_default_model(cls):
87
+ """Gets the default model name stored in the singleton instance."""
88
+ if cls._instance is None:
89
+ cls.get_instance()
90
+ return cls._default_model
91
+
92
+ @classmethod
93
+ def get_extraction_model(cls):
94
+ """Gets the extraction model name stored in the singleton instance."""
58
95
  if cls._instance is None:
59
96
  cls.get_instance()
60
- return cls._model
97
+ return cls._extraction_model
61
98
 
62
99
 
63
100
  def write_string_to_file(filename, string, mode):
@@ -71,28 +108,6 @@ def read_string_from_file(path):
71
108
  text = file.read()
72
109
  return text
73
110
 
74
- def _get_model_config(purpose: str) -> dict:
75
- """
76
- Resolves model ID by purpose and returns its prepared configuration for LiteLLM.
77
- """
78
- config = ConfigManager().get_config()
79
-
80
- # Determine which model to use based on the purpose
81
- model_id = config.default_llm
82
- if purpose == 'extraction':
83
- # Use extraction_llm if it exists, otherwise fall back to default_llm
84
- model_id = getattr(config, 'extraction_llm', config.default_llm)
85
-
86
- selected_config = config.llm_config.get(str(model_id))
87
-
88
- if not selected_config:
89
- raise ValueError(f"No configuration found for model '{model_id}' used for '{purpose}'")
90
-
91
- config_parameters = selected_config.model_dump(exclude_none=True)
92
- config_parameters.pop("provider", None)
93
-
94
- return config_parameters
95
-
96
111
 
97
112
  def _is_valid_message(message: dict) -> bool:
98
113
  """
@@ -116,7 +131,10 @@ def _is_valid_message(message: dict) -> bool:
116
131
 
117
132
  def send_prompt(prompt, purpose='default'):
118
133
  """Prepares and sends a prompt to the LLM, streaming the response."""
119
- config_parameters = _get_model_config(purpose)
134
+ chat_instance = LLMSingleton.get_instance()
135
+ config_parameters = chat_instance.get_config_by_purpose(purpose)
136
+
137
+ config_parameters.pop("provider", None)
120
138
 
121
139
  filtered_prompt = [msg for msg in prompt if _is_valid_message(msg)]
122
140
 
@@ -172,9 +190,9 @@ def describe_image(image_path: str) -> str:
172
190
  ]
173
191
  }
174
192
 
175
- # Get response from LLM
193
+ # Get response from LLM using the extraction model purpose
176
194
  response_text = ""
177
- for chunk in send_prompt([message]):
195
+ for chunk in send_prompt([message], purpose='extraction'):
178
196
  chunk_content = chunk.choices[0].delta.content
179
197
  if chunk_content:
180
198
  response_text += chunk_content
@@ -461,7 +479,11 @@ def append_images_to_message(message, image_data_list):
461
479
  message_content = message["content"]
462
480
  logger.debug(f"Original message content: {message_content}")
463
481
 
464
- message["content"] = message_content + image_data_list
482
+ if isinstance(message_content, str):
483
+ message["content"] = [{"type": "text", "text": message_content}]
484
+
485
+ message["content"].extend(image_data_list)
486
+
465
487
  logger.debug(f"Updated message content with {len(image_data_list)} images")
466
488
 
467
489
  return message
@@ -517,7 +539,7 @@ def generate_config_prompt_template_file(prompt_data_path, config_prompt_templat
517
539
  def generate_config_prompt_givens_file(prompt_data_path, config_prompt_givens_name, artefact_to_mark=None):
518
540
  config_prompt_givens_path = os.path.join(prompt_data_path, config_prompt_givens_name)
519
541
  config = ConfigManager.get_config()
520
- dir_list = ["ara"] + [ext['source_dir'] for ext in config.ext_code_dirs] + [config.doc_dir] + [config.glossary_dir]
542
+ dir_list = ["ara"] + [path for d in config.ext_code_dirs for path in d.values()] + [config.doc_dir] + [config.glossary_dir]
521
543
 
522
544
  print(f"used {dir_list} for prompt givens file listing")
523
545
  generate_markdown_listing(dir_list, config.ara_prompt_given_list_includes, config_prompt_givens_path)
ara_cli/tag_extractor.py CHANGED
@@ -1,6 +1,10 @@
1
1
  import os
2
2
  from ara_cli.list_filter import ListFilter, filter_list
3
- from ara_cli.artefact_lister import ArtefactLister
3
+ from ara_cli.artefact_models.artefact_data_retrieval import (
4
+ artefact_content_retrieval,
5
+ artefact_path_retrieval,
6
+ artefact_tags_retrieval,
7
+ )
4
8
 
5
9
 
6
10
  class TagExtractor:
@@ -10,7 +14,9 @@ class TagExtractor:
10
14
  def filter_column(self, tags_set, filtered_artefacts):
11
15
  status_tags = {"to-do", "in-progress", "review", "done", "closed"}
12
16
 
13
- artefacts_to_process = self._get_artefacts_without_status_tags(filtered_artefacts, status_tags)
17
+ artefacts_to_process = self._get_artefacts_without_status_tags(
18
+ filtered_artefacts, status_tags
19
+ )
14
20
  self._add_non_status_tags_to_set(tags_set, artefacts_to_process, status_tags)
15
21
 
16
22
  def _get_artefacts_without_status_tags(self, filtered_artefacts, status_tags):
@@ -28,7 +34,9 @@ class TagExtractor:
28
34
 
29
35
  def _add_non_status_tags_to_set(self, tags_set, artefacts, status_tags):
30
36
  for artefact in artefacts:
31
- tags = [tag for tag in (artefact.tags + [artefact.status]) if tag is not None]
37
+ tags = [
38
+ tag for tag in (artefact.tags + [artefact.status]) if tag is not None
39
+ ]
32
40
  for tag in tags:
33
41
  if self._is_skipped_tag(tag, status_tags):
34
42
  continue
@@ -36,23 +44,25 @@ class TagExtractor:
36
44
 
37
45
  def _is_skipped_tag(self, tag, status_tags):
38
46
  return (
39
- tag in status_tags
40
- or tag.startswith("priority_")
41
- or tag.startswith("user_")
47
+ tag in status_tags or tag.startswith("priority_") or tag.startswith("user_")
42
48
  )
43
49
 
44
50
  def add_to_tags_set(self, tags_set, filtered_artefacts):
45
51
  for artefact_list in filtered_artefacts.values():
46
52
  for artefact in artefact_list:
47
53
  user_tags = [f"user_{tag}" for tag in artefact.users]
48
- tags = [tag for tag in (artefact.tags + [artefact.status] + user_tags) if tag is not None]
54
+ tags = [
55
+ tag
56
+ for tag in (artefact.tags + [artefact.status] + user_tags)
57
+ if tag is not None
58
+ ]
49
59
  tags_set.update(tags)
50
60
 
51
61
  def extract_tags(
52
62
  self,
53
63
  navigate_to_target=False,
54
64
  filtered_extra_column=False,
55
- list_filter: ListFilter | None = None
65
+ list_filter: ListFilter | None = None,
56
66
  ):
57
67
  from ara_cli.template_manager import DirectoryNavigator
58
68
  from ara_cli.artefact_reader import ArtefactReader
@@ -66,9 +76,9 @@ class TagExtractor:
66
76
  filtered_artefacts = filter_list(
67
77
  list_to_filter=artefacts,
68
78
  list_filter=list_filter,
69
- content_retrieval_strategy=ArtefactLister.artefact_content_retrieval,
70
- file_path_retrieval=ArtefactLister.artefact_path_retrieval,
71
- tag_retrieval=ArtefactLister.artefact_tags_retrieval
79
+ content_retrieval_strategy=artefact_content_retrieval,
80
+ file_path_retrieval=artefact_path_retrieval,
81
+ tag_retrieval=artefact_tags_retrieval,
72
82
  )
73
83
 
74
84
  unique_tags = set()
ara_cli/version.py CHANGED
@@ -1,2 +1,2 @@
1
1
  # version.py
2
- __version__ = "0.1.9.92" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
2
+ __version__ = "0.1.9.94" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ara_cli
3
- Version: 0.1.9.92
3
+ Version: 0.1.9.94
4
4
  Summary: Powerful, open source command-line tool for managing, structuring and automating software development artifacts in line with Business-Driven Development (BDD) and AI-assisted processes
5
5
  Description-Content-Type: text/markdown
6
6
  Requires-Dist: litellm
@@ -108,22 +108,22 @@ ara autofix
108
108
 
109
109
  ## Command Overview
110
110
 
111
- | Action | Description |
112
- |--------------------|-----------------------------------------------------------------------------|
113
- | create | Create a classified artefact with data directory |
114
- | delete | Delete an artefact and its data directory |
115
- | rename | Rename an artefact and its data directory |
116
- | list, list-tags | List artefacts, show tags, filter by content, extension, hierarchy etc. |
117
- | prompt, chat | Use AI-powered chat and prompt templates for artefact management |
118
- | template | Print artefact templates in the terminal |
119
- | fetch-templates | Download and manage reusable prompt templates |
120
- | read | Output artefact contents and their full contribution chain |
121
- | reconnect | Connect artefacts to parent artefacts |
122
- | read-status, set-status | Query and assign status to artefacts |
123
- | read-user, set-user | Query and assign responsible users |
124
- | classifier-directory | Show directory of artefact classifiers |
125
- | scan | Scan the ARA tree for incompatible or inconsistent artefacts |
126
- | autofix | Automatically correct artefact issues with LLM assistance |
111
+ | Action | Description |
112
+ | ----------------------- | ----------------------------------------------------------------------- |
113
+ | create | Create a classified artefact with data directory |
114
+ | delete | Delete an artefact and its data directory |
115
+ | rename | Rename an artefact and its data directory |
116
+ | list, list-tags | List artefacts, show tags, filter by content, extension, hierarchy etc. |
117
+ | prompt, chat | Use AI-powered chat and prompt templates for artefact management |
118
+ | template | Print artefact templates in the terminal |
119
+ | fetch-templates | Download and manage reusable prompt templates |
120
+ | read | Output artefact contents and their full contribution chain |
121
+ | reconnect | Connect artefacts to parent artefacts |
122
+ | read-status, set-status | Query and assign status to artefacts |
123
+ | read-user, set-user | Query and assign responsible users |
124
+ | classifier-directory | Show directory of artefact classifiers |
125
+ | scan | Scan the ARA tree for incompatible or inconsistent artefacts |
126
+ | autofix | Automatically correct artefact issues with LLM assistance |
127
127
 
128
128
  See `ara -h` for the complete list of commands and usage examples.
129
129
 
@@ -1,18 +1,18 @@
1
- ara_cli/__init__.py,sha256=0zl7IegxTid26EBGLav_fXZ4CCIV3H5TfAoFQiOHjvg,148
1
+ ara_cli/__init__.py,sha256=oieeo07y5FLq0tmPzWZdp65j6tN8NOucSjSzrJw8qrQ,203
2
2
  ara_cli/__main__.py,sha256=J5DCDLRZ6UcpYwM1-NkjaLo4PTetcSj2dB4HrrftkUw,2064
3
- ara_cli/ara_command_action.py,sha256=_LHE2V5hbJxN7ccYiptuPktRfbTnXmQEt_D_FxDBlBY,22456
4
- ara_cli/ara_command_parser.py,sha256=I-e9W-QwTIMKMzlHycSlCWCyBFQfiFYvGre1XsDbrFI,20573
3
+ ara_cli/ara_command_action.py,sha256=uyMN05ZYffWqN9nwL53MmQ_yHpuxHVqZ_scAMEoD1jw,21516
4
+ ara_cli/ara_command_parser.py,sha256=A1lMc9Gc0EMJt-380PTcv3aKoxbXGfx5gGax-sZqV3I,21020
5
5
  ara_cli/ara_config.py,sha256=5uBo_flNgZSk7B9lmyfvzWyxfIQzb13LbieCpJfdZJI,8765
6
6
  ara_cli/artefact_autofix.py,sha256=WVTiIR-jo4YKmmz4eS3qTFvl45W1YKwAk1XSuz9QX10,20015
7
7
  ara_cli/artefact_creator.py,sha256=0Ory6cB-Ahkw-BDNb8QHnTbp_OHGABdkb9bhwcEdcIc,6063
8
8
  ara_cli/artefact_deleter.py,sha256=Co4wwCH3yW8H9NrOq7_2p5571EeHr0TsfE-H8KqoOfY,1900
9
9
  ara_cli/artefact_fuzzy_search.py,sha256=iBlDqjZf-_D3VUjFf7ZwkiQbpQDcwRndIU7aG_sRTgE,2668
10
10
  ara_cli/artefact_link_updater.py,sha256=nKdxTpDKqWTOAMD8viKmUaklSFGWzJZ8S8E8xW_ADuM,3775
11
- ara_cli/artefact_lister.py,sha256=jhk4n4eqp7hDIq07q43QzS7-36BM3OfZ4EABxCeOGcw,4764
11
+ ara_cli/artefact_lister.py,sha256=M-ggazAgZ-OLeW9NB48r_sd6zPx0p4hEpeS63qHwI1A,4176
12
12
  ara_cli/artefact_reader.py,sha256=Pho0_Eqm7kD9CNbVMhKb6mkNM0I3iJiCJXbXmVp1DJU,7827
13
- ara_cli/artefact_renamer.py,sha256=Hnz_3zD9xxnBa1FHyUE6mIktLk_9ttP2rFRvQIkmz-o,4061
13
+ ara_cli/artefact_renamer.py,sha256=8S4QWD19_FGKsKlWojnu_RUOxx0u9rmLugydM4s4VDc,4219
14
14
  ara_cli/artefact_scan.py,sha256=msPCm-vPWOAZ_e_z5GylXxq1MtNlmJ4zvKrsdOFCWF4,4813
15
- ara_cli/chat.py,sha256=m_nMOCKDhjC4SPEDiG3Wu_0hLphe0ey0A4YuZV0LQxQ,38167
15
+ ara_cli/chat.py,sha256=t17TCmx9xvKj5wrnUOJBqjWoSjEVOFrVd8RivChVX50,37980
16
16
  ara_cli/classifier.py,sha256=zWskj7rBYdqYBGjksBm46iTgVU5IIf2PZsJr4qeiwVU,1878
17
17
  ara_cli/codefusionretriever.py,sha256=fCHgXdIBRzkVAnapX-KI2NQ44XbrrF4tEQmn5J6clUI,1980
18
18
  ara_cli/codehierachieretriever.py,sha256=Xd3EgEWWhkSf1TmTWtf8X5_YvyE_4B66nRrqarwSiTU,1182
@@ -24,15 +24,16 @@ ara_cli/filename_validator.py,sha256=Aw9PL8d5-Ymhp3EY6lDrUBk3cudaNqo1Uw5RzPpI1jA
24
24
  ara_cli/list_filter.py,sha256=qKGwwQsrWe7L5FbdxEbBYD1bbbi8c-RMypjXqXvLbgs,5291
25
25
  ara_cli/output_suppressor.py,sha256=nwiHaQLwabOjMoJOeUESBnZszGMxrQZfJ3N2OvahX7Y,389
26
26
  ara_cli/prompt_chat.py,sha256=kd_OINDQFit6jN04bb7mzgY259JBbRaTaNp9F-webkc,1346
27
- ara_cli/prompt_extractor.py,sha256=Sk1aQkvn8W_YNcGhfChsbT19wUAWEJmOHTr3mveyQww,7754
28
- ara_cli/prompt_handler.py,sha256=pCQ2LMYawGIMlWKI5EN6QdLn0UNEk-Eckkz4SVVHR10,21122
27
+ ara_cli/prompt_extractor.py,sha256=-_17aVYXYH6kPX5FOSb9T8lbEkKPXE6nlHWq1pvO_Og,8423
28
+ ara_cli/prompt_handler.py,sha256=6yfiMFNHGHANREAsjT8dv9jKxBKeazPkF7xQQI4l6vQ,22312
29
29
  ara_cli/prompt_rag.py,sha256=ydlhe4CUqz0jdzlY7jBbpKaf_5fjMrAZKnriKea3ZAg,7485
30
30
  ara_cli/run_file_lister.py,sha256=XbrrDTJXp1LFGx9Lv91SNsEHZPP-PyEMBF_P4btjbDA,2360
31
- ara_cli/tag_extractor.py,sha256=TGdaQOVnjy25R0zDsAifB67C5oom0Fwo24s0_fr5A_I,3151
31
+ ara_cli/tag_extractor.py,sha256=k2yRl7dAMZ4YTARzUke4wgY0oEIOmWkOHGet7nXB6uw,3317
32
32
  ara_cli/template_manager.py,sha256=YwrN6AYPpl6ZrW8BVQpVXx8yTRf-oNpJUIKeg4NAggs,6606
33
33
  ara_cli/update_config_prompt.py,sha256=Oy9vNTw6UhDohyTEfSKkqE5ifEMPlmWNYkKHgUrK_pY,4607
34
- ara_cli/version.py,sha256=NFSXE1c5XdqCXt75PBLQ12kGF9XoLW2MiAQbfCkmfto,146
34
+ ara_cli/version.py,sha256=MWb524qaDHLrSJsHhOq7o0m78CPLFil9qeyel6kPW-A,146
35
35
  ara_cli/artefact_models/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
36
+ ara_cli/artefact_models/artefact_data_retrieval.py,sha256=CooXOJBYWSyiViN2xkC8baS8OUaslry3YGVVUeDxRAU,527
36
37
  ara_cli/artefact_models/artefact_load.py,sha256=IXzWxP-Q_j_oDGMno0m-OuXCQ7Vd5c_NctshGr4ROBw,621
37
38
  ara_cli/artefact_models/artefact_mapping.py,sha256=8aD0spBjkJ8toMAmFawc6UTUxB6-tEEViZXv2I-r88Q,1874
38
39
  ara_cli/artefact_models/artefact_model.py,sha256=qSbcrmFWAYgBqcNl9QARI1_uLQJm-TPVgP5q2AEFnjE,15983
@@ -50,9 +51,10 @@ ara_cli/artefact_models/userstory_artefact_model.py,sha256=2awH31ROtm7j4T44Bv4cy
50
51
  ara_cli/artefact_models/vision_artefact_model.py,sha256=frjaUJj-mmIlVHEhzAQztCGs-CtvNu_odSborgztfzo,5251
51
52
  ara_cli/commands/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
52
53
  ara_cli/commands/command.py,sha256=Y_2dNeuxRjbyI3ScXNv55lptSe8Hs_ya78L0nPYNZHA,154
53
- ara_cli/commands/extract_command.py,sha256=TfKuOnKQzJ8JPpJyKDm7qhm5mvbZnHspCem8g6YgACo,835
54
+ ara_cli/commands/extract_command.py,sha256=qpi2_ac3DyxS7FiOz4GsTtRR4xtpegckUmfXzDOwymM,858
54
55
  ara_cli/commands/load_command.py,sha256=H3CfeHIL-criDU5oi4BONTSpyzJ4m8DzJ0ZCIiAZFeI,2204
55
56
  ara_cli/commands/load_image_command.py,sha256=g9-PXAYdqx5Ed1PdVo-FIb4CyJGEpRFbgQf9Dxg6DmM,886
57
+ ara_cli/commands/read_command.py,sha256=bo1BvRWuNKdFqBNN1EWORNrX_yuFAOyBruDUolHq1Vc,3791
56
58
  ara_cli/file_loaders/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
57
59
  ara_cli/file_loaders/binary_file_loader.py,sha256=1HHH1Nk4lEM83CTnf4z9wYz6rMLgpxydFoRcSgkBHmQ,940
58
60
  ara_cli/file_loaders/document_file_loader.py,sha256=VxGFChYyM9K-e6eOCK3yk5jQuEXgz01Mh_NoA6CA_RM,1017
@@ -138,23 +140,23 @@ tests/test_ara_config.py,sha256=H5GwDbab0GMSa6IbHdruzmbsHy5Ia0xX0uteJdfZ9Rg,1427
138
140
  tests/test_artefact_autofix.py,sha256=pApZ-N0dW8Ujt-cNLbgvd4bhiIIK8oXb-saLf6QlA-8,25022
139
141
  tests/test_artefact_fuzzy_search.py,sha256=5Sh3_l9QK8-WHn6JpGPU1b6h4QEnl2JoMq1Tdp2cj1U,1261
140
142
  tests/test_artefact_link_updater.py,sha256=biqbEp2jCOz8giv72hu2P2hDfeJfJ9OrVGdAv5d9cK4,2191
141
- tests/test_artefact_lister.py,sha256=VCEOCgDgnAOeUUgIoGAbWgz60hf9UT-tdHg18LGfB34,22656
143
+ tests/test_artefact_lister.py,sha256=35R13UU-YsX1HOsEN8M2-vIiCUA9RSBm6SwestDaFhE,20388
142
144
  tests/test_artefact_reader.py,sha256=660K-d8ed-j8hulsUB_7baPD2-hhbg9TffUR5yVc4Uo,927
143
145
  tests/test_artefact_renamer.py,sha256=lSnKCCfoFGgKhTdDZrEaeBq1xJAak1QoqH5aSeOe9Ro,3494
144
146
  tests/test_artefact_scan.py,sha256=uNWgrt7ieZ4ogKACsPqzAsh59JF2BhTKSag31hpVrTQ,16887
145
- tests/test_chat.py,sha256=-2vs3ORlym0yv05BLSCNX-6tNYXqoZiBFar8gswPuw8,57072
147
+ tests/test_chat.py,sha256=cCNIuYiSGoNtjgjyFiTvkMHJgCmMNXQhpawNc23-fmM,57037
146
148
  tests/test_classifier.py,sha256=grYGPksydNdPsaEBQxYHZTuTdcJWz7VQtikCKA6BNaQ,1920
147
149
  tests/test_directory_navigator.py,sha256=7G0MVrBbtBvbrFUpL0zb_9EkEWi1dulWuHsrQxMJxDY,140
148
150
  tests/test_file_classifier.py,sha256=kLWPiePu3F5mkVuI_lK_2QlLh2kXD_Mt2K8KZZ1fAnA,10940
149
151
  tests/test_file_creator.py,sha256=D3G7MbgE0m8JmZihxnTryxLco6iZdbV--2CGc0L20FM,2109
150
152
  tests/test_file_lister.py,sha256=Q9HwhKKx540EPzTmfzOCnvtAgON0aMmpJE2eOe1J3EA,4324
151
153
  tests/test_list_filter.py,sha256=fJA3d_SdaOAUkE7jn68MOVS0THXGghy1fye_64Zvo1U,7964
152
- tests/test_prompt_handler.py,sha256=Ysxq2e6JFfNpj3bTRFNNThzpDNkAGDphwVf2Ysz2EK0,14980
154
+ tests/test_prompt_handler.py,sha256=3-lYBvyHLQgD29MODkXB3YylUWXmRCYdAwrQrtlW8WU,30871
153
155
  tests/test_tag_extractor.py,sha256=nSiAYlTKZ7TLAOtcJpwK5zTWHhFYU0tI5xKnivLc1dU,2712
154
156
  tests/test_template_manager.py,sha256=q-LMHRG4rHkD6ON6YW4cpZxUx9hul6Or8wVVRC2kb-8,4099
155
157
  tests/test_update_config_prompt.py,sha256=xsqj1WTn4BsG5Q2t-sNPfu7EoMURFcS-hfb5VSXUnJc,6765
156
- ara_cli-0.1.9.92.dist-info/METADATA,sha256=9X9Ol5Xh8ApM3-XaY1O_FbfNNCjqdLErIR-y5zxQklw,6739
157
- ara_cli-0.1.9.92.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
158
- ara_cli-0.1.9.92.dist-info/entry_points.txt,sha256=v4h7MzysTgSIDYfEo3oj4Kz_8lzsRa3hq-KJHEcLVX8,45
159
- ara_cli-0.1.9.92.dist-info/top_level.txt,sha256=WM4cLHT5DYUaWzLtRj-gu3yVNFpGQ6lLRI3FMmC-38I,14
160
- ara_cli-0.1.9.92.dist-info/RECORD,,
158
+ ara_cli-0.1.9.94.dist-info/METADATA,sha256=CPz0aDXI8_4hJtbN9tm56-aNUNEum3G01dD9DMIwGdg,6755
159
+ ara_cli-0.1.9.94.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
160
+ ara_cli-0.1.9.94.dist-info/entry_points.txt,sha256=v4h7MzysTgSIDYfEo3oj4Kz_8lzsRa3hq-KJHEcLVX8,45
161
+ ara_cli-0.1.9.94.dist-info/top_level.txt,sha256=WM4cLHT5DYUaWzLtRj-gu3yVNFpGQ6lLRI3FMmC-38I,14
162
+ ara_cli-0.1.9.94.dist-info/RECORD,,