Zum Hauptinhalt springen

Completion Token Nutzung & Kosten

Standardmäßig gibt LiteLLM bei allen Abschlussanfragen die Token-Nutzung zurück (Siehe hier)

LiteLLM gibt bei allen Aufrufen response_cost zurück.

from litellm import completion 

response = litellm.completion(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": "Hey, how's it going?"}],
mock_response="Hello world",
)

print(response._hidden_params["response_cost"])

LiteLLM stellt auch einige Hilfsfunktionen zur Verfügung

  • encode: Dies kodiert den übergebenen Text mithilfe des modellspezifischen Tokenizers. Zum Code springen

  • decode: Dies dekodiert die übergebenen Token mithilfe des modellspezifischen Tokenizers. Zum Code springen

  • token_counter: Gibt die Anzahl der Token für eine gegebene Eingabe zurück - es verwendet den Tokenizer, der auf dem Modell basiert, und greift auf tiktoken zurück, wenn kein modellspezifischer Tokenizer verfügbar ist. Zum Code springen

  • create_pretrained_tokenizer und create_tokenizer: LiteLLM bietet standardmäßige Tokenizer-Unterstützung für OpenAI-, Cohere-, Anthropic-, Llama2- und Llama3-Modelle. Wenn Sie ein anderes Modell verwenden, können Sie einen benutzerdefinierten Tokenizer erstellen und ihn als custom_tokenizer an die Methoden encode, decode und token_counter übergeben. Zum Code springen

  • cost_per_token: Gibt die Kosten (in USD) für Prompt- (Input) und Completion- (Output) Token zurück. Verwendet die Live-Liste von api.litellm.ai. Zum Code springen

  • completion_cost: Gibt die Gesamtkosten (in USD) für einen gegebenen LLM API-Aufruf zurück. Es kombiniert token_counter und cost_per_token, um die Kosten für diese Abfrage zurückzugeben (zählt sowohl die Kosten für Input als auch für Output). Zum Code springen

  • get_max_tokens: Gibt die maximale Anzahl von Token zurück, die für das gegebene Modell zulässig sind. Zum Code springen

  • model_cost: Gibt ein Dictionary für alle Modelle zurück, mit deren max_tokens, input_cost_per_token und output_cost_per_token. Es verwendet den unten gezeigten Aufruf von api.litellm.ai. Zum Code springen

  • register_model: Registriert neue / überschreibt bestehende Modelle (und deren Preisdetails) im Model-Kosten-Dictionary. Zum Code springen

  • api.litellm.ai: Live Token + Preisberechnung über alle unterstützten Modelle. Zum Code springen

📣 Dies ist eine gemeinschaftlich gepflegte Liste. Beiträge sind willkommen! ❤️

Beispielverwendung

1. encode

Encoding verfügt über modellspezifische Tokenizer für Anthropic, Cohere, Llama2 und OpenAI. Wenn ein nicht unterstütztes Modell übergeben wird, wird standardmäßig tiktoken (OpenAI's Tokenizer) verwendet.

from litellm import encode, decode

sample_text = "Hellö World, this is my input string!"
# openai encoding + decoding
openai_tokens = encode(model="gpt-3.5-turbo", text=sample_text)
print(openai_tokens)

2. decode

Dekodierung wird für Anthropic, Cohere, Llama2 und OpenAI unterstützt.

from litellm import encode, decode

sample_text = "Hellö World, this is my input string!"
# openai encoding + decoding
openai_tokens = encode(model="gpt-3.5-turbo", text=sample_text)
openai_text = decode(model="gpt-3.5-turbo", tokens=openai_tokens)
print(openai_text)

3. token_counter

from litellm import token_counter

messages = [{"user": "role", "content": "Hey, how's it going"}]
print(token_counter(model="gpt-3.5-turbo", messages=messages))

4. create_pretrained_tokenizer und create_tokenizer

from litellm import create_pretrained_tokenizer, create_tokenizer

# get tokenizer from huggingface repo
custom_tokenizer_1 = create_pretrained_tokenizer("Xenova/llama-3-tokenizer")

# use tokenizer from json file
with open("tokenizer.json") as f:
json_data = json.load(f)

json_str = json.dumps(json_data)

custom_tokenizer_2 = create_tokenizer(json_str)

5. cost_per_token

from litellm import cost_per_token

prompt_tokens = 5
completion_tokens = 10
prompt_tokens_cost_usd_dollar, completion_tokens_cost_usd_dollar = cost_per_token(model="gpt-3.5-turbo", prompt_tokens=prompt_tokens, completion_tokens=completion_tokens))

print(prompt_tokens_cost_usd_dollar, completion_tokens_cost_usd_dollar)

6. completion_cost

  • Eingabe: Akzeptiert eine litellm.completion()-Antwort **ODER** Prompt- + Completion-Strings
  • Ausgabe: Gibt einen float der Kosten für den completion-Aufruf zurück

litellm.completion()

from litellm import completion, completion_cost

response = completion(
model="bedrock/anthropic.claude-v2",
messages=messages,
request_timeout=200,
)
# pass your response from completion to completion_cost
cost = completion_cost(completion_response=response)
formatted_string = f"${float(cost):.10f}"
print(formatted_string)

Prompt- + Completion-String

from litellm import completion_cost
cost = completion_cost(model="bedrock/anthropic.claude-v2", prompt="Hey!", completion="How's it going?")
formatted_string = f"${float(cost):.10f}"
print(formatted_string)

7. get_max_tokens

Eingabe: Akzeptiert einen Modellnamen - z.B. gpt-3.5-turbo (um eine vollständige Liste zu erhalten, rufen Sie litellm.model_list auf). Ausgabe: Gibt die maximale Anzahl von Token zurück, die für das gegebene Modell zulässig sind

from litellm import get_max_tokens 

model = "gpt-3.5-turbo"

print(get_max_tokens(model)) # Output: 4097

8. model_cost

  • Ausgabe: Gibt ein Dictionary-Objekt zurück, das die max_tokens, input_cost_per_token und output_cost_per_token für alle Modelle auf der gemeinschaftlich gepflegten Liste enthält.
from litellm import model_cost 

print(model_cost) # {'gpt-3.5-turbo': {'max_tokens': 4000, 'input_cost_per_token': 1.5e-06, 'output_cost_per_token': 2e-06}, ...}

9. register_model

  • Eingabe: Stellen Sie ENTWEDER ein Modellkosten-Dictionary ODER eine URL zu einem gehosteten JSON-Blob bereit
  • Ausgabe: Gibt das aktualisierte model_cost-Dictionary zurück + aktualisiert litellm.model_cost mit Modelldetails.

Dictionary

from litellm import register_model

litellm.register_model({
"gpt-4": {
"max_tokens": 8192,
"input_cost_per_token": 0.00002,
"output_cost_per_token": 0.00006,
"litellm_provider": "openai",
"mode": "chat"
},
})

URL für JSON-Blob

import litellm

litellm.register_model(model_cost=
"https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json")

model_cost_map nicht abrufen
Wenn Sie Firewalls haben und nur die lokale Kopie der model_cost_map verwenden möchten, können Sie dies wie folgt tun:

export LITELLM_LOCAL_MODEL_COST_MAP="True"

Hinweis: Dies bedeutet, dass Sie ein Upgrade durchführen müssen, um aktualisierte Preise und neuere Modelle zu erhalten.