Ir al contenido
Toda la documentación

Código

LiteLLM

Apunta LiteLLM a nokeep con el prefijo openai/ y api_base. Funciona en el proxy y en el SDK de Python.

Revisado el 29 de octubre de 2026

El 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

Tus apps llaman luego al proxy (por defecto http://0.0.0.0:4000) con el model_name, y el proxy llama a nokeep. model_info le da a LiteLLM los precios de nokeep, por token, para que el control de gasto coincida con tu factura. Sin él, LiteLLM no tiene precio para los modelos de nokeep y no puede contar lo que cuesta cada llamada.

El SDK de 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)

Se ha propuesto a LiteLLM un proveedor nativo de nokeep. Hasta que se publique, la vía es el prefijo openai/ con api_base; envía la solicitud tal cual.

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)

Herramientas, razonamiento y muestreo

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)

Con el prefijo openai/, reasoning_effort y tools pasan sin cambios. En el proxy, define campos fijos por modelo en litellm_params (por ejemplo reasoning_effort: high), o deja que cada cliente envíe los suyos. Consulta Llamadas a herramientas y Razonamiento.

Advertencias

  • `reasoning_effort` solo acepta los valores propios del modelo. deepseek-v4.1-flash-uncensored acepta none, low, high, max; glm-5.3-flash-uncensored acepta low, high. Los valores minimal, medium y xhigh de otras apps se ejecutan en el nivel más cercano del modelo (medium como high, xhigh como max donde el modelo lo tenga); cualquier otro valor recibe 400 invalid_reasoning_effort. Consulta Razonamiento.
  • GLM elige sus propias herramientas. glm-5.3-flash-uncensored acepta solo tool_choice auto o none. Forzar una herramienta (required o dar el nombre de una función) recibe 400 unsupported_tool_choice. Usa DeepSeek si necesitas forzar una.
  • Los campos que un modelo no acepta se descartan, no se rechazan. La llamada responde igual, y el encabezado de respuesta x-nokeep-ignored indica qué se dejó fuera. GLM solo conserva tools, tool_choice y reasoning_effort, así que sus temperature y response_format se descartan. Consulta qué campos acepta cada modelo.
  • Las partes de contenido son solo texto e imágenes. Las partes image_url funcionan en deepseek-v4.1-flash-uncensored; GLM lee solo texto. Las partes de audio y de archivo (un PDF) reciben 400 unsupported_input.
  • `n` debe ser 1. Para pedir varias respuestas, haz varias llamadas.

drop_params: true hace que LiteLLM descarte, antes de la llamada, los campos que cree que un proveedor no acepta. nokeep ya descarta lo que un modelo no acepta y lo indica en x-nokeep-ignored, así que no lo necesitas.

Preguntas

¿Pongo mi clave de nokeep en config.yaml?

No. Escribe api_key: os.environ/NOKEEP_API_KEY y LiteLLM lee la clave del entorno al arrancar.

¿Por qué LiteLLM no muestra costo en las llamadas a nokeep?

No conoce los precios de nokeep. Añade el bloque model_info de la configuración de arriba; los precios que contiene vienen de la misma tabla que tu factura. La factura en sí redondea cada llamada hacia arriba a un crédito completo.