> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sambanova.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# LiteLLM

本ガイドでは、LiteLLM と SambaNova を使用して最初の補完 (completion) 呼び出しを行う方法を解説します。LiteLLM は、LLM へのアクセスを統一されたインターフェースで扱えるオープンソースの Python ライブラリで、入力の変換や例外のマッピングを行います。

LiteLLM にはネイティブの `sambanova` プロバイダーが用意されているため、SambaCloud のモデルは `sambanova/<model-id>` の形式で指定でき、エンドポイントは LiteLLM が自動的に設定します。ベース URL を設定する必要はありません。

## 前提条件

作業を始める前に、以下の環境を準備してください。

* 有効な API キーを取得済みの [SambaCloud](https://cloud.sambanova.ai?utm_source=litellm\&utm_medium=external\&utm_campaign=cloud_signup) アカウント
* Python 3.10 〜 3.14。`litellm` は Python 3.9 以前および Python 3.15 以降をサポートしていません。
* [SambaCloud モデル](/docs/ja/models/sambacloud-models) ページに記載のモデル ID。掲載されているすべてのモデルが `sambanova/` プレフィックスで利用できます。

<Note>
  macOS には Python 3.9 が標準搭載されており、`python` ではなく `python3` として提供されます。`python3 --version` でバージョンを確認してください。3.10 未満の場合は、[pyenv](https://github.com/pyenv/pyenv)、[uv](https://docs.astral.sh/uv/)、または `brew install python@3.12` で対応バージョンをインストールしてから先へ進んでください。
</Note>

## インストール

仮想環境を作成して有効化し、LiteLLM をインストールします。

```bash theme={}
python3 -m venv .venv
source .venv/bin/activate
python --version
pip install litellm
```

本ページの例は `litellm` 1.96.1 を対象に作成されています。このバージョンに固定するには、代わりに `pip install 'litellm==1.96.1'` を実行してください。

## サンプルコード

API キーがソースファイルに残らないよう、環境変数としてエクスポートします。

```bash theme={}
export SAMBANOVA_API_KEY="your-api-key"
```

次に、最初の補完呼び出しを行います。LiteLLM は環境変数からキーを読み取ります。以下を `first_call.py` として保存します。

```python theme={}
from litellm import completion

response = completion(
    model="sambanova/Meta-Llama-3.3-70B-Instruct",
    messages=[{"role": "user", "content": "What is SambaNova?"}],
)
print(response.choices[0].message.content)
```

実行します。

```bash theme={}
python first_call.py
```

以下のような出力が表示されます。

```text theme={}
SambaNova Systems builds AI hardware and software for running large language
models. Its SambaCloud service provides API access to open source models.
```

`completion()` は `ModelResponse` を返します。回答は `response.choices[0].message.content` にプレーンな文字列として格納されており、必要に応じて `id`、`model`、`created`、`choices[0].finish_reason` も参照できます。

別のモデルを使用するには、`sambanova/` の後の文字列を [SambaCloud モデル](/docs/ja/models/sambacloud-models) ページに記載の任意の ID に変更します。呼び出しの他の部分は変わりません。

### 高度なオプション

LiteLLM は SambaNova のリクエストパラメータをそのまま API に引き渡します。以下は、トークン数とサンプリングの制御を指定しつつ、JSON 形式のレスポンスを要求する例です。

```python theme={}
from litellm import completion

response = completion(
    model="sambanova/Meta-Llama-3.3-70B-Instruct",
    messages=[
        {
            "role": "user",
            "content": "What do you know about sambanova.ai? Give your response in JSON format.",
        }
    ],
    max_tokens=512,
    response_format={"type": "json_object"},
    temperature=0.2,
    top_p=0.9,
)
print(response.choices[0].message.content)
```

`response_format={"type": "json_object"}` を指定しても、`content` はディクショナリではなく、JSON を含む**文字列**のままです。前の例の `response` を再利用して、使用する前にパースしてください。

```python theme={}
import json

data = json.loads(response.choices[0].message.content)
print(data.keys())
```

JSON モードが保証するのはレスポンスがパース可能であることだけで、どのキーが含まれるかは保証されません。キーはプロンプトに基づいてモデルが選択するため、キーに依存する前に内容を確認するか、必要とする正確なスキーマをプロンプトで明示してください。

### レスポンスのストリーミング

モデルが生成したトークンを逐次受け取るには、`stream=True` を渡します。ストリーミングでは、単一の `ModelResponse` の代わりにチャンクのイテレーターが返され、テキストは `chunk.choices[0].delta.content` に格納されます。このフィールドは最後のチャンクで `None` になるため、以下の `or ""` によって、ストリーム終端での `print()` の失敗を防いでいます。

```python theme={}
from litellm import completion

stream = completion(
    model="sambanova/Meta-Llama-3.3-70B-Instruct",
    messages=[{"role": "user", "content": "What is SambaNova?"}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)
print()
```

### 呼び出しコストの確認

`litellm.completion_cost()` は、LiteLLM に同梱されている価格表に基づいて計算したレスポンスのコストを米ドルで返します。

```python theme={}
import litellm
from litellm import completion

response = completion(
    model="sambanova/Meta-Llama-3.3-70B-Instruct",
    messages=[{"role": "user", "content": "What is SambaNova?"}],
)
print(response.usage.prompt_tokens, response.usage.completion_tokens)
print(litellm.completion_cost(completion_response=response))
```

<Note>
  LiteLLM の価格表は SambaNova ではなく LiteLLM プロジェクトが管理しており、料金改定への追随が遅れる場合があります。請求に関しては [SambaCloud の料金](https://cloud.sambanova.ai/plans/pricing) ページを正としてください。
</Note>

## フォールバックによる複数モデルへのルーティング

`fallbacks` を渡すと、LiteLLM はリクエストが失敗したときに例外を送出する代わりに、他のモデルで再試行します。LiteLLM はまず `model` を試し、次に `fallbacks` の各エントリを順番に試して、最初に成功したレスポンスを返します。すべての試行が失敗した場合は、最後のエラーを送出します。

```python theme={}
from litellm import completion

response = completion(
    model="sambanova/Meta-Llama-3.3-70B-Instruct",
    messages=[{"role": "user", "content": "What is SambaNova?"}],
    fallbacks=["sambanova/gpt-oss-120b", "sambanova/DeepSeek-V3.1"],
)
print(response.model)
print(response.choices[0].message.content)
```

`response.model` は、どのモデルが回答を生成したかを示します。LiteLLM は各エントリを独立して解決するため、そのプロバイダーの API キーを環境変数に設定してあれば、フォールバックリストでプロバイダーをまたぐこともできます。

## LiteLLM プロキシの実行

プロキシはモデルの前段に OpenAI 互換エンドポイントを配置するため、任意の OpenAI クライアントがコードを変更せずに SambaCloud へ接続できます。プロキシの依存パッケージをインストールします。

```bash theme={}
pip install 'litellm[proxy]'
```

`config.yaml` を作成します。`model_name` はクライアントがリクエストで指定するエイリアスで、`litellm_params.model` が実際の SambaNova モデルです。キーをファイルに保存せず環境変数から読み取るよう、`os.environ/` プレフィックスを使用します。

```yaml theme={}
model_list:
  - model_name: llama-3.3-70b
    litellm_params:
      model: sambanova/Meta-Llama-3.3-70B-Instruct
      api_key: os.environ/SAMBANOVA_API_KEY
  - model_name: gpt-oss-120b
    litellm_params:
      model: sambanova/gpt-oss-120b
      api_key: os.environ/SAMBANOVA_API_KEY
```

プロキシを起動します。デフォルトではポート 4000 で待ち受けます。

```bash theme={}
litellm --config config.yaml
```

次に、SambaNova のモデル ID ではなく、定義したエイリアスを使用してリクエストを送信します。

```bash theme={}
curl http://0.0.0.0:4000/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "llama-3.3-70b",
    "messages": [{"role": "user", "content": "What is SambaNova?"}]
  }'
```

<Tip>
  SambaCloud ではなく SambaStack に対してプロキシをセルフホストする場合は、データベースとデプロイメントのセットアップを解説している [LiteLLM リファレンスアーキテクチャ](/docs/ja/sambastack/reference-architecture/litellm) ページをご参照ください。
</Tip>

## トラブルシューティング

<AccordionGroup>
  <Accordion title="command not found: python">
    macOS には `python` 実行ファイルが用意されておらず、`python3` のみが提供されます。仮想環境の作成には `python3 -m venv .venv` を使用してください。`source .venv/bin/activate` で有効化した後は、環境内で `python` が期待どおりに動作します。
  </Accordion>

  <Accordion title="AuthenticationError: SambanovaException - Incorrect API key provided">
    `SAMBANOVA_API_KEY` が未設定か、値が誤っています。LiteLLM は呼び出し時に環境変数からキーを読み取るため、このエラーはインポート時ではなく `completion()` の呼び出し時に発生します。`echo $SAMBANOVA_API_KEY` で確認してください。なお、`export` は実行したシェルにのみ適用されます。
  </Accordion>

  <Accordion title="BadRequestError: LLM Provider NOT provided">
    モデル名に `sambanova/` プレフィックスがありません。LiteLLM はこのプレフィックスからプロバイダーを選択するため、モデルは `Meta-Llama-3.3-70B-Instruct` ではなく `sambanova/Meta-Llama-3.3-70B-Instruct` と記述する必要があります。
  </Accordion>

  <Accordion title="NotFoundError: The model does not exist or you do not have access to it">
    `sambanova/` の後のモデル ID が誤っているか、すでに提供されていません。モデル ID は大文字と小文字を区別するため、`sambanova/Meta-Llama-3.3-70B-Instruct` は成功しても `sambanova/meta-llama-3.3-70b-instruct` は失敗します。[SambaCloud モデル](/docs/ja/models/sambacloud-models) ページで ID を確認し、モデルが提供終了になっている場合は [提供終了モデル](/docs/ja/models/deprecations) ページで代替モデルを確認してください。
  </Accordion>

  <Accordion title="モデルが JSON ではなく通常の文章を返す">
    `response_format={"type": "json_object"}` は出力形式を制約しますが、高度なオプションの例のように、プロンプト自体でも JSON を要求するべきです。選択したモデルが構造化出力に対応していることを、[SambaCloud モデル](/docs/ja/models/sambacloud-models) ページで確認してください。
  </Accordion>

  <Accordion title="プロキシがモジュール不足のエラーで起動しない">
    `pip install litellm` では `litellm` コマンドはインストールされますが、`uvicorn` や `fastapi` など、プロキシに必要なサーバー側の依存パッケージはインストールされません。有効化した仮想環境内で `pip install 'litellm[proxy]'` を実行してください。zsh は引用符なしの角括弧をグロブパターンとして扱うため、引数は引用符で囲んでください。
  </Accordion>

  <Accordion title="Python では動作するモデル名に対して、プロキシが model not found エラーを返す">
    プロキシへのリクエストでは、`sambanova/<model-id>` 文字列ではなく、`config.yaml` の `model_name` エイリアスを使用します。定義したエイリアスが `llama-3.3-70b` であれば `"model": "llama-3.3-70b"` を送信し、`sambanova/` プレフィックスは `litellm_params.model` の中でのみ使用してください。
  </Accordion>
</AccordionGroup>

## 参考情報

* [LiteLLM の SambaNova プロバイダードキュメント](https://docs.litellm.ai/docs/providers/sambanova)
* [LiteLLM プロキシのドキュメント](https://docs.litellm.ai/docs/simple_proxy)
* [SambaCloud モデル](/docs/ja/models/sambacloud-models): 最新のモデル ID
