ara-cli 0.1.9.91__tar.gz → 0.1.9.93__tar.gz

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.
Files changed (168) hide show
  1. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/PKG-INFO +1 -1
  2. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/ara_config.py +27 -3
  3. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/chat.py +16 -17
  4. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/prompt_handler.py +70 -48
  5. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/version.py +1 -1
  6. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli.egg-info/PKG-INFO +1 -1
  7. ara_cli-0.1.9.93/tests/test_prompt_handler.py +677 -0
  8. ara_cli-0.1.9.91/tests/test_prompt_handler.py +0 -344
  9. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/MANIFEST.in +0 -0
  10. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/README.md +0 -0
  11. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/__init__.py +0 -0
  12. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/__main__.py +0 -0
  13. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/ara_command_action.py +0 -0
  14. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/ara_command_parser.py +0 -0
  15. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_autofix.py +0 -0
  16. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_creator.py +0 -0
  17. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_deleter.py +0 -0
  18. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_fuzzy_search.py +0 -0
  19. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_link_updater.py +0 -0
  20. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_lister.py +0 -0
  21. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/__init__.py +0 -0
  22. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/artefact_load.py +0 -0
  23. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/artefact_mapping.py +0 -0
  24. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/artefact_model.py +0 -0
  25. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/artefact_templates.py +0 -0
  26. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/businessgoal_artefact_model.py +0 -0
  27. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/capability_artefact_model.py +0 -0
  28. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/epic_artefact_model.py +0 -0
  29. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/example_artefact_model.py +0 -0
  30. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/feature_artefact_model.py +0 -0
  31. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/issue_artefact_model.py +0 -0
  32. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/keyfeature_artefact_model.py +0 -0
  33. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/serialize_helper.py +0 -0
  34. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/task_artefact_model.py +0 -0
  35. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/userstory_artefact_model.py +0 -0
  36. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_models/vision_artefact_model.py +0 -0
  37. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_reader.py +0 -0
  38. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_renamer.py +0 -0
  39. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/artefact_scan.py +0 -0
  40. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/classifier.py +0 -0
  41. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/codefusionretriever.py +0 -0
  42. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/codehierachieretriever.py +0 -0
  43. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/commandline_completer.py +0 -0
  44. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/commands/__init__.py +0 -0
  45. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/commands/command.py +0 -0
  46. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/commands/extract_command.py +0 -0
  47. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/commands/load_command.py +0 -0
  48. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/commands/load_image_command.py +0 -0
  49. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/directory_navigator.py +0 -0
  50. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_classifier.py +0 -0
  51. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_lister.py +0 -0
  52. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_loaders/__init__.py +0 -0
  53. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_loaders/binary_file_loader.py +0 -0
  54. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_loaders/document_file_loader.py +0 -0
  55. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_loaders/document_reader.py +0 -0
  56. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_loaders/file_loader.py +0 -0
  57. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/file_loaders/text_file_loader.py +0 -0
  58. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/filename_validator.py +0 -0
  59. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/list_filter.py +0 -0
  60. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/output_suppressor.py +0 -0
  61. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/prompt_chat.py +0 -0
  62. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/prompt_extractor.py +0 -0
  63. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/prompt_rag.py +0 -0
  64. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/run_file_lister.py +0 -0
  65. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/tag_extractor.py +0 -0
  66. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/template_manager.py +0 -0
  67. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/agile.artefacts +0 -0
  68. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/blueprints/complete_pytest_unittest.blueprint.md +0 -0
  69. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/blueprints/empty.blueprint.md +0 -0
  70. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_C4_architecture_analysis.blueprint.md +0 -0
  71. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/blueprints/task_todo_list_implement_feature_BDD_way.blueprint.md +0 -0
  72. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/architecture_C4_analysis.commands.md +0 -0
  73. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/architecture_radon_cc_score.commands.md +0 -0
  74. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/architecture_radon_halstead_v.commands.md +0 -0
  75. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/architecture_radon_maintainability_score.commands.md +0 -0
  76. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/artefact_classification.commands.md +0 -0
  77. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/artefact_extension.commands.md +0 -0
  78. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/artefact_formulation.commands.md +0 -0
  79. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/behave_step_generation.commands.md +0 -0
  80. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/code_generation_complex.commands.md +0 -0
  81. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/code_generation_simple.commands.md +0 -0
  82. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/empty.commands.md +0 -0
  83. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/error_fixing.commands.md +0 -0
  84. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/feature_file_update.commands.md +0 -0
  85. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/feature_formulation.commands.md +0 -0
  86. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/js_code_generation_simple.commands.md +0 -0
  87. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/refactoring.commands.md +0 -0
  88. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/refactoring_analysis.commands.md +0 -0
  89. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/reverse_engineer_feature_file.commands.md +0 -0
  90. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/commands/reverse_engineer_program_flow.commands.md +0 -0
  91. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/classify_task.intention.md +0 -0
  92. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/empty.intention.md +0 -0
  93. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/error_fixing.intention.md +0 -0
  94. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_fix_steps_for_scenario.intention.md +0 -0
  95. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_formulation.intention.md +0 -0
  96. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_reverse_formulation_from_code.intention.md +0 -0
  97. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation.intention.md +0 -0
  98. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_scenario_implementation_update.intention.md +0 -0
  99. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_scenario_outline_extension.intention.md +0 -0
  100. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/feature_update_formulation.intention.md +0 -0
  101. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/fibonacci_example_implementation.intention.md +0 -0
  102. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/js_implementation_from_task_description.intention.md +0 -0
  103. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/js_steps_implementation.intention.md +0 -0
  104. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/python_cli_implementation_with_test.intention.md +0 -0
  105. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/python_code_understanding.intention.md +0 -0
  106. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/task_implementation.intention.md +0 -0
  107. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/task_prompt_control_by_status.intention.md +0 -0
  108. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_number.intention.md +0 -0
  109. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/intentions/task_stepwise_implementation_by_status.intention.md +0 -0
  110. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/architecture_analyst.rules.md +0 -0
  111. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/code_analyst.rules.md +0 -0
  112. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/empty.rules.md +0 -0
  113. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/error_analyst.rules.md +0 -0
  114. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/gherkin_expert.rules.md +0 -0
  115. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/js_expert_developer.rules.md +0 -0
  116. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/product_owner.rules.md +0 -0
  117. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/python_behave.rules.md +0 -0
  118. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/prompt-modules/rules/python_developer.rules.md +0 -0
  119. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.concept.exploration.md +0 -0
  120. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.concept.md +0 -0
  121. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.customer.exploration.md +0 -0
  122. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.customer.md +0 -0
  123. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.persona.exploration.md +0 -0
  124. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.persona.md +0 -0
  125. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.step.exploration.md +0 -0
  126. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.step.md +0 -0
  127. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.technology.exploration.md +0 -0
  128. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/specification_breakdown_files/template.technology.md +0 -0
  129. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.businessgoal.prompt_log.md +0 -0
  130. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.capability.prompt_log.md +0 -0
  131. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.epic.prompt_log.md +0 -0
  132. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.example.prompt_log.md +0 -0
  133. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.feature.prompt_log.md +0 -0
  134. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.issue.prompt_log.md +0 -0
  135. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.keyfeature.prompt_log.md +0 -0
  136. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.steps.prompt_log.md +0 -0
  137. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.task.prompt_log.md +0 -0
  138. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.userstory.prompt_log.md +0 -0
  139. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/templates/template.vision.prompt_log.md +0 -0
  140. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli/update_config_prompt.py +0 -0
  141. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli.egg-info/SOURCES.txt +0 -0
  142. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli.egg-info/dependency_links.txt +0 -0
  143. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli.egg-info/entry_points.txt +0 -0
  144. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli.egg-info/requires.txt +0 -0
  145. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/ara_cli.egg-info/top_level.txt +0 -0
  146. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/docker/base/requirements.txt +0 -0
  147. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/setup.cfg +0 -0
  148. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/setup.py +0 -0
  149. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/__init__.py +0 -0
  150. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_ara_command_action.py +0 -0
  151. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_ara_config.py +0 -0
  152. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_autofix.py +0 -0
  153. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_fuzzy_search.py +0 -0
  154. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_link_updater.py +0 -0
  155. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_lister.py +0 -0
  156. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_reader.py +0 -0
  157. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_renamer.py +0 -0
  158. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_artefact_scan.py +0 -0
  159. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_chat.py +0 -0
  160. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_classifier.py +0 -0
  161. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_directory_navigator.py +0 -0
  162. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_file_classifier.py +0 -0
  163. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_file_creator.py +0 -0
  164. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_file_lister.py +0 -0
  165. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_list_filter.py +0 -0
  166. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_tag_extractor.py +0 -0
  167. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_template_manager.py +0 -0
  168. {ara_cli-0.1.9.91 → ara_cli-0.1.9.93}/tests/test_update_config_prompt.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ara_cli
