Run an Inference (AI Services v1.0.x)

This guide shows how to run inferences on installed Scientific AI Workflows using TetraScience AI Services versions 1.0.x.

Run an Inference

After you've installed Scientific AI Workflow and have its inference URL, you can run inferences programmatically by doing either of the following:

For AI workflows that require large files, such as model weights, configuration files, or reference data, you can also upload AI Workflow assets before running an inference.

Run an Online (Synchronous) Inference

Online (synchronous) inference performs real-time ML inference and returns results immediately. Use online inference for real-time predictions, chat and conversation workflows, and low-latency requirements (less than 60 seconds). For batch processing, large files, or long-running inference (more than 60 seconds), use an offline (asynchronous) inference instead.

📘

NOTE

Online inference is only available for AI workflows that have a Model Serving Endpoint configured.

Required Policies

To submit an online inference request, users must have one of the following policy permissions:

Operation

Endpoint

Policies with Required Permissions

Submit inference request

POST /v1/inference/online

Get inference metrics

GET /v1/inference/online/{requestId}/metrics

API Endpoint

POST /v1/inference/online

Request Headers

HeaderRequiredDescription
x-org-slugYesOrganization slug identifier (for example, acme-corp)
ts-auth-tokenYesAuthentication token (JWT)
Content-TypeYesMust be application/json

Request Body

ParameterTypeRequiredDescription
aiWorkflowstringYesThe AI workflow identifier (for example, cell-analysis)
versionstringNoSpecific version of the AI workflow (for example, v1.0.0). If not specified, the latest version is used.
inferenceOptionsobjectNoConfiguration options for the inference request
inferenceInputobjectYesInput data for the model (format varies by model type)

Inference Options

ParameterTypeDefaultDescription
streambooleanfalseEnable streaming response mode (Server-Sent Events)
metricsbooleanfalseEnable metrics collection for this request
timeoutinteger300000Request timeout in milliseconds (1000-300000, which is 1 second to 5 minutes)

Inference Input Formats

The inferenceInput field supports multiple formats, depending on the model serving endpoint requirements:

FormatDescriptionExample Field
Tabular (array)Array of arrays for tabular datadata
Tabular (records)Array of objects with named fieldsdataframe_records
ImagesBase64-encoded image dataimages
Chat messagesConversation format with role/contentmessages

Request Examples

Tabular Data (Buffered Response)

{
  "aiWorkflow": "lead-clone-selection",
  "version": "v2.1.0",
  "inferenceInput": {
    "dataframe_records": [
      { "feature1": 1.5, "feature2": "category_a", "feature3": 42 },
      { "feature1": 2.3, "feature2": "category_b", "feature3": 37 }
    ]
  },
  "inferenceOptions": {
    "stream": false,
    "metrics": true,
    "timeout": 30000
  }
}

Chat Conversation (Streaming Response)

{
  "aiWorkflow": "coding-assistant",
  "version": "v1.0.0",
  "inferenceInput": {
    "messages": [
      { "role": "user", "content": "Write a Python function to calculate factorial" }
    ]
  },
  "inferenceOptions": {
    "stream": true,
    "timeout": 30000
  }
}

Image Analysis

{
  "aiWorkflow": "cell-image-analysis",
  "version": "v1.5.0",
  "inferenceInput": {
    "images": [
      { "b64": "iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mNk..." }
    ]
  },
  "inferenceOptions": {
    "stream": false,
    "metrics": true
  }
}

Response

Buffered Response (JSON)

When stream is false (default), the response is returned as a complete JSON object:

FieldTypeDescription
requestIdstringUnique identifier for this inference request (for example, sync_123e4567-e89b-12d3-a456-426614174000)
statusstringStatus of the inference request: success or failed
inferenceOutputanyModel output (format varies by model)
metricsobjectOptional metrics about the inference execution
timestampstringISO 8601 timestamp of the response
errorMessagestringError message if status is failed

Example Response (Tabular Predictions)

{
  "requestId": "sync_123e4567-e89b-12d3-a456-426614174000",
  "status": "success",
  "inferenceOutput": {
    "predictions": [0.85, 0.72]
  },
  "metrics": {
    "runDuration": 245,
    "executionDuration": 245
  },
  "timestamp": "2025-09-29T10:30:00Z"
}

Streaming Response (Server-Sent Events)

When stream is true, results are streamed as Server-Sent Events (SSE) with Content-Type: text/event-stream:

data: {"chunk": "partial result", "done": false}

data: {"chunk": "more content", "done": false}

data: [DONE]

Error Responses

