# config-websockets/streaming/server (OpenAI WebSocket Server)

Simple Node.js server using Express and native WebSockets that exposes two real-time endpoints to interact with the OpenAI Responses API.

## Requirements

- Node.js >= 22.22.0
- An OpenAI API key

## Setup

1. Install dependencies:

```bash
npm install
```

2. Configure environment:

- set `OPENAI_API_KEY` in your environment or use .env file

```bash
cp env.example .env
# edit .env and set OPENAI_API_KEY
```

3. Start the server (defaults to port 3300):

```bash
npm start
```

You can also run in dev mode with automatic restarts:

```bash
npm run dev
```

## HTTP

- Health check: `GET /health` → `{ "status": "ok" }`

## Real-time (WebSocket)

Two WebSocket upgrade paths are provided:

- `/ws` — non-streaming. Emits a single `response` when the OpenAI request completes.
- `/ws-stream` — streaming. Emits incremental `delta` and `message` events, then `done`.

Both endpoints accept the same request payload (model is configured via env):

```json
{ "input": "Hello there!" }
```

Model is read from `CHATBOT_MODEL` env var and defaults to `gpt-4.1-mini`.

### Client examples

Non-streaming (`/ws`):

```js
const ws = new WebSocket('ws://localhost:3300/ws');

ws.onopen = () => {
  ws.send(JSON.stringify({ input: 'Hello there!' }));
};

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  // msg.type: 'ready' | 'response' | 'done' | 'error'
  console.log(msg);
};

ws.onerror = (err) => console.error('ws error', err);
```

Streaming (`/ws-stream`):

```js
const ws = new WebSocket('ws://localhost:3300/ws-stream');

ws.onopen = () => {
  ws.send(JSON.stringify({ input: 'Stream this please' }));
};

ws.onmessage = (event) => {
  const msg = JSON.parse(event.data);
  // msg.type: 'ready' | 'delta' | 'message' | 'done' | 'error'
  if (msg.type === 'delta') process.stdout.write(msg.message || '');
  else console.log(msg);
};

ws.onerror = (err) => console.error('ws error', err);
```

## Notes

- Configure port via `PORT` in `.env`.
- Configure model via `CHATBOT_MODEL` in `.env` (default: `gpt-4.1-mini`).
- Health route is `GET /health`. WebSocket upgrade paths are `/ws` and `/ws-stream`.
