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

# SDK およびサンプルコード

> Hostlinku～Anthropic Messages、OpenAI、Chat Completions、およびOpenAI Responsesの3つのAPI方言に関するPythonおよびNode.jsのサンプル。

1つのAPIキーが3つのダイアレクトすべてで有効です。異なるのは**base URL**と**header auth**のみです：

| 方言 | ベースURL | ヘッダー |
| - | - | - |
| Anthropic Messages | `https://api.hostlinku.com`（`/v1`を除く） | `x-api-key: <API_KEY>` |
| OpenAI Chat Completions | `https://api.hostlinku.com/v1` | `Authorization: Bearer <API_KEY>` |
| OpenAI Responses | `https://api.hostlinku.com/v1` | `Authorization: Bearer <API_KEY>` |

モデルの名前を[カタログ](https://docs.hostlinku.com/ja/models.md)のslugに変更してください。以下の例では、Service Mode Performanceで利用可能なモデルを使用しています。

## Python

### Anthropic Messages

```bash theme={null}
pip install anthropic
```

```python theme={null}
import anthropic

client = anthropic.Anthropic(
    api_key="sk-your-api-key",
    base_url="https://api.hostlinku.com",
)

message = client.messages.create(
    model="claude-sonnet-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "Jelaskan API gateway dalam dua kalimat."}],
)
print(message.content[0].text)
print(message.usage.input_tokens, message.usage.output_tokens)
```

ストリーミング：

```python theme={null}
with client.messages.stream(
    model="claude-sonnet-5",
    max_tokens=256,
    messages=[{"role": "user", "content": "Tulis satu paragraf pendek."}],
) as stream:
    for text in stream.text_stream:
        print(text, end="", flush=True)
```

### OpenAI Chat Completions

```bash theme={null}
pip install openai
```

```python theme={null}
from openai import OpenAI

client = OpenAI(api_key="sk-your-api-key", base_url="https://api.hostlinku.com/v1")

response = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[
        {"role": "system", "content": "Kamu asisten yang ringkas."},
        {"role": "user", "content": "Halo dari SDK OpenAI!"},
    ],
)
print(response.choices[0].message.content)
```

ストリーミング：

```python theme={null}
stream = client.chat.completions.create(
    model="gpt-6-astra",
    messages=[{"role": "user", "content": "Tulis satu paragraf pendek."}],
    stream=True,
)
for chunk in stream:
    delta = chunk.choices[0].delta.content
    if delta:
        print(delta, end="", flush=True)
```

### OpenAI Responses

```python theme={null}
response = client.responses.create(
    model="gpt-6-astra",
    instructions="Jawab singkat dalam bahasa Indonesia.",
    input="Apa itu API gateway?",
    max_output_tokens=256,
)
print(response.output_text)
```

ストリーミング：

```python theme={null}
with client.responses.stream(
    model="gpt-6-astra",
    input="Tulis satu paragraf pendek.",
) as stream:
    for event in stream:
        if event.type == "response.output_text.delta":
            print(event.delta, end="", flush=True)
```

## Node.js / TypeScript

### Anthropic Messages

```bash theme={null}
npm install @anthropic-ai/sdk
```

```ts theme={null}
import Anthropic from "@anthropic-ai/sdk";

const client = new Anthropic({
  apiKey: "sk-your-api-key",
  baseURL: "https://api.hostlinku.com",
});

const message = await client.messages.create({
  model: "claude-sonnet-5",
  max_tokens: 256,
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(message.content[0].text);
```

ストリーミング：

```ts theme={null}
const stream = client.messages.stream({
  model: "claude-sonnet-5",
  max_tokens: 256,
  messages: [{ role: "user", content: "Tulis satu paragraf pendek." }],
});

stream.on("text", (text) => process.stdout.write(text));
await stream.finalMessage();
```

### OpenAI Chat Completions

```bash theme={null}
npm install openai
```

```ts theme={null}
import OpenAI from "openai";

const client = new OpenAI({
  apiKey: "sk-your-api-key",
  baseURL: "https://api.hostlinku.com/v1",
});

const response = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: [{ role: "user", content: "Halo!" }],
});
console.log(response.choices[0].message.content);
```

ストリーミング：

```ts theme={null}
const stream = await client.chat.completions.create({
  model: "gpt-6-astra",
  messages: [{ role: "user", content: "Tulis satu paragraf pendek." }],
  stream: true,
});

for await (const chunk of stream) {
  process.stdout.write(chunk.choices[0]?.delta?.content ?? "");
}
```

### OpenAI Responses

```ts theme={null}
const response = await client.responses.create({
  model: "gpt-6-astra",
  input: "Halo!",
  max_output_tokens: 256,
});
console.log(response.output_text);
```

ストリーミング：

```ts theme={null}
const stream = await client.responses.create({
  model: "gpt-6-astra",
  input: "Tulis satu paragraf pendek.",
  stream: true,
});

for await (const event of stream) {
  if (event.type === "response.output_text.delta") {
    process.stdout.write(event.delta);
  }
}
```

## 注記

他の言語

Java、Go、PHPでは同じパターンを採用しています：`base_url`をHostlinkuに置き換え、 その後、公式SDKのAnthropic（Messages）またはOpenAI（Chat/Responses）を使用します。Hostlinku専用のライブラリはありません。

クライアントごとの上限

**Codex CLIはOpenAIモデルのみに対応しています** (`gpt-*`) - ClaudeモデルおよびOpenAI以外のモデルは、ツールのタイプが異なるため、アップストリームで拒否されます。 **Claude Code**では非Claudeモデルを使用できますが、`unrecognized_model`の警告が表示され、200kトークンのコンテキストが想定されます。 詳細は、[Codex CLI](https://docs.hostlinku.com/ja/integrations/codex-cli.md) および [Claude Code](https://docs.hostlinku.com/ja/integrations/claude-code.md) のページをご覧ください。


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.