Status CodeDescriptionExample
400Bad request - validation failedAI workflow not found, invalid input format, invalid timeout value
401Authentication failedInvalid or missing authentication token
403Access deniedOrganization doesn't have access, insufficient role permissions
404AI workflow not foundSpecified workflow doesn't exist
422Unprocessable entityModel returned validation error for input data
500Internal server errorModel serving endpoint failed, inference timeout
503Service unavailableModel serving endpoint is temporarily unavailable

Get Inference Metrics

To retrieve metrics for a completed online inference request:

GET /v1/inference/online/{requestId}/metrics

Path Parameters

ParameterTypeRequiredDescription
requestIdstringYesThe online inference request ID (for example, sync_123e4567-e89b-12d3-a456-426614174000)

Response

FieldTypeDescription
requestIdstringUnique identifier for the inference request
aiWorkflowstringAI workflow identifier
organizationstringOrganization slug
statusstringStatus: success, failed, or timeout
processingTimenumberTime taken to process the request (milliseconds)
timestampstringISO 8601 timestamp
inputSizeintegerSize of input data in bytes
errorMessagestringError message if inference failed

Example Metrics Response

{
  "requestId": "sync_123e4567-e89b-12d3-a456-426614174000",
  "aiWorkflow": "lead-clone-selection:v2.1.0",
  "organization": "acme-corp",
  "status": "success",
  "processingTime": 1245,
  "timestamp": "2025-09-29T10:30:00Z",
  "inputSize": 2048
}

Run an Offline (Asynchronous) Inference

Offline (asynchronous) inference submits file-based inference requests for batch processing. Use offline inference for processing large files or datasets, running batch inference jobs, tasks expected to take more than 60 seconds, and when files are already uploaded to the platform. For real-time predictions or low-latency requirements, use online (synchronous) inference instead.

📘

NOTE

Keep in mind the following when running offline inferences:

  • Offline inference supports partial success, where optional files can fail without blocking the inference job. Critical files (primary data files) must succeed for inference to proceed.
  • Offline inference can be automated using the ts-inference-protocol. Configure a file processing pipeline with this protocol to automatically trigger inference requests when new files are uploaded to the platform. The protocol accepts configuration for the inferenceUrl, aiWorkflow, and authentication token, and then automatically submits matching files for inference processing.

Required Policies

To submit an offline inference request, you must have one of the following policy permissions:

Operation

Endpoint

Policies with Required Permissions

Submit inference request

POST /v1/inference

Get inference status

GET /v1/inference/{inferenceId}/status

API Endpoint

POST /v1/inference

Request Headers

HeaderRequiredDescription
x-org-slugYesOrganization slug identifier (for example, acme-corp)
ts-auth-tokenYesAuthentication token (JWT)
Content-TypeYesMust be application/json

Request Body

ParameterTypeRequiredDescription
aiWorkflowstringYesThe AI workflow identifier (for example, cell-analysis). You can get a list of available AI workflows using the GET /v1/install endpoint.
versionstringNoSpecific version of the AI workflow (for example, v1.0.0). If not specified, the latest version is used.
inputFilesarrayYesList of input files for inference processing (minimum 1 file)

Input File Object

Each file in the inputFiles array must include:

ParameterTypeRequiredDefaultDescription
fileUuidstringYesUUID of the file in TDP
rolestringNofileRole of the file in processing: file, instructions, or parameters
processingOrderintegerNo1Order in which file should be processed (minimum 1)
dependenciesarrayNo[]List of file UUIDs this file depends on

Request Examples

Basic Inference Request

{
  "aiWorkflow": "cell-analysis",
  "inputFiles": [
    {
      "fileUuid": "550e8400-e29b-41d4-a716-446655440000",
      "role": "file",
      "processingOrder": 1,
      "dependencies": []
    }
  ]
}

Multi-File Inference with Dependencies

{
  "aiWorkflow": "lead-clone-selection",
  "version": "v2.1.0",
  "inputFiles": [
    {
      "fileUuid": "550e8400-e29b-41d4-a716-446655440001",
      "role": "file",
      "processingOrder": 1,
      "dependencies": []
    },
    {
      "fileUuid": "550e8400-e29b-41d4-a716-446655440002",
      "role": "instructions",
      "processingOrder": 2,
      "dependencies": ["550e8400-e29b-41d4-a716-446655440001"]
    },
    {
      "fileUuid": "550e8400-e29b-41d4-a716-446655440003",
      "role": "parameters",
      "processingOrder": 3,
      "dependencies": []
    }
  ]
}

Response

The API returns immediately with a 202 Accepted status and provides a request ID for tracking progress.

