테마 전환

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 | 방법 |
|---|---|
| OpenAI | reasoning_effort를 none·low·medium·high 중 하나 (또는 "reasoning": {"effort": ...}, "chat_template_kwargs": {"enable_thinking": false}) |
| Anthropic | thinking 블록 설정 |
웹 채팅 화면에도 선택지가 있고, 동봉 스크립트 chat.py에서는 /think low 명령을 씁니다.
JSON 출력과 파라미터
- JSON 모드:
response_format: {"type":"json_object"}또는{"type":"json_schema", ...}. 스키마는 최상위 루트가 객체여야 하고 로컬#참조만 허용하며 원격 참조는 거부한다. 생성 후 서버가 검증하는 방식(문법 제약 디코딩이 아님)이고, 실패 시 502structured_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는 영향없습니다. 프록시로 분리된 프론트엔드를 붙일 때는 이 규정을 먼저 확인하세요.
엔드포인트를 알았다면 실전 예제 편에서 저장·복원 등 동작 예제를 더 다룹니다.