Skip to main content
Core.Today
Model APIsNot chat

Decision API

Models that answer typed questions with probabilities instead of chatting or writing. Use them for classification, routing, guardrails, scoring and re-ranking. They share the LLM API key and credits, but the request shape is not chat and differs per model.

Give this page to your AI — all model specs as LLM-friendly text
llms.txt ↗

Model details

J

판정 API (Decision) — TypeSafe Jev · OpenAI Decisions POST /llm/typesafe/v1/systemone

콘솔에서 실행 →

Jev는 TypeSafe의 System One 모델로, 대화하거나 텍스트를 생성하지 않습니다. 판정할 내용(state)과 타입이 정해진 질문 묶음(questions)을 한 번에 보내면 질문마다 확률이 붙은 구조화 답이 돌아옵니다 — 코드가 바로 비교·임계값 판단·분기할 수 있는 값이라 분류, 라우팅, 가드레일, 리랭킹, 점수화에 맞습니다. 요청 1회에 질문을 여러 개 넣어도 병렬로 평가되어 지연이 거의 늘지 않고, 입력 토큰에만 과금됩니다(출력 토큰 무료). OpenAI/Anthropic SDK나 콘솔 채팅은 쓸 수 없고 자체 JSON 스키마로 호출합니다.

질문 타입 3종

type묻는 것criteria답 (answers[id])
noul참인가? (예/아니오)선택 — {"true": "yes의 의미", "false": "no의 의미"}{"noul": 0.95} — yes일 확률 0~1
choice어느 선택지인가? (순서 없는 집합, 최대 255개)필수 — {"billing": "설명", "other": null}{"choice", "probabilities", "confidence"}
score어느 단계인가? (순서 있는 스펙트럼, 2~10단계)필수 — ["Calm", "Frustrated", "Very angry"] (낮은 단계부터){"score", "legend", "probabilities", "confidence"}

질문 id(예: is_urgent)는 코드용 키일 뿐 모델에 전달되지 않습니다 — instructions에 질문을 완전한 문장으로 쓰세요. state가 JSON 객체면 질문에서 `ticket.messages[0].text`처럼 백틱 경로로 특정 필드를 가리킬 수 있습니다.

요청 — 질문 3개를 한 번에

curl -X POST "https://api.core.today/llm/typesafe/v1/systemone" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer cdt_your_api_key" \
  -d '{
    "model": "jev-latest",
    "state": "Help! My payouts have been failing for 3 days.",
    "questions": {
      "is_urgent": {
        "type": "noul",
        "instructions": "Does this message convey urgency?"
      },
      "department": {
        "type": "choice",
        "instructions": "Which team should handle this?",
        "criteria": {
          "billing": "Payments, invoicing, refunds",
          "technical": "Bugs, outages, integrations",
          "sales": "Pricing, upgrades, new accounts"
        }
      },
      "frustration": {
        "type": "score",
        "instructions": "How frustrated is the customer?",
        "criteria": ["Calm", "Frustrated", "Very angry"]
      }
    }
  }'

응답

{
  "model": "jev-1.13.0",
  "answers": {
    "is_urgent": { "type": "noul", "noul": 0.95 },
    "department": {
      "type": "choice",
      "choice": "billing",
      "probabilities": { "billing": 0.84, "technical": 0.16, "sales": 0.0 },
      "confidence": 0.68
    },
    "frustration": {
      "type": "score",
      "score": 1.05,
      "legend": { "0": "Calm", "1": "Frustrated", "2": "Very angry" },
      "probabilities": { "0": 0.0, "1": 0.95, "2": 0.05 },
      "confidence": 0.92
    }
  },
  "usage": { "input_tokens": 340, "output_tokens": 51 }
}
  • noul: yes일 확률. 1에 가까우면 강한 yes, 0에 가까우면 강한 no, 0.5 근처는 "중간"이 아니라 불확실하다는 뜻입니다. 정도를 재려면 score를 쓰세요.
  • choice: choice는 최고 확률 선택지, probabilities는 합이 1인 분포. 답은 항상 내가 준 선택지 안에서만 나옵니다.
  • score: score는 확률 가중 위치(단계 사이 값 가능), 키는 단계 번호 문자열("0"…). 임계값 판정에는 좋지만 두 단계 사이를 보간해 정밀한 수치를 복원하진 마세요.
  • confidence(choice·score, 0~1): 분포가 얼마나 한쪽으로 몰렸는지를 요약한 값. 높으면 자동 처리, 낮으면 큰 LLM이나 사람에게 넘기는 confidence 게이트가 기본 패턴입니다. 질문마다 답은 서로 독립이고, 응답 model에는 실제로 답한 버전 id가 옵니다.

잘 쓰는 법

  • 질문 하나 = 1초짜리 판단 하나. "분석해서 최선의 조치를 정하라" 같은 추론 과제는 작은 질문 여러 개로 쪼개고 코드에서 조합합니다(가중치는 코드 상수로 두면 프롬프트를 고치지 않고 튜닝됩니다 — composite scoring).
  • 같은 state에 대한 질문은 전부 한 요청에. 병렬로 평가되어 지연이 거의 같고, 과금은 질문 토큰만 추가됩니다. 쓸지 안 쓸지 모르는 질문도 미리 물어 두세요 (speculative fan-out). 앞 답에 따라 state나 선택지가 달라질 때만 2차 요청을 합니다.
  • choice에는 목록 밖 입력을 받을 other 옵션을 넣고, 경계 사례는 criteria 설명에 적습니다. instructions와 criteria는 문자열뿐 아니라 JSON 객체/배열도 받습니다(질문 한 필드 + 참조 데이터 필드).
  • confidence 임계값을 맞췄다면 별칭 대신 jev-1.13.0으로 고정하세요. 게이트웨이는 jev-latest·jev-preview를 현재 빌드로 고정해 보내므로 새 빌드는 별도 행으로 추가됩니다.

