|
import csv |
|
import os |
|
from github import Github |
|
|
|
|
|
def interpret_results(csv_file): |
|
with open(csv_file, newline="") as csvfile: |
|
csvreader = csv.DictReader(csvfile) |
|
rows = list(csvreader) |
|
""" |
|
in this csv reader |
|
- Create 1 new column "Status" |
|
- if a row has a median response time < 300 and an average response time < 300, Status = "Passed β
" |
|
- if a row has a median response time >= 300 or an average response time >= 300, Status = "Failed β" |
|
- Order the table in this order Name, Status, Median Response Time, Average Response Time, Requests/s,Failures/s, Min Response Time, Max Response Time, all other columns |
|
""" |
|
|
|
|
|
for row in rows: |
|
median_response_time = float( |
|
row["Median Response Time"].strip().rstrip("ms") |
|
) |
|
average_response_time = float( |
|
row["Average Response Time"].strip().rstrip("s") |
|
) |
|
|
|
request_count = int(row["Request Count"]) |
|
failure_count = int(row["Failure Count"]) |
|
|
|
failure_percent = round((failure_count / request_count) * 100, 2) |
|
|
|
|
|
if ( |
|
median_response_time < 300 |
|
and average_response_time < 300 |
|
and failure_percent < 5 |
|
): |
|
row["Status"] = "Passed β
" |
|
else: |
|
row["Status"] = "Failed β" |
|
|
|
|
|
markdown_table = "| Name | Status | Median Response Time (ms) | Average Response Time (ms) | Requests/s | Failures/s | Request Count | Failure Count | Min Response Time (ms) | Max Response Time (ms) |" |
|
markdown_table += ( |
|
"\n| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |" |
|
) |
|
|
|
|
|
for row in rows: |
|
markdown_table += f"\n| {row['Name']} | {row['Status']} | {row['Median Response Time']} | {row['Average Response Time']} | {row['Requests/s']} | {row['Failures/s']} | {row['Request Count']} | {row['Failure Count']} | {row['Min Response Time']} | {row['Max Response Time']} |" |
|
print("markdown table: ", markdown_table) |
|
return markdown_table |
|
|
|
|
|
if __name__ == "__main__": |
|
csv_file = "load_test_stats.csv" |
|
markdown_table = interpret_results(csv_file) |
|
|
|
|
|
github_token = os.getenv("GITHUB_TOKEN") |
|
g = Github(github_token) |
|
repo = g.get_repo( |
|
"BerriAI/litellm" |
|
) |
|
latest_release = repo.get_latest_release() |
|
print("got latest release: ", latest_release) |
|
print(latest_release.title) |
|
print(latest_release.tag_name) |
|
|
|
release_version = latest_release.title |
|
|
|
print("latest release body: ", latest_release.body) |
|
print("markdown table: ", markdown_table) |
|
|
|
|
|
existing_release_body = latest_release.body |
|
if "Load Test LiteLLM Proxy Results" in latest_release.body: |
|
|
|
start_index = latest_release.body.find("Load Test LiteLLM Proxy Results") |
|
existing_release_body = latest_release.body[:start_index] |
|
|
|
docker_run_command = f""" |
|
\n\n |
|
## Docker Run LiteLLM Proxy |
|
|
|
``` |
|
docker run \\ |
|
-e STORE_MODEL_IN_DB=True \\ |
|
-p 4000:4000 \\ |
|
ghcr.io/berriai/litellm:main-{release_version} |
|
``` |
|
""" |
|
print("docker run command: ", docker_run_command) |
|
|
|
new_release_body = ( |
|
existing_release_body |
|
+ docker_run_command |
|
+ "\n\n" |
|
+ "### Don't want to maintain your internal proxy? get in touch π" |
|
+ "\nHosted Proxy Alpha: https://calendly.com/d/4mp-gd3-k5k/litellm-1-1-onboarding-chat" |
|
+ "\n\n" |
|
+ "## Load Test LiteLLM Proxy Results" |
|
+ "\n\n" |
|
+ markdown_table |
|
) |
|
print("new release body: ", new_release_body) |
|
try: |
|
latest_release.update_release( |
|
name=latest_release.tag_name, |
|
message=new_release_body, |
|
) |
|
except Exception as e: |
|
print(e) |
|
|