Skip to content

Strata HTTP API를 상징하는 이미지

Strata 서버가 실행되면 http://127.0.0.1:8080(기본값)에서 HTTP API가 활성화됩니다. 업계 표준인 OpenAI와 Anthropic의 요청 형식을 그대로 지원하므로, 기존에 사용하시던 SDK나 라이브러리를 수정 없이 그대로 사용할 수 있습니다. 이 가이드는 개발자분들이 빠르게 API를 통합하실 수 있도록 핵심 엔드포인트를 중심으로 정리한 레퍼런스입니다.

주소와 API 키 ​

  • 기본 주소: http://127.0.0.1:8080. 포트와 바인딩은 launch의 --port/--access로 정합니다.
  • 키를 설정한 경우(권장) 모든 요청에 Authorization: Bearer <키>를 붙입니다. strata launch --show-key로 확인 가능.
  • 로컬 전용이면 키 없이도 되지만, LAN·터널로 여는 경우 키를 두세요(--api-key, --api-key-env, --new-key).

API 엔드포인트 한눈에 보기 ​

API엔드포인트
OpenAI Chat Completions(스트리밍·도구 지원)POST /v1/chat/completions
Anthropic Messages(스트리밍·도구 지원)POST /v1/messages
OpenAI Responses(스테이트리스)POST /v1/responses
모델 목록·헬스GET /v1/models, GET /models, GET /health
모델 속성GET /props
지금 동작 상태GET /status, GET /slots
대화 저장·복원POST /slots/0?action=save|restore
모니터 데이터GET /metrics(JSON)
Prometheus 형식GET /metrics + Accept: text/plain 또는 ?format=prometheus, GET /metrics/prometheus
MCP 서버 상태·도구GET /mcp
API 요청 모니터GET /api-monitor, GET /api/requests

간단한 요청 예제: curl과 Python ​

sh
curl http://127.0.0.1:8080/health
curl http://127.0.0.1:8080/v1/chat/completions -H "Content-Type: application/json" \
  -d '{"model": "strata", "messages": [{"role": "user", "content": "Write a haiku about GPUs."}], "max_tokens": 512}'
python
from openai import OpenAI
client = OpenAI(base_url="http://127.0.0.1:8080/v1", api_key="none")
r = client.chat.completions.create(model="strata", messages=[{"role": "user", "content": "Hello!"}])
print(r.choices[0].message.content)

모델 이름은 실제로 로드된 모델 1개만 허용됩니다. /v1/models가 현재 모델 ID를 알려 주지만, 문서 예제처럼 strata로 두는 경우가 많습니다. Anthropic 클라이언트는 base URL을 http://127.0.0.1:8080으로 두고 POST /v1/messages를 씁니다.

모델 메타데이터와 상태 ​

  • /v1/models, /models: 로드된 모델 하나만 컨텍스트 한도와 입력 모달리티와 함께 목록에 올립니다. 로드·언로드·재시작은 하지 않습니다.
  • /props: 채팅 템플릿, 컨텍스트 한도, 생성 기본값, 모델 경로, 엔진 버전. n_predict: -1은 출력 상한 없음.
  • /slots: llama.cpp 이름(n_ctx, n_prompt_tokens). total_slots는 --batch 슬롯 수.
  • chat_template_caps: 로드 시 작은 요청을 렌더링해 도구·시스템 롤 등 지원 여부를 확인한 결과(llama.cpp 필드명). 클라이언트용 힌트이지 모델이 반드시 따른다는 보증은 아닙니다. Zed의 llama.cpp 프로바이더가 이 객체를 읽습니다.
  • /status: 서버가 어떤 상태인지 요약합니다.

thinking 레벨 조절 ​

모델은 답하기 전에 사고(thinking)하며, OpenAI 스트림에서는 reasoning_content, Anthropic에서는 thinking 블록으로 흐릅니다. 요청별로 양을 고를 수 있습니다.

API방법
OpenAIreasoning_effort를 none·low·medium·high 중 하나 (또는 "reasoning": {"effort": ...}, "chat_template_kwargs": {"enable_thinking": false})
Anthropicthinking 블록 설정

웹 채팅 화면에도 선택지가 있고, 동봉 스크립트 chat.py에서는 /think low 명령을 씁니다.

JSON 출력과 파라미터 ​

  • JSON 모드: response_format: {"type":"json_object"} 또는 {"type":"json_schema", ...}. 스키마는 최상위 루트가 객체여야 하고 로컬 # 참조만 허용하며 원격 참조는 거부한다. 생성 후 서버가 검증하는 방식(문법 제약 디코딩이 아님)이고, 실패 시 502 structured_output_failed, 잘못된 스키마는 400. 도구·MCP와의 병용은 거부됩니다.
  • 생성 파라미터: stop/stop_sequences, temperature, top_p, top_k, min_p, seed, logit_bias가 요청별로 반영됩니다(배치에서도 슬롯별 유지).
  • logprobs: /v1/chat/completions에서 logprobs 옵션으로 choices[0].logprobs.content[]를 받을 수 있습니다.

메트릭과 Prometheus ​

GET /metrics는 JSON(모니터와 같은 데이터)이고, Accept: text/plain을 붙이면 vLLM 지표 이름으로 나옵니다 — vLLM:num_requests_running, vLLM:kv_cache_usage_perc, 토큰·요청 카운터, TTFT/간격 히스토그램 등. vLLM용으로 만든 대시보드가 그대로 읽습니다. Strata 고유의 값은 strata: 프리픽스(strata:live_tok_s, strata:gpu_util, strata:ram_used_bytes 등)로 노출됩니다. 값이 없으면 샘플 자체가 없습니다.

키가 설정된 서버에서 스크레이퍼는 bearer token을 보냅니다. docs/monitoring/에 기성 파일(prometheus.yml, servicemonitor.yaml, grafana-strata.json)이 있습니다.

CORS와 브라우저 접근 ​

브라우저에서 직접 부르려는 경우: 서버와 같은 출처의 페이지와 POST의 JSON 본문만 허용되고, 그 외 페이지와 Origin: null은 403입니다. Origin 헤더를 보내지 않는 curl·SDK는 영향없습니다. 프록시로 분리된 프론트엔드를 붙일 때는 이 규정을 먼저 확인하세요.

엔드포인트를 알았다면 실전 예제 편에서 저장·복원 등 동작 예제를 더 다룹니다.

오픈소스를 한국어로 읽고 배웁니다.