|
|
|
|
|
|
|
import dotenv, os |
|
import requests |
|
|
|
dotenv.load_dotenv() |
|
import traceback |
|
import datetime, subprocess, sys |
|
import litellm |
|
|
|
class Supabase: |
|
|
|
supabase_table_name = "request_logs" |
|
|
|
def __init__(self): |
|
|
|
self.supabase_url = os.getenv("SUPABASE_URL") |
|
self.supabase_key = os.getenv("SUPABASE_KEY") |
|
try: |
|
import supabase |
|
except ImportError: |
|
subprocess.check_call([sys.executable, "-m", "pip", "install", "supabase"]) |
|
import supabase |
|
self.supabase_client = supabase.create_client( |
|
self.supabase_url, self.supabase_key |
|
) |
|
|
|
def input_log_event( |
|
self, model, messages, end_user, litellm_call_id, print_verbose |
|
): |
|
try: |
|
print_verbose( |
|
f"Supabase Logging - Enters input logging function for model {model}" |
|
) |
|
supabase_data_obj = { |
|
"model": model, |
|
"messages": messages, |
|
"end_user": end_user, |
|
"status": "initiated", |
|
"litellm_call_id": litellm_call_id, |
|
} |
|
data, count = ( |
|
self.supabase_client.table(self.supabase_table_name) |
|
.insert(supabase_data_obj) |
|
.execute() |
|
) |
|
print_verbose(f"data: {data}") |
|
except: |
|
print_verbose(f"Supabase Logging Error - {traceback.format_exc()}") |
|
pass |
|
|
|
def log_event( |
|
self, |
|
model, |
|
messages, |
|
end_user, |
|
response_obj, |
|
start_time, |
|
end_time, |
|
litellm_call_id, |
|
print_verbose, |
|
): |
|
try: |
|
print_verbose( |
|
f"Supabase Logging - Enters logging function for model {model}, response_obj: {response_obj}" |
|
) |
|
|
|
total_cost = litellm.completion_cost(completion_response=response_obj) |
|
|
|
response_time = (end_time - start_time).total_seconds() |
|
if "choices" in response_obj: |
|
supabase_data_obj = { |
|
"response_time": response_time, |
|
"model": response_obj["model"], |
|
"total_cost": total_cost, |
|
"messages": messages, |
|
"response": response_obj["choices"][0]["message"]["content"], |
|
"end_user": end_user, |
|
"litellm_call_id": litellm_call_id, |
|
"status": "success", |
|
} |
|
print_verbose( |
|
f"Supabase Logging - final data object: {supabase_data_obj}" |
|
) |
|
data, count = ( |
|
self.supabase_client.table(self.supabase_table_name) |
|
.upsert(supabase_data_obj, on_conflict="litellm_call_id") |
|
.execute() |
|
) |
|
elif "error" in response_obj: |
|
if "Unable to map your input to a model." in response_obj["error"]: |
|
total_cost = 0 |
|
supabase_data_obj = { |
|
"response_time": response_time, |
|
"model": response_obj["model"], |
|
"total_cost": total_cost, |
|
"messages": messages, |
|
"error": response_obj["error"], |
|
"end_user": end_user, |
|
"litellm_call_id": litellm_call_id, |
|
"status": "failure", |
|
} |
|
print_verbose( |
|
f"Supabase Logging - final data object: {supabase_data_obj}" |
|
) |
|
data, count = ( |
|
self.supabase_client.table(self.supabase_table_name) |
|
.upsert(supabase_data_obj, on_conflict="litellm_call_id") |
|
.execute() |
|
) |
|
|
|
except: |
|
|
|
print_verbose(f"Supabase Logging Error - {traceback.format_exc()}") |
|
pass |
|
|