한계와 주의 (jev-1.13)

약점대신 이렇게
쓴 대로만 읽음 (의도 추론 약함)조건을 문장으로 정확히 쓰고 경계 사례를 criteria에
세기·산수·수치 비교·날짜 계산코드에서 계산. 모델에는 추출·의미 판단만
다단계 간접 추론·이중 부정질문을 직접적으로, 참조 필드를 백틱 경로로 지정
무관한 내용이 많은 큰 state코드에서 먼저 필터링. 필요한 필드만 전송
선택지 순서에 따른 흔들림순서를 바꿔 보고 일관성 확인
텍스트 생성생성형 모델(채팅 API)과 짝지어 사용
언어영어가 가장 정확. 한국어 등 CJK도 처리하지만 더 약함 — 자체 데이터로 검증
한도요청당 64K 토큰, state + 가장 긴 질문 32K. 텍스트 입력만
오류422 검증 실패(필드 누락·형식), 429/529는 지수 백오프로 재시도

OpenAI Decisions API POST /llm/openai/v1/decisions

콘솔에서 실행 →

OpenAI 도 같은 종류의 판정 API 를 냈습니다(2026-10-22 GA, 모델 gpt-6-luna 전용). 개념은 Jev 와 같고 스키마만 다릅니다: 판정 대상은 input(텍스트, 또는 input_text·input_image 파트를 가진 user 메시지 — 이미지 입력 가능, base64 data URL 만), 질문은 questions[] 배열이고 각 질문에 name 을 붙입니다.같은 gpt-6-luna 라도 채팅과 가격이 다릅니다 — 입력 $0.10/M, 캐시 읽기 $0.01/M·쓰기 $0.125/M, 출력 무과금. 그래서 게이트웨이는 이 경로를 별도 행 gpt-6-luna-decisions로 정산합니다 (model 에 어느 id 를 써도 됨; OpenAI SDK 는 base_url 을 https://api.core.today/llm/openai/v1로 바꾸고 client.decisions.create를 그대로 호출).

TypeSafe Jev (systemone)OpenAI Decisions
판정 대상state (string | object | array)input (string | user message[] with input_text / input_image)
질문 묶음questions: {id: {...}} 맵questions: [{name, ...}] 배열
예/아니오type: "noul" → {noul: 0~1}type: "predicate" → {probability: 0~1}
선택criteria: {option: 설명|null} → {choice, probabilities{}, confidence}choices: [{value, description}] → {choice, probabilities[], confidence}
단계criteria: ["L0", "L1", …] → {score, legend{}, probabilities{}, confidence}levels: [{label, description}] → {score, probabilities[{value,label,probability}], confidence}
거부—type: "refusal" (다른 답은 정상)
usageinput_tokens / output_tokensinput_tokens / input_tokens_details / output_tokens / …
과금입력 $0.042/M, 출력 무료입력 $0.10/M, 캐시 읽기 $0.01/M·쓰기 $0.125/M, 출력 무료 (>272K 입력 2x)
curl -X POST "https://api.core.today/llm/openai/v1/decisions" \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer cdt_your_api_key" \
  -d '{
    "model": "gpt-6-luna-decisions",
    "input": "I was charged twice for my order.",
    "questions": [
      {"type": "predicate", "name": "is_urgent", "instructions": "Does this convey urgency?"},
      {"type": "choice", "name": "department", "instructions": "Which department should handle this?",
       "choices": [{"value": "billing", "description": "Payments, invoices, refunds"},
                   {"value": "technical", "description": "Problems using the product"},
                   {"value": "other", "description": "Anything else"}]},
      {"type": "score", "name": "severity", "instructions": "How severe is this issue?",
       "levels": [{"label": "Cosmetic"}, {"label": "Workaround available"}, {"label": "Fully blocked"}]}
    ]
  }'
{
  "model": "gpt-6-luna",
  "answers": [
    {"type": "predicate", "name": "is_urgent", "probability": 0.92},
    {"type": "choice", "name": "department", "choice": "billing",
     "probabilities": [{"value": "billing", "probability": 0.95}, {"value": "technical", "probability": 0.02}, {"value": "other", "probability": 0.03}],
     "confidence": 0.93},
    {"type": "score", "name": "severity", "score": 1.1,
     "probabilities": [{"value": 0, "label": "Cosmetic", "probability": 0.1}, {"value": 1, "label": "Workaround available", "probability": 0.7}, {"value": 2, "label": "Fully blocked", "probability": 0.2}],
     "confidence": 0.55}
  ],
  "usage": {"input_tokens": 142, "input_tokens_details": {"cached_tokens": 0, "cache_write_tokens": 0}, "output_tokens": 31, "total_tokens": 173}
}

게이트웨이 제약: stream: true·GET 은 400, 채팅 경로(/v1/chat/completions등)에 gpt-6-luna-decisions 를 쓰면 400 decisions_model_path. 모델 상세: GPT-6 Luna Decisions. 원문: OpenAI Decisions guide.

모델입력 (크레딧/1M 토큰)출력 (크레딧/1M 토큰)캐시 읽기캐시 쓰기
참고: Output 0은 오류가 아닙니다 — 업스트림이 출력 토큰을 과금하지 않습니다. 크레딧 예약은 요청 본문 크기로 잡고 정산은 응답 usage.input_tokens× 단가로 이뤄집니다. 모델 상세·파라미터: Jev 1.13. 원문 가이드: Primitives, Confidence, Patterns, Cookbooks, API reference.