完成令牌用量与成本
默认情况下,LiteLLM 在所有完成请求中返回令牌用量(见此处)
LiteLLM 在所有调用中返回 response_cost
。
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 还提供了一些辅助函数
encode
:使用特定模型的 tokenizer 对传入文本进行编码。 跳转到代码decode
:使用特定模型的 tokenizer 对传入令牌进行解码。 跳转到代码token_counter
:返回给定输入的令牌数量 - 它使用基于模型的 tokenizer,如果特定模型的 tokenizer 不可用,则默认为 tiktoken。 跳转到代码create_pretrained_tokenizer
和create_tokenizer
:LiteLLM 为 OpenAI、Cohere、Anthropic、Llama2 和 Llama3 模型提供默认的 tokenizer 支持。如果您使用不同的模型,可以创建自定义 tokenizer,并将其作为custom_tokenizer
传递给encode
、decode
和token_counter
方法。 跳转到代码cost_per_token
:返回 prompt(输入)和 completion(输出)令牌的成本(美元)。使用来自api.litellm.ai
的实时列表。 跳转到代码completion_cost
:返回给定 LLM API 调用的总成本(美元)。它结合了token_counter
和cost_per_token
来返回该查询的成本(同时计算输入和输出的成本)。 跳转到代码get_max_tokens
:返回给定模型允许的最大令牌数量。 跳转到代码model_cost
:返回所有模型的字典,包含它们的 max_tokens、input_cost_per_token 和 output_cost_per_token。它使用如下所示的api.litellm.ai
调用。 跳转到代码register_model
:在模型成本字典中注册新模型 / 覆盖现有模型(及其定价详情)。 跳转到代码
📣 这是一个社区维护的列表。欢迎贡献!❤️
使用示例
1. encode
Encoding 对 anthropic、cohere、llama2 和 openai 有特定模型的 tokenizer。如果传入不支持的模型,将默认使用 tiktoken (openai 的 tokenizer)。
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
Decoding 支持 anthropic、cohere、llama2 和 openai。
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
和 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
- 输入:接受一个
litellm.completion()
响应 或 prompt + completion 字符串 - 输出:返回
completion
调用的成本(浮点数)
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 字符串
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
输入:接受模型名称 - 例如,gpt-3.5-turbo(获取完整列表,调用 litellm.model_list)。输出:返回给定模型允许的最大令牌数量
from litellm import get_max_tokens
model = "gpt-3.5-turbo"
print(get_max_tokens(model)) # Output: 4097
8. model_cost
- 输出:返回一个 dict 对象,包含社区维护列表中所有模型的 max_tokens、input_cost_per_token、output_cost_per_token
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
- 输入:提供模型成本字典 或 托管 json blob 的 URL
- 输出:返回更新后的 model_cost 字典 + 使用模型详情更新 litellm.model_cost。
字典
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"
},
})
json blob 的 URL
import litellm
litellm.register_model(model_cost=
"https://raw.githubusercontent.com/BerriAI/litellm/main/model_prices_and_context_window.json")
不拉取托管的 model_cost_map
如果您有防火墙,并且只想使用 model cost map 的本地副本,可以这样做
export LITELLM_LOCAL_MODEL_COST_MAP="True"
注意:这意味着您需要升级才能获取更新的定价和更新的模型。