Naia
목차
  1. 1동영상 매뉴얼
  2. 2Naia OS 라이브 USB
  3. 3설치
  4. 3.1Naia OS 설치 (ISO)
  5. 3.2리눅스 앱 설치
  6. 4시작하기
  7. 4.1Naia 모델 가격 정책
  8. 4.2Naia-0.9-omni-24g 실시간 멀티모달 모듈
  9. 4.3라이브 데모
  10. 4.4Naia 모델 다운로드
  11. 4.5Naia 모델 상세 이용 (개발)
  12. 4.6Naia 모델 온라인 이용안내 (예정)
  13. 5메인 화면
  14. 6채팅
  15. 7대화 기록
  16. 8작업 현황
  17. 9스킬 관리
  18. 10채널 연동
  19. 11에이전트
  20. 12시스템 진단
  21. 13워크스페이스
  22. 14브라우저
  23. 15패널 관리
  24. 16음성 대화
  25. 17설정
  26. 18도구 상세
  27. 19Naia 계정
  28. 20문제 해결
  29. 21오픈소스 활용 및 기여

4.6. Naia 모델 온라인 이용안내 (예정)

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.deltabase64 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.queued4503앞 사용자가 슬롯 사용 중 → 순차 대기(에러 아님). position(0-based, 표시 +1)·queue_len(총 대기 인원, 본인 포함)·reservation_token 동반. eta_s는 선택 — 로컬 큐에선 보내지 않으므로 클라가 순번×세션시간으로 추정(클라우드 경로면 eta_s·provider 동반). "대기 N명 · 내 순번 · 예상 T초" 표시 + 같은 instance로 자동 재연결(백오프 5→60초) → 슬롯 비면 session.created. (데모 = 로컬 GPU 1대 순차)
session.preparing4503(현재 비활성 — 클라우드 임시 중지) 클라우드 Pod cold-start 대기. 지금 음성 tier(naia-0.9-omni-24g)는 로컬 전용이라 이 이벤트는 오지 않음. 클라우드 활성 시 queued와 동일 필드(position·queue_len·reservation_token, + eta_s·provider)로 오며 처리도 동일(자동 재연결)
session.sold_out4503가용 슬롯 없음(로컬 슬롯 down 등). retry_after_s + tier_a_hint(로컬 모델 안내) 동반. 재시도 또는 로컬 모델(Naia OS) 사용
session.consent_required4409같은 계정에 이미 세션 존재. branches(replace/add) 중 선택
session.error4503좁은 경우 — 배정됐으나 백엔드 URL 미해결(no endpoint). 일반 내부 오류는 session.error가 아니라 type:"error" + close 4500으로 옵니다

WebSocket close 코드

코드의미
4001인증 실패 (api_key 누락/무효)
4002superseded — 같은 계정이 다른 기기/탭에서 접속(last-wins, 이 연결이 양보)
4003크레딧 부족
4409consent 필요
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 라이브 데모 에서 확인할 수 있습니다.