Skip to content

Commit 772071c

Browse files
Added docstrings and moved to total token count (#116)
* Added docstrings and moved to total token count.: * Bumping version * Format.
1 parent 21c98df commit 772071c

File tree

12 files changed

+323
-136
lines changed

12 files changed

+323
-136
lines changed

cover_agent/AICaller.py

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,12 +75,19 @@ def call_model(self, prompt: dict, max_tokens=4096):
7575

7676
model_response = litellm.stream_chunk_builder(chunks, messages=messages)
7777

78-
if 'WANDB_API_KEY' in os.environ:
78+
if "WANDB_API_KEY" in os.environ:
7979
root_span = Trace(
80-
name="inference_"+datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"),
80+
name="inference_"
81+
+ datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S"),
8182
kind="llm", # kind can be "llm", "chain", "agent" or "tool
82-
inputs={"user_prompt": prompt["user"], "system_prompt": prompt["system"]},
83-
outputs={"model_response": model_response["choices"][0]["message"]["content"]})
83+
inputs={
84+
"user_prompt": prompt["user"],
85+
"system_prompt": prompt["system"],
86+
},
87+
outputs={
88+
"model_response": model_response["choices"][0]["message"]["content"]
89+
},
90+
)
8491
root_span.log(name="inference")
8592

8693
# Returns: Response, Prompt token count, and Response token count

cover_agent/CoverAgent.py

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,8 @@ def _duplicate_test_file(self):
4848
self.args.test_file_output_path = self.args.test_file_path
4949

5050
def run(self):
51-
if 'WANDB_API_KEY' in os.environ:
52-
wandb.login(key=os.environ['WANDB_API_KEY'])
51+
if "WANDB_API_KEY" in os.environ:
52+
wandb.login(key=os.environ["WANDB_API_KEY"])
5353
time_and_date = datetime.datetime.now().strftime("%Y-%m-%d_%H-%M-%S")
5454
run_name = f"{self.args.model}_" + time_and_date
5555
wandb.init(project="cover-agent", name=run_name)
@@ -78,9 +78,7 @@ def run(self):
7878

7979
iteration_count += 1
8080

81-
if self.test_gen.current_coverage < (
82-
self.test_gen.desired_coverage / 100
83-
):
81+
if self.test_gen.current_coverage < (self.test_gen.desired_coverage / 100):
8482
self.test_gen.run_coverage()
8583

8684
if self.test_gen.current_coverage >= (self.test_gen.desired_coverage / 100):
@@ -96,9 +94,15 @@ def run(self):
9694
else:
9795
self.logger.info(failure_message)
9896

99-
ReportGenerator.generate_report(
100-
test_results_list, self.args.report_filepath
97+
# Provide metric on total token usage
98+
self.logger.info(
99+
f"Total number of input tokens used for LLM model {self.test_gen.ai_caller.model}: {self.test_gen.total_input_token_count}"
101100
)
101+
self.logger.info(
102+
f"Total number of output tokens used for LLM model {self.test_gen.ai_caller.model}: {self.test_gen.total_output_token_count}"
103+
)
104+
105+
ReportGenerator.generate_report(test_results_list, self.args.report_filepath)
102106

103-
if 'WANDB_API_KEY' in os.environ:
107+
if "WANDB_API_KEY" in os.environ:
104108
wandb.finish()

cover_agent/CoverageProcessor.py

Lines changed: 18 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,10 @@
99

1010
class CoverageProcessor:
1111
def __init__(
12-
self, file_path: str, src_file_path: str, coverage_type: Literal["cobertura", "lcov", "jacoco"]
12+
self,
13+
file_path: str,
14+
src_file_path: str,
15+
coverage_type: Literal["cobertura", "lcov", "jacoco"],
1316
):
1417
"""
1518
Initializes a CoverageProcessor object.
@@ -136,22 +139,26 @@ def parse_coverage_report_jacoco(self) -> Tuple[list, list, float]:
136139
lines_covered, lines_missed = [], []
137140

138141
package_name, class_name = self.extract_package_and_class_java()
139-
missed, covered = self.parse_missed_covered_lines_jacoco(package_name, class_name)
142+
missed, covered = self.parse_missed_covered_lines_jacoco(
143+
package_name, class_name
144+
)
140145

141146
total_lines = missed + covered
142147
coverage_percentage = (float(covered) / total_lines) if total_lines > 0 else 0
143148

144149
return lines_covered, lines_missed, coverage_percentage
145150

146-
def parse_missed_covered_lines_jacoco(self, package_name: str, class_name: str) -> tuple[int, int]:
147-
with open(self.file_path, 'r') as file:
151+
def parse_missed_covered_lines_jacoco(
152+
self, package_name: str, class_name: str
153+
) -> tuple[int, int]:
154+
with open(self.file_path, "r") as file:
148155
reader = csv.DictReader(file)
149156
missed, covered = 0, 0
150157
for row in reader:
151-
if row['PACKAGE'] == package_name and row['CLASS'] == class_name:
158+
if row["PACKAGE"] == package_name and row["CLASS"] == class_name:
152159
try:
153-
missed = int(row['LINE_MISSED'])
154-
covered = int(row['LINE_COVERED'])
160+
missed = int(row["LINE_MISSED"])
161+
covered = int(row["LINE_COVERED"])
155162
break
156163
except KeyError as e:
157164
self.logger.error("Missing expected column in CSV: {e}")
@@ -160,13 +167,13 @@ def parse_missed_covered_lines_jacoco(self, package_name: str, class_name: str)
160167
return missed, covered
161168

162169
def extract_package_and_class_java(self):
163-
package_pattern = re.compile(r'^\s*package\s+([\w\.]+)\s*;.*$')
164-
class_pattern = re.compile(r'^\s*public\s+class\s+(\w+).*')
170+
package_pattern = re.compile(r"^\s*package\s+([\w\.]+)\s*;.*$")
171+
class_pattern = re.compile(r"^\s*public\s+class\s+(\w+).*")
165172

166173
package_name = ""
167174
class_name = ""
168175
try:
169-
with open(self.src_file_path, 'r') as file:
176+
with open(self.src_file_path, "r") as file:
170177
for line in file:
171178
if not package_name: # Only match package if not already found
172179
package_match = package_pattern.match(line)
@@ -184,4 +191,4 @@ def extract_package_and_class_java(self):
184191
self.logger.error(f"Error reading file {self.src_file_path}: {e}")
185192
raise
186193

187-
return package_name, class_name
194+
return package_name, class_name

0 commit comments

Comments
 (0)