Naia 자체 모델을 클라우드에서 바로 사용하는 온라인 버전입니다. GPU가 없어도 브라우저·앱에서 즉시 음성 대화를 쓸 수 있게 하는 것이 목표입니다.
⏳ 정식 클라우드 서비스는 준비중 (예정). 지금은 4.4 오프라인 버전(내 GPU 직접 구동)과 4.3 무료 라이브 데모로 이용할 수 있습니다. 아래 동작 방식·개발자 API는 그 데모가 실제로 쓰는 게이트웨이 Realtime API와 동일합니다.
계획
- Tier B — 클라우드 GPU 대여 (예정): 시간당 $0.33(예정 가격, 사용한 분만큼 차감), 시간 예약제 검토 중. 현재 제공 아님.
- GPU 풀이 확보되는 대로 정식 온라인 서비스로 공개할 예정입니다. (클라우드 RunPod/Vast는 현재 준비·실험 부족으로 임시 사용 중지 검토 중 — 데모/오프라인은 로컬 GPU로 운영.)
- 그 전까지는 오프라인(소유형) $10/월 구독(모든 Naia 모델 · 개인 전용 · B2B 별도 협의) + 무료 데모가 메인 제공 경로입니다.
대상 모델
- naia-0.9-omni-24g (현재 제공 중 — 오프라인/데모)
- naia-0.9-coding-24g · naia-0.9-omni-48g (예정)
가격·라인업 전체는 4.1 모델 가격 정책을 참고하세요.
동작 방식 — 게이트웨이 Realtime API (개발자)
온라인(클라우드)·웹 데모·naia-os가 공통으로 쓰는 창구입니다. naia-0.9-omni-24g는 OpenAI Realtime API와 호환되는 WebSocket으로 제공됩니다. 클라이언트는 게이트웨이에 붙고, 게이트웨이가 백엔드(로컬 GPU 슬롯 또는 — 클라우드 활성 시 — 클라우드 Pod)를 배정합니다.
1. API 키 발급
대시보드 API 키 에서 발급합니다. (라이브 데모는 로그인 세션으로 단명 키를 자동 발급.)
2. WebSocket 연결 + 인증
엔드포인트 (prod):
wss://gateway.nextain.io/v1/realtime?model=naia-0.9-omni-24g&instance=<userId>:<random>
- 항상
wss://(TLS) 로 연결 — 인증 키와 음성이 그 위로 흐릅니다. instance= 세션을 식별하는 안정적 id. 재연결 시에도 같은 값을 쓰면 같은 세션(예약)에 다시 붙습니다. (네이티브 클라는X-Naia-OS-Instance헤더도 가능 — 브라우저는 헤더 불가라 query param.)
연결 직후 첫 메시지로 인증을 보냅니다(브라우저 WebSocket은 커스텀 헤더 불가):
{ "setup": { "apiKey": "<발급한 키>", "locale": "ko", "instanceId": "<userId>:<random>" } }
3. 세션 설정 — 페르소나 / 레퍼런스 음성
서버가 session.created 를 보내면 session.update 로 설정합니다.
{
"type": "session.update",
"model": "naia-0.9-omni-24g",
"session": {
"modalities": ["text", "audio"],
"input_audio_format": "pcm16",
"output_audio_format": "pcm16",
"instructions": "<페르소나(성격) 지시문>",
"turn_detection": { "type": "server_vad" },
"ref_audio_url": "<따라할 목소리 샘플 URL (선택)>"
}
}
instructions= 페르소나만. 출력 형식은 서버가 보장.ref_audio_url= 음색 레퍼런스 URL(파일 업로드 아님, 선택).
4. 주고받는 메시지
클라이언트 → 서버
| 용도 | 메시지 |
|---|---|
| 음성 입력 | {"type":"input_audio_buffer.append","audio":"<base64 PCM16 24kHz>"} (서버 VAD가 말 끝 자동 감지) |
| 텍스트 입력 | {"type":"conversation.item.create", ...} 후 {"type":"response.create"} |
| 끼어들기 | {"type":"response.cancel"} |
서버 → 클라이언트
| 메시지 | 의미 |
|---|---|
response.audio.delta | base64 PCM16 24kHz 음성 조각 |
response.audio_transcript.delta / response.text.delta | 답변 텍스트(스트리밍) |
conversation.item.input_audio_transcription.completed | 내 발화의 음성 인식 결과 |
response.done | 한 턴 종료 |
emotion.updated | 감정 태그 (Naia 확장) |
5. 배정 / 대기 / 매진 — 상태 계약 (클라이언트 필독)
배정 결과는 상태 이벤트(JSON) + WebSocket close 코드로 옵니다. close 코드만 보지 말고 직전 JSON 이벤트로 판단하세요.
| 서버 → 클라 이벤트 | close | 의미 / 클라이언트가 할 일 |
|---|---|---|
session.created | — | 배정 완료(활성). 이후 session.update |
session.queued | 4503 | 앞 사용자가 슬롯 사용 중 → 순차 대기(에러 아님). position(0-based, 표시 +1)·queue_len(총 대기 인원, 본인 포함)·reservation_token 동반. eta_s는 선택 — 로컬 큐에선 보내지 않으므로 클라가 순번×세션시간으로 추정(클라우드 경로면 eta_s·provider 동반). "대기 N명 · 내 순번 · 예상 T초" 표시 + 같은 instance로 자동 재연결(백오프 5→60초) → 슬롯 비면 session.created. (데모 = 로컬 GPU 1대 순차) |
session.preparing | 4503 | (현재 비활성 — 클라우드 임시 중지) 클라우드 Pod cold-start 대기. 지금 음성 tier(naia-0.9-omni-24g)는 로컬 전용이라 이 이벤트는 오지 않음. 클라우드 활성 시 queued와 동일 필드(position·queue_len·reservation_token, + eta_s·provider)로 오며 처리도 동일(자동 재연결) |
session.sold_out | 4503 | 가용 슬롯 없음(로컬 슬롯 down 등). retry_after_s + tier_a_hint(로컬 모델 안내) 동반. 재시도 또는 로컬 모델(Naia OS) 사용 |
session.consent_required | 4409 | 같은 계정에 이미 세션 존재. branches(replace/add) 중 선택 |
session.error | 4503 | 좁은 경우 — 배정됐으나 백엔드 URL 미해결(no endpoint). 일반 내부 오류는 session.error가 아니라 type:"error" + close 4500으로 옵니다 |
WebSocket close 코드
| 코드 | 의미 |
|---|---|
4001 | 인증 실패 (api_key 누락/무효) |
4002 | superseded — 같은 계정이 다른 기기/탭에서 접속(last-wins, 이 연결이 양보) |
4003 | 크레딧 부족 |
4409 | consent 필요 |
4500 | 서버 내부 오류 (type:"error" 메시지 동반) |
4503 | 대기(queued) / 준비중(preparing) / 매진(sold_out) / no-endpoint(session.error) / 일시 unavailable — 직전 JSON 이벤트로 구분 |
⚠️
4503을 "닫힘"이나 에러로 표시 금지.session.queued/preparing이면 "대기" UX + 같은instance로 자동 재연결로 처리합니다. (직전 이벤트 없이 4503 close만 봤다면 일시적 unavailable로 간주해 재연결 — 에러 처리 금지.)
재연결 규약: 같은 instance로 재연결하면 게이트웨이가 잡아둔 예약(reservation_token)에 다시
붙습니다. 백오프(5→최대 60초) 재시도. 준비/차례가 되면 재연결 시 session.created.
6. 잔액 조회
GET /v1/profile/balance → {"success": true, "data": {"balance": <크레딧>}}
실제 동작하는 전체 구현 예시는 4.3 라이브 데모 에서 확인할 수 있습니다.