osa_tool 0.2.6__tar.gz → 0.2.7__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.
- {osa_tool-0.2.6 → osa_tool-0.2.7}/PKG-INFO +31 -29
- {osa_tool-0.2.6 → osa_tool-0.2.7}/README.md +29 -26
- osa_tool-0.2.7/osa_tool/config/osa_config.py +30 -0
- osa_tool-0.2.7/osa_tool/config/prompts/analysis.toml +179 -0
- osa_tool-0.2.7/osa_tool/config/prompts/osa_agent.toml +42 -0
- osa_tool-0.2.7/osa_tool/config/prompts/requirements.toml +31 -0
- osa_tool-0.2.7/osa_tool/config/prompts/system_messages.toml +100 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/settings/arguments.yaml +35 -5
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/settings/config.toml +12 -5
- osa_tool-0.2.7/osa_tool/config/settings.py +328 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/conversion/notebook_converter.py +1 -1
- {osa_tool-0.2.6/osa_tool/git_agent → osa_tool-0.2.7/osa_tool/core/git}/git_agent.py +675 -159
- osa_tool-0.2.7/osa_tool/core/llm/llm.py +603 -0
- osa_tool-0.2.7/osa_tool/core/models/agent_status.py +10 -0
- osa_tool-0.2.7/osa_tool/core/models/event.py +20 -0
- osa_tool-0.2.7/osa_tool/core/models/task.py +20 -0
- {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/report_generator.py +61 -14
- {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/report_maker.py +33 -29
- {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/response_validation.py +11 -0
- osa_tool-0.2.6/osa_tool/translation/dir_translator.py → osa_tool-0.2.7/osa_tool/operations/codebase/directory_translation/dirs_and_files_translator.py +175 -136
- {osa_tool-0.2.6/osa_tool/osatreesitter → osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation}/docgen.py +388 -186
- osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation/docstring_generation.py +141 -0
- {osa_tool-0.2.6/osa_tool/osatreesitter → osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation}/osa_treesitter.py +155 -53
- osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation/topology.py +165 -0
- osa_tool-0.2.7/osa_tool/operations/codebase/requirements_generation/requirements_generation.py +176 -0
- {osa_tool-0.2.6/osa_tool/aboutgen → osa_tool-0.2.7/osa_tool/operations/docs/about_generation}/about_generator.py +122 -31
- {osa_tool-0.2.6/osa_tool/docs_generator → osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation}/community.py +68 -27
- {osa_tool-0.2.6/osa_tool/docs_generator → osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation}/contributing.py +23 -14
- osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation/docs_run.py +89 -0
- osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation/license_generation.py +127 -0
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/citation_extractor.py +11 -14
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/files_contents.py +5 -5
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/pypi_status_checker.py +1 -1
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/base_builder.py +19 -22
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/builder.py +7 -9
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/builder_article.py +5 -7
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/header.py +14 -13
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/installation.py +12 -13
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/models/llm_service.py +19 -19
- osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/readme_core.py +108 -0
- osa_tool-0.2.7/osa_tool/operations/docs/readme_translation/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/operations/docs/readme_translation/readme_translator.py +234 -0
- osa_tool-0.2.7/osa_tool/operations/operations_catalog.py +237 -0
- osa_tool-0.2.7/osa_tool/operations/registry.py +99 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/organization/repo_organizer.py +2 -1
- osa_tool-0.2.7/osa_tool/osa_agent/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/executor/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/executor/agent.py +207 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/finalizer/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/finalizer/agent.py +114 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/finalizer/models.py +7 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/intent_router/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/intent_router/agent.py +85 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/intent_router/models.py +19 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/planner/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/planner/agent.py +184 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/planner/models.py +16 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/repo_analysis/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/repo_analysis/agent.py +79 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/reviewer/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/osa_agent/agents/reviewer/agent.py +15 -0
- osa_tool-0.2.7/osa_tool/osa_agent/base.py +39 -0
- osa_tool-0.2.7/osa_tool/osa_agent/context.py +37 -0
- osa_tool-0.2.7/osa_tool/osa_agent/graph.py +73 -0
- osa_tool-0.2.7/osa_tool/osa_agent/state.py +52 -0
- osa_tool-0.2.7/osa_tool/run.py +275 -0
- osa_tool-0.2.7/osa_tool/run_chat.py +72 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/run_multi_process.py +23 -37
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/README.md +8 -2
- osa_tool-0.2.7/osa_tool/scheduler/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/scheduler/plan.py +67 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/scheduler.py +14 -18
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/workflow_manager.py +20 -16
- osa_tool-0.2.7/osa_tool/tools/__init__.py +0 -0
- osa_tool-0.2.7/osa_tool/tools/repository_analysis/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen/context → osa_tool-0.2.7/osa_tool/tools/repository_analysis}/dependencies.py +1 -1
- osa_tool-0.2.7/osa_tool/tools/repository_analysis/documentation.py +55 -0
- osa_tool-0.2.7/osa_tool/tools/repository_analysis/models.py +28 -0
- osa_tool-0.2.7/osa_tool/tools/repository_analysis/repo_analyzer.py +57 -0
- {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/tools/repository_analysis}/sourcerank.py +11 -4
- osa_tool-0.2.7/osa_tool/tools/repository_analysis/testing.py +34 -0
- osa_tool-0.2.7/osa_tool/ui/__init__.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/ui/input_for_chat.py +30 -3
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/ui/plan_editor.py +6 -0
- osa_tool-0.2.7/osa_tool/utils/__init__.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/prompts_builder.py +4 -3
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/utils.py +55 -0
- osa_tool-0.2.7/osa_tool/validation/__init__.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/code_analyzer.py +47 -48
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/doc_validator.py +26 -21
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/paper_validator.py +18 -17
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/validation/report_generator.py +10 -11
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/workflow/README.md +3 -1
- osa_tool-0.2.7/osa_tool/workflow/__init__.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/workflow/workflow_generator.py +30 -29
- {osa_tool-0.2.6 → osa_tool-0.2.7}/pyproject.toml +2 -2
- osa_tool-0.2.6/osa_tool/config/prompts/analysis.toml +0 -50
- osa_tool-0.2.6/osa_tool/config/prompts/osa_agent.toml +0 -49
- osa_tool-0.2.6/osa_tool/config/settings.py +0 -140
- osa_tool-0.2.6/osa_tool/docs_generator/docs_run.py +0 -39
- osa_tool-0.2.6/osa_tool/docs_generator/license.py +0 -52
- osa_tool-0.2.6/osa_tool/models/models.py +0 -402
- osa_tool-0.2.6/osa_tool/osa_agent/builder.py +0 -28
- osa_tool-0.2.6/osa_tool/osa_agent/config.py +0 -49
- osa_tool-0.2.6/osa_tool/osa_agent/nodes/planner_node.py +0 -100
- osa_tool-0.2.6/osa_tool/osa_agent/state.py +0 -57
- osa_tool-0.2.6/osa_tool/readmegen/readme_core.py +0 -73
- osa_tool-0.2.6/osa_tool/run.py +0 -434
- osa_tool-0.2.6/osa_tool/run_chat.py +0 -141
- osa_tool-0.2.6/osa_tool/scheduler/todo_list.py +0 -39
- osa_tool-0.2.6/osa_tool/translation/readme_translator.py +0 -138
- osa_tool-0.2.6/osa_tool/ui/web_plan_editor.py +0 -74
- {osa_tool-0.2.6 → osa_tool-0.2.7}/LICENSE +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/aboutgen → osa_tool-0.2.7/osa_tool/config}/__init__.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/about_section.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/readme.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/readme_article.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/scheduler.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/prompts/validation.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/template.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/autopep8.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/black.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/fix_pep8.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/pep8.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/pypi_publish.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/slash_command_dispatch.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/github_gitverse/unit_test.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/autopep8.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/black.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/fix_pep8.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/pep8.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/pypi_publish.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/slash_command_dispatch.yml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/config/templates/workflow/gitlab/unit_test.yml +0 -0
- {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/conversion}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/config → osa_tool-0.2.7/osa_tool/core}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/conversion → osa_tool-0.2.7/osa_tool/core/git}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/analytics → osa_tool-0.2.7/osa_tool/core/git}/metadata.py +0 -0
- {osa_tool-0.2.6/osa_tool/docs_generator → osa_tool-0.2.7/osa_tool/core/llm}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/git_agent → osa_tool-0.2.7/osa_tool/core/models}/__init__.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/images/osa_logo.PNG +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/images/osa_logo_transparent.PNG +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/ci_config.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/community.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/contributing.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/licenses.toml +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/docs/templates/mkdocs.yml +0 -0
- {osa_tool-0.2.6/osa_tool/models → osa_tool-0.2.7/osa_tool/operations}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/osa_agent → osa_tool-0.2.7/osa_tool/operations/analysis}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/osa_agent/nodes → osa_tool-0.2.7/osa_tool/operations/analysis/repository_report}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/osatreesitter → osa_tool-0.2.7/osa_tool/operations/codebase}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/codebase/directory_translation}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen/context → osa_tool-0.2.7/osa_tool/operations/codebase/docstring_generation}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen/generator → osa_tool-0.2.7/osa_tool/operations/codebase/requirements_generation}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen/models → osa_tool-0.2.7/osa_tool/operations/docs}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/scheduler → osa_tool-0.2.7/osa_tool/operations/docs/about_generation}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/translation → osa_tool-0.2.7/osa_tool/operations/docs/community_docs_generation}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/ui → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/utils → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/context}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/article_content.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/context/article_path.py +0 -0
- {osa_tool-0.2.6/osa_tool/validation → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/generator}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/generator/icons/shieldsio_icons.json +0 -0
- {osa_tool-0.2.6/osa_tool/workflow → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation/models}/__init__.py +0 -0
- {osa_tool-0.2.6/osa_tool/readmegen → osa_tool-0.2.7/osa_tool/operations/docs/readme_generation}/utils.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/scheduler/response_validation.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/arguments_parser.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/logger.py +0 -0
- {osa_tool-0.2.6 → osa_tool-0.2.7}/osa_tool/utils/response_cleaner.py +0 -0
|
@@ -1,14 +1,13 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: osa_tool
|
|
3
|
-
Version: 0.2.
|
|
3
|
+
Version: 0.2.7
|
|
4
4
|
Summary: Tool that just makes your open source project better!
|
|
5
5
|
License-Expression: BSD-3-Clause
|
|
6
6
|
License-File: LICENSE
|
|
7
7
|
Author: ITMO-NSS-team
|
|
8
8
|
Author-email: itmo.nss.team@gmail.com
|
|
9
|
-
Requires-Python: >=3.
|
|
9
|
+
Requires-Python: >=3.11,<4.0
|
|
10
10
|
Classifier: Programming Language :: Python :: 3
|
|
11
|
-
Classifier: Programming Language :: Python :: 3.10
|
|
12
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
13
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
14
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
@@ -79,8 +78,6 @@ create them from scratch.
|
|
|
79
78
|
It automates the generation of README, different levels of documentation, CI/CD scripts, etc.
|
|
80
79
|
It also generates advices and recommendations for the repository.
|
|
81
80
|
|
|
82
|
-
OSA is currently under development, so not all features are implemented.
|
|
83
|
-
|
|
84
81
|
---
|
|
85
82
|
|
|
86
83
|
## How it works?
|
|
@@ -118,7 +115,7 @@ Here is a short video:
|
|
|
118
115
|
creates a pull request with proposed changes.
|
|
119
116
|
|
|
120
117
|
4. **Various LLMs**: Use OSA with an LLM accessible via API (e.g., OpenAI, VseGPT, Ollama), a local server, or try
|
|
121
|
-
an [osa_bot](https://
|
|
118
|
+
an [osa_bot](https://osa.nsslab.onti.actcognitive.org/) hosted on ITMO servers.
|
|
122
119
|
|
|
123
120
|
5. **Workflow Generator**: Automatically generates customizable CI/CD workflows for Python repositories,
|
|
124
121
|
including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
|
|
@@ -178,11 +175,14 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
|
|
|
178
175
|
|
|
179
176
|
### Prerequisites
|
|
180
177
|
|
|
181
|
-
OSA requires Python 3.
|
|
178
|
+
OSA requires Python 3.11 or higher.
|
|
182
179
|
|
|
183
|
-
The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
|
|
180
|
+
The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
|
|
181
|
+
The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
|
|
182
|
+
--no-fork option).
|
|
184
183
|
|
|
185
|
-
Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
|
|
184
|
+
Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
|
|
185
|
+
Gitverse respectively.
|
|
186
186
|
|
|
187
187
|
When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
|
|
188
188
|
|
|
@@ -233,23 +233,27 @@ documentation, see the [Workflow Generator README](./osa_tool/workflow/README.md
|
|
|
233
233
|
|
|
234
234
|
### Configuration
|
|
235
235
|
|
|
236
|
-
| Flag | Description | Default
|
|
237
|
-
|
|
238
|
-
| `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) |
|
|
239
|
-
| `-b`, `--branch` | Branch name of the repository | Default branch
|
|
240
|
-
| `-o`, `--output` | Path to the output directory | Current working directory
|
|
241
|
-
| `--api` | LLM API service provider | `
|
|
242
|
-
| `--base-url` | URL of the provider compatible with API OpenAI | `https://
|
|
243
|
-
| `--model` | Specific LLM model to use | `gpt-3.5-turbo`
|
|
244
|
-
| `--top_p` | Nucleus sampling probability | `0.95`
|
|
245
|
-
| `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05`
|
|
246
|
-
| `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096`
|
|
247
|
-
| `--context_window` | Total number of model context (Input + Output) | `16385`
|
|
248
|
-
| `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None`
|
|
249
|
-
| `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto`
|
|
250
|
-
| `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled`
|
|
251
|
-
| `--no-fork` | Avoid create fork for target repository | `False`
|
|
252
|
-
| `--no-pull-request` | Avoid create pull request for target repository | `False`
|
|
236
|
+
| Flag | Description | Default |
|
|
237
|
+
|----------------------|-------------------------------------------------------------------------------------|--------------------------------|
|
|
238
|
+
| `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
|
|
239
|
+
| `-b`, `--branch` | Branch name of the repository | Default branch |
|
|
240
|
+
| `-o`, `--output` | Path to the output directory | Current working directory |
|
|
241
|
+
| `--api` | LLM API service provider | `openai` |
|
|
242
|
+
| `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
|
|
243
|
+
| `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
|
|
244
|
+
| `--top_p` | Nucleus sampling probability | `0.95` |
|
|
245
|
+
| `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
|
|
246
|
+
| `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
|
|
247
|
+
| `--context_window` | Total number of model context (Input + Output) | `16385` |
|
|
248
|
+
| `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
|
|
249
|
+
| `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
|
|
250
|
+
| `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
|
|
251
|
+
| `--no-fork` | Avoid create fork for target repository | `False` |
|
|
252
|
+
| `--no-pull-request` | Avoid create pull request for target repository | `False` |
|
|
253
|
+
|
|
254
|
+
Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom configuration file. If no custom configuration file is provided, OSA will use the default configuration.
|
|
255
|
+
|
|
256
|
+
By default, OSA uses a single model for all tasks (specified via `--model`). If you want to use different models for different types of tasks, disable the `--use-single-model` flag and specify models for each task type (`--model-docstring`, `--model-readme`, `--model-validation`, `--model-general`).
|
|
253
257
|
|
|
254
258
|
To learn how to work with the interactive CLI and view descriptions of all available keys, visit
|
|
255
259
|
the [CLI usage guide](./osa_tool/scheduler/README.md).
|
|
@@ -368,9 +372,7 @@ If you use this software, please cite it as below.
|
|
|
368
372
|
author={Nikitin, Nikolay and Getmanov, Andrey and Popov, Zakhar and
|
|
369
373
|
Ulyanova Ekaterina and Aksenkin, Yaroslav and
|
|
370
374
|
Sokolov, Ilya and Boukhanovsky, Alexander},
|
|
371
|
-
booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}
|
|
372
|
-
|
|
373
|
-
}
|
|
375
|
+
booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}}
|
|
374
376
|
|
|
375
377
|
---
|
|
376
378
|
|
|
@@ -34,8 +34,6 @@ create them from scratch.
|
|
|
34
34
|
It automates the generation of README, different levels of documentation, CI/CD scripts, etc.
|
|
35
35
|
It also generates advices and recommendations for the repository.
|
|
36
36
|
|
|
37
|
-
OSA is currently under development, so not all features are implemented.
|
|
38
|
-
|
|
39
37
|
---
|
|
40
38
|
|
|
41
39
|
## How it works?
|
|
@@ -73,7 +71,7 @@ Here is a short video:
|
|
|
73
71
|
creates a pull request with proposed changes.
|
|
74
72
|
|
|
75
73
|
4. **Various LLMs**: Use OSA with an LLM accessible via API (e.g., OpenAI, VseGPT, Ollama), a local server, or try
|
|
76
|
-
an [osa_bot](https://
|
|
74
|
+
an [osa_bot](https://osa.nsslab.onti.actcognitive.org/) hosted on ITMO servers.
|
|
77
75
|
|
|
78
76
|
5. **Workflow Generator**: Automatically generates customizable CI/CD workflows for Python repositories,
|
|
79
77
|
including unit tests, code formatting, PEP 8 compliance checks, and PyPI publication.
|
|
@@ -133,11 +131,14 @@ docker build --build-arg GIT_USER_NAME="your-user-name" --build-arg GIT_USER_EMA
|
|
|
133
131
|
|
|
134
132
|
### Prerequisites
|
|
135
133
|
|
|
136
|
-
OSA requires Python 3.
|
|
134
|
+
OSA requires Python 3.11 or higher.
|
|
137
135
|
|
|
138
|
-
The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
|
|
136
|
+
The .env file is required to specify the LLM API key (OPENAI_API_KEY or AUTHORIZATION_KEY) and optionally a Git token.
|
|
137
|
+
The Git token (GIT_TOKEN) may be omitted if you plan to work with a public repository without creating a fork (using the
|
|
138
|
+
--no-fork option).
|
|
139
139
|
|
|
140
|
-
Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
|
|
140
|
+
Alternatively, instead of GIT_TOKEN, you can use GITHUB_TOKEN, GITLAB_TOKEN, or GITVERSE_TOKEN for GitHub, GitLab, and
|
|
141
|
+
Gitverse respectively.
|
|
141
142
|
|
|
142
143
|
When running `osa-tool` from CLI, you need to set the GIT_TOKEN and API key first:
|
|
143
144
|
|
|
@@ -188,23 +189,27 @@ documentation, see the [Workflow Generator README](./osa_tool/workflow/README.md
|
|
|
188
189
|
|
|
189
190
|
### Configuration
|
|
190
191
|
|
|
191
|
-
| Flag | Description | Default
|
|
192
|
-
|
|
193
|
-
| `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) |
|
|
194
|
-
| `-b`, `--branch` | Branch name of the repository | Default branch
|
|
195
|
-
| `-o`, `--output` | Path to the output directory | Current working directory
|
|
196
|
-
| `--api` | LLM API service provider | `
|
|
197
|
-
| `--base-url` | URL of the provider compatible with API OpenAI | `https://
|
|
198
|
-
| `--model` | Specific LLM model to use | `gpt-3.5-turbo`
|
|
199
|
-
| `--top_p` | Nucleus sampling probability | `0.95`
|
|
200
|
-
| `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05`
|
|
201
|
-
| `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096`
|
|
202
|
-
| `--context_window` | Total number of model context (Input + Output) | `16385`
|
|
203
|
-
| `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None`
|
|
204
|
-
| `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto`
|
|
205
|
-
| `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled`
|
|
206
|
-
| `--no-fork` | Avoid create fork for target repository | `False`
|
|
207
|
-
| `--no-pull-request` | Avoid create pull request for target repository | `False`
|
|
192
|
+
| Flag | Description | Default |
|
|
193
|
+
|----------------------|-------------------------------------------------------------------------------------|--------------------------------|
|
|
194
|
+
| `-r`, `--repository` | URL of the GitHub/GitLab/Gitverse repository (**Mandatory**) | |
|
|
195
|
+
| `-b`, `--branch` | Branch name of the repository | Default branch |
|
|
196
|
+
| `-o`, `--output` | Path to the output directory | Current working directory |
|
|
197
|
+
| `--api` | LLM API service provider | `openai` |
|
|
198
|
+
| `--base-url` | URL of the provider compatible with API OpenAI | `https://openrouter.ai/api/v1` |
|
|
199
|
+
| `--model` | Specific LLM model to use | `gpt-3.5-turbo` |
|
|
200
|
+
| `--top_p` | Nucleus sampling probability | `0.95` |
|
|
201
|
+
| `--temperature` | Sampling temperature to use for the LLM output (0 = deterministic, 1 = creative). | `0.05` |
|
|
202
|
+
| `--max_tokens` | Maximum number of output tokens the model can generate in a single response | `4096` |
|
|
203
|
+
| `--context_window` | Total number of model context (Input + Output) | `16385` |
|
|
204
|
+
| `--attachment` | Path to a local PDF or .docx file, or a URL to a PDF resource | `None` |
|
|
205
|
+
| `-m`, `--mode` | Operation mode for repository processing: `basic`, `auto` (default), or `advanced`. | `auto` |
|
|
206
|
+
| `--delete-dir` | Enable deleting the downloaded repository after processing | `disabled` |
|
|
207
|
+
| `--no-fork` | Avoid create fork for target repository | `False` |
|
|
208
|
+
| `--no-pull-request` | Avoid create pull request for target repository | `False` |
|
|
209
|
+
|
|
210
|
+
Also OSA supports custom configuration via TOML files. Use the `--config-file` option to specify a path to custom configuration file. If no custom configuration file is provided, OSA will use the default configuration.
|
|
211
|
+
|
|
212
|
+
By default, OSA uses a single model for all tasks (specified via `--model`). If you want to use different models for different types of tasks, disable the `--use-single-model` flag and specify models for each task type (`--model-docstring`, `--model-readme`, `--model-validation`, `--model-general`).
|
|
208
213
|
|
|
209
214
|
To learn how to work with the interactive CLI and view descriptions of all available keys, visit
|
|
210
215
|
the [CLI usage guide](./osa_tool/scheduler/README.md).
|
|
@@ -323,8 +328,6 @@ If you use this software, please cite it as below.
|
|
|
323
328
|
author={Nikitin, Nikolay and Getmanov, Andrey and Popov, Zakhar and
|
|
324
329
|
Ulyanova Ekaterina and Aksenkin, Yaroslav and
|
|
325
330
|
Sokolov, Ilya and Boukhanovsky, Alexander},
|
|
326
|
-
booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}
|
|
327
|
-
|
|
328
|
-
}
|
|
331
|
+
booktitle={Championing Open-source DEvelopment in ML Workshop@ ICML25}}
|
|
329
332
|
|
|
330
333
|
---
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
from pydantic import BaseModel
|
|
2
|
+
|
|
3
|
+
from osa_tool.config.settings import ConfigManager
|
|
4
|
+
from osa_tool.core.git.git_agent import GitAgent
|
|
5
|
+
from osa_tool.scheduler.workflow_manager import WorkflowManager
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class OSAConfig(BaseModel):
|
|
9
|
+
"""
|
|
10
|
+
Global, read-only configuration.
|
|
11
|
+
Initialized once per session.
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
config_manager: ConfigManager
|
|
15
|
+
git_agent: GitAgent
|
|
16
|
+
workflow_manager: WorkflowManager
|
|
17
|
+
|
|
18
|
+
# For git_agent
|
|
19
|
+
create_fork: bool = True
|
|
20
|
+
create_pull_request: bool = True
|
|
21
|
+
|
|
22
|
+
# Clean
|
|
23
|
+
delete_dir: bool = False
|
|
24
|
+
|
|
25
|
+
enable_replanning: bool = True
|
|
26
|
+
enable_memory: bool = True
|
|
27
|
+
dry_run: bool = False
|
|
28
|
+
|
|
29
|
+
class Config:
|
|
30
|
+
arbitrary_types_allowed = True
|
|
@@ -0,0 +1,179 @@
|
|
|
1
|
+
[prompts]
|
|
2
|
+
main_prompt = """
|
|
3
|
+
INPUT DATA:
|
|
4
|
+
|
|
5
|
+
1. PROJECT NAME: {project_name}
|
|
6
|
+
2. METADATA: {metadata}
|
|
7
|
+
3. REPOSITORY FILE TREE: {repository_tree}
|
|
8
|
+
4. PRESENCE OF IMPORTANT FILES AND DIRECTORIES: {presence_files}
|
|
9
|
+
5. README CONTENT: {readme_content}
|
|
10
|
+
|
|
11
|
+
TASK:
|
|
12
|
+
|
|
13
|
+
Generate a JSON report following this exact structure:
|
|
14
|
+
|
|
15
|
+
{{
|
|
16
|
+
"structure": {{
|
|
17
|
+
"compliance": "text",
|
|
18
|
+
"missing_files": ["list"],
|
|
19
|
+
"organization": "text"
|
|
20
|
+
}},
|
|
21
|
+
"readme": {{
|
|
22
|
+
"readme_quality": "text"
|
|
23
|
+
"project_description": "Yes/No/Partial",
|
|
24
|
+
"installation": "Yes/No/Partial",
|
|
25
|
+
"usage_examples": "Yes/No/Partial",
|
|
26
|
+
"contribution_guidelines": "Yes/No/Partial",
|
|
27
|
+
"license_specified": "Yes/No/Partial",
|
|
28
|
+
"badges_present": "Yes/No/Partial"
|
|
29
|
+
}},
|
|
30
|
+
"documentation": {{
|
|
31
|
+
"tests_present": "Yes/No/Partial",
|
|
32
|
+
"docs_quality": "text",
|
|
33
|
+
"outdated_content": boolean
|
|
34
|
+
}},
|
|
35
|
+
"assessment": {{
|
|
36
|
+
"key_shortcomings": ["list"],
|
|
37
|
+
"recommendations": ["list"]
|
|
38
|
+
}}
|
|
39
|
+
}}
|
|
40
|
+
|
|
41
|
+
RULES:
|
|
42
|
+
|
|
43
|
+
- Use double quotes for JSON
|
|
44
|
+
- No markdown formatting
|
|
45
|
+
- Only use Yes/No/Partial for readme fields and tests_present
|
|
46
|
+
- Be strictly factual about file presence
|
|
47
|
+
- Check for the presence of the directory with tests
|
|
48
|
+
- Prioritize 3 most critical recommendations
|
|
49
|
+
|
|
50
|
+
"""
|
|
51
|
+
|
|
52
|
+
after_report_text_prompt = """
|
|
53
|
+
DEFINITIONS:
|
|
54
|
+
|
|
55
|
+
translate_dirs — Translate directory names to English
|
|
56
|
+
convert_notebooks — Convert Jupyter notebooks to Python scripts
|
|
57
|
+
translate_readme — Translate README file to English
|
|
58
|
+
ensure_license — Ensure a LICENSE file is present
|
|
59
|
+
community_docs — Add or update community documentation files
|
|
60
|
+
docstring — Add or update docstrings in source code
|
|
61
|
+
report — Generate refactoring report
|
|
62
|
+
readme — Create a README file
|
|
63
|
+
requirements — Add or update requirements file
|
|
64
|
+
organize — Reorganize project structure
|
|
65
|
+
about — Add project description or about section
|
|
66
|
+
validate_paper — Validate academic paper files
|
|
67
|
+
validate_doc — Validate documentation files
|
|
68
|
+
generate_workflows — Generate CI or automation workflows
|
|
69
|
+
include_tests — Add or include tests
|
|
70
|
+
include_black — Add Black code formatter
|
|
71
|
+
include_pep8 — Add PEP8 compliance checks
|
|
72
|
+
include_autopep8 — Add autopep8 formatter
|
|
73
|
+
include_fix_pep8 — Automatically fix PEP8 issues
|
|
74
|
+
include_pypi — Prepare project for PyPI publishing
|
|
75
|
+
python_versions — Specify supported Python versions
|
|
76
|
+
pep8_tool — Configure PEP8 checking tool
|
|
77
|
+
use_poetry — Use Poetry for dependency management
|
|
78
|
+
include_codecov — Add Codecov integration
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
INPUT DATA (tasks list):
|
|
82
|
+
|
|
83
|
+
{tasks_list}
|
|
84
|
+
|
|
85
|
+
TASK:
|
|
86
|
+
|
|
87
|
+
Write a connected textual summary of the repository refactoring.
|
|
88
|
+
|
|
89
|
+
REQUIREMENTS:
|
|
90
|
+
- Write approximately two short paragraphs
|
|
91
|
+
- Use plain text only
|
|
92
|
+
- Do not use markdown
|
|
93
|
+
- Do not use bullet points or lists
|
|
94
|
+
- Do NOT mention tasks that were not performed
|
|
95
|
+
- Do NOT explain why something was not done
|
|
96
|
+
- Do NOT use modal or speculative language (avoid words like "may", "might", "likely")
|
|
97
|
+
- Describe only actions that were actually performed
|
|
98
|
+
- Use neutral but natural technical language
|
|
99
|
+
- Write in confident past tense
|
|
100
|
+
- Base the text ONLY on tasks with value "Yes"
|
|
101
|
+
|
|
102
|
+
STYLE:
|
|
103
|
+
- Clear and readable
|
|
104
|
+
- Slightly narrative, but professional
|
|
105
|
+
- No bureaucratic or legalistic phrasing
|
|
106
|
+
- No assumptions or interpretation beyond task definitions
|
|
107
|
+
|
|
108
|
+
OUTPUT:
|
|
109
|
+
Return only the text summary.
|
|
110
|
+
Do not add any explanations or extra text.
|
|
111
|
+
"""
|
|
112
|
+
|
|
113
|
+
after_report_blocks_prompt = """
|
|
114
|
+
TASK DEFINITIONS:
|
|
115
|
+
|
|
116
|
+
translate_dirs — Translate directory names to English
|
|
117
|
+
convert_notebooks — Convert Jupyter notebooks to Python scripts
|
|
118
|
+
translate_readme — Translate README file to English
|
|
119
|
+
ensure_license — Ensure a LICENSE file is present
|
|
120
|
+
community_docs — Add or update community documentation files
|
|
121
|
+
docstring — Add or update docstrings in source code
|
|
122
|
+
report — Generate refactoring report
|
|
123
|
+
readme — Create a README file
|
|
124
|
+
requirements — Add or update requirements file
|
|
125
|
+
organize — Reorganize project structure
|
|
126
|
+
about — Add project description or about section
|
|
127
|
+
validate_paper — Validate academic paper files
|
|
128
|
+
validate_doc — Validate documentation files
|
|
129
|
+
generate_workflows — Generate CI or automation workflows
|
|
130
|
+
include_tests — Add or include tests
|
|
131
|
+
include_black — Add Black code formatter
|
|
132
|
+
include_pep8 — Add PEP8 compliance checks
|
|
133
|
+
include_autopep8 — Add autopep8 formatter
|
|
134
|
+
include_fix_pep8 — Automatically fix PEP8 issues
|
|
135
|
+
include_pypi — Prepare project for PyPI publishing
|
|
136
|
+
python_versions — Specify supported Python versions
|
|
137
|
+
pep8_tool — Configure PEP8 checking tool
|
|
138
|
+
use_poetry — Use Poetry for dependency management
|
|
139
|
+
include_codecov — Add Codecov integration
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
INPUT DATA (tasks list):
|
|
143
|
+
|
|
144
|
+
{tasks_list}
|
|
145
|
+
|
|
146
|
+
TASK:
|
|
147
|
+
|
|
148
|
+
You must summarize the result of repository refactoring based ONLY on the tasks listed above.
|
|
149
|
+
|
|
150
|
+
Group tasks into logical blocks.
|
|
151
|
+
Each logical block must contain:
|
|
152
|
+
- a short name (plain sentence)
|
|
153
|
+
- a short description (plain sentence)
|
|
154
|
+
- a list of task numbers that belong to this block
|
|
155
|
+
|
|
156
|
+
OUTPUT FORMAT:
|
|
157
|
+
|
|
158
|
+
Return ONLY valid JSON.
|
|
159
|
+
No extra text, no explanations, no markdown.
|
|
160
|
+
|
|
161
|
+
JSON structure:
|
|
162
|
+
[
|
|
163
|
+
{{
|
|
164
|
+
"name": "Block name as a plain sentence",
|
|
165
|
+
"description": "Short description as a plain sentence",
|
|
166
|
+
"tasks": [1, 2]
|
|
167
|
+
}}
|
|
168
|
+
]
|
|
169
|
+
|
|
170
|
+
RULES (IMPORTANT):
|
|
171
|
+
|
|
172
|
+
1. Use double quotes only
|
|
173
|
+
2. Output must be valid JSON
|
|
174
|
+
3. Use ONLY task numbers from the input list
|
|
175
|
+
4. Every task from 1 to 7 MUST be used exactly once
|
|
176
|
+
5. Do NOT invent new tasks
|
|
177
|
+
7. "tasks" must contain only numbers
|
|
178
|
+
|
|
179
|
+
"""
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
[prompts]
|
|
2
|
+
intent_router = """
|
|
3
|
+
Analyze the following user request and any attached context:
|
|
4
|
+
|
|
5
|
+
User Request: {user_request}
|
|
6
|
+
Attachment: {attachment}
|
|
7
|
+
|
|
8
|
+
Return the result **strictly in the JSON format described above**.
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
planner = """
|
|
12
|
+
User request:
|
|
13
|
+
{user_request}
|
|
14
|
+
|
|
15
|
+
Detected intent: {intent}
|
|
16
|
+
Task scope: {task_scope}
|
|
17
|
+
|
|
18
|
+
Repository overview:
|
|
19
|
+
{repo_data}
|
|
20
|
+
|
|
21
|
+
Available operations:
|
|
22
|
+
{available_operations}
|
|
23
|
+
|
|
24
|
+
Select the operations that best satisfy the user request.
|
|
25
|
+
"""
|
|
26
|
+
|
|
27
|
+
detect_arguments = """
|
|
28
|
+
User request:
|
|
29
|
+
{user_request}
|
|
30
|
+
|
|
31
|
+
Operations with additional arguments:
|
|
32
|
+
{operations}
|
|
33
|
+
"""
|
|
34
|
+
|
|
35
|
+
pr_summarizer = """
|
|
36
|
+
Summarize the following repository changes into a Pull Request description.
|
|
37
|
+
|
|
38
|
+
Operation events:
|
|
39
|
+
{events}
|
|
40
|
+
|
|
41
|
+
Write a short summary suitable for a PR body.
|
|
42
|
+
"""
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
[prompts]
|
|
2
|
+
merge_requirements = """
|
|
3
|
+
You are a Senior Python DevOps engineer.
|
|
4
|
+
Your task is to merge two `requirements.txt` file contents into one final list.
|
|
5
|
+
|
|
6
|
+
INPUT DATA:
|
|
7
|
+
1. OLD_REQUIREMENTS (contains preferred versions/constraints):
|
|
8
|
+
{old_requirements}
|
|
9
|
+
|
|
10
|
+
2. NEW_REQUIREMENTS (generated from code analysis, acts as the source of truth for used libraries):
|
|
11
|
+
{new_requirements}
|
|
12
|
+
|
|
13
|
+
TASK:
|
|
14
|
+
Merge these two lists into a single valid list of strings.
|
|
15
|
+
|
|
16
|
+
RULES:
|
|
17
|
+
1. The `NEW_REQUIREMENTS` list determines WHICH libraries must be included.
|
|
18
|
+
2. For each library in `NEW_REQUIREMENTS`:
|
|
19
|
+
- If it exists in `OLD_REQUIREMENTS`, use the version string/constraints from `OLD_REQUIREMENTS`.
|
|
20
|
+
- If it does NOT exist in `OLD_REQUIREMENTS`, keep the version from `NEW_REQUIREMENTS`.
|
|
21
|
+
3. If a library exists in `OLD_REQUIREMENTS` but NOT in `NEW_REQUIREMENTS`:
|
|
22
|
+
- REMOVE IT. It is unused.
|
|
23
|
+
4. Output ONLY a valid JSON object with a key "dependencies" containing a list of strings.
|
|
24
|
+
|
|
25
|
+
Example Output:
|
|
26
|
+
{{
|
|
27
|
+
"dependencies": ["requests==2.25.1", "pandas>=2.0.0", "numpy"]
|
|
28
|
+
}}
|
|
29
|
+
|
|
30
|
+
Do not add any explanations, comments or markdown blocks.
|
|
31
|
+
"""
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
[prompts]
|
|
2
|
+
# OSA AGENTS
|
|
3
|
+
intent_router = """
|
|
4
|
+
You are an intelligent assistant called IntentRouter.
|
|
5
|
+
Your task is to classify user requests into intents and determine the scope of the task in a software repository.
|
|
6
|
+
Always respond **strictly in JSON** matching this structure:
|
|
7
|
+
|
|
8
|
+
{{
|
|
9
|
+
"intent": "new_task | feedback | unknown",
|
|
10
|
+
"task_scope": "none | analysis | docs | codebase | full_repo",
|
|
11
|
+
"confidence": "<float value between 0 and 1>"
|
|
12
|
+
}}
|
|
13
|
+
|
|
14
|
+
INTENT definitions:
|
|
15
|
+
- new_task: A brand-new task requiring some action or output.
|
|
16
|
+
- feedback: Comments, corrections, or minor updates to existing outputs.
|
|
17
|
+
- unknown: Cannot confidently determine the intent.
|
|
18
|
+
|
|
19
|
+
TASK_SCOPE definitions:
|
|
20
|
+
- none: No actionable task, purely informational request.
|
|
21
|
+
- analysis: Only analysis or reporting, without modifying code or docs.
|
|
22
|
+
- docs: Focus on modifying documentation, README, or textual content in the repository.
|
|
23
|
+
- codebase: Focus on modifying source code, structure, and project files (for examples requirements).
|
|
24
|
+
- full_repo: Analyze or modify both codebase and documentation, or the entire repository.
|
|
25
|
+
|
|
26
|
+
RULES:
|
|
27
|
+
|
|
28
|
+
- Do not include explanations, extra text, or markdown.
|
|
29
|
+
- Always return valid JSON parsable into the specified schema.
|
|
30
|
+
- Ensure "confidence" is a float between 0 and 1.
|
|
31
|
+
"""
|
|
32
|
+
|
|
33
|
+
planner = """
|
|
34
|
+
You are an autonomous planning agent in a multi-agent system.
|
|
35
|
+
|
|
36
|
+
Your responsibility:
|
|
37
|
+
- Select the most appropriate operations to fulfill the user request.
|
|
38
|
+
- Do NOT invent new operations.
|
|
39
|
+
- Use ONLY the operations provided in the list.
|
|
40
|
+
|
|
41
|
+
Strict rules:
|
|
42
|
+
- You MUST return a valid JSON object.
|
|
43
|
+
- The JSON MUST conform exactly to the following schema:
|
|
44
|
+
|
|
45
|
+
{{
|
|
46
|
+
"operations": ["string"],
|
|
47
|
+
"reasoning": "string"
|
|
48
|
+
}}
|
|
49
|
+
|
|
50
|
+
Additional constraints:
|
|
51
|
+
- "operations" must be a list of operation names.
|
|
52
|
+
- Do NOT include any explanations outside of the JSON.
|
|
53
|
+
- Do NOT include markdown.
|
|
54
|
+
- If no operations are applicable, return an empty list.
|
|
55
|
+
|
|
56
|
+
You are NOT allowed to reorder operations by logic — ordering is handled externally.
|
|
57
|
+
"""
|
|
58
|
+
|
|
59
|
+
detect_arguments = """
|
|
60
|
+
You are an intelligent assistant responsible for extracting the required arguments for specific operations from the user request.
|
|
61
|
+
|
|
62
|
+
Your responsibilities:
|
|
63
|
+
- For each operation extract them directly from the user request.
|
|
64
|
+
- If the user request contains relevant values for the arguments, return them.
|
|
65
|
+
|
|
66
|
+
Strict rules:
|
|
67
|
+
- You MUST return a valid JSON object.
|
|
68
|
+
- The JSON MUST conform exactly to the following schema:
|
|
69
|
+
|
|
70
|
+
{{
|
|
71
|
+
"operation_name": {{"arg1": value1, "arg2": value2, ...}},
|
|
72
|
+
"operation_name_2": {{"arg1": value1, "arg2": value2, ...}}
|
|
73
|
+
}}
|
|
74
|
+
|
|
75
|
+
Additional constraints:
|
|
76
|
+
- Only include the necessary arguments for each operation.
|
|
77
|
+
- Do NOT include any explanations outside of the JSON.
|
|
78
|
+
- Do NOT include markdown.
|
|
79
|
+
- If the user request contains values for an operation's arguments, include them in the response.
|
|
80
|
+
- If no relevant arguments are found for a given operation, skip that operation from the JSON.
|
|
81
|
+
"""
|
|
82
|
+
|
|
83
|
+
pr_summarizer = """
|
|
84
|
+
You are an assistant that writes concise and professional GitHub Pull Request descriptions.
|
|
85
|
+
|
|
86
|
+
Your task:
|
|
87
|
+
- Summarize repository changes based on structured operation events
|
|
88
|
+
- Be factual, neutral, and clear
|
|
89
|
+
- Do NOT invent changes
|
|
90
|
+
- Do NOT mention internal tooling or agents
|
|
91
|
+
- Prefer bullet points if multiple changes exist
|
|
92
|
+
|
|
93
|
+
Strict rules:
|
|
94
|
+
- You MUST return a valid JSON object.
|
|
95
|
+
- The JSON MUST conform exactly to the following schema:
|
|
96
|
+
|
|
97
|
+
{{
|
|
98
|
+
"summary": "text",
|
|
99
|
+
}}
|
|
100
|
+
"""
|
|
@@ -31,11 +31,6 @@ arguments:
|
|
|
31
31
|
with language-specific suffixes (e.g., README_ru.md, README_zh.md).
|
|
32
32
|
example: Russian Chinese
|
|
33
33
|
|
|
34
|
-
delete_dir:
|
|
35
|
-
aliases: [ "--delete-dir" ]
|
|
36
|
-
type: flag
|
|
37
|
-
description: "Enable deleting the downloaded repository after processing."
|
|
38
|
-
|
|
39
34
|
ensure_license:
|
|
40
35
|
aliases: [ "--ensure-license" ]
|
|
41
36
|
type: str
|
|
@@ -103,6 +98,16 @@ arguments:
|
|
|
103
98
|
description: "Check whether the experiments proposed in an attached documentation file can be reproduced using the selected repository."
|
|
104
99
|
|
|
105
100
|
settings:
|
|
101
|
+
use_single_model:
|
|
102
|
+
aliases: [ "--use-single-model" ]
|
|
103
|
+
type: flag
|
|
104
|
+
description: "Use the same model for all tasks (from default configuration)."
|
|
105
|
+
|
|
106
|
+
config_file:
|
|
107
|
+
aliases: [ "--config-file" ]
|
|
108
|
+
type: str
|
|
109
|
+
description: "Path to custom configuration file (TOML format)."
|
|
110
|
+
|
|
106
111
|
no_fork:
|
|
107
112
|
aliases: [ "--no-fork" ]
|
|
108
113
|
type: flag
|
|
@@ -113,6 +118,11 @@ settings:
|
|
|
113
118
|
type: flag
|
|
114
119
|
description: "Do not create a pull request to the target repository."
|
|
115
120
|
|
|
121
|
+
delete_dir:
|
|
122
|
+
aliases: [ "--delete-dir" ]
|
|
123
|
+
type: flag
|
|
124
|
+
description: "Enable deleting the downloaded repository after processing."
|
|
125
|
+
|
|
116
126
|
repository:
|
|
117
127
|
aliases: [ "-r", "--repository" ]
|
|
118
128
|
type: str
|
|
@@ -175,6 +185,26 @@ settings:
|
|
|
175
185
|
Specific LLM model to use. See available providers and models:
|
|
176
186
|
https://github.com/aimclub/ProtoLLM/tree/main/protollm/connectors
|
|
177
187
|
|
|
188
|
+
model_docstring:
|
|
189
|
+
aliases: [ "--model-docstring" ]
|
|
190
|
+
type: str
|
|
191
|
+
description: "Specific LLM model for docstring generation tasks."
|
|
192
|
+
|
|
193
|
+
model_readme:
|
|
194
|
+
aliases: [ "--model-readme" ]
|
|
195
|
+
type: str
|
|
196
|
+
description: "Specific LLM model for README generation tasks."
|
|
197
|
+
|
|
198
|
+
model_validation:
|
|
199
|
+
aliases: [ "--model-validation" ]
|
|
200
|
+
type: str
|
|
201
|
+
description: "Specific LLM model for validation tasks."
|
|
202
|
+
|
|
203
|
+
model_general:
|
|
204
|
+
aliases: [ "--model-general" ]
|
|
205
|
+
type: str
|
|
206
|
+
description: "Specific LLM model for general tasks such as About section generation or reorganization."
|
|
207
|
+
|
|
178
208
|
temperature:
|
|
179
209
|
aliases: [ "--temperature" ]
|
|
180
210
|
type: float
|