문서

TypeSafe 호환성

TypeSafe의 폐쇄형 Jev 모델이 ’System One’이라는 의사결정 모델 범주를 만들었습니다. Ollaya의 /v1/* API는 typesafe-sdk 0.7.1의 와이어 스키마와 오류 처리로 정의되는 대로 TypeSafe와 와이어 수준에서 동일하므로, TypeSafe용으로 작성한 코드가 자신의 머신에 있는 오픈 모델에서 그대로 실행됩니다.

SDK를 Ollaya로 향하게 하기

공식 TypeSafe Python SDK 0.7.1은 변경 없이 동작합니다. 다음 환경 변수를 설정하십시오:

export TYPESAFE_BASE_URL=http://localhost:11435
export TYPESAFE_API_KEY=local           # the SDK needs a non-empty key; any value works
export TYPESAFE_DEFAULT_MODEL=winnow:e4b   # otherwise the SDK sends its default, "jev-latest"
export NO_PROXY=localhost,127.0.0.1    # keep local requests off any system proxy
  • 기본 모델. winnow:e4b가 Jev에 가장 가깝고(타입 지정 의사결정에서 0.722, Jev는 0.738), RTX 4090에서 약 90 ms에 답합니다. NVIDIA GPU가 없으면 CPU에서 1초의 몇 분의 1 만에 답하는 laya를 사용하십시오.
  • API key. Ollaya는 어떤 key든 받아들입니다. 단, 서버가 OLLAYA_API_KEY를 설정한 경우 SDK의 key가 그것과 일치해야 합니다.
  • 요청 ID. 모든 응답에 x-typesafe-request-id가 붙으므로 response.request_id가 동작합니다.
  • 재시도. SDK는 10초 후 타임아웃하고 재시도합니다. 어떤 모델에 대한 첫 요청은 로드를 기다리고, 요청보다 오래 살아남은 로드는 계속되므로, 재시도할 때 모델은 이미 데워져 있습니다.
  • 시스템 프록시. 시스템 HTTP 프록시가 있는 Mac에서는 TypeSafe SDK가(httpx처럼) localhost로 가는 요청도 프록시를 통해 보내며 시스템의 예외 목록을 무시합니다. 그러면 상태가 프록시를 통과하고, Ollaya가 내려가 있는 동안 SDK는 연결 거부 대신 502 status code (no body)를 보고합니다. TYPESAFE_BASE_URL 옆에 NO_PROXY=localhost,127.0.0.1을 설정하십시오.
  • 웜업과 소요 시간. 첫 요청 전에 모델을 로드하려면 /api/decide에 {"model": "winnow:e4b", "keep_alive": -1}을 보내십시오(state 없음). /v1/* 응답은 TypeSafe와 마찬가지로 소요 시간을 담지 않습니다. /api/decide는 total_duration, load_duration, eval_duration을 보고합니다.

엔드포인트

엔드포인트 설명
POST /v1/systemone 의사결정을 내립니다. 요청: model, state(필수), questions. 응답: 정확히 model, answers, usage.
POST /v1/decisions /v1/systemone의 별칭
GET /v1/models 이 머신의 모델: name, description, release_date

요청과 응답

curl http://localhost:11435/v1/systemone \
  -H "Authorization: Bearer local" \
  -d '{
  "model": "laya",
  "state": "Can I get an invoice for last month?",
  "questions": {
    "intent": {
      "type": "choice",
      "instructions": "What does the customer want?",
      "criteria": {
        "invoice": "Needs an invoice or receipt",
        "refund": "Wants money back",
        "other": "Anything else"
      }
    }
  }
}'
{
  "model": "laya:en",
  "answers": {
    "intent": {
      "type": "choice",
      "choice": "invoice",
      "confidence": 0.9547,
      "probabilities": {"invoice": 0.9698, "refund": 0.0172, "other": 0.013}
    }
  },
  "usage": {"input_tokens": 43, "output_tokens": 0}
}

응답의 model은 실제로 답한 체크포인트입니다. laya는 router이고, 이 영어 요청은 laya:en으로 갔습니다. TypeSafe의 스키마는 이를 허용합니다(“may differ from the alias supplied in the request”). 값은 소수점 이하 4자리이며, probabilities는 criteria의 순서를 따릅니다.

curl http://localhost:11435/v1/models -H "Authorization: Bearer local"
{
  "models": [
    {
      "name": "laya:en",
      "description": "English decision model (ModernBERT-large): guardrails, email and ticket triage.",
      "release_date": "2026-09-23"
    },
    {
      "name": "laya:latest",
      "description": "Routes each request to laya:en or laya:multilingual by the text's script and language.",
      "release_date": "2026-09-23"
    },
    {
      "name": "laya:multilingual",
      "description": "Decision model for 100+ languages (mmBERT-base).",
      "release_date": "2026-09-23"
    }
  ]
}

/v1/models는 이 머신으로 받아온 모델을 router까지 포함해 나열합니다. registry는 나열하지 않습니다.

오류

오류는 TypeSafe의 상태 코드와 SDK가 올바르게 읽는 본문을 함께 담습니다. 문자열 error(SDK가 표시합니다), 기계가 읽을 수 있는 code, 그리고 422에서는 TypeSafe의 detail 검증 문제 목록입니다. 모든 코드는 오류를 참고하십시오.

{"error": "model \"jev-latest:latest\" not found, try pulling it first", "code": "MODEL_NOT_FOUND"}

다른 점

호환되는 것은 API이지 모델이 아닙니다:

  • 모델 이름은 Ollaya의 것입니다(laya, laya:en). 따라서 TYPESAFE_DEFAULT_MODEL을 설정하거나 model을 전달하십시오.
  • instructions 누락. 질문에 그것이 없으면 모델이 대신 질문 id를 읽습니다. 그러니 질문에는 설명적인 이름을 붙이십시오(is_urgent, tone).
  • 제한. 요청당 최대 256개 질문, 선택지는 2–255개, score 단계는 2–10개입니다. 각 모델에는 선택지 예산도 있습니다: laya:en은 약 125개, laya:multilingual은 250개입니다.
  • 긴 상태. TypeSafe는 최대 65,536개 토큰을 읽지만, 오픈 모델의 컨텍스트는 더 짧습니다(laya:en은 512개, laya:multilingual은 1,024개 토큰, 질문 포함). 상태가 들어가지 않으면 /v1/*는 일부만으로 답하는 대신 422 STATE_TRUNCATED를 반환합니다. 컨텍스트가 더 긴 모델을 쓰거나, 상태를 줄이거나, /api/decide를 호출하십시오. 이것은 잘라내고 state_truncated를 보고합니다.
  • /v1/*는 순수하게 유지됩니다. keep_alive, extras 같은 네이티브 필드는 거기서 무시됩니다. 라우팅, 소요 시간, 잘라내기는 /api/decide에서 보고됩니다.
  • 품질은 오픈 모델에서 나오므로 작업에 따라 Jev와 다릅니다:
    • laya:typed-decisions는 타입 지정 의사결정에서 0.766이고, Jev 1.13의 공표 값은 0.727입니다.
    • 기본 Laya 체크포인트는 타입 지정 의사결정의 제로샷에서 거의 우연 수준입니다(0.362).
    • 선택지가 많은 choice 질문(약 20개 초과)은 더 약합니다: Banking77에서 0.425, Jev는 0.870입니다.

프로덕션 트래픽을 전환하기 전에 자신의 데이터로 측정하십시오. Laya 페이지에 자세한 내용이 있습니다.

제휴 관계가 없습니다

Ollaya는 독립적인 오픈 소스 프로젝트입니다. TypeSafe와 제휴하지 않았고 TypeSafe의 보증도 받지 않았습니다.