{"openapi":"3.1.0","info":{"title":"Embeddings API (vllm-qwen3-embedding)","description":"OpenAI-compatible embeddings endpoint backed by `vllm-qwen3-embedding`\n(Qwen3-Embedding-4B on `pro6000-alpha`). Embeddings-only — does NOT expose\nchat completions; use the LLM Gateway for those.\n","version":"1.0.0","contact":{"name":"Haiven Server","url":"https://haiven.site"},"license":{"name":"MIT"}},"servers":[{"url":"http://vllm-qwen3-embedding:8000","description":"Internal Docker (primary)"}],"tags":[{"name":"Embeddings","description":"Text embedding generation"},{"name":"Models","description":"Model enumeration"},{"name":"Health","description":"Service health checks"}],"paths":{"/v1/embeddings":{"post":{"summary":"Create embeddings","description":"Generate vector embeddings for one or more text inputs.","operationId":"createEmbeddings","tags":["Embeddings"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingRequest"},"example":{"model":"qwen3-embedding-4b","input":"The quick brown fox jumps over the lazy dog"}}}},"responses":{"200":{"description":"Embeddings generated successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EmbeddingResponse"}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"404":{"description":"Model not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}},"500":{"description":"Internal server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}}}}}},"/v1/models":{"get":{"summary":"List available models","operationId":"listModels","tags":["Models"],"responses":{"200":{"description":"Model list","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ModelList"}}}}}}},"/health":{"get":{"summary":"Health check","operationId":"healthCheck","tags":["Health"],"responses":{"200":{"description":"Service is healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}},"503":{"description":"Service is not healthy","content":{"application/json":{"schema":{"$ref":"#/components/schemas/HealthResponse"}}}}}}}},"components":{"schemas":{"EmbeddingRequest":{"type":"object","required":["model","input"],"properties":{"model":{"type":"string","example":"qwen3-embedding-4b"},"input":{"oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}],"description":"Text to embed — string or array of strings"},"encoding_format":{"type":"string","enum":["float","base64"],"default":"float"},"dimensions":{"type":"integer","description":"Truncate embeddings to N dimensions (model-dependent)"}}},"EmbeddingObject":{"type":"object","properties":{"object":{"type":"string","enum":["embedding"]},"index":{"type":"integer"},"embedding":{"type":"array","items":{"type":"number","format":"float"}}}},"EmbeddingResponse":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"model":{"type":"string","example":"qwen3-embedding-4b"},"data":{"type":"array","items":{"$ref":"#/components/schemas/EmbeddingObject"}},"usage":{"$ref":"#/components/schemas/Usage"}}},"ModelList":{"type":"object","properties":{"object":{"type":"string","enum":["list"]},"data":{"type":"array","items":{"$ref":"#/components/schemas/Model"}}}},"Model":{"type":"object","properties":{"id":{"type":"string","example":"qwen3-embedding-4b"},"object":{"type":"string","enum":["model"]},"created":{"type":"integer"},"owned_by":{"type":"string","example":"haiven"}}},"Usage":{"type":"object","properties":{"prompt_tokens":{"type":"integer"},"total_tokens":{"type":"integer"}}},"HealthResponse":{"type":"object","properties":{"status":{"type":"string","enum":["healthy","degraded","unhealthy"]},"timestamp":{"type":"string","format":"date-time"}}},"ErrorResponse":{"type":"object","properties":{"error":{"type":"object","properties":{"message":{"type":"string"},"type":{"type":"string","example":"invalid_request_error"},"param":{"type":"string","nullable":true},"code":{"type":"string","nullable":true}}}}}}}}