Switch language

Chatbot

A streaming chatbot built with the Bitdeer AI chat completion API.

A minimal streaming chatbot that exercises authentication, streaming, and error handling.

Python implementation

from openai import OpenAI

client = OpenAI(
    base_url="https://api-inference.bitdeer.ai/v1",
    api_key="YOUR_API_KEY",
)

conversation = []

def chat(user_message: str):
    conversation.append({"role": "user", "content": user_message})

    stream = client.chat.completions.create(
        model="deepseek-ai/DeepSeek-V4-Pro",
        messages=conversation,
        max_tokens=1024,
        stream=True,
    )

    assistant_message = ""
    for chunk in stream:
        content = chunk.choices[0].delta.content
        if content:
            print(content, end="", flush=True)
            assistant_message += content

    print()
    conversation.append({"role": "assistant", "content": assistant_message})

# Interactive loop
while True:
    user_input = input("\nYou: ")
    if user_input.lower() in ("quit", "exit"):
        break
    print("Assistant: ", end="")
    chat(user_input)

JavaScript implementation

import OpenAI from 'openai';
import * as readline from 'readline';

const client = new OpenAI({
  apiKey: process.env.BITDEER_API_KEY,
  baseURL: 'https://api-inference.bitdeer.ai/v1',
});

const conversation: OpenAI.ChatCompletionMessageParam[] = [];

async function chat(userMessage: string) {
  conversation.push({ role: 'user', content: userMessage });

  const stream = await client.chat.completions.create({
    model: 'deepseek-ai/DeepSeek-V4-Pro',
    messages: conversation,
    max_tokens: 1024,
    stream: true,
  });

  let assistantMessage = '';
  for await (const chunk of stream) {
    const content = chunk.choices[0]?.delta?.content;
    if (content) {
      process.stdout.write(content);
      assistantMessage += content;
    }
  }
  console.log();
  conversation.push({ role: 'assistant', content: assistantMessage });
}

Key points

  • Streaming uses stream: true — tokens arrive incrementally via SSE.
  • Conversation history is maintained by appending messages to the array.
  • Error handling — wrap in try/catch and handle RateLimitError with exponential backoff.

Last updated on

On this page

Chatbot · Bitdeer AI