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.
Files changed (84) hide show
  1. bioguider/__init__.py +0 -0
  2. bioguider/agents/__init__.py +0 -0
  3. bioguider/agents/agent_task.py +92 -0
  4. bioguider/agents/agent_tools.py +176 -0
  5. bioguider/agents/agent_utils.py +504 -0
  6. bioguider/agents/collection_execute_step.py +182 -0
  7. bioguider/agents/collection_observe_step.py +125 -0
  8. bioguider/agents/collection_plan_step.py +156 -0
  9. bioguider/agents/collection_task.py +184 -0
  10. bioguider/agents/collection_task_utils.py +142 -0
  11. bioguider/agents/common_agent.py +137 -0
  12. bioguider/agents/common_agent_2step.py +215 -0
  13. bioguider/agents/common_conversation.py +61 -0
  14. bioguider/agents/common_step.py +85 -0
  15. bioguider/agents/consistency_collection_step.py +102 -0
  16. bioguider/agents/consistency_evaluation_task.py +57 -0
  17. bioguider/agents/consistency_evaluation_task_utils.py +14 -0
  18. bioguider/agents/consistency_observe_step.py +110 -0
  19. bioguider/agents/consistency_query_step.py +77 -0
  20. bioguider/agents/dockergeneration_execute_step.py +186 -0
  21. bioguider/agents/dockergeneration_observe_step.py +154 -0
  22. bioguider/agents/dockergeneration_plan_step.py +158 -0
  23. bioguider/agents/dockergeneration_task.py +158 -0
  24. bioguider/agents/dockergeneration_task_utils.py +220 -0
  25. bioguider/agents/evaluation_installation_task.py +270 -0
  26. bioguider/agents/evaluation_readme_task.py +767 -0
  27. bioguider/agents/evaluation_submission_requirements_task.py +172 -0
  28. bioguider/agents/evaluation_task.py +206 -0
  29. bioguider/agents/evaluation_tutorial_task.py +169 -0
  30. bioguider/agents/evaluation_tutorial_task_prompts.py +187 -0
  31. bioguider/agents/evaluation_userguide_prompts.py +179 -0
  32. bioguider/agents/evaluation_userguide_task.py +154 -0
  33. bioguider/agents/evaluation_utils.py +127 -0
  34. bioguider/agents/identification_execute_step.py +181 -0
  35. bioguider/agents/identification_observe_step.py +104 -0
  36. bioguider/agents/identification_plan_step.py +140 -0
  37. bioguider/agents/identification_task.py +270 -0
  38. bioguider/agents/identification_task_utils.py +22 -0
  39. bioguider/agents/peo_common_step.py +64 -0
  40. bioguider/agents/prompt_utils.py +253 -0
  41. bioguider/agents/python_ast_repl_tool.py +69 -0
  42. bioguider/agents/rag_collection_task.py +130 -0
  43. bioguider/conversation.py +67 -0
  44. bioguider/database/code_structure_db.py +500 -0
  45. bioguider/database/summarized_file_db.py +146 -0
  46. bioguider/generation/__init__.py +39 -0
  47. bioguider/generation/benchmark_metrics.py +610 -0
  48. bioguider/generation/change_planner.py +189 -0
  49. bioguider/generation/document_renderer.py +157 -0
  50. bioguider/generation/llm_cleaner.py +67 -0
  51. bioguider/generation/llm_content_generator.py +1128 -0
  52. bioguider/generation/llm_injector.py +809 -0
  53. bioguider/generation/models.py +85 -0
  54. bioguider/generation/output_manager.py +74 -0
  55. bioguider/generation/repo_reader.py +37 -0
  56. bioguider/generation/report_loader.py +166 -0
  57. bioguider/generation/style_analyzer.py +36 -0
  58. bioguider/generation/suggestion_extractor.py +436 -0
  59. bioguider/generation/test_metrics.py +189 -0
  60. bioguider/managers/benchmark_manager.py +785 -0
  61. bioguider/managers/evaluation_manager.py +215 -0
  62. bioguider/managers/generation_manager.py +686 -0
  63. bioguider/managers/generation_test_manager.py +107 -0
  64. bioguider/managers/generation_test_manager_v2.py +525 -0
  65. bioguider/rag/__init__.py +0 -0
  66. bioguider/rag/config.py +117 -0
  67. bioguider/rag/data_pipeline.py +651 -0
  68. bioguider/rag/embedder.py +24 -0
  69. bioguider/rag/rag.py +138 -0
  70. bioguider/settings.py +103 -0
  71. bioguider/utils/code_structure_builder.py +59 -0
  72. bioguider/utils/constants.py +135 -0
  73. bioguider/utils/default.gitignore +140 -0
  74. bioguider/utils/file_utils.py +215 -0
  75. bioguider/utils/gitignore_checker.py +175 -0
  76. bioguider/utils/notebook_utils.py +117 -0
  77. bioguider/utils/pyphen_utils.py +73 -0
  78. bioguider/utils/python_file_handler.py +65 -0
  79. bioguider/utils/r_file_handler.py +551 -0
  80. bioguider/utils/utils.py +163 -0
  81. bioguider-0.2.52.dist-info/LICENSE +21 -0
  82. bioguider-0.2.52.dist-info/METADATA +51 -0
  83. bioguider-0.2.52.dist-info/RECORD +84 -0
  84. 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
+ )