FieldTypeDescription
requestIdstringUnique identifier for the inference request (for example, req-20250929-abc123def456)
statusUrlstringURL to check the status of the inference request
partialSuccessbooleanIndicates if some optional files failed to stage but inference can still proceed
stagingSummaryobjectDetailed breakdown of file staging results (only present for partial success)

Example Response (All Files Staged Successfully)

{
  "requestId": "req-20250929-abc123def456",
  "statusUrl": "/v1/inference/req-20250929-abc123def456"
}

Example Response (Partial Staging Success)

{
  "requestId": "req-20250929-abc123def456",
  "statusUrl": "/v1/inference/req-20250929-abc123def456",
  "partialSuccess": true,
  "stagingSummary": {
    "totalFiles": 3,
    "successfulFiles": 2,
    "failedFiles": 1,
    "criticalFailures": 0,
    "optionalFailures": 1,
    "warnings": ["Optional file failed to stage: metadata.json (Access denied)"]
  }
}

Error Responses

Status CodeDescriptionExample
400Bad request - validation failedInvalid AI workflow, no valid files, critical files failed to stage
401Authentication failedInvalid or missing authentication token
403Access deniedNo access to AI workflow, file doesn't belong to organization
404Resource not foundAI workflow or files not found
409ConflictAI workflow is disabled or inactive
422Unprocessable entityInvalid file format or empty files
500Internal server errorStaging, queue, or database service errors
503Service unavailableFileInfo service timeout or external dependency unavailable

Get Inference Status

To check the status of an offline inference request:

GET /v1/inference/{inferenceId}/status

Path Parameters

ParameterTypeRequiredDescription
inferenceIdstringYesThe inference request ID

Query Parameters

ParameterTypeDefaultDescription
includeFilesbooleanfalseInclude detailed file information in the response

Response

FieldTypeDescription
requestIdstringUnique identifier for the inference request
dbxRunIdnumberDatabricks job run ID (when processing has started)
statusstringStatus: pending, processing, completed, or failed
aiWorkflowstringAI workflow identifier
organizationstringOrganization slug
userstringUser who submitted the request
createdAtstringISO 8601 timestamp when request was created
updatedAtstringISO 8601 timestamp when request was last updated
completedAtstringISO 8601 timestamp when inference completed (only for completed/failed)
inputFilesarrayOriginal input file specifications
stagingLocationobjectS3 staging location information
outputLocationobjectS3 output location information
manifestPathstringS3 path to the processing manifest
errorMessagestringError message if inference failed
partialSuccessbooleanWhether this request had partial staging success
stagingSummaryobjectSummary of file staging results
filesarrayDetailed file information (only if includeFiles=true)

Example Status Response (Processing)

{
  "requestId": "req-20250929-abc123def456",
  "status": "processing",
  "aiWorkflow": "cell-analysis",
  "organization": "acme-corp",
  "user": "user123",
  "createdAt": "2025-09-29T10:30:00Z",
  "updatedAt": "2025-09-29T10:35:00Z",
  "stagingLocation": {
    "bucket": "inference-staging-bucket",
    "prefix": "tenant=acme/org=acme-corp/2025/09/29/req-20250929-abc123def456/",
    "fullPath": "s3://inference-staging-bucket/tenant=acme/org=acme-corp/2025/09/29/req-20250929-abc123def456/"
  },
  "outputLocation": {
    "bucket": "inference-output-bucket",
    "prefix": "tenants/acme/orgs/acme_corp/schemas/ai_assets/2025/09/29/req-20250929-abc123def456/",
    "fullPath": "s3://inference-output-bucket/tenants/acme/orgs/acme_corp/schemas/ai_assets/2025/09/29/req-20250929-abc123def456/"
  }
}

Example Status Response (Completed)

{
  "requestId": "req-20250929-abc123def456",
  "status": "completed",
  "aiWorkflow": "cell-analysis",
  "organization": "acme-corp",
  "user": "user123",
  "createdAt": "2025-09-29T10:30:00Z",
  "updatedAt": "2025-09-29T10:45:00Z",
  "completedAt": "2025-09-29T10:45:00Z"
}

Upload AI Workflow Assets

Some AI workflows require large files, such as model weights, configuration files, or reference data to be uploaded in advance before inference can be performed. The Assets API provides endpoints for listing existing assets and uploading new files to an AI workflow's assets directory.

Use the Assets API when you need to do any of the following:

  • Upload model weights or checkpoints for inference notebooks
  • Provide configuration files that customize workflow behavior
  • Store reference datasets used during inference
  • Upload any large files that cannot be passed inline with inference requests

