Lompat ke konten
Semua dokumentasi

Kode

LiteLLM

Arahkan LiteLLM ke nokeep dengan awalan openai/ dan api_base. Ini berjalan di proksi maupun di Python SDK.

Diperiksa 29 Oktober 2026

Proksinya

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

Aplikasimu lalu memanggil proksi (secara default http://0.0.0.0:4000) dengan model_name, dan proksi memanggil nokeep. model_info memberi LiteLLM harga nokeep per token, sehingga pelacakan pengeluarannya sama dengan tagihanmu. Tanpa itu, LiteLLM tidak punya harga untuk model nokeep dan tidak bisa menghitung biaya panggilan.

Python SDK

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)

Sebuah penyedia nokeep asli telah diusulkan ke LiteLLM. Sampai itu dirilis, awalan openai/ dengan api_base adalah jalannya; permintaan dikirim apa adanya.

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)

Tools, thinking, dan sampler

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)

Dengan awalan openai/, reasoning_effort dan tools diteruskan tanpa diubah. Di proksi, atur field tetap per model di bawah litellm_params (misalnya reasoning_effort: high), atau biarkan tiap pemanggil mengirim miliknya sendiri. Lihat Pemanggilan tool dan Thinking.

Jebakan

  • `reasoning_effort` hanya menerima nilai milik model. deepseek-v4.1-flash-uncensored menerima none, low, high, max; glm-5.3-flash-uncensored menerima low, high. Nilai minimal, medium dan xhigh dari aplikasi lain dijalankan pada level terdekat model (medium sebagai high, xhigh sebagai max jika model punya), nilai lain apa pun mendapat 400 invalid_reasoning_effort. Lihat Thinking.
  • GLM memilih tool-nya sendiri. glm-5.3-flash-uncensored hanya menerima tool_choice auto atau none. Memaksa sebuah tool (required, atau menyebut nama fungsi) mendapat 400 unsupported_tool_choice. Pakai DeepSeek jika perlu memaksa satu tool.
  • Field yang tidak bisa diterima sebuah model dibuang, bukan ditolak. Panggilan tetap dijawab, dan header respons x-nokeep-ignored menyebut apa yang dibuang. GLM hanya menerima tools, tool_choice dan reasoning_effort, jadi temperature dan response_format-nya dibuang. Lihat field apa yang diterima tiap model.
  • Bagian konten hanya teks dan gambar. Bagian image_url berfungsi di deepseek-v4.1-flash-uncensored; GLM hanya membaca teks. Bagian audio dan file (PDF) mendapat 400 unsupported_input.
  • `n` harus 1. Minta beberapa balasan dengan beberapa panggilan.

drop_params: true membuat LiteLLM membuang field yang menurutnya tidak bisa diterima penyedia sebelum panggilan. nokeep sudah membuang yang tidak bisa diterima sebuah model dan menyebutkannya di x-nokeep-ignored, jadi kamu tidak perlu opsi itu.

Pertanyaan

Apakah saya memasukkan kunci nokeep di config.yaml?

Tidak. Tulis api_key: os.environ/NOKEEP_API_KEY dan LiteLLM membaca kunci dari environment saat mulai.

Kenapa LiteLLM tidak menampilkan biaya untuk panggilan nokeep?

Ia tidak tahu harga nokeep. Tambahkan blok model_info dari config di atas; harga di dalamnya berasal dari tabel yang sama dengan tagihanmu. Tagihan sendiri membulatkan tiap panggilan ke atas menjadi kredit utuh.