forked from phoenix/litellm-mirror
(code cleanup) remove unused and undocumented logging integrations - litedebugger, berrispend (#6406)
* code cleanup remove unused and undocumented code files * fix unused logging integrations cleanup
This commit is contained in:
parent
17e81d861c
commit
c731ba4044
4 changed files with 1 additions and 336 deletions
|
@ -1,167 +0,0 @@
|
||||||
#### What this does ####
|
|
||||||
# On success + failure, log events to aispend.io
|
|
||||||
import datetime
|
|
||||||
import os
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
import dotenv
|
|
||||||
|
|
||||||
model_cost = {
|
|
||||||
"gpt-3.5-turbo": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"gpt-35-turbo": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
}, # azure model name
|
|
||||||
"gpt-3.5-turbo-0613": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"gpt-3.5-turbo-0301": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"gpt-3.5-turbo-16k": {
|
|
||||||
"max_tokens": 16000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
},
|
|
||||||
"gpt-35-turbo-16k": {
|
|
||||||
"max_tokens": 16000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
}, # azure model name
|
|
||||||
"gpt-3.5-turbo-16k-0613": {
|
|
||||||
"max_tokens": 16000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
},
|
|
||||||
"gpt-4": {
|
|
||||||
"max_tokens": 8000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.00006,
|
|
||||||
},
|
|
||||||
"gpt-4-0613": {
|
|
||||||
"max_tokens": 8000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.00006,
|
|
||||||
},
|
|
||||||
"gpt-4-32k": {
|
|
||||||
"max_tokens": 8000,
|
|
||||||
"input_cost_per_token": 0.00006,
|
|
||||||
"output_cost_per_token": 0.00012,
|
|
||||||
},
|
|
||||||
"claude-instant-1": {
|
|
||||||
"max_tokens": 100000,
|
|
||||||
"input_cost_per_token": 0.00000163,
|
|
||||||
"output_cost_per_token": 0.00000551,
|
|
||||||
},
|
|
||||||
"claude-2": {
|
|
||||||
"max_tokens": 100000,
|
|
||||||
"input_cost_per_token": 0.00001102,
|
|
||||||
"output_cost_per_token": 0.00003268,
|
|
||||||
},
|
|
||||||
"text-bison-001": {
|
|
||||||
"max_tokens": 8192,
|
|
||||||
"input_cost_per_token": 0.000004,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
},
|
|
||||||
"chat-bison-001": {
|
|
||||||
"max_tokens": 4096,
|
|
||||||
"input_cost_per_token": 0.000002,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"command-nightly": {
|
|
||||||
"max_tokens": 4096,
|
|
||||||
"input_cost_per_token": 0.000015,
|
|
||||||
"output_cost_per_token": 0.000015,
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
class AISpendLogger:
|
|
||||||
# Class variables or attributes
|
|
||||||
def __init__(self):
|
|
||||||
# Instance variables
|
|
||||||
self.account_id = os.getenv("AISPEND_ACCOUNT_ID")
|
|
||||||
self.api_key = os.getenv("AISPEND_API_KEY")
|
|
||||||
|
|
||||||
def price_calculator(self, model, response_obj, start_time, end_time):
|
|
||||||
# try and find if the model is in the model_cost map
|
|
||||||
# else default to the average of the costs
|
|
||||||
prompt_tokens_cost_usd_dollar = 0
|
|
||||||
completion_tokens_cost_usd_dollar = 0
|
|
||||||
if model in model_cost:
|
|
||||||
prompt_tokens_cost_usd_dollar = (
|
|
||||||
model_cost[model]["input_cost_per_token"]
|
|
||||||
* response_obj["usage"]["prompt_tokens"]
|
|
||||||
)
|
|
||||||
completion_tokens_cost_usd_dollar = (
|
|
||||||
model_cost[model]["output_cost_per_token"]
|
|
||||||
* response_obj["usage"]["completion_tokens"]
|
|
||||||
)
|
|
||||||
elif "replicate" in model:
|
|
||||||
# replicate models are charged based on time
|
|
||||||
# llama 2 runs on an nvidia a100 which costs $0.0032 per second - https://replicate.com/replicate/llama-2-70b-chat
|
|
||||||
model_run_time = end_time - start_time # assuming time in seconds
|
|
||||||
cost_usd_dollar = model_run_time * 0.0032
|
|
||||||
prompt_tokens_cost_usd_dollar = cost_usd_dollar / 2
|
|
||||||
completion_tokens_cost_usd_dollar = cost_usd_dollar / 2
|
|
||||||
else:
|
|
||||||
# calculate average input cost
|
|
||||||
input_cost_sum = 0
|
|
||||||
output_cost_sum = 0
|
|
||||||
for model in model_cost:
|
|
||||||
input_cost_sum += model_cost[model]["input_cost_per_token"]
|
|
||||||
output_cost_sum += model_cost[model]["output_cost_per_token"]
|
|
||||||
prompt_tokens_cost_usd_dollar = (
|
|
||||||
model_cost[model]["input_cost_per_token"]
|
|
||||||
* response_obj["usage"]["prompt_tokens"]
|
|
||||||
)
|
|
||||||
completion_tokens_cost_usd_dollar = (
|
|
||||||
model_cost[model]["output_cost_per_token"]
|
|
||||||
* response_obj["usage"]["completion_tokens"]
|
|
||||||
)
|
|
||||||
return prompt_tokens_cost_usd_dollar, completion_tokens_cost_usd_dollar
|
|
||||||
|
|
||||||
def log_event(self, model, response_obj, start_time, end_time, print_verbose):
|
|
||||||
# Method definition
|
|
||||||
try:
|
|
||||||
print_verbose(
|
|
||||||
f"AISpend Logging - Enters logging function for model {model}"
|
|
||||||
)
|
|
||||||
|
|
||||||
response_timestamp = datetime.datetime.fromtimestamp(
|
|
||||||
int(response_obj["created"])
|
|
||||||
).strftime("%Y-%m-%d")
|
|
||||||
|
|
||||||
(
|
|
||||||
prompt_tokens_cost_usd_dollar,
|
|
||||||
completion_tokens_cost_usd_dollar,
|
|
||||||
) = self.price_calculator(model, response_obj, start_time, end_time)
|
|
||||||
prompt_tokens_cost_usd_cent = prompt_tokens_cost_usd_dollar * 100
|
|
||||||
completion_tokens_cost_usd_cent = completion_tokens_cost_usd_dollar * 100
|
|
||||||
data = [
|
|
||||||
{
|
|
||||||
"requests": 1,
|
|
||||||
"requests_context": 1,
|
|
||||||
"context_tokens": response_obj["usage"]["prompt_tokens"],
|
|
||||||
"requests_generated": 1,
|
|
||||||
"generated_tokens": response_obj["usage"]["completion_tokens"],
|
|
||||||
"recorded_date": response_timestamp,
|
|
||||||
"model_id": response_obj["model"],
|
|
||||||
"generated_tokens_cost_usd_cent": prompt_tokens_cost_usd_cent,
|
|
||||||
"context_tokens_cost_usd_cent": completion_tokens_cost_usd_cent,
|
|
||||||
}
|
|
||||||
]
|
|
||||||
|
|
||||||
print_verbose(f"AISpend Logging - final data object: {data}")
|
|
||||||
except Exception:
|
|
||||||
print_verbose(f"AISpend Logging Error - {traceback.format_exc()}")
|
|
||||||
pass
|
|
|
@ -1,86 +0,0 @@
|
||||||
#### What this does ####
|
|
||||||
# On success + failure, log events to aispend.io
|
|
||||||
import datetime
|
|
||||||
import os
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
import dotenv
|
|
||||||
import requests # type: ignore
|
|
||||||
|
|
||||||
model_cost = {
|
|
||||||
"gpt-3.5-turbo": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"gpt-35-turbo": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
}, # azure model name
|
|
||||||
"gpt-3.5-turbo-0613": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"gpt-3.5-turbo-0301": {
|
|
||||||
"max_tokens": 4000,
|
|
||||||
"input_cost_per_token": 0.0000015,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"gpt-3.5-turbo-16k": {
|
|
||||||
"max_tokens": 16000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
},
|
|
||||||
"gpt-35-turbo-16k": {
|
|
||||||
"max_tokens": 16000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
}, # azure model name
|
|
||||||
"gpt-3.5-turbo-16k-0613": {
|
|
||||||
"max_tokens": 16000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
},
|
|
||||||
"gpt-4": {
|
|
||||||
"max_tokens": 8000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.00006,
|
|
||||||
},
|
|
||||||
"gpt-4-0613": {
|
|
||||||
"max_tokens": 8000,
|
|
||||||
"input_cost_per_token": 0.000003,
|
|
||||||
"output_cost_per_token": 0.00006,
|
|
||||||
},
|
|
||||||
"gpt-4-32k": {
|
|
||||||
"max_tokens": 8000,
|
|
||||||
"input_cost_per_token": 0.00006,
|
|
||||||
"output_cost_per_token": 0.00012,
|
|
||||||
},
|
|
||||||
"claude-instant-1": {
|
|
||||||
"max_tokens": 100000,
|
|
||||||
"input_cost_per_token": 0.00000163,
|
|
||||||
"output_cost_per_token": 0.00000551,
|
|
||||||
},
|
|
||||||
"claude-2": {
|
|
||||||
"max_tokens": 100000,
|
|
||||||
"input_cost_per_token": 0.00001102,
|
|
||||||
"output_cost_per_token": 0.00003268,
|
|
||||||
},
|
|
||||||
"text-bison-001": {
|
|
||||||
"max_tokens": 8192,
|
|
||||||
"input_cost_per_token": 0.000004,
|
|
||||||
"output_cost_per_token": 0.000004,
|
|
||||||
},
|
|
||||||
"chat-bison-001": {
|
|
||||||
"max_tokens": 4096,
|
|
||||||
"input_cost_per_token": 0.000002,
|
|
||||||
"output_cost_per_token": 0.000002,
|
|
||||||
},
|
|
||||||
"command-nightly": {
|
|
||||||
"max_tokens": 4096,
|
|
||||||
"input_cost_per_token": 0.000015,
|
|
||||||
"output_cost_per_token": 0.000015,
|
|
||||||
},
|
|
||||||
}
|
|
|
@ -1,77 +0,0 @@
|
||||||
import json
|
|
||||||
import os
|
|
||||||
import traceback
|
|
||||||
import types
|
|
||||||
|
|
||||||
import requests
|
|
||||||
|
|
||||||
|
|
||||||
class LiteDebugger:
|
|
||||||
user_email = None
|
|
||||||
dashboard_url = None
|
|
||||||
|
|
||||||
def __init__(self, email=None):
|
|
||||||
self.api_url = "https://api.litellm.ai/debugger"
|
|
||||||
self.validate_environment(email)
|
|
||||||
pass
|
|
||||||
|
|
||||||
def validate_environment(self, email):
|
|
||||||
try:
|
|
||||||
self.user_email = (
|
|
||||||
email or os.getenv("LITELLM_TOKEN") or os.getenv("LITELLM_EMAIL")
|
|
||||||
)
|
|
||||||
if (
|
|
||||||
self.user_email is None
|
|
||||||
): # if users are trying to use_client=True but token not set
|
|
||||||
raise ValueError(
|
|
||||||
"litellm.use_client = True but no token or email passed. Please set it in litellm.token"
|
|
||||||
)
|
|
||||||
self.dashboard_url = "https://admin.litellm.ai/" + self.user_email
|
|
||||||
if self.user_email is None:
|
|
||||||
raise ValueError(
|
|
||||||
"[Non-Blocking Error] LiteLLMDebugger: Missing LITELLM_TOKEN. Set it in your environment. Eg.: os.environ['LITELLM_TOKEN']= <your_email>"
|
|
||||||
)
|
|
||||||
except Exception:
|
|
||||||
raise ValueError(
|
|
||||||
"[Non-Blocking Error] LiteLLMDebugger: Missing LITELLM_TOKEN. Set it in your environment. Eg.: os.environ['LITELLM_TOKEN']= <your_email>"
|
|
||||||
)
|
|
||||||
|
|
||||||
def input_log_event(
|
|
||||||
self,
|
|
||||||
model,
|
|
||||||
messages,
|
|
||||||
end_user,
|
|
||||||
litellm_call_id,
|
|
||||||
call_type,
|
|
||||||
print_verbose,
|
|
||||||
litellm_params,
|
|
||||||
optional_params,
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
This integration is not implemented yet.
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def post_call_log_event(
|
|
||||||
self, original_response, litellm_call_id, print_verbose, call_type, stream
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
This integration is not implemented yet.
|
|
||||||
"""
|
|
||||||
return
|
|
||||||
|
|
||||||
def log_event(
|
|
||||||
self,
|
|
||||||
end_user,
|
|
||||||
response_obj,
|
|
||||||
start_time,
|
|
||||||
end_time,
|
|
||||||
litellm_call_id,
|
|
||||||
print_verbose,
|
|
||||||
call_type,
|
|
||||||
stream=False,
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
This integration is not implemented yet.
|
|
||||||
"""
|
|
||||||
return
|
|
|
@ -58,7 +58,6 @@ from litellm.utils import (
|
||||||
prompt_token_calculator,
|
prompt_token_calculator,
|
||||||
)
|
)
|
||||||
|
|
||||||
from ..integrations.aispend import AISpendLogger
|
|
||||||
from ..integrations.argilla import ArgillaLogger
|
from ..integrations.argilla import ArgillaLogger
|
||||||
from ..integrations.arize_ai import ArizeLogger
|
from ..integrations.arize_ai import ArizeLogger
|
||||||
from ..integrations.athina import AthinaLogger
|
from ..integrations.athina import AthinaLogger
|
||||||
|
@ -73,7 +72,6 @@ from ..integrations.lago import LagoLogger
|
||||||
from ..integrations.langfuse.langfuse import LangFuseLogger
|
from ..integrations.langfuse.langfuse import LangFuseLogger
|
||||||
from ..integrations.langfuse.langfuse_handler import LangFuseHandler
|
from ..integrations.langfuse.langfuse_handler import LangFuseHandler
|
||||||
from ..integrations.langsmith import LangsmithLogger
|
from ..integrations.langsmith import LangsmithLogger
|
||||||
from ..integrations.litedebugger import LiteDebugger
|
|
||||||
from ..integrations.literal_ai import LiteralAILogger
|
from ..integrations.literal_ai import LiteralAILogger
|
||||||
from ..integrations.logfire_logger import LogfireLevel, LogfireLogger
|
from ..integrations.logfire_logger import LogfireLevel, LogfireLogger
|
||||||
from ..integrations.lunary import LunaryLogger
|
from ..integrations.lunary import LunaryLogger
|
||||||
|
@ -124,7 +122,6 @@ s3Logger = None
|
||||||
genericAPILogger = None
|
genericAPILogger = None
|
||||||
greenscaleLogger = None
|
greenscaleLogger = None
|
||||||
lunaryLogger = None
|
lunaryLogger = None
|
||||||
aispendLogger = None
|
|
||||||
supabaseClient = None
|
supabaseClient = None
|
||||||
callback_list: Optional[List[str]] = []
|
callback_list: Optional[List[str]] = []
|
||||||
user_logger_fn = None
|
user_logger_fn = None
|
||||||
|
@ -2044,7 +2041,7 @@ def set_callbacks(callback_list, function_id=None): # noqa: PLR0915
|
||||||
"""
|
"""
|
||||||
Globally sets the callback client
|
Globally sets the callback client
|
||||||
"""
|
"""
|
||||||
global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, aispendLogger, supabaseClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger
|
global sentry_sdk_instance, capture_exception, add_breadcrumb, posthog, slack_app, alerts_channel, traceloopLogger, athinaLogger, heliconeLogger, supabaseClient, lunaryLogger, promptLayerLogger, langFuseLogger, customLogger, weightsBiasesLogger, logfireLogger, dynamoLogger, s3Logger, dataDogLogger, prometheusLogger, greenscaleLogger, openMeterLogger
|
||||||
|
|
||||||
try:
|
try:
|
||||||
for callback in callback_list:
|
for callback in callback_list:
|
||||||
|
@ -2124,8 +2121,6 @@ def set_callbacks(callback_list, function_id=None): # noqa: PLR0915
|
||||||
weightsBiasesLogger = WeightsBiasesLogger()
|
weightsBiasesLogger = WeightsBiasesLogger()
|
||||||
elif callback == "logfire":
|
elif callback == "logfire":
|
||||||
logfireLogger = LogfireLogger()
|
logfireLogger = LogfireLogger()
|
||||||
elif callback == "aispend":
|
|
||||||
aispendLogger = AISpendLogger()
|
|
||||||
elif callback == "supabase":
|
elif callback == "supabase":
|
||||||
print_verbose("instantiating supabase")
|
print_verbose("instantiating supabase")
|
||||||
supabaseClient = Supabase()
|
supabaseClient = Supabase()
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue