GenAI 서버
브라우저, UI, 서비스 또는 원격 클라이언트가 HTTP를 통해 하나 이상의 GenAI 모델을 호출해야 하는 경우 GenAIServer를 사용합니다. 서버는 모델 등록, 요청 라우팅, 스트리밍 응답 및 취소를 담당합니다. 모델과 동일한 프로세스에서 실행되는 애플리케이션 로직의 경우 GenAI API를 직접 사용를 사용합니다.
서버 생성 및 시작
서버는 기본적으로 0.0.0.0:9998에 바인딩됩니다. 서버를 시작하기 전에 배포된 각 LLiMa 모델 디렉터리를 안정적인 서비스 이름으로 등록합니다.
#include <neat/genai.h>
int main() {
simaai::neat::genai::GenAIServer server;
server.add_model(
"/media/nvme/llima/models/Qwen3-4B-Instruct-2507-GPTQ-a16w4",
"llm");
server.add_model(
"/media/nvme/llima/models/Qwen3-VL-4B-Instruct-GPTQ-a16w4",
"vlm");
server.serve();
}
C++에서는 차단되는 전경 서버를 위해 serve()를 사용합니다. C++ 또는 Python 애플리케이션이 서버 수명을 관리할 때는 start() 및 stop()을 사용합니다. 기본 호스트 또는 포트가 적절하지 않을 때는 GenAIServerOptions를 구성합니다. stop()을 호출하면 등록된 모든 모델이 제거되므로, 동일한 서버 객체를 다시 시작하기 전에 모델을 다시 추가해야 합니다.
GenAIServer는 인증 또는 TLS 종료 기능을 제공하지 않으며, 모든 출처의 CORS 요청을 허용합니다. 신뢰할 수 있는 인터페이스에만 바인딩하거나 필요한 접근 제어 및 암호화를 제공하는 네트워크 계층 뒤에 배치합니다.
제공되는 모델 확인
생성 요청을 보내기 전에 등록된 모델 이름을 나열합니다.
curl http://<modalix-ip>:9998/v1/models
응답은 OpenAI 모델 목록 형식을 사용합니다.
{
"object": "list",
"data": [
{"id": "llm", "object": "model", "owned_by": "simaai"},
{"id": "vlm", "object": "model", "owned_by": "simaai"}
]
}
각 세대 및 오디오 요청은 해당 model 필드에서 이러한 제공된 이름 중 하나를 사용해야 합니다.
엔드포인트
| 메서드 | 경로 | 목적 |
|---|---|---|
GET | /v1/models | 등록된 제공 모델 이름 목록. |
POST | /v1/chat/completions | 텍스트, 이미지, 도구 및 스트리밍을 포함한 OpenAI 호환 채팅. |
POST | /v1/completions | OpenAI 호환 프롬프트 완성. |
POST | /v1/audio/transcriptions | 다중 부분 오디오 입력을 텍스트로 변환. |
POST | /v1/audio/translations | 다중 부분 음성을 영어로 번역. |
POST | /api/chat | Ollama 호환 채팅; 기본적으로 NDJSON을 스트리밍합니다. |
POST | /api/generate | Ollama 호환 프롬프트 생성; 기본적으로 NDJSON을 스트리밍합니다. |
POST | /stop | 하나의 모델 또는 모든 모델에 대한 활성 스트림을 취소합니다. |
POST | /set_lora | 동적 LoRA 어댑터를 활성화하거나 대체합니다. |
POST | /unset_lora | 동적으로 조정된 모델을 기본 가중치로 되돌립니다. |