3
- Version: 0.1.9.91
3
+ Version: 0.1.9.93
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
@@ -97,12 +97,12 @@ class ARAconfig(BaseModel):
97
97
  max_tokens=4000
98
98
  )
99
99
  })
100
- default_llm: Optional[str] = "gpt-5"
101
- extraction_llm: Optional[str] = "gpt-5-mini"
100
+ default_llm: Optional[str] = None
101
+ extraction_llm: Optional[str] = None
102
102
 
103
103
  @model_validator(mode='after')
104
104
  def check_critical_fields(self) -> 'ARAconfig':
105
- """Check for empty critical fields and use defaults if needed."""
105
+ """Check for empty critical fields and validate default_llm and extraction_llm."""
106
106
  critical_fields = {
107
107
  'ext_code_dirs': [{"source_dir": "./src"}, {"source_dir": "./tests"}],
108
108
  'local_ara_templates_dir': "./ara/.araconfig/templates/",
@@ -116,6 +116,30 @@ class ARAconfig(BaseModel):
116
116
  print(f"Warning: Value for '{field}' is missing or empty. Using default.")
117
117
  setattr(self, field, default_value)
118
118
 
119
+ if not self.llm_config:
120
+ print("Warning: 'llm_config' is empty. 'default_llm' and 'extraction_llm' cannot be set.")
121
+ self.default_llm = None
122
+ self.extraction_llm = None
123
+ return self
124
+
125
+ first_available_llm = next(iter(self.llm_config))
126
+
127
+ if not self.default_llm:
128
+ print(f"Warning: 'default_llm' is not set. Defaulting to the first available model: '{first_available_llm}'.")
129
+ self.default_llm = first_available_llm
130
+ elif self.default_llm not in self.llm_config:
131
+ print(f"Warning: The configured 'default_llm' ('{self.default_llm}') does not exist in 'llm_config'.")
132
+ print(f"-> Reverting to the first available model: '{first_available_llm}'.")
133
+ self.default_llm = first_available_llm
134
+
135
+ if not self.extraction_llm:
136
+ print(f"Warning: 'extraction_llm' is not set. Setting it to the same as 'default_llm': '{self.default_llm}'.")
137
+ self.extraction_llm = self.default_llm
138
+ elif self.extraction_llm not in self.llm_config:
139
+ print(f"Warning: The configured 'extraction_llm' ('{self.extraction_llm}') does not exist in 'llm_config'.")
140
+ print(f"-> Reverting to the 'default_llm' value: '{self.default_llm}'.")
141
+ self.extraction_llm = self.default_llm
142
+
119
143
  return self
120
144
 
121
145
  # Function to ensure the necessary directories exist
@@ -532,7 +532,7 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
532
532
  return [x for x in glob.glob(text + '*')]
533
533
 
534
534
  def _retrieve_ara_config(self):
535
- from ara_cli.ara_config import ConfigManager
535
+ from ara_cli.prompt_handler import ConfigManager
536
536
  return ConfigManager().get_config()
537
537
 
538
538
  def _retrieve_llm_config(self):
@@ -625,7 +625,7 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
625
625
  @cmd2.with_category(CATEGORY_LLM_CONTROL)
626
626
  def do_CHOOSE_MODEL(self, model_name):
627
627
  from ara_cli.prompt_handler import LLMSingleton
628
- from ara_cli.ara_config import DEFAULT_CONFIG_LOCATION, save_data, ConfigManager
628
+ from ara_cli.ara_config import DEFAULT_CONFIG_LOCATION, save_data
629
629
  from ara_cli.directory_navigator import DirectoryNavigator
630
630
 
631
631
  original_dir = os.getcwd()
@@ -634,22 +634,20 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
634
634
  os.chdir('..')
635
635
 
636
636
  if not self._verify_llm_choice(model_name):
637
- os.chdir(original_dir)
638
637
  return
639
638
 
640
- ConfigManager.reset()
641
- self.config = ConfigManager.get_config()
642
639
  self.config.default_llm = model_name
643
640
  save_data(filepath=DEFAULT_CONFIG_LOCATION, config=self.config)
644
641
 
645
- LLMSingleton.set_model(model_name)
642
+ LLMSingleton.set_default_model(model_name)
643
+ print(f"Language model switched to '{model_name}'")
646
644
 
647
645
  os.chdir(original_dir)
648
646
 
649
647
  @cmd2.with_category(CATEGORY_LLM_CONTROL)
650
648
  def do_CHOOSE_EXTRACTION_MODEL(self, model_name):
651
- """Choose the language model for extraction tasks."""
652
- from ara_cli.ara_config import DEFAULT_CONFIG_LOCATION, save_data, ConfigManager
649
+ from ara_cli.prompt_handler import LLMSingleton
650
+ from ara_cli.ara_config import DEFAULT_CONFIG_LOCATION, save_data
653
651
  from ara_cli.directory_navigator import DirectoryNavigator
654
652
 
655
653
  original_dir = os.getcwd()
@@ -658,27 +656,28 @@ Start chatting (type 'HELP'/'h' for available commands, 'QUIT'/'q' to exit chat
658
656
  os.chdir('..')
659
657
 
660
658
  if not self._verify_llm_choice(model_name):
661
- os.chdir(original_dir)
662
659
  return
663
660
 
664
- ConfigManager.reset()
665
- self.config = ConfigManager.get_config()
666
661
  self.config.extraction_llm = model_name
667
662
  save_data(filepath=DEFAULT_CONFIG_LOCATION, config=self.config)
663
+
664
+ LLMSingleton.set_extraction_model(model_name)
668
665
  print(f"Extraction model switched to '{model_name}'")
669
666
 
670
667
  os.chdir(original_dir)
671
668
 
672
669
  @cmd2.with_category(CATEGORY_LLM_CONTROL)
673
670
  def do_CURRENT_MODEL(self, _):
674
- """Displays the current default and extraction language models."""
675
- from ara_cli.ara_config import ConfigManager
671
+ from ara_cli.prompt_handler import LLMSingleton
672
+
673
+ print(LLMSingleton.get_default_model())
676
674
 
677
- ConfigManager.reset()
678
- config = self._retrieve_ara_config()
675
+ @cmd2.with_category(CATEGORY_LLM_CONTROL)
676
+ def do_CURRENT_EXTRACTION_MODEL(self, _):
677
+ """Displays the current extraction language model."""
678
+ from ara_cli.prompt_handler import LLMSingleton
679
679
 
680
- print(f"Current Reasoning LLM (default_llm): {config.default_llm}")
681
- print(f"Current Extraction LLM (extraction_llm): {config.extraction_llm}")
680
+ print(LLMSingleton.get_extraction_model())
682
681
 
683
682
  def _complete_llms(self, text, line, begidx, endidx):
684
683
  llm_config = self._retrieve_llm_config()
@@ -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)
@@ -1,2 +1,2 @@
1
1
  # version.py
2
- __version__ = "0.1.9.91" # fith parameter like .0 for local install test purposes only. official numbers should be 4 digit numbers
2
+ __version__ = "0.1.9.93" # 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.91
3
+ Version: 0.1.9.93
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