bioguider 0.2.52__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.
- bioguider/__init__.py +0 -0
- bioguider/agents/__init__.py +0 -0
- bioguider/agents/agent_task.py +92 -0
- bioguider/agents/agent_tools.py +176 -0
- bioguider/agents/agent_utils.py +504 -0
- bioguider/agents/collection_execute_step.py +182 -0
- bioguider/agents/collection_observe_step.py +125 -0
- bioguider/agents/collection_plan_step.py +156 -0
- bioguider/agents/collection_task.py +184 -0
- bioguider/agents/collection_task_utils.py +142 -0
- bioguider/agents/common_agent.py +137 -0
- bioguider/agents/common_agent_2step.py +215 -0
- bioguider/agents/common_conversation.py +61 -0
- bioguider/agents/common_step.py +85 -0
- bioguider/agents/consistency_collection_step.py +102 -0
- bioguider/agents/consistency_evaluation_task.py +57 -0
- bioguider/agents/consistency_evaluation_task_utils.py +14 -0
- bioguider/agents/consistency_observe_step.py +110 -0
- bioguider/agents/consistency_query_step.py +77 -0
- bioguider/agents/dockergeneration_execute_step.py +186 -0
- bioguider/agents/dockergeneration_observe_step.py +154 -0
- bioguider/agents/dockergeneration_plan_step.py +158 -0
- bioguider/agents/dockergeneration_task.py +158 -0
- bioguider/agents/dockergeneration_task_utils.py +220 -0
- bioguider/agents/evaluation_installation_task.py +270 -0
- bioguider/agents/evaluation_readme_task.py +767 -0
- bioguider/agents/evaluation_submission_requirements_task.py +172 -0
- bioguider/agents/evaluation_task.py +206 -0
- bioguider/agents/evaluation_tutorial_task.py +169 -0
- bioguider/agents/evaluation_tutorial_task_prompts.py +187 -0
- bioguider/agents/evaluation_userguide_prompts.py +179 -0
- bioguider/agents/evaluation_userguide_task.py +154 -0
- bioguider/agents/evaluation_utils.py +127 -0
- bioguider/agents/identification_execute_step.py +181 -0
- bioguider/agents/identification_observe_step.py +104 -0
- bioguider/agents/identification_plan_step.py +140 -0
- bioguider/agents/identification_task.py +270 -0
- bioguider/agents/identification_task_utils.py +22 -0
- bioguider/agents/peo_common_step.py +64 -0
- bioguider/agents/prompt_utils.py +253 -0
- bioguider/agents/python_ast_repl_tool.py +69 -0
- bioguider/agents/rag_collection_task.py +130 -0
- bioguider/conversation.py +67 -0
- bioguider/database/code_structure_db.py +500 -0
- bioguider/database/summarized_file_db.py +146 -0
- bioguider/generation/__init__.py +39 -0
- bioguider/generation/benchmark_metrics.py +610 -0
- bioguider/generation/change_planner.py +189 -0
- bioguider/generation/document_renderer.py +157 -0
- bioguider/generation/llm_cleaner.py +67 -0
- bioguider/generation/llm_content_generator.py +1128 -0
- bioguider/generation/llm_injector.py +809 -0
- bioguider/generation/models.py +85 -0
- bioguider/generation/output_manager.py +74 -0
- bioguider/generation/repo_reader.py +37 -0
- bioguider/generation/report_loader.py +166 -0
- bioguider/generation/style_analyzer.py +36 -0
- bioguider/generation/suggestion_extractor.py +436 -0
- bioguider/generation/test_metrics.py +189 -0
- bioguider/managers/benchmark_manager.py +785 -0
- bioguider/managers/evaluation_manager.py +215 -0
- bioguider/managers/generation_manager.py +686 -0
- bioguider/managers/generation_test_manager.py +107 -0
- bioguider/managers/generation_test_manager_v2.py +525 -0
- bioguider/rag/__init__.py +0 -0
- bioguider/rag/config.py +117 -0
- bioguider/rag/data_pipeline.py +651 -0
- bioguider/rag/embedder.py +24 -0
- bioguider/rag/rag.py +138 -0
- bioguider/settings.py +103 -0
- bioguider/utils/code_structure_builder.py +59 -0
- bioguider/utils/constants.py +135 -0
- bioguider/utils/default.gitignore +140 -0
- bioguider/utils/file_utils.py +215 -0
- bioguider/utils/gitignore_checker.py +175 -0
- bioguider/utils/notebook_utils.py +117 -0
- bioguider/utils/pyphen_utils.py +73 -0
- bioguider/utils/python_file_handler.py +65 -0
- bioguider/utils/r_file_handler.py +551 -0
- bioguider/utils/utils.py +163 -0
- bioguider-0.2.52.dist-info/LICENSE +21 -0
- bioguider-0.2.52.dist-info/METADATA +51 -0
- bioguider-0.2.52.dist-info/RECORD +84 -0
- bioguider-0.2.52.dist-info/WHEEL +4 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
from pathlib import Path
|
|
2
|
+
|
|
3
|
+
from bioguider.agents.evaluation_tutorial_task import EvaluationTutorialTask
|
|
4
|
+
from bioguider.agents.evaluation_userguide_task import EvaluationUserGuideTask
|
|
5
|
+
from bioguider.database.code_structure_db import CodeStructureDb
|
|
6
|
+
from bioguider.utils.constants import ProjectMetadata
|
|
7
|
+
|
|
8
|
+
from ..agents.identification_task import IdentificationTask
|
|
9
|
+
from ..rag.rag import RAG
|
|
10
|
+
from ..utils.file_utils import parse_refined_repo_path, parse_repo_url
|
|
11
|
+
from ..utils.code_structure_builder import CodeStructureBuilder
|
|
12
|
+
from ..database.summarized_file_db import SummarizedFilesDb
|
|
13
|
+
from ..agents.evaluation_readme_task import EvaluationREADMETask
|
|
14
|
+
from ..agents.evaluation_installation_task import EvaluationInstallationTask
|
|
15
|
+
from ..agents.evaluation_submission_requirements_task import EvaluationSubmissionRequirementsTask
|
|
16
|
+
|
|
17
|
+
class EvaluationManager:
|
|
18
|
+
def __init__(self, llm, step_callback):
|
|
19
|
+
self.rag = None
|
|
20
|
+
self.llm = llm
|
|
21
|
+
self.step_callback = step_callback
|
|
22
|
+
self.repo_url: str | None = None
|
|
23
|
+
self.project_metadata: ProjectMetadata | None = None
|
|
24
|
+
self.refined_project_metadata: ProjectMetadata | None = None
|
|
25
|
+
|
|
26
|
+
def prepare_refined_repo(self, refined_repo_url: str):
|
|
27
|
+
self.prepare_repo(refined_repo_url)
|
|
28
|
+
self.refined_repo_path = refined_repo_url
|
|
29
|
+
self.refined_rag = RAG()
|
|
30
|
+
self.refined_rag.initialize_db_manager()
|
|
31
|
+
self.refined_rag.initialize_repo(repo_url_or_path=refined_repo_url)
|
|
32
|
+
|
|
33
|
+
author, repo_name = parse_refined_repo_path(refined_repo_url)
|
|
34
|
+
self.refined_summary_file_db = SummarizedFilesDb(author, repo_name)
|
|
35
|
+
if self.code_structure_db is not None:
|
|
36
|
+
self.refined_code_structure_db = self.code_structure_db
|
|
37
|
+
elif self.rag is not None and self.rag.repo_dir is not None:
|
|
38
|
+
self.refined_code_structure_db = CodeStructureDb(author, repo_name)
|
|
39
|
+
code_structure_builder = CodeStructureBuilder(
|
|
40
|
+
repo_path=self.rag.repo_dir,
|
|
41
|
+
gitignore_path=Path(self.rag.repo_dir, ".gitignore"),
|
|
42
|
+
code_structure_db=self.refined_code_structure_db
|
|
43
|
+
)
|
|
44
|
+
code_structure_builder.build_code_structure()
|
|
45
|
+
else:
|
|
46
|
+
raise ValueError("Code structure database is not prepared")
|
|
47
|
+
|
|
48
|
+
def prepare_repo(self, repo_url: str):
|
|
49
|
+
self.repo_url = repo_url
|
|
50
|
+
self.rag = RAG()
|
|
51
|
+
self.rag.initialize_db_manager()
|
|
52
|
+
self.rag.initialize_repo(repo_url_or_path=repo_url)
|
|
53
|
+
|
|
54
|
+
author, repo_name = parse_repo_url(repo_url)
|
|
55
|
+
self.summary_file_db = SummarizedFilesDb(author, repo_name)
|
|
56
|
+
self.code_structure_db = CodeStructureDb(author, repo_name)
|
|
57
|
+
code_structure_builder = CodeStructureBuilder(
|
|
58
|
+
repo_path=self.rag.repo_dir,
|
|
59
|
+
gitignore_path=Path(self.rag.repo_dir, ".gitignore"),
|
|
60
|
+
code_structure_db=self.code_structure_db
|
|
61
|
+
)
|
|
62
|
+
code_structure_builder.build_code_structure()
|
|
63
|
+
|
|
64
|
+
def _get_repo_context(self, refined: bool):
|
|
65
|
+
if refined:
|
|
66
|
+
repo_path = self.refined_rag.repo_dir
|
|
67
|
+
summary_db = self.refined_summary_file_db
|
|
68
|
+
code_db = self.refined_code_structure_db
|
|
69
|
+
metadata = self.refined_project_metadata
|
|
70
|
+
else:
|
|
71
|
+
repo_path = self.rag.repo_dir
|
|
72
|
+
summary_db = self.summary_file_db
|
|
73
|
+
code_db = self.code_structure_db
|
|
74
|
+
metadata = self.project_metadata
|
|
75
|
+
return (
|
|
76
|
+
repo_path,
|
|
77
|
+
Path(repo_path, ".gitignore"),
|
|
78
|
+
metadata,
|
|
79
|
+
summary_db,
|
|
80
|
+
code_db,
|
|
81
|
+
)
|
|
82
|
+
|
|
83
|
+
def _base_task_kwargs(self, refined: bool, include_summary_db: bool = True) -> dict:
|
|
84
|
+
repo_path, gitignore_path, metadata, summary_db, _code_db = self._get_repo_context(refined)
|
|
85
|
+
kwargs = {
|
|
86
|
+
"llm": self.llm,
|
|
87
|
+
"repo_path": repo_path,
|
|
88
|
+
"gitignore_path": gitignore_path,
|
|
89
|
+
"meta_data": metadata,
|
|
90
|
+
"step_callback": self.step_callback,
|
|
91
|
+
}
|
|
92
|
+
if include_summary_db:
|
|
93
|
+
kwargs["summarized_files_db"] = summary_db
|
|
94
|
+
return kwargs
|
|
95
|
+
|
|
96
|
+
def _evaluate_task(self, task_cls, refined: bool, include_summary_db: bool = True, **kwargs):
|
|
97
|
+
task = task_cls(
|
|
98
|
+
**self._base_task_kwargs(refined=refined, include_summary_db=include_summary_db),
|
|
99
|
+
**kwargs,
|
|
100
|
+
)
|
|
101
|
+
return task.evaluate()
|
|
102
|
+
|
|
103
|
+
def _identify_project(
|
|
104
|
+
self, repo_path: str, gitignore_path: str, summary_file_db: SummarizedFilesDb
|
|
105
|
+
) -> ProjectMetadata:
|
|
106
|
+
identfication_task = IdentificationTask(
|
|
107
|
+
llm=self.llm,
|
|
108
|
+
step_callback=self.step_callback,
|
|
109
|
+
)
|
|
110
|
+
identfication_task.compile(
|
|
111
|
+
repo_path=repo_path,
|
|
112
|
+
gitignore_path=gitignore_path,
|
|
113
|
+
db=summary_file_db,
|
|
114
|
+
)
|
|
115
|
+
language = identfication_task.identify_primary_language()
|
|
116
|
+
project_type = identfication_task.identify_project_type()
|
|
117
|
+
meta_data = identfication_task.identify_meta_data()
|
|
118
|
+
return ProjectMetadata(
|
|
119
|
+
url=repo_path,
|
|
120
|
+
project_type=project_type,
|
|
121
|
+
primary_language=language,
|
|
122
|
+
repo_name=meta_data["name"] if "name" in meta_data else "",
|
|
123
|
+
description=meta_data["description"] if "description" in meta_data else "",
|
|
124
|
+
owner=meta_data["owner"] if "owner" in meta_data else "",
|
|
125
|
+
license=meta_data["license"] if "license" in meta_data else "",
|
|
126
|
+
)
|
|
127
|
+
|
|
128
|
+
def identify_project(self) -> ProjectMetadata:
|
|
129
|
+
self.project_metadata = self._identify_project(
|
|
130
|
+
repo_path=self.rag.repo_dir,
|
|
131
|
+
gitignore_path=Path(self.rag.repo_dir, ".gitignore"),
|
|
132
|
+
summary_file_db=self.summary_file_db,
|
|
133
|
+
)
|
|
134
|
+
self.project_metadata.url = self.repo_url
|
|
135
|
+
return self.project_metadata
|
|
136
|
+
|
|
137
|
+
def evaluate_readme(self) -> tuple[any, list[str]]:
|
|
138
|
+
results, readme_files = self._evaluate_task(EvaluationREADMETask, refined=False)
|
|
139
|
+
return results, readme_files
|
|
140
|
+
|
|
141
|
+
def evaluate_installation(self):
|
|
142
|
+
return self._evaluate_task(EvaluationInstallationTask, refined=False)
|
|
143
|
+
|
|
144
|
+
def evaluate_submission_requirements(
|
|
145
|
+
self,
|
|
146
|
+
readme_files_evaluation: dict | None = None,
|
|
147
|
+
installation_files: list[str] | None = None,
|
|
148
|
+
installation_evaluation: dict[str] | None = None,
|
|
149
|
+
):
|
|
150
|
+
return self._evaluate_task(
|
|
151
|
+
EvaluationSubmissionRequirementsTask,
|
|
152
|
+
refined=False,
|
|
153
|
+
readme_files_evaluation=readme_files_evaluation,
|
|
154
|
+
installation_files=installation_files,
|
|
155
|
+
installation_evaluation=installation_evaluation,
|
|
156
|
+
)
|
|
157
|
+
|
|
158
|
+
def evaluate_userguide(self):
|
|
159
|
+
_, _, _, _, code_db = self._get_repo_context(refined=False)
|
|
160
|
+
return self._evaluate_task(
|
|
161
|
+
EvaluationUserGuideTask,
|
|
162
|
+
refined=False,
|
|
163
|
+
code_structure_db=code_db,
|
|
164
|
+
)
|
|
165
|
+
|
|
166
|
+
def evaluate_tutorial(self):
|
|
167
|
+
_, _, _, _, code_db = self._get_repo_context(refined=False)
|
|
168
|
+
return self._evaluate_task(
|
|
169
|
+
EvaluationTutorialTask,
|
|
170
|
+
refined=False,
|
|
171
|
+
code_structure_db=code_db,
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
def identify_refined_project(self, metadata: dict | None = None) -> ProjectMetadata:
|
|
175
|
+
if metadata is not None:
|
|
176
|
+
self.refined_project_metadata = ProjectMetadata(**metadata)
|
|
177
|
+
else:
|
|
178
|
+
self.refined_project_metadata = self._identify_project(
|
|
179
|
+
repo_path=self.refined_rag.repo_dir,
|
|
180
|
+
gitignore_path=Path(self.refined_rag.repo_dir, ".gitignore"),
|
|
181
|
+
summary_file_db=self.refined_summary_file_db,
|
|
182
|
+
)
|
|
183
|
+
return self.refined_project_metadata
|
|
184
|
+
|
|
185
|
+
def evaluate_refined_readme(self, readme_files: list[str]) -> tuple[dict, list[str]]:
|
|
186
|
+
return self._evaluate_task(
|
|
187
|
+
EvaluationREADMETask,
|
|
188
|
+
refined=True,
|
|
189
|
+
collected_files=readme_files,
|
|
190
|
+
)
|
|
191
|
+
|
|
192
|
+
def evaluate_refined_installation(self, installation_files: list[str]) -> tuple[dict, list[str]]:
|
|
193
|
+
return self._evaluate_task(
|
|
194
|
+
EvaluationInstallationTask,
|
|
195
|
+
refined=True,
|
|
196
|
+
collected_files=installation_files,
|
|
197
|
+
)
|
|
198
|
+
|
|
199
|
+
def evaluate_refined_tutorial(self, tutorial_files: list[str]) -> tuple[dict, list[str]]:
|
|
200
|
+
_, _, _, _, code_db = self._get_repo_context(refined=True)
|
|
201
|
+
return self._evaluate_task(
|
|
202
|
+
EvaluationTutorialTask,
|
|
203
|
+
refined=True,
|
|
204
|
+
collected_files=tutorial_files,
|
|
205
|
+
code_structure_db=code_db,
|
|
206
|
+
)
|
|
207
|
+
|
|
208
|
+
def evaluate_refined_userguide(self, userguide_files: list[str]) -> tuple[dict, list[str]]:
|
|
209
|
+
_, _, _, _, code_db = self._get_repo_context(refined=True)
|
|
210
|
+
return self._evaluate_task(
|
|
211
|
+
EvaluationUserGuideTask,
|
|
212
|
+
refined=True,
|
|
213
|
+
collected_files=userguide_files,
|
|
214
|
+
code_structure_db=code_db,
|
|
215
|
+
)
|