> ## Documentation Index
> Fetch the complete documentation index at: https://docs.interactly.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Test Llm Config Inline

> Run a one-shot test invocation against a fully inline LLM configuration that has not been persisted
yet (the create flow), and return the model's reply.

Because there is no stored record to recover secrets from, the provider api_key must be supplied in
``body.config`` (or omitted to fall back to the team's stored vendor credentials). Provider/runtime
failures are returned as HTTP 200 with ``success=False`` and a clean ``error`` message, mirroring the
saved-config test endpoint, so the dashboard can render them inline.



## OpenAPI

````yaml https://api-prod.interactly.ai/api-docs/workflows/api.json post /workflows/v1/llm-configs/test
openapi: 3.1.0
info:
  title: Interactly API
  description: API for building interactly.ai services
  version: 1.1.0
  contact:
    name: Interactly
    url: https://interactly.ai
    email: developers@interactly.ai
servers:
  - url: https://api-prod.interactly.ai
    description: API Server
security: []
paths:
  /workflows/v1/llm-configs/test:
    post:
      tags:
        - LLM Configs
      summary: Test Llm Config Inline
      description: >-
        Run a one-shot test invocation against a fully inline LLM configuration
        that has not been persisted

        yet (the create flow), and return the model's reply.


        Because there is no stored record to recover secrets from, the provider
        api_key must be supplied in

        ``body.config`` (or omitted to fall back to the team's stored vendor
        credentials). Provider/runtime

        failures are returned as HTTP 200 with ``success=False`` and a clean
        ``error`` message, mirroring the

        saved-config test endpoint, so the dashboard can render them inline.
      operationId: workflow_service_test_llm_config_inline_v1_llm_configs_test_post
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/LLMConfigTestInlineRequest'
        required: true
      responses:
        '200':
          description: Successful Response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/LLMConfigTestResponse'
        '422':
          description: Validation Error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HTTPValidationError'
      security:
        - bearer: []
components:
  schemas:
    LLMConfigTestInlineRequest:
      properties:
        system_prompt:
          type: string
          minLength: 1
          title: System Prompt
          description: Required, non-empty system prompt.
        messages:
          items:
            $ref: '#/components/schemas/LLMTestMessage'
          type: array
          title: Messages
          description: Optional ordered conversation history to send to the model.
        config:
          oneOf:
            - $ref: '#/components/schemas/AzureOpenAILLMConfig-Input'
            - $ref: '#/components/schemas/OpenAILLMConfig-Input'
            - $ref: '#/components/schemas/GoogleLLMConfig-Input'
            - $ref: '#/components/schemas/AnthropicLLMConfig-Input'
            - $ref: '#/components/schemas/CustomLLMConfig-Input'
            - $ref: '#/components/schemas/WorkflowDefaultLLMConfig-Input'
            - $ref: '#/components/schemas/NoLLMConfig-Input'
            - $ref: '#/components/schemas/LLMGroupConfig-Input'
            - $ref: '#/components/schemas/LLMGroupWithBackchannelConfig-Input'
          title: Config
          description: >-
            Full config to test inline, before any config record is persisted
            (create flow). Unlike the saved-config test, there is no stored
            record to recover secrets from: the provider api_key must be
            supplied here, or omitted to fall back to the team's stored vendor
            credentials.
          discriminator:
            propertyName: type
            mapping:
              anthropic_llm:
                $ref: '#/components/schemas/AnthropicLLMConfig-Input'
              azure_openai_llm:
                $ref: '#/components/schemas/AzureOpenAILLMConfig-Input'
              custom_llm:
                $ref: '#/components/schemas/CustomLLMConfig-Input'
              global_default_llm:
                $ref: '#/components/schemas/WorkflowDefaultLLMConfig-Input'
              google_llm:
                $ref: '#/components/schemas/GoogleLLMConfig-Input'
              llm_group:
                $ref: '#/components/schemas/LLMGroupConfig-Input'
              llm_group_with_backchannel:
                $ref: '#/components/schemas/LLMGroupWithBackchannelConfig-Input'
              no_llm:
                $ref: '#/components/schemas/NoLLMConfig-Input'
              openai_llm:
                $ref: '#/components/schemas/OpenAILLMConfig-Input'
      type: object
      required:
        - system_prompt
        - config
      title: LLMConfigTestInlineRequest
    LLMConfigTestResponse:
      properties:
        success:
          type: boolean
          title: Success
        response:
          anyOf:
            - type: string
            - type: 'null'
          title: Response
          description: Concatenated model output text on success.
        error:
          anyOf:
            - type: string
            - type: 'null'
          title: Error
          description: Clean error message when success is False.
        provider:
          anyOf:
            - type: string
            - type: 'null'
          title: Provider
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
        prompt_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Prompt Tokens
        completion_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Completion Tokens
        total_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Total Tokens
        latency_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Latency Ms
        winning_member:
          anyOf:
            - $ref: '#/components/schemas/LLMTestMemberInfo'
            - type: 'null'
          description: Which group member produced the main `response`.
        backchannel_response:
          anyOf:
            - type: string
            - type: 'null'
          title: Backchannel Response
          description: Backchannel text emitted before the main response, if any.
        backchannel_member:
          anyOf:
            - $ref: '#/components/schemas/LLMTestMemberInfo'
            - type: 'null'
          description: >-
            Producer of the backchannel response (null for a static
            backchannel).
        backchannel_prompt_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Backchannel Prompt Tokens
        backchannel_completion_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Backchannel Completion Tokens
        backchannel_total_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Backchannel Total Tokens
      type: object
      required:
        - success
      title: LLMConfigTestResponse
    HTTPValidationError:
      properties:
        detail:
          items:
            $ref: '#/components/schemas/ValidationError'
          type: array
          title: Detail
      type: object
      title: HTTPValidationError
    LLMTestMessage:
      properties:
        role:
          type: string
          enum:
            - human
            - ai
            - system
          title: Role
          description: Sender role of the message.
          default: human
        content:
          type: string
          title: Content
          description: Text content of the message.
      type: object
      required:
        - content
      title: LLMTestMessage
    AzureOpenAILLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: azure_openai
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        model:
          anyOf:
            - $ref: '#/components/schemas/AZUREOPENAIModel'
            - type: 'null'
          title: Azure OpenAI Model
          description: Name of the Azure OpenAI model to use
          default: gpt-5-mini
        type:
          type: string
          const: azure_openai_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: azure_openai_llm
          field_visibility_level: developer
          input_field_not_visible: true
        endpoint:
          anyOf:
            - type: string
            - type: 'null'
          title: Azure OpenAI Endpoint
          description: >-
            Endpoint URL for Azure OpenAI API requests. Automatically inferred
            from env var `AZURE_OPENAI_ENDPOINT` if not provided.
          field_visibility_level: developer
        api_version:
          anyOf:
            - type: string
            - type: 'null'
          title: Azure OpenAI API Version
          description: >-
            Azure OpenAI API version. Falls back to `OPENAI_API_VERSION` env var
            if not provided.
          field_visibility_level: developer
        reasoning_effort:
          anyOf:
            - type: string
            - type: 'null'
          title: Reasoning Effort
          description: >-
            Reasoning effort level for GPT-5-* models. Options are 'low',
            'medium', 'high'.
          default: low
      type: object
      title: Azure OpenAI
    OpenAILLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: openai
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        model:
          anyOf:
            - $ref: '#/components/schemas/OPENAIModel'
            - type: 'null'
          title: OpenAI Model
          description: Name of the OpenAI model to use
          default: gpt-5.4-mini
        type:
          type: string
          const: openai_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: openai_llm
          field_visibility_level: developer
          input_field_not_visible: true
        base_url:
          anyOf:
            - type: string
            - type: 'null'
          title: OpenAI Base URL
          description: >-
            Base URL path for OpenAI API requests, leave blank if not using a
            proxy or service emulator.
          field_visibility_level: developer
        organization:
          anyOf:
            - type: string
            - type: 'null'
          title: OpenAI Organization ID
          description: >-
            Organization ID for OpenAI API requests, Automatically inferred from
            env var `OPENAI_ORG_ID` if not provided.
          field_visibility_level: developer
        reasoning_effort:
          anyOf:
            - type: string
            - type: 'null'
          title: Reasoning Effort
          description: >-
            Reasoning effort level for GPT-5-* models. Options are 'minimal',
            'low', 'medium', 'high'.
          default: low
      type: object
      title: OpenAI
    GoogleLLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: google
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        model:
          anyOf:
            - $ref: '#/components/schemas/GOOGLEModel'
            - type: 'null'
          title: Google Model
          description: Name of the Google model to use
          default: gemini-3-flash-preview
        type:
          type: string
          const: google_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: google_llm
          field_visibility_level: developer
          input_field_not_visible: true
        thinking_budget:
          anyOf:
            - type: integer
            - type: 'null'
          title: Thinking Budget (tokens)
          description: Indicates the thinking budget in tokens. By default, it is set to 0.
          default: 0
      type: object
      title: Google
    AnthropicLLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: anthropic
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        model:
          anyOf:
            - $ref: '#/components/schemas/ANTHROPICModel'
            - type: 'null'
          title: Anthropic Model
          description: Name of the Anthropic Claude model to use
          default: claude-sonnet-4-6
        type:
          type: string
          const: anthropic_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: anthropic_llm
          input_field_not_visible: true
        thinking_budget:
          anyOf:
            - type: integer
            - type: 'null'
          title: Thinking Budget (tokens)
          description: >-
            Token budget for Claude's extended thinking feature. Set to 0 to
            disable. When enabled, Claude will show its reasoning process before
            providing a final answer.
          default: 0
      type: object
      title: Anthropic
    CustomLLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: custom
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Custom Model Name
          description: >-
            Name of the model served behind the custom LLM gateway (free-form
            string, e.g. 'gpt-4.1-mini', 'llama-3-70b', 'mistral-large').
        reasoning_effort:
          anyOf:
            - type: string
            - type: 'null'
          title: Reasoning Effort
          description: >-
            Reasoning effort level for GPT-5-* models. Options are 'minimal',
            'low', 'medium', 'high'.
        type:
          type: string
          const: custom_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: custom_llm
          field_visibility_level: developer
          input_field_not_visible: true
        base_url:
          anyOf:
            - type: string
            - type: 'null'
          title: Gateway Base URL
          description: >-
            Base URL of the custom OpenAI-compatible LLM gateway (e.g.
            'http://api.interactly.ai/workflows/llm-proxy').
        default_headers:
          anyOf:
            - additionalProperties: true
              type: object
            - type: 'null'
          title: Headers
          description: >-
            Optional HTTP headers to include in every request to the gateway
            (e.g. routing keys, tenant IDs).
        rewrite_base_url:
          type: boolean
          title: Rewrite Base URL
          description: >-
            When True, uses an httpx event hook to rewrite every request URL to
            the exact base_url. Use this for gateways that don't accept the
            /chat/completions suffix the SDK appends.
          default: false
        verify_ssl:
          type: boolean
          title: Verify SSL
          description: >-
            Whether to verify SSL certificates. Set to False for gateways with
            self-signed certificates.
          default: true
        response_unwrap_key:
          anyOf:
            - type: string
            - type: 'null'
          title: Response Unwrap Key
          description: >-
            When set, the gateway response JSON is expected to wrap the standard
            OpenAI response inside this key (e.g. 'result'). The runtime will
            extract the nested object before passing it to the OpenAI SDK. Leave
            empty for gateways that already return standard format.
        okta_auth:
          anyOf:
            - $ref: '#/components/schemas/OktaAuthConfig'
            - type: 'null'
          title: Okta Auth
          description: Okta authentication configuration for bearer-token injection.
        use_responses_api:
          type: boolean
          title: Use Responses API
          description: >-
            Whether to use the GPT 5.x+ style Responses API, instead of Chat
            Completions API for this Custom LLM. See
            https://developers.openai.com/api/reference/resources/responses
          default: false
      type: object
      title: Custom LLM
    WorkflowDefaultLLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: default_provider
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        type:
          type: string
          const: global_default_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: global_default_llm
          input_field_not_visible: true
      type: object
      title: Workflow Default LLM
      hidden_in_contexts:
        - workflow_settings
        - llm_config
      hide_all_fields: true
    NoLLMConfig-Input:
      properties:
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Configuration ID
          description: Unique identifier for the LLM configuration
          input_field_disallowed: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        provider:
          anyOf:
            - $ref: '#/components/schemas/LLMProvider'
            - type: 'null'
          title: LLM Provider
          description: >-
            The selected Large Language Model provider from the available
            options.
          default: default_provider
          input_field_not_visible: true
        streaming:
          type: boolean
          title: Enable Streaming
          description: Whether to enable streaming for the LLM response.
          default: false
          field_visibility_level: developer
        max_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Retries
          description: Maximum number of retries for the LLM request in case of failure.
          default: 3
          field_visibility_level: developer
        max_parse_retries:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Parse Retries
          description: >-
            Maximum number of times to re-invoke the LLM when a successful
            response cannot be parsed into the expected structured (JSON)
            output. Distinct from `max_retries`, which controls transport-level
            retries (network errors, rate limits, 5xx) inside the LLM client.
          default: 3
          field_visibility_level: developer
        max_tokens:
          anyOf:
            - type: integer
            - type: 'null'
          title: Max Tokens
          description: Maximum number of tokens to generate in the response.
        temperature:
          anyOf:
            - type: number
              maximum: 1
              minimum: 0
            - type: 'null'
          title: Temperature
          description: >-
            Controls the randomness of the model's output. Lower values make the
            output more deterministic.
          input_field_type: number_with_slider
        request_timeout_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Request Timeout (ms)
          description: Timeout for the request in milliseconds.
        seed:
          anyOf:
            - type: integer
            - type: 'null'
          title: Random Seed
          description: Seed for random number generation to ensure reproducibility.
          field_visibility_level: developer
        model_kwargs:
          additionalProperties: true
          type: object
          title: Model Keyword Arguments
          description: Additional keyword arguments to pass to the LLM provider's API.
          field_visibility_level: developer
        api_key:
          anyOf:
            - type: string
              format: password
              writeOnly: true
            - type: 'null'
          title: API Key
          description: API KEY to access the LLM provider endpoint
          field_visibility_level: developer
          input_field_type: password
        do_not_split_sentences:
          type: boolean
          title: Do Not Split Sentences
          description: Whether to avoid splitting sentences in the LLM response.
          default: false
          field_visibility_level: developer
        truncated_max_recent_messages:
          anyOf:
            - type: integer
            - type: 'null'
          title: Truncated Max Recent Messages
          description: >-
            Maximum number of recent messages to keep when truncating the
            conversation history. If not set, no truncation is applied. If set,
            the recent conversation history will be truncated to contain only
            the specified number of messages when invoking the LLM for next
            response. If set to 0, only the system prompt is used.
        type:
          type: string
          const: no_llm
          title: Type
          description: >-
            Differentiator field that helps in identifying this particular type
            of config when serializing and deserializing
          default: no_llm
          input_field_not_visible: true
      type: object
      title: No LLM
      hidden_in_contexts:
        - node_settings
        - llm_config
      hide_all_fields: true
    LLMGroupConfig-Input:
      properties:
        type:
          type: string
          const: llm_group
          title: Type
          description: Discriminator field which must always be 'llm_group'
          default: llm_group
          field_visibility_level: super_admin
          input_field_not_visible: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Group Logical ID
          description: Unique identifier for the LLM Group
          input_field_disallowed: true
        llms:
          items:
            oneOf:
              - $ref: '#/components/schemas/AzureOpenAILLMConfig-Input'
              - $ref: '#/components/schemas/OpenAILLMConfig-Input'
              - $ref: '#/components/schemas/GoogleLLMConfig-Input'
              - $ref: '#/components/schemas/AnthropicLLMConfig-Input'
              - $ref: '#/components/schemas/CustomLLMConfig-Input'
              - $ref: '#/components/schemas/WorkflowDefaultLLMConfig-Input'
              - $ref: '#/components/schemas/NoLLMConfig-Input'
            discriminator:
              propertyName: type
              mapping:
                anthropic_llm:
                  $ref: '#/components/schemas/AnthropicLLMConfig-Input'
                azure_openai_llm:
                  $ref: '#/components/schemas/AzureOpenAILLMConfig-Input'
                custom_llm:
                  $ref: '#/components/schemas/CustomLLMConfig-Input'
                global_default_llm:
                  $ref: '#/components/schemas/WorkflowDefaultLLMConfig-Input'
                google_llm:
                  $ref: '#/components/schemas/GoogleLLMConfig-Input'
                no_llm:
                  $ref: '#/components/schemas/NoLLMConfig-Input'
                openai_llm:
                  $ref: '#/components/schemas/OpenAILLMConfig-Input'
          type: array
          title: LLM Group
          description: List of LLM configurations, in preferred order of use.
        operation_mode:
          anyOf:
            - $ref: '#/components/schemas/OperationMode'
            - type: 'null'
          title: Operation Mode
          description: Operation mode for the LLM group
          default: sequential_with_proactive
        min_patience_time_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Minimum Patience Time
          description: >-
            Grace period in milliseconds until which we will unconditionally
            wait, unless all LLMs have responded.
          default: 1500
          field_visibility_level: developer
        max_patience_time_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Maximum Patience Time
          description: >-
            Threshold milliseconds after which we will stop waiting. If no LLM
            has responded by this time, we will return None.
          field_visibility_level: developer
      type: object
      title: Group of LLMs
    LLMGroupWithBackchannelConfig-Input:
      properties:
        type:
          type: string
          const: llm_group_with_backchannel
          title: Type
          description: >-
            Discriminator field which must always be
            'llm_group_with_backchannel'
          default: llm_group_with_backchannel
          field_visibility_level: developer
          input_field_not_visible: true
        named_llm_config_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config ID
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its ID.
          input_field_not_visible: true
        named_llm_config_name:
          anyOf:
            - type: string
            - type: 'null'
          title: Named LLM Config Name
          description: >-
            If this configuration was resolved from a reusable named LLM
            configuration, this holds its name.
          input_field_not_visible: true
        id:
          anyOf:
            - type: string
            - type: 'null'
          title: LLM Group With Backchannel ID
          description: Unique identifier for the LLM Group
          input_field_not_visible: true
        main_llm_config:
          anyOf:
            - $ref: '#/components/schemas/LLMGroupConfig-Input'
            - type: 'null'
          title: Main LLM Configuration
          description: Configuration for the main LLM
        non_backchannel_response_prefix:
          anyOf:
            - type: string
            - type: 'null'
          title: Non Backchannel Response Prefix
          description: >-
            If back channel response is being sent, only the LLM output
            following this prefix will follow the backchannel response
        backchannel_llm_config:
          anyOf:
            - $ref: '#/components/schemas/LLMGroupConfig-Input'
            - type: 'null'
          title: Backchannel LLM Configuration
          description: Configuration for the back channel LLM
        backchannel_static_responses:
          items:
            type: string
          type: array
          title: Backchannel Static Responses
          description: >-
            List of static responses from which one will be selected as a
            backchannel response.
        backchannel_static_responses_selection_mode:
          anyOf:
            - $ref: '#/components/schemas/SelectionMode'
            - type: 'null'
          title: Backchannel Static Responses Selection Mode
          description: Selection mode for backchannel static responses
          default: random
        backchannel_min_patience_time_ms:
          anyOf:
            - type: integer
            - type: 'null'
          title: Backchannel Minimum Patience Time
          description: >-
            Grace period in milliseconds until which we will unconditionally
            wait for the main LLM to respond, unless it has already responded.
          default: 2000
      type: object
      title: Group of regular and backchanneling LLMs
    LLMTestMemberInfo:
      properties:
        index:
          anyOf:
            - type: integer
            - type: 'null'
          title: Index
          description: Position within the group's llms list.
        logical_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Logical Id
        provider:
          anyOf:
            - type: string
            - type: 'null'
          title: Provider
        model:
          anyOf:
            - type: string
            - type: 'null'
          title: Model
      type: object
      title: LLMTestMemberInfo
      description: >-
        Identity of the group member that produced a given response (null fields
        for single configs).
    ValidationError:
      properties:
        loc:
          items:
            anyOf:
              - type: string
              - type: integer
          type: array
          title: Location
        msg:
          type: string
          title: Message
        type:
          type: string
          title: Error Type
        input:
          title: Input
        ctx:
          type: object
          title: Context
      type: object
      required:
        - loc
        - msg
        - type
      title: ValidationError
    LLMProvider:
      type: string
      enum:
        - default_provider
        - azure_openai
        - openai
        - google
        - anthropic
        - bedrock
        - custom
      title: LLMProvider
    AZUREOPENAIModel:
      type: string
      enum:
        - gpt-5-chat
        - gpt-5-mini
        - gpt-5-nano
        - gpt-4.1-nano
        - gpt-4.1-mini
        - gpt-4.1
      title: AZUREOPENAIModel
    OPENAIModel:
      type: string
      enum:
        - gpt-5.4
        - gpt-5.4-mini
        - gpt-5.4-nano
        - gpt-5.2
        - gpt-5.1
        - gpt-5-chat-latest
        - gpt-5.1-chat-latest
        - gpt-5.2-chat-latest
        - gpt-5.3-chat-latest
        - gpt-5-nano
        - gpt-5-mini
        - gpt-5
        - gpt-4.1-nano
        - gpt-4.1-mini
        - gpt-4.1
        - gpt-4
        - gpt-4o-mini
        - gpt-4o
        - gpt-3.5-turbo
      title: OPENAIModel
    GOOGLEModel:
      type: string
      enum:
        - gemini-flash-latest
        - gemini-flash-lite-latest
        - gemini-3.1-pro-preview
        - gemini-3.5-flash
        - gemini-3-flash-preview
        - gemini-2.5-pro
        - gemini-2.5-flash
        - gemini-2.0-flash
        - gemini-2.0-flash-lite
        - gemini-1.5-pro
        - gemini-1.5-flash
        - gemini-1.5-flash-8b
      title: GOOGLEModel
    ANTHROPICModel:
      type: string
      enum:
        - claude-opus-4-6
        - claude-opus-4-5-20251101
        - claude-opus-4-1-20250805
        - claude-opus-4-20250514
        - claude-sonnet-4-6
        - claude-sonnet-4-5-20250929
        - claude-sonnet-4-20250514
        - claude-haiku-4-5-20251001
      title: ANTHROPICModel
    OktaAuthConfig:
      properties:
        integration_id:
          anyOf:
            - type: string
            - type: 'null'
          title: Okta Integration ID
          description: >-
            ID of an Okta integration to use for bearer-token authentication.
            When set, the runtime fetches a cached OAuth token from this
            integration and injects it as the Authorization header. Ignored when
            api_key or an Authorization default_header is already provided.
      type: object
      title: OktaAuthConfig
      description: Configuration for Okta-based bearer-token authentication.
    OperationMode:
      type: string
      enum:
        - parallel_select_one
        - sequential_with_proactive
      title: OperationMode
    SelectionMode:
      type: string
      enum:
        - random
        - sequence
      title: SelectionMode
  securitySchemes:
    bearer:
      scheme: bearer
      bearerFormat: Bearer
      type: http
      description: >-
        Retrieve your API Key from [Dashboard API Keys
        Section](https://dashboard.interactly.ai/api-keys).

````