Pular para o conteúdo
Toda a documentação

Código

LiteLLM

Aponte o LiteLLM para o nokeep com o prefixo openai/ e api_base. Funciona no proxy e no SDK Python.

Verificado em 29 de outubro de 2026

O proxy

config.yaml
model_list:
  - model_name: deepseek-v4.1-flash-uncensored
    litellm_params:
      model: openai/deepseek-v4.1-flash-uncensored
      api_base: https://nokeep.ai/v1
      api_key: os.environ/NOKEEP_API_KEY
    model_info:
      input_cost_per_token: 0.00000045
      cache_read_input_token_cost: 0.000000011
      output_cost_per_token: 0.00000175
  - model_name: glm-5.3-flash-uncensored
    litellm_params:
      model: openai/glm-5.3-flash-uncensored
      api_base: https://nokeep.ai/v1
      api_key: os.environ/NOKEEP_API_KEY
    model_info:
      input_cost_per_token: 0.0000002
      cache_read_input_token_cost: 0.00000004
      output_cost_per_token: 0.00000065
Shell
pip install 'litellm[proxy]'
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
litellm --config config.yaml

Seus apps então chamam o proxy (por padrão http://0.0.0.0:4000) com o model_name, e o proxy chama o nokeep. O model_info informa ao LiteLLM os preços do nokeep, por token, para que o controle de gastos bata com a sua conta. Sem ele, o LiteLLM não tem preço para os modelos do nokeep e não consegue calcular quanto as chamadas custam.

O SDK Python

Shell
pip install litellm
export NOKEEP_API_KEY="sk-nokeep-test"  # your own key once it connects
Python
import os
import litellm

reply = litellm.completion(
    model="openai/deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    messages=[{"role": "user", "content": "Name three good names for a tavern."}],
)
print(reply.choices[0].message.content)
print(reply.usage)

Um provedor nativo do nokeep foi proposto ao LiteLLM. Até ele ser lançado, o prefixo openai/ com api_base é o caminho; ele envia a requisição exatamente como ela é.

Streaming

Python
import os
import litellm

stream = litellm.completion(
    model="openai/deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    messages=[{"role": "user", "content": "Tell me a story in three lines."}],
    stream=True,
    stream_options={"include_usage": True},
)
for chunk in stream:
    if chunk.choices:
        print(chunk.choices[0].delta.content or "", end="", flush=True)
    if getattr(chunk, "usage", None):
        print("\n", chunk.usage)

Ferramentas, raciocínio e amostragem

Python
import os
import litellm

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Get the weather in a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string"}},
            "required": ["city"],
        },
    },
}]

reply = litellm.completion(
    model="openai/deepseek-v4.1-flash-uncensored",
    api_base="https://nokeep.ai/v1",
    api_key=os.environ["NOKEEP_API_KEY"],
    messages=[{"role": "user", "content": "What's the weather in Lisbon?"}],
    tools=tools,
    reasoning_effort="high",
    max_tokens=4000,
    extra_body={"min_p": 0.05},  # fields LiteLLM has no argument for
)
print(reply.choices[0].message.tool_calls)

Com o prefixo openai/, reasoning_effort e tools passam sem alteração. No proxy, defina campos fixos por modelo em litellm_params (por exemplo reasoning_effort: high), ou deixe cada cliente enviar o seu. Veja Chamadas de ferramentas e Raciocínio.

Armadilhas

  • `reasoning_effort` aceita só os valores do próprio modelo. deepseek-v4.1-flash-uncensored aceita none, low, high, max; glm-5.3-flash-uncensored aceita low, high. Os valores minimal, medium e xhigh de outros apps rodam no nível mais próximo do modelo (medium como high, xhigh como max onde o modelo tem esse nível); qualquer outro valor recebe 400 invalid_reasoning_effort. Veja Raciocínio.
  • O GLM escolhe as próprias ferramentas. glm-5.3-flash-uncensored aceita só tool_choice auto ou none. Forçar uma ferramenta (required, ou citar uma função) recebe 400 unsupported_tool_choice. Use o DeepSeek quando precisar forçar uma.
  • Campos que um modelo não aceita são descartados, não recusados. A chamada ainda responde, e o cabeçalho de resposta x-nokeep-ignored diz o que ficou de fora. O GLM mantém só tools, tool_choice e reasoning_effort, então seus temperature e response_format são descartados. Veja quais campos cada modelo aceita.
  • Partes de conteúdo são só texto e imagens. Partes image_url funcionam no deepseek-v4.1-flash-uncensored; o GLM lê só texto. Partes de áudio e de arquivo (um PDF) recebem 400 unsupported_input.
  • `n` tem de ser 1. Para pedir várias respostas, faça várias chamadas.

drop_params: true faz o LiteLLM descartar, antes da chamada, os campos que ele acredita que um provedor não aceita. O nokeep já descarta o que um modelo não aceita e informa isso em x-nokeep-ignored, então você não precisa dele.

Perguntas

Eu coloco minha chave do nokeep no config.yaml?

Não. Escreva api_key: os.environ/NOKEEP_API_KEY e o LiteLLM lê a chave do ambiente quando inicia.

Por que o LiteLLM não mostra custo nas chamadas do nokeep?

Ele não conhece os preços do nokeep. Adicione o bloco model_info da configuração acima; os preços dele vêm da mesma tabela da sua conta. A cobrança em si arredonda cada chamada para o crédito inteiro seguinte.