{ "openapi": "3.1.0", "info": { "title": "Long Video Summarization API", "description": "Accelerated long video summarization and insight extraction service.", "contact": { "name": "NVIDIA", "url": "https://nvidia.com/" }, "version": "v1" }, "servers": [ { "url": "/", "description": "LVS microservice local endpoint.", "x-internal": false } ], "paths": { "/metrics": { "get": { "tags": [ "Metrics" ], "summary": "Get LVS metrics", "description": "Get LVS metrics in prometheus format.", "operationId": "metrics_metrics_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": {} } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/live": { "get": { "tags": [ "Health Check" ], "summary": "Get LVS liveness status", "description": "Get LVS liveness status (v1 endpoint).", "operationId": "v1_live_probe_v1_live_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": {} } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/ready": { "get": { "tags": [ "Health Check" ], "summary": "Get LVS readiness status", "description": "Get LVS readiness status (v1 endpoint). Returns 503 when a required dependency (e.g. RTVI VLM) is unavailable.", "operationId": "v1_ready_probe_v1_ready_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": {} } } }, "503": { "description": "Service not ready. A required dependency is unavailable.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/startup": { "get": { "tags": [ "Health Check" ], "summary": "Get LVS startup status", "description": "Get LVS startup status (v1 endpoint).", "operationId": "v1_startup_probe_v1_startup_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": {} } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/healthz": { "get": { "tags": [ "Health Check" ], "summary": "Get VIA service health status", "description": "Get VIA service health status with version information.", "operationId": "v1_healthz_v1_healthz_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": { "type": "object", "properties": { "status": { "type": "string", "example": "ok" }, "version": { "type": "string", "example": "3.2.0-rc1" } }, "required": [ "status", "version" ] } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/metadata": { "get": { "tags": [ "Health Check" ], "summary": "Get LVS service metadata", "description": "Get LVS service metadata information.", "operationId": "v1_metadata_v1_metadata_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": {} } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/models": { "get": { "tags": [ "Models" ], "summary": "Lists the currently available models, and provides basic information about each one such as the owner and availability", "description": "Lists the currently available models, and provides basic information about each one such as the owner and availability.", "operationId": "list_models_models_get", "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ListModelsResponse" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/summarize": { "post": { "tags": [ "Summarization" ], "summary": "Summarize a video file", "description": "Run video file summarization. For stream summarization use POST /v1/generate_captions and POST /v1/stream_summarize instead.", "operationId": "summarize_v1_summarize_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SummarizationQuery" } } }, "required": true }, "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionResponse" } } } }, "400": { "description": "Bad Request. The server could not understand the request due to invalid syntax.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "503": { "description": "Server is busy processing another file. Client may try again in some time.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/summarize": { "post": { "tags": [ "Summarization" ], "summary": "Summarize a video file", "description": "Run video file summarization. For stream summarization use POST /v1/generate_captions and POST /v1/stream_summarize instead.", "operationId": "summarize_summarize_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SummarizationQuery" } } }, "required": true }, "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionResponse" } } } }, "400": { "description": "Bad Request. The server could not understand the request due to invalid syntax.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "503": { "description": "Server is busy processing another file. Client may try again in some time.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/generate_captions": { "post": { "tags": [ "Stream" ], "summary": "Start stream captioning", "description": "Fire-and-forget: kicks off VLM captioning on RTVI for a stream that was previously added via RTVI stream/add. Returns immediately once RTVI acknowledges the request.", "operationId": "generate_captions_v1_generate_captions_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateCaptionsRequest" } } }, "required": true }, "responses": { "200": { "description": "Captioning started.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GenerateCaptionsResponse" } } } }, "400": { "description": "Bad Request. The server could not understand the request due to invalid syntax.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/v1/stream_summarize": { "post": { "tags": [ "Stream" ], "summary": "Summarize a stream", "description": "Aggregate existing captions for a stream from the database via CA-RAG and return a structured summary. The stream must have been previously started with /v1/generate_captions.", "operationId": "stream_summarize_v1_stream_summarize_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StreamSummarizeRequest" } } }, "required": true }, "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CompletionResponse" } } } }, "400": { "description": "Bad Request. The server could not understand the request due to invalid syntax.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "503": { "description": "Server is busy. Client may try again later.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } }, "/recommended_config": { "post": { "tags": [ "Recommended Config" ], "summary": "Recommend config for a video", "description": "Recommend config for a video.", "operationId": "recommended_config_recommended_config_post", "requestBody": { "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RecommendedConfig" } } }, "required": true }, "responses": { "200": { "description": "Successful Response.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/RecommendedConfigResponse" } } } }, "400": { "description": "Bad Request. The server could not understand the request due to invalid syntax.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "401": { "description": "Unauthorized request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "422": { "description": "Failed to process request.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "500": { "description": "Internal Server Error.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } }, "429": { "description": "Rate limiting exceeded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/LvsError" } } } } } } } }, "components": { "schemas": { "ChatCompletionMessageAlertTool": { "properties": { "name": { "type": "string", "maxLength": 256, "pattern": "^[A-Za-z0-9_.\\-\"\\' ,]*$", "title": "Name", "description": "Name for the alert that was triggered." }, "ntpTimestamp": { "anyOf": [ { "type": "string", "maxLength": 24, "minLength": 24, "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{3})?Z$" }, { "type": "null" } ], "title": "Ntptimestamp", "description": "NTP timestamp of when the event occurred (for live-streams).", "examples": [ "2024-05-30T01:41:25.000Z" ] }, "offset": { "type": "integer", "maximum": 4000000.0, "minimum": 0.0, "format": "int64", "title": "Offset", "description": "Offset in seconds in the video file when the event occurred (for files).", "examples": [ 20 ] }, "detectedEvents": { "items": { "type": "string", "maxLength": 1024, "minLength": 1, "pattern": "^[A-Za-z0-9_.\\-\"\\' ,]*$" }, "type": "array", "maxItems": 100, "title": "Detectedevents", "description": "List of events detected." }, "details": { "type": "string", "maxLength": 10000, "pattern": "^(.|\\n)*$", "title": "Details", "description": "Details of the alert." } }, "additionalProperties": false, "type": "object", "required": [ "name", "detectedEvents", "details" ], "title": "ChatCompletionMessageAlertTool", "description": "Alert trigerred by VIA." }, "ChatCompletionMessageToolCall": { "properties": { "type": { "$ref": "#/components/schemas/ChatCompletionToolType" }, "alert": { "$ref": "#/components/schemas/ChatCompletionMessageAlertTool" } }, "additionalProperties": false, "type": "object", "required": [ "type", "alert" ], "title": "ChatCompletionMessageToolCall", "description": "Tool calls generated by VIA." }, "ChatCompletionResponseMessage": { "properties": { "content": { "type": "string", "maxLength": 1000000, "pattern": "^(.|\\n)*$", "title": "Content", "description": "The contents of the message. For VLM captions API, this field contains a combined response with timestamps for each chunk.", "examples": [ "Some summary of the video", "[00:00 - 01:00] A worker is walking down the aisle.\n\n[01:00 - 02:00] A man is driving a forklift in the warehouse." ], "nullable": true }, "tool_calls": { "items": { "$ref": "#/components/schemas/ChatCompletionMessageToolCall" }, "type": "array", "maxItems": 100, "title": "Tool Calls", "default": [] }, "role": { "type": "string", "const": "assistant", "title": "Role", "description": "The role of the author of this message." } }, "additionalProperties": false, "type": "object", "required": [ "content", "role" ], "title": "ChatCompletionResponseMessage", "description": "A chat completion message generated by the model." }, "ChatCompletionToolType": { "type": "string", "enum": [ "alert" ], "title": "ChatCompletionToolType", "description": "Types of tools supported by VIA." }, "CompletionFinishReason": { "type": "string", "enum": [ "stop", "length", "content_filter", "tool_calls" ], "title": "CompletionFinishReason", "description": "The reason the model stopped generating tokens." }, "CompletionObject": { "type": "string", "enum": [ "chat.completion", "summarization.completion", "summarization.progressing", "vlm_captions.completion", "vlm_captions.progressing" ], "title": "CompletionObject", "description": "Completion object type." }, "CompletionResponse": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id", "description": "Unique ID for the query", "maxLength": 36, "minLength": 36 }, "video_id": { "type": "string", "format": "uuid", "title": "Video Id", "description": "Unique ID for the video", "maxLength": 36, "minLength": 36 }, "choices": { "items": { "$ref": "#/components/schemas/CompletionResponseChoice" }, "type": "array", "maxItems": 10, "title": "Choices", "description": "A list of chat completion choices. Can be more than one if `n` is greater than 1." }, "created": { "type": "integer", "maximum": 4000000000.0, "minimum": 0.0, "format": "int64", "title": "Created", "description": "The Unix timestamp (in seconds) of when the chat completion/summary request was created.", "examples": [ 1717405636 ] }, "model": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$", "title": "Model", "description": "The model used for the chat completion/summarization.", "examples": [ "cosmos-reason1" ] }, "media_info": { "anyOf": [ { "$ref": "#/components/schemas/MediaInfoTimeStamp" }, { "$ref": "#/components/schemas/MediaInfoOffset" } ], "title": "Media Info", "description": "Part of the file / live-stream for which this response is applicable." }, "object": { "$ref": "#/components/schemas/CompletionObject", "description": "The object type, which can be `chat.completion` or `summarization.completion` or `summarization.progressing`.", "examples": [ "summarization.completion" ] }, "usage": { "anyOf": [ { "$ref": "#/components/schemas/CompletionUsage" }, { "type": "null" } ] } }, "additionalProperties": false, "type": "object", "required": [ "id", "video_id", "choices", "created", "model", "media_info", "object" ], "title": "CompletionResponse", "description": "Represents a summarization/chat completion response." }, "CompletionResponseChoice": { "properties": { "finish_reason": { "$ref": "#/components/schemas/CompletionFinishReason", "description": "The reason the model stopped generating tokens. This will be `stop` if the model hit a natural stop point or a provided stop sequence,\n`length` if the maximum number of tokens specified in the request was reached,\n`content_filter` if content was omitted due to a flag from our content filters.", "examples": [ "stop" ] }, "index": { "type": "integer", "maximum": 4000000000.0, "minimum": 0.0, "format": "int64", "title": "Index", "description": "The index of the choice in the list of choices.", "examples": [ 1 ] }, "message": { "$ref": "#/components/schemas/ChatCompletionResponseMessage" } }, "additionalProperties": false, "type": "object", "required": [ "finish_reason", "index", "message" ], "title": "CompletionResponseChoice", "description": "Completion Response Choice." }, "CompletionUsage": { "properties": { "query_processing_time": { "type": "integer", "maximum": 1000000.0, "minimum": 0.0, "format": "int32", "title": "Query Processing Time", "description": "Summarization Query Processing Time in seconds.", "examples": [ 78 ] }, "total_chunks_processed": { "type": "integer", "maximum": 1000000.0, "minimum": 0.0, "format": "int32", "title": "Total Chunks Processed", "description": "Total Number of chunks processed.", "examples": [ 10 ] }, "summary_tokens": { "type": "integer", "maximum": 1000000.0, "minimum": 0.0, "format": "int32", "title": "Summary Tokens", "description": "Total Number of tokens used for summary.", "default": 0, "examples": [ 100 ] }, "aggregation_tokens": { "type": "integer", "maximum": 1000000.0, "minimum": 0.0, "format": "int32", "title": "Aggregation Tokens", "description": "Total Number of tokens used for aggregation.", "default": 0, "examples": [ 100 ] }, "summary_requests": { "type": "integer", "maximum": 1000000.0, "minimum": 0.0, "format": "int32", "title": "Summary Requests", "description": "Total Number of requests for summary.", "default": 0, "examples": [ 10 ] }, "summary_latency": { "type": "number", "maximum": 1000000.0, "minimum": 0.0, "format": "float32", "title": "Summary Latency", "description": "Total latency for summary.", "default": 0.0, "examples": [ 1.0 ] }, "aggregation_latency": { "type": "number", "maximum": 1000000.0, "minimum": 0.0, "format": "float32", "title": "Aggregation Latency", "description": "Total latency for aggregation.", "default": 0.0, "examples": [ 1.0 ] } }, "additionalProperties": false, "type": "object", "required": [ "query_processing_time", "total_chunks_processed" ], "title": "CompletionUsage", "description": "An optional field that will only be present when you set\n`stream_options: {\"include_usage\": true}` in your request.\n\nWhen present, it contains a null value except for the last chunk which contains\nthe token usage statistics for the entire request." }, "ListModelsResponse": { "properties": { "object": { "type": "string", "const": "list", "title": "Object", "description": "Type of response object" }, "data": { "items": { "$ref": "#/components/schemas/ModelInfo" }, "type": "array", "maxItems": 5, "title": "Data" } }, "additionalProperties": false, "type": "object", "required": [ "object", "data" ], "title": "ListModelsResponse", "description": "Lists and describes the various models available." }, "LvsError": { "properties": { "code": { "type": "string", "maxLength": 128, "pattern": "^[A-Za-z]*$", "title": "Code", "description": "Error code", "examples": [ "ErrorCode" ] }, "message": { "type": "string", "maxLength": 1024, "pattern": "^[A-Za-z\\-. ,_\"\\']*$", "title": "Message", "description": "Detailed error message", "examples": [ "Detailed error message" ] } }, "additionalProperties": false, "type": "object", "required": [ "code", "message" ], "title": "LvsError", "description": "LVS Error Information." }, "MediaInfoOffset": { "properties": { "type": { "type": "string", "const": "offset", "title": "Type", "description": "Information about a segment of media with start and end offsets." }, "start_offset": { "type": "integer", "maximum": 4000000000.0, "minimum": 0.0, "format": "int64", "title": "Start Offset", "description": "Segment start offset in seconds from the beginning of the media.", "examples": [ 0 ] }, "end_offset": { "type": "integer", "maximum": 4000000000.0, "minimum": 0.0, "format": "int64", "title": "End Offset", "description": "Segment end offset in seconds from the beginning of the media.", "examples": [ 4000000000 ] } }, "additionalProperties": false, "type": "object", "required": [ "type" ], "title": "MediaInfoOffset", "description": "Media information using offset for files." }, "MediaInfoTimeStamp": { "properties": { "type": { "type": "string", "const": "timestamp", "title": "Type", "description": "Information about a segment of live-stream with start and end timestamp." }, "start_timestamp": { "type": "string", "maxLength": 24, "minLength": 24, "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{3})?Z$", "title": "Start Timestamp", "description": "Timestamp in the video to start processing from", "examples": [ "2024-05-30T01:41:25.000Z" ] }, "end_timestamp": { "type": "string", "maxLength": 24, "minLength": 24, "pattern": "^(\\d{4})-(\\d{2})-(\\d{2})T(\\d{2}):(\\d{2}):(\\d{2})(\\.\\d{3})?Z$", "title": "End Timestamp", "description": "Timestamp in the video to stop processing at", "examples": [ "2024-05-30T02:14:51.000Z" ] } }, "additionalProperties": false, "type": "object", "required": [ "type" ], "title": "MediaInfoTimeStamp", "description": "Media information using offset for live-streams." }, "ModelInfo": { "properties": { "id": { "type": "string", "maxLength": 2560, "pattern": "^(.|\\n)*$", "title": "Id", "description": "The model identifier, which can be referenced in the API endpoints." }, "created": { "type": "integer", "maximum": 4000000000.0, "minimum": 0.0, "format": "int64", "title": "Created", "description": "The Unix timestamp (in seconds) when the model was created.", "examples": [ 1686935002 ] }, "object": { "type": "string", "const": "model", "title": "Object", "description": "Type of object" }, "owned_by": { "type": "string", "maxLength": 10000, "pattern": "^[A-Za-z0-9_.\\-\"\\' ,]*$", "title": "Owned By", "description": "The organization that owns the model.", "examples": [ "NVIDIA" ] }, "api_type": { "type": "string", "maxLength": 32, "pattern": "^[A-Za-z]*$", "title": "Api Type", "description": "API used to access model.", "examples": [ "internal" ] } }, "additionalProperties": false, "type": "object", "required": [ "id", "created", "object", "owned_by", "api_type" ], "title": "ModelInfo", "description": "Describes an OpenAI model offering that can be used with the API." }, "RecommendedConfig": { "properties": { "video_length": { "type": "integer", "maximum": 864000000.0, "minimum": 1.0, "format": "int32", "title": "Video Length", "description": "The video length in seconds.", "examples": [ 5, 10, 60, 300 ] }, "target_response_time": { "type": "integer", "maximum": 86400.0, "minimum": 1.0, "format": "int32", "title": "Target Response Time", "description": "The target response time of LVS in seconds.", "examples": [ 5, 10, 60, 300 ] }, "usecase_event_duration": { "type": "integer", "maximum": 86400.0, "minimum": 1.0, "format": "int32", "title": "Usecase Event Duration", "description": "The duration of the target event user wants to detect; example: it will take a box-falling event 3 seconds to happen.", "examples": [ 5, 10, 60, 300 ] } }, "additionalProperties": false, "type": "object", "title": "RecommendedConfig", "description": "Recommended VIA Config." }, "RecommendedConfigResponse": { "properties": { "chunk_size": { "type": "integer", "maximum": 86400.0, "minimum": 0.0, "format": "int32", "title": "Chunk Size", "description": "The recommended chunk size in seconds and no chunking is 0", "examples": [ 5, 10, 60, 300 ] }, "text": { "type": "string", "maxLength": 5000, "pattern": "^[A-Za-z0-9_.\\-\"\\' ,]*$", "title": "Text", "description": "Recommendation text", "examples": [ "Recommendation text" ] } }, "additionalProperties": false, "type": "object", "required": [ "text" ], "title": "RecommendedConfigResponse", "description": "Recommended VIA Config Response." }, "SummarizationQuery": { "properties": { "min_tokens": { "type": "integer", "maximum": 1000000.0, "minimum": 1.0, "format": "int32", "title": "Min Tokens", "description": "Minimum number of tokens to generate before the model is allowed to stop. Used with ignore_eos for fixed-length generation.", "examples": [ 100 ] }, "ignore_eos": { "type": "boolean", "title": "Ignore Eos", "description": "If true, ignore end-of-sequence token and continue generating until max_tokens. Useful for benchmarking with fixed output length.", "examples": [ true, false ] }, "id": { "anyOf": [ { "type": "string", "format": "uuid", "maxLength": 36, "minLength": 36 }, { "items": { "type": "string", "format": "uuid", "maxLength": 36, "minLength": 36 }, "type": "array", "maxItems": 50 }, { "type": "null" } ], "title": "Id", "description": "Unique ID or list of IDs of the file(s)/live-stream(s) to summarize", "examples": [ "123e4567-e89b-12d3-a456-426614174000", [ "123e4567-e89b-12d3-a456-426614174000", "987fcdeb-51a2-43d1-b567-537725285111" ] ] }, "url": { "anyOf": [ { "type": "string", "pattern": "(^s3://(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?(?:\\.[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?)*)/(?:[^?\\s]+)$)|(^https?://\n (?:\n (?:[a-z0-9.-]+)\n \\.s3[.-](?:[a-z0-9-]+)\\.amazonaws\\.com/\n (?:.+)\n |\n s3[.-](?:[a-z0-9-]+)\\.amazonaws\\.com/\n (?:[a-z0-9.-]+)/(?:.+)\n )\n $\n )|(^https?://[A-Za-z0-9_.\\-/:%?#&=+~,]+$)" }, { "type": "null" } ], "title": "Url", "description": "URL of the video to summarize", "examples": [ "https://www.example.com/video.mp4", "s3://bucket/video.mp4" ] }, "system_prompt": { "type": "string", "maxLength": 5000, "pattern": "^(.|\\n)*$", "title": "System Prompt", "description": "System prompt for the VLM. To enable reasoning with Cosmos Reason1, add and tags to the system prompt.", "default": "", "examples": [ "You are a helpful assistant. Answer the user's question." ] }, "prompt": { "type": "string", "maxLength": 512000, "pattern": "^[\\s\\S]*$", "title": "Prompt", "description": "Prompt for summary generation", "default": "", "examples": [ "Write a concise and clear dense caption for the provided warehouse video" ] }, "model": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$", "title": "Model", "description": "Model to use for this query.", "examples": [ "cosmos-reason1" ] }, "max_tokens": { "type": "integer", "maximum": 1000000.0, "minimum": 1.0, "format": "int32", "title": "Max Tokens", "description": "The maximum number of tokens to generate in any given call.", "examples": [ 512 ] }, "temperature": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Temperature", "description": "The sampling temperature to use for text generation. The higher the temperature value is, the less deterministic the output text will be.", "examples": [ 0.2 ] }, "top_p": { "type": "number", "maximum": 1.0, "minimum": 0.0, "title": "Top P", "description": "The top-p sampling mass used for text generation. The top-p value determines the probability mass that is sampled at sampling time.", "examples": [ 1 ] }, "top_k": { "type": "number", "maximum": 1000.0, "minimum": 1.0, "title": "Top K", "description": "The number of highest probability vocabulary tokens to keep for top-k-filtering", "examples": [ 100 ] }, "seed": { "type": "integer", "maximum": 4294967295.0, "minimum": 1.0, "format": "int64", "title": "Seed", "description": "Seed value", "examples": [ 10 ] }, "chunk_duration": { "type": "integer", "maximum": 3600.0, "minimum": 0.0, "format": "int32", "title": "Chunk Duration", "description": "Chunk videos into `chunkDuration` seconds. Set `0` for no chunking", "default": 0, "examples": [ 60 ] }, "chunk_overlap_duration": { "type": "integer", "maximum": 3600.0, "minimum": 0.0, "format": "int32", "title": "Chunk Overlap Duration", "description": "Chunk Overlap Duration Time in Seconds. Set `0` for no overlap", "default": 0, "examples": [ 10 ] }, "summary_duration": { "type": "integer", "maximum": 3600.0, "minimum": -1.0, "format": "int32", "title": "Summary Duration", "description": "Summarize every `summaryDuration` seconds of the video. Applicable to live streams only.", "default": 0, "examples": [ 60 ] }, "media_info": { "anyOf": [ { "$ref": "#/components/schemas/MediaInfoOffset" }, { "$ref": "#/components/schemas/MediaInfoTimeStamp" } ], "title": "Media Info", "description": "Provide Start and End times offsets for processing part of a video file. Not applicable for live-streaming." }, "num_frames_per_chunk": { "type": "integer", "maximum": 120.0, "minimum": 0.0, "format": "int32", "title": "Num Frames Per Chunk", "description": "DEPRECATED: Use num_frames_per_second_or_fixed_frames_chunk instead. Number of frames per chunk to use for the VLM.", "default": 0, "deprecated": true, "examples": [ 10 ] }, "vlm_input_width": { "type": "integer", "maximum": 4096.0, "minimum": 0.0, "format": "int32", "title": "Vlm Input Width", "description": "VLM Input Width", "default": 0, "examples": [ 256 ] }, "vlm_input_height": { "type": "integer", "maximum": 4096.0, "minimum": 0.0, "format": "int32", "title": "Vlm Input Height", "description": "VLM Input Height", "default": 0, "examples": [ 256 ] }, "enable_audio": { "type": "boolean", "title": "Enable Audio", "description": "Enable transcription of the audio stream in the media", "default": false, "examples": [ true, false ] }, "enable_reasoning": { "type": "boolean", "title": "Enable Reasoning", "description": "Enable reasoning for VLM captions generation", "default": false, "examples": [ true, false ] }, "num_frames_per_second_or_fixed_frames_chunk": { "type": "number", "maximum": 120.0, "minimum": 0.0, "title": "Num Frames Per Second Or Fixed Frames Chunk", "description": "Number of frames per second (if use_fps_for_chunking=true) or fixed number of frames per chunk (if use_fps_for_chunking=false).", "examples": [ 1.0, 10.0 ] }, "use_fps_for_chunking": { "type": "boolean", "title": "Use Fps For Chunking", "description": "If true, use num_frames_per_second_or_fixed_frames_chunk as FPS. If false, use it as a fixed frame count per chunk.", "default": false, "examples": [ true, false ] }, "creation_time": { "type": "string", "maxLength": 24, "minLength": 24, "title": "Creation Time", "description": "Creation time of the media in ISO 8601 format (e.g. 2024-06-09T18:32:11.123Z). If provided, offsets frame timestamps in the response.", "examples": [ "2024-06-09T18:32:11.123Z" ] }, "alert_category": { "type": "string", "maxLength": 256, "title": "Alert Category", "description": "Alert category for VLM captions (e.g. 'Worker PPE Violation').", "examples": [ "Worker PPE Violation" ] }, "mm_processor_kwargs": { "additionalProperties": true, "type": "object", "title": "Mm Processor Kwargs", "description": "Additional keyword arguments for the multimodal processor (e.g., size, shortest_edge, longest_edge).", "examples": [ { "shortest_edge": 384 } ] }, "custom_metadata": { "patternProperties": { "^(.|\\n)*$": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$" } }, "propertyNames": { "maxLength": 1024 }, "type": "object", "title": "Custom Metadata", "description": "Custom metadata to be added to the summarization request. This is a JSON object with key-value pairs. Custom metadata is supported only with user managed milvus db collections." }, "delete_external_collection": { "type": "boolean", "title": "Delete External Collection", "description": "Delete the external collection at the end of the summarization request", "default": false }, "schema": { "type": "string", "maxLength": 50000, "pattern": "^(.|\\n)*$", "title": "Schema", "description": "JSON schema for structured output extraction from video content", "examples": [ "{\"type\": \"object\", \"properties\": {\"events\": {\"type\": \"array\"}}}" ] }, "batch_response_method": { "type": "string", "maxLength": 256, "pattern": "^[A-Za-z_]*$", "title": "Batch Response Method", "description": "Method for batch response processing", "examples": [ "json_schema", "text" ] }, "scenario": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$", "title": "Scenario", "description": "Scenario or use case context for the summarization", "examples": [ "warehouse", "retail", "security" ] }, "events": { "items": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$" }, "type": "array", "maxItems": 1000, "title": "Events", "description": "List of events to detect or extract from the video", "examples": [ [ "fire", "theft", "accident" ], [ "safety violation", "unauthorized access" ] ] }, "auto_generate_prompt": { "type": "boolean", "title": "Auto Generate Prompt", "description": "Enable automatic prompt generation based on schema and events", "examples": [ true, false ] }, "override_vlm_prompt": { "type": "boolean", "title": "Override Vlm Prompt", "description": "Override the VLM prompt with the user supplied prompt", "default": false, "examples": [ true, false ] }, "enable_vlm_structured_output": { "type": "boolean", "title": "Enable Vlm Structured Output", "description": "Enable VLM structured output", "default": true, "examples": [ true, false ] }, "objects_of_interest": { "items": { "type": "string", "maxLength": 256, "pattern": "^(.|\\n)*$" }, "type": "array", "maxItems": 1000, "title": "Objects Of Interest", "description": "List of objects of interest to detect or extract from the video", "default": [], "examples": [ [ "person", "car", "bicycle" ], [ "package", "forklift", "worker" ] ] } }, "additionalProperties": false, "type": "object", "required": [ "model", "scenario", "events" ], "title": "SummarizationQuery", "description": "Summarization Query Request Fields." }, "GenerateCaptionsRequest": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id", "description": "Stream ID (from RTVI stream/add).", "examples": [ "123e4567-e89b-12d3-a456-426614174000" ] }, "model": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$", "title": "Model", "description": "Model to use for caption generation.", "examples": [ "cosmos-reason1" ] }, "prompt": { "type": "string", "maxLength": 512000, "pattern": "^[\\s\\S]*$", "title": "Prompt", "description": "VLM prompt for caption generation.", "default": "", "examples": [ "Write a concise and clear dense caption for the provided video" ] }, "system_prompt": { "type": "string", "maxLength": 5000, "pattern": "^(.|\\n)*$", "title": "System Prompt", "description": "System prompt for the VLM.", "default": "" }, "chunk_duration": { "type": "integer", "maximum": 3600.0, "minimum": 0.0, "format": "int32", "title": "Chunk Duration", "description": "Chunk videos into chunkDuration seconds. 0 for no chunking.", "default": 0, "examples": [ 60 ] }, "chunk_overlap_duration": { "type": "integer", "maximum": 3600.0, "minimum": 0.0, "format": "int32", "title": "Chunk Overlap Duration", "description": "Chunk overlap duration in seconds. 0 for no overlap.", "default": 0, "examples": [ 10 ] }, "num_frames_per_second_or_fixed_frames_chunk": { "anyOf": [ { "type": "number" }, { "type": "null" } ], "title": "Num Frames Per Second Or Fixed Frames Chunk", "description": "Number of frames per second or fixed frames per chunk." }, "use_fps_for_chunking": { "type": "boolean", "title": "Use Fps For Chunking", "description": "Use FPS for chunking instead of fixed frame count.", "default": false }, "max_tokens": { "anyOf": [ { "type": "integer", "maximum": 1000000.0, "minimum": 1.0, "format": "int32" }, { "type": "null" } ], "title": "Max Tokens", "description": "Maximum number of tokens to generate per chunk.", "examples": [ 512 ] }, "temperature": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Temperature", "description": "Sampling temperature for VLM text generation.", "examples": [ 0.2 ] }, "top_p": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Top P", "description": "Top-p sampling mass for VLM text generation.", "examples": [ 1 ] }, "top_k": { "anyOf": [ { "type": "number", "maximum": 1000.0, "minimum": 1.0 }, { "type": "null" } ], "title": "Top K", "description": "Top-k filtering for VLM text generation.", "examples": [ 100 ] }, "seed": { "anyOf": [ { "type": "integer", "maximum": 4294967295.0, "minimum": 1.0, "format": "int64" }, { "type": "null" } ], "title": "Seed", "description": "Seed value for reproducibility.", "examples": [ 10 ] }, "enable_reasoning": { "type": "boolean", "title": "Enable Reasoning", "description": "Enable reasoning for VLM captions generation.", "default": false }, "enable_audio": { "type": "boolean", "title": "Enable Audio", "description": "Enable audio ASR alongside video captioning.", "default": false }, "vlm_input_width": { "type": "integer", "maximum": 4096.0, "minimum": 0.0, "format": "int32", "title": "Vlm Input Width", "description": "VLM input width (0 = model default).", "default": 0, "examples": [ 256 ] }, "vlm_input_height": { "type": "integer", "maximum": 4096.0, "minimum": 0.0, "format": "int32", "title": "Vlm Input Height", "description": "VLM input height (0 = model default).", "default": 0, "examples": [ 256 ] }, "mm_processor_kwargs": { "anyOf": [ { "additionalProperties": true, "type": "object" }, { "type": "null" } ], "title": "Mm Processor Kwargs", "description": "Optional multimodal processor kwargs." }, "alert_category": { "anyOf": [ { "type": "string", "maxLength": 256 }, { "type": "null" } ], "title": "Alert Category", "description": "Alert category for structured captioning." }, "creation_time": { "anyOf": [ { "type": "string", "maxLength": 24 }, { "type": "null" } ], "title": "Creation Time", "description": "ISO 8601 creation timestamp for the stream." }, "scenario": { "type": "string", "maxLength": 5000, "pattern": "^[\\s\\S]*$", "title": "Scenario", "description": "Scenario description for auto-prompt generation.", "default": "" }, "events": { "items": { "type": "string" }, "type": "array", "maxItems": 1000, "title": "Events", "description": "Event types for auto-prompt generation.", "default": [] }, "objects_of_interest": { "items": { "type": "string" }, "type": "array", "maxItems": 1000, "title": "Objects Of Interest", "description": "Objects of interest for auto-prompt generation.", "default": [] }, "enable_vlm_structured_output": { "type": "boolean", "title": "Enable Vlm Structured Output", "description": "Enable structured VLM output (controls auto-prompt format).", "default": true }, "override_vlm_prompt": { "type": "boolean", "title": "Override Vlm Prompt", "description": "If true, use prompt as-is instead of auto-generating from scenario/events.", "default": false } }, "additionalProperties": false, "type": "object", "required": [ "id", "model" ], "title": "GenerateCaptionsRequest", "description": "Request body for POST /v1/generate_captions (stream captioning)." }, "GenerateCaptionsResponse": { "properties": { "id": { "type": "string", "title": "Id", "description": "Stream ID that captioning was started for." }, "status": { "type": "string", "title": "Status", "description": "Status of the captioning request.", "examples": [ "accepted" ] }, "model": { "type": "string", "title": "Model", "description": "Model used for caption generation." } }, "additionalProperties": false, "type": "object", "required": [ "id", "status", "model" ], "title": "GenerateCaptionsResponse", "description": "Response for POST /v1/generate_captions." }, "StreamSummarizeRequest": { "properties": { "id": { "type": "string", "format": "uuid", "title": "Id", "description": "Stream ID to summarize.", "examples": [ "123e4567-e89b-12d3-a456-426614174000" ] }, "model": { "type": "string", "maxLength": 1024, "pattern": "^(.|\\n)*$", "title": "Model", "description": "Model identifier (must match the loaded model).", "examples": [ "cosmos-reason1" ] }, "start_time": { "anyOf": [ { "type": "number", "minimum": 0.0 }, { "type": "null" } ], "title": "Start Time", "description": "Time window start for summarization (seconds, 0 = no filter).", "default": 0 }, "end_time": { "anyOf": [ { "type": "number", "minimum": 0.0 }, { "type": "null" } ], "title": "End Time", "description": "Time window end for summarization (seconds, 0 = no filter).", "default": 0 }, "enable_vlm_structured_output": { "type": "boolean", "title": "Enable Vlm Structured Output", "description": "Enable structured VLM output for summarization.", "default": true }, "camera_id": { "anyOf": [ { "type": "string", "maxLength": 256 }, { "type": "null" } ], "title": "Camera Id", "description": "Camera / sensor identifier.", "default": "default", "examples": [ "camera_1", "default" ] }, "summarize_max_tokens": { "anyOf": [ { "type": "integer", "maximum": 1000000.0, "minimum": 1.0, "format": "int32" }, { "type": "null" } ], "title": "Summarize Max Tokens", "description": "Max tokens for LLM aggregation." }, "summarize_temperature": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Summarize Temperature", "description": "Temperature for LLM aggregation." }, "summarize_top_p": { "anyOf": [ { "type": "number", "maximum": 1.0, "minimum": 0.0 }, { "type": "null" } ], "title": "Summarize Top P", "description": "Top-p for LLM aggregation." }, "summarize_batch_size": { "anyOf": [ { "type": "integer", "minimum": 1.0, "format": "int32" }, { "type": "null" } ], "title": "Summarize Batch Size", "description": "Batch size for summarization." }, "schema": { "anyOf": [ { "type": "string", "maxLength": 50000 }, { "type": "null" } ], "title": "Schema", "description": "Schema for unstructured output format." }, "batch_response_method": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "title": "Batch Response Method", "description": "Batch response method for summarization." }, "auto_generate_prompt": { "anyOf": [ { "type": "boolean" }, { "type": "null" } ], "title": "Auto Generate Prompt", "description": "Auto-generate summarization prompt from scenario/events." }, "time_metadata_keys": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "title": "Time Metadata Keys", "description": "Time metadata keys for summarization." }, "collection_name": { "anyOf": [ { "type": "string", "maxLength": 256 }, { "type": "null" } ], "title": "Collection Name", "description": "External collection name for DB storage." }, "custom_metadata": { "anyOf": [ { "type": "object" }, { "type": "null" } ], "title": "Custom Metadata", "description": "Custom metadata for DB storage." }, "delete_external_collection": { "type": "boolean", "title": "Delete External Collection", "description": "Delete external collection after summarization.", "default": false } }, "additionalProperties": false, "type": "object", "required": [ "id", "model" ], "title": "StreamSummarizeRequest", "description": "Request body for POST /v1/stream_summarize (stream summarization)." } }, "securitySchemes": { "Token": { "type": "http", "scheme": "bearer" } } }, "tags": [ { "name": "Health Check", "description": "Operations to check system health." }, { "name": "Metrics", "description": "Operations to get metrics." }, { "name": "Models", "description": "List and describe the various models available in the API." }, { "name": "Recommended Config", "description": "Operations related to querying recommended LVS request parameters." }, { "name": "Stream", "description": "Operations for live-stream captioning and summarization." }, { "name": "Summarization", "description": "Operations related to video file summarization." } ], "security": [ { "Token": [] } ] }