Required Policies

To manage AI workflow assets, users must have one of the following platform roles:

Operation

Endpoint

Policies with Required Permissions

List assets

GET /v1/assets

Upload assets

POST /v1/assets

List Assets

Retrieve a hierarchical listing of files and folders in an AI workflow's assets directory:

GET /v1/assets

Request Headers

HeaderRequiredDescription
x-org-slugYesOrganization slug identifier (for example, acme-corp)
ts-auth-tokenYesAuthentication token (JWT)

Query Parameters

ParameterTypeRequiredDefaultDescription
namespacestringYesNamespace of the AI workflow (for example, common)
aiWorkflowstringYesSlug of the AI workflow (for example, cell-analysis)
pathstringNo/Path within the assets folder to list

Example Request

curl -X GET "https://api.tetrascience.com/v1/assets?namespace=common&aiWorkflow=cell-analysis&path=/models" \
  -H "x-org-slug: acme-corp" \
  -H "ts-auth-token: YOUR_JWT_TOKEN"

Example Response

{
  "name": "models",
  "type": "folder",
  "path": "/models",
  "children": [
    {
      "name": "weights.pkl",
      "type": "file",
      "path": "/models/weights.pkl",
      "size": 104857600,
      "lastModified": "2025-09-29T10:30:00.000Z"
    },
    {
      "name": "config.json",
      "type": "file",
      "path": "/models/config.json",
      "size": 1024,
      "lastModified": "2025-09-29T09:15:00.000Z"
    }
  ]
}

Upload Assets

Uploading files to an AI workflow's assets directory is a two-step process:

  1. Get a presigned URL: Call the Assets API to get a presigned Amazon Simple Storage Service (Amazon S3) URL for uploading
  2. Upload the file: Use the presigned URL to upload your file directly to Amazon S3.

Step 1: Get Presigned Upload URL

POST /v1/assets

Request Headers

HeaderRequiredDescription
x-org-slugYesOrganization slug identifier (for example, acme-corp)
ts-auth-tokenYesAuthentication token (JWT)

Query Parameters

ParameterTypeRequiredDefaultDescription
namespacestringYesNamespace of the AI workflow
aiWorkflowstringYesSlug of the AI workflow
fileNamestringYesName of the file to upload (no path separators allowed)
pathstringNo/Path within the assets folder where the file will be stored

Example Request

curl -X POST "https://api.tetrascience.com/v1/assets?namespace=common&aiWorkflow=cell-analysis&path=/models&fileName=weights.pkl" \
  -H "x-org-slug: acme-corp" \
  -H "ts-auth-token: YOUR_JWT_TOKEN"

Example Response

{
  "url": "https://s3.amazonaws.com/ai-assets-bucket/path/to/weights.pkl?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Signature=...",
  "expiresIn": 86400
}
FieldTypeDescription
urlstringPresigned S3 URL for uploading the file
expiresInintegerURL expiration time in seconds (24 hours)

Step 2: Upload File to Presigned URL

Use the presigned URL from Step 1 to upload your file directly to Amazon S3:

curl -X PUT "$PRESIGNED_URL" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @./weights.pkl

Complete Upload Example

The following example shows the complete two-step process for uploading a model weights file:

# Step 1: Get presigned URL
PRESIGNED_URL=$(curl -s -X POST "https://api.tetrascience.com/v1/assets?namespace=common&aiWorkflow=cell-analysis&path=/models&fileName=model_weights.pkl" \
  -H "x-org-slug: acme-corp" \
  -H "ts-auth-token: YOUR_JWT_TOKEN" | jq -r '.url')

# Step 2: Upload file using presigned URL
curl -X PUT "$PRESIGNED_URL" \
  -H "Content-Type: application/octet-stream" \
  --data-binary @./model_weights.pkl

Error Responses

Status CodeDescriptionExample
400Bad request - invalid fileName or pathInvalid fileName: must be a filename without path separators
401Authentication failedInvalid or missing authentication token
404AI workflow not foundAI workflow 'cell-analysis' not found in namespace 'common'
500Internal server errorFailed to list assets or create presigned URL

Documentation Feedback

Do you have questions about our documentation or suggestions for how we can improve it? Start a discussion in TetraConnect Hub. For access, see Access the TetraConnect Hub.

📘

NOTE

Feedback isn't part of the official TetraScience product documentation. TetraScience doesn't warrant or make any guarantees about the feedback provided, including its accuracy, relevance, or reliability. All feedback is subject to the terms set forth in the TetraConnect Hub Community Guidelines.