mirror of
https://github.com/BerriAI/litellm.git
synced 2025-04-27 11:43:54 +00:00
fix(utils.py): fix import
This commit is contained in:
parent
179cede5a4
commit
fd67dc7556
4 changed files with 121 additions and 120 deletions
|
@ -649,4 +649,4 @@ from .exceptions import (
|
||||||
)
|
)
|
||||||
from .budget_manager import BudgetManager
|
from .budget_manager import BudgetManager
|
||||||
from .proxy.proxy_cli import run_server
|
from .proxy.proxy_cli import run_server
|
||||||
from .router import Router, LiteLLM_Params
|
from .router import Router
|
||||||
|
|
|
@ -29,124 +29,7 @@ from litellm.utils import ModelResponse, CustomStreamWrapper
|
||||||
import copy
|
import copy
|
||||||
from litellm._logging import verbose_router_logger
|
from litellm._logging import verbose_router_logger
|
||||||
import logging
|
import logging
|
||||||
from pydantic import BaseModel, validator
|
from litellm.types.router import Deployment, ModelInfo, LiteLLM_Params
|
||||||
|
|
||||||
|
|
||||||
class ModelInfo(BaseModel):
|
|
||||||
id: Optional[
|
|
||||||
str
|
|
||||||
] # Allow id to be optional on input, but it will always be present as a str in the model instance
|
|
||||||
|
|
||||||
def __init__(self, id: Optional[Union[str, int]] = None, **params):
|
|
||||||
if id is None:
|
|
||||||
id = str(uuid.uuid4()) # Generate a UUID if id is None or not provided
|
|
||||||
elif isinstance(id, int):
|
|
||||||
id = str(id)
|
|
||||||
super().__init__(id=id, **params)
|
|
||||||
|
|
||||||
class Config:
|
|
||||||
extra = "allow"
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
# Define custom behavior for the 'in' operator
|
|
||||||
return hasattr(self, key)
|
|
||||||
|
|
||||||
def get(self, key, default=None):
|
|
||||||
# Custom .get() method to access attributes with a default value if the attribute doesn't exist
|
|
||||||
return getattr(self, key, default)
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
# Allow dictionary-style access to attributes
|
|
||||||
return getattr(self, key)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
# Allow dictionary-style assignment of attributes
|
|
||||||
setattr(self, key, value)
|
|
||||||
|
|
||||||
|
|
||||||
class LiteLLM_Params(BaseModel):
|
|
||||||
model: str
|
|
||||||
tpm: Optional[int] = None
|
|
||||||
rpm: Optional[int] = None
|
|
||||||
api_key: Optional[str] = None
|
|
||||||
api_base: Optional[str] = None
|
|
||||||
api_version: Optional[str] = None
|
|
||||||
timeout: Optional[Union[float, str]] = None # if str, pass in as os.environ/
|
|
||||||
stream_timeout: Optional[Union[float, str]] = (
|
|
||||||
None # timeout when making stream=True calls, if str, pass in as os.environ/
|
|
||||||
)
|
|
||||||
max_retries: int = 2 # follows openai default of 2
|
|
||||||
organization: Optional[str] = None # for openai orgs
|
|
||||||
## VERTEX AI ##
|
|
||||||
vertex_project: Optional[str] = None
|
|
||||||
vertex_location: Optional[str] = None
|
|
||||||
## AWS BEDROCK / SAGEMAKER ##
|
|
||||||
aws_access_key_id: Optional[str] = None
|
|
||||||
aws_secret_access_key: Optional[str] = None
|
|
||||||
aws_region_name: Optional[str] = None
|
|
||||||
|
|
||||||
def __init__(self, max_retries: Optional[Union[int, str]] = None, **params):
|
|
||||||
if max_retries is None:
|
|
||||||
max_retries = 2
|
|
||||||
elif isinstance(max_retries, str):
|
|
||||||
max_retries = int(max_retries) # cast to int
|
|
||||||
super().__init__(max_retries=max_retries, **params)
|
|
||||||
|
|
||||||
class Config:
|
|
||||||
extra = "allow"
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
# Define custom behavior for the 'in' operator
|
|
||||||
return hasattr(self, key)
|
|
||||||
|
|
||||||
def get(self, key, default=None):
|
|
||||||
# Custom .get() method to access attributes with a default value if the attribute doesn't exist
|
|
||||||
return getattr(self, key, default)
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
# Allow dictionary-style access to attributes
|
|
||||||
return getattr(self, key)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
# Allow dictionary-style assignment of attributes
|
|
||||||
setattr(self, key, value)
|
|
||||||
|
|
||||||
|
|
||||||
class Deployment(BaseModel):
|
|
||||||
model_name: str
|
|
||||||
litellm_params: LiteLLM_Params
|
|
||||||
model_info: ModelInfo
|
|
||||||
|
|
||||||
def __init__(self, model_info: Optional[ModelInfo] = None, **params):
|
|
||||||
if model_info is None:
|
|
||||||
model_info = ModelInfo()
|
|
||||||
super().__init__(model_info=model_info, **params)
|
|
||||||
|
|
||||||
def to_json(self, **kwargs):
|
|
||||||
try:
|
|
||||||
return self.model_dump(**kwargs) # noqa
|
|
||||||
except Exception as e:
|
|
||||||
# if using pydantic v1
|
|
||||||
return self.dict(**kwargs)
|
|
||||||
|
|
||||||
class Config:
|
|
||||||
extra = "allow"
|
|
||||||
|
|
||||||
def __contains__(self, key):
|
|
||||||
# Define custom behavior for the 'in' operator
|
|
||||||
return hasattr(self, key)
|
|
||||||
|
|
||||||
def get(self, key, default=None):
|
|
||||||
# Custom .get() method to access attributes with a default value if the attribute doesn't exist
|
|
||||||
return getattr(self, key, default)
|
|
||||||
|
|
||||||
def __getitem__(self, key):
|
|
||||||
# Allow dictionary-style access to attributes
|
|
||||||
return getattr(self, key)
|
|
||||||
|
|
||||||
def __setitem__(self, key, value):
|
|
||||||
# Allow dictionary-style assignment of attributes
|
|
||||||
setattr(self, key, value)
|
|
||||||
|
|
||||||
|
|
||||||
class Router:
|
class Router:
|
||||||
|
|
|
@ -3,6 +3,7 @@ from typing import List, Optional, Union, Dict, Tuple, Literal
|
||||||
from pydantic import BaseModel, validator
|
from pydantic import BaseModel, validator
|
||||||
from .completion import CompletionRequest
|
from .completion import CompletionRequest
|
||||||
from .embedding import EmbeddingRequest
|
from .embedding import EmbeddingRequest
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
|
||||||
class ModelConfig(BaseModel):
|
class ModelConfig(BaseModel):
|
||||||
|
@ -39,3 +40,120 @@ class RouterConfig(BaseModel):
|
||||||
"usage-based-routing",
|
"usage-based-routing",
|
||||||
"latency-based-routing",
|
"latency-based-routing",
|
||||||
] = "simple-shuffle"
|
] = "simple-shuffle"
|
||||||
|
|
||||||
|
|
||||||
|
class ModelInfo(BaseModel):
|
||||||
|
id: Optional[
|
||||||
|
str
|
||||||
|
] # Allow id to be optional on input, but it will always be present as a str in the model instance
|
||||||
|
|
||||||
|
def __init__(self, id: Optional[Union[str, int]] = None, **params):
|
||||||
|
if id is None:
|
||||||
|
id = str(uuid.uuid4()) # Generate a UUID if id is None or not provided
|
||||||
|
elif isinstance(id, int):
|
||||||
|
id = str(id)
|
||||||
|
super().__init__(id=id, **params)
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
extra = "allow"
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
# Define custom behavior for the 'in' operator
|
||||||
|
return hasattr(self, key)
|
||||||
|
|
||||||
|
def get(self, key, default=None):
|
||||||
|
# Custom .get() method to access attributes with a default value if the attribute doesn't exist
|
||||||
|
return getattr(self, key, default)
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
# Allow dictionary-style access to attributes
|
||||||
|
return getattr(self, key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
# Allow dictionary-style assignment of attributes
|
||||||
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
|
||||||
|
class LiteLLM_Params(BaseModel):
|
||||||
|
model: str
|
||||||
|
tpm: Optional[int] = None
|
||||||
|
rpm: Optional[int] = None
|
||||||
|
api_key: Optional[str] = None
|
||||||
|
api_base: Optional[str] = None
|
||||||
|
api_version: Optional[str] = None
|
||||||
|
timeout: Optional[Union[float, str]] = None # if str, pass in as os.environ/
|
||||||
|
stream_timeout: Optional[Union[float, str]] = (
|
||||||
|
None # timeout when making stream=True calls, if str, pass in as os.environ/
|
||||||
|
)
|
||||||
|
max_retries: int = 2 # follows openai default of 2
|
||||||
|
organization: Optional[str] = None # for openai orgs
|
||||||
|
## VERTEX AI ##
|
||||||
|
vertex_project: Optional[str] = None
|
||||||
|
vertex_location: Optional[str] = None
|
||||||
|
## AWS BEDROCK / SAGEMAKER ##
|
||||||
|
aws_access_key_id: Optional[str] = None
|
||||||
|
aws_secret_access_key: Optional[str] = None
|
||||||
|
aws_region_name: Optional[str] = None
|
||||||
|
|
||||||
|
def __init__(self, max_retries: Optional[Union[int, str]] = None, **params):
|
||||||
|
if max_retries is None:
|
||||||
|
max_retries = 2
|
||||||
|
elif isinstance(max_retries, str):
|
||||||
|
max_retries = int(max_retries) # cast to int
|
||||||
|
super().__init__(max_retries=max_retries, **params)
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
extra = "allow"
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
# Define custom behavior for the 'in' operator
|
||||||
|
return hasattr(self, key)
|
||||||
|
|
||||||
|
def get(self, key, default=None):
|
||||||
|
# Custom .get() method to access attributes with a default value if the attribute doesn't exist
|
||||||
|
return getattr(self, key, default)
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
# Allow dictionary-style access to attributes
|
||||||
|
return getattr(self, key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
# Allow dictionary-style assignment of attributes
|
||||||
|
setattr(self, key, value)
|
||||||
|
|
||||||
|
|
||||||
|
class Deployment(BaseModel):
|
||||||
|
model_name: str
|
||||||
|
litellm_params: LiteLLM_Params
|
||||||
|
model_info: ModelInfo
|
||||||
|
|
||||||
|
def __init__(self, model_info: Optional[ModelInfo] = None, **params):
|
||||||
|
if model_info is None:
|
||||||
|
model_info = ModelInfo()
|
||||||
|
super().__init__(model_info=model_info, **params)
|
||||||
|
|
||||||
|
def to_json(self, **kwargs):
|
||||||
|
try:
|
||||||
|
return self.model_dump(**kwargs) # noqa
|
||||||
|
except Exception as e:
|
||||||
|
# if using pydantic v1
|
||||||
|
return self.dict(**kwargs)
|
||||||
|
|
||||||
|
class Config:
|
||||||
|
extra = "allow"
|
||||||
|
|
||||||
|
def __contains__(self, key):
|
||||||
|
# Define custom behavior for the 'in' operator
|
||||||
|
return hasattr(self, key)
|
||||||
|
|
||||||
|
def get(self, key, default=None):
|
||||||
|
# Custom .get() method to access attributes with a default value if the attribute doesn't exist
|
||||||
|
return getattr(self, key, default)
|
||||||
|
|
||||||
|
def __getitem__(self, key):
|
||||||
|
# Allow dictionary-style access to attributes
|
||||||
|
return getattr(self, key)
|
||||||
|
|
||||||
|
def __setitem__(self, key, value):
|
||||||
|
# Allow dictionary-style assignment of attributes
|
||||||
|
setattr(self, key, value)
|
||||||
|
|
|
@ -13,7 +13,6 @@ import dotenv, json, traceback, threading, base64, ast
|
||||||
import subprocess, os
|
import subprocess, os
|
||||||
from os.path import abspath, join, dirname
|
from os.path import abspath, join, dirname
|
||||||
import litellm, openai
|
import litellm, openai
|
||||||
from litellm import LiteLLM_Params
|
|
||||||
import itertools
|
import itertools
|
||||||
import random, uuid, requests
|
import random, uuid, requests
|
||||||
from functools import wraps
|
from functools import wraps
|
||||||
|
@ -54,6 +53,7 @@ os.environ["TIKTOKEN_CACHE_DIR"] = (
|
||||||
encoding = tiktoken.get_encoding("cl100k_base")
|
encoding = tiktoken.get_encoding("cl100k_base")
|
||||||
import importlib.metadata
|
import importlib.metadata
|
||||||
from ._logging import verbose_logger
|
from ._logging import verbose_logger
|
||||||
|
from .types.router import LiteLLM_Params
|
||||||
from .integrations.traceloop import TraceloopLogger
|
from .integrations.traceloop import TraceloopLogger
|
||||||
from .integrations.athina import AthinaLogger
|
from .integrations.athina import AthinaLogger
|
||||||
from .integrations.helicone import HeliconeLogger
|
from .integrations.helicone import HeliconeLogger
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue