Skip to content

OrchestrationFilterException is triggered instead of OrchestrationClientException #987

Description

@sergeymeshkov

Describe the Problem/Bug

There is a request attached with the LLM model configuration (gpt-5, version latest), where an unsupported temperature parameter was intentionally added to the configref params to trigger an orchestration error — however, the returned exception is an instance of OrchestrationFilterException with input_filtering message "Filtering module executed successfully on content: no violations detected", even though the error is unrelated to content filtering; shouldn't such errors be thrown as another type of exceptions instead?

Configured configref example

{
  "id": "d2bf26ae-d7a2-46c1-bd0e-9ba86e06fe1e",
  "name": "name",
  "version": "0.0.1",
  "scenario": "scenario",
  "creation_timestamp": "2026-08-19T08:56:12.190000",
  "managed_by": "imperative",
  "is_version_head": true,
  "spec": {
    "modules": {
      "prompt_templating": {
        "prompt": {
          "template": [
            {
              "role": "system",
              "content": "You are an assistant"
            }
          ]
        },
        "model": {
          "name": "gpt-5",
          "version": "latest",
          "params": {
            "temperature": 2,
            "max_tokens": 2000
          },
          "timeout": 600,
          "max_retries": 2
        }
      },
      "filtering": {
        "input": {
          "filters": [
            {
              "type": "azure_content_safety",
              "config": {
                "hate": 2,
                "self_harm": 2,
                "sexual": 2,
                "violence": 2,
                "prompt_shield": false
              }
            }
          ]
        },
        "output": {
          "filters": [
            {
              "type": "azure_content_safety",
              "config": {
                "hate": 2,
                "self_harm": 2,
                "sexual": 2,
                "violence": 2,
                "protected_material_code": false
              }
            }
          ]
        }
      }
    }
  }
}

Raw request

{
  "config_ref": {
    "scenario": "scenario",
    "name": "name",
    "version": "0.0.1"
  },
  "config": {
    "modules": {
      "prompt_templating": {
        "prompt": {
          "template": [
            {
              "role": "system",
              "content": "You are an assistant"
            },
            {
              "content": "How are you?",
              "role": "user"
            }
          ],
          "tools": [
          ]
        }
      }
    }
  }
}

Raw response

{
  "error": {
    "request_id": "c26b6de6-26f9-9063-bee6-2d6f28b17787",
    "code": 400,
    "message": "400 - LLM Module: gpt-5 models (including gpt-5-codex) don't support temperature=2.0",
    "location": "LLM Module",
    "intermediate_results": {
      "templating": [
        {
          "role": "system",
          "content": ""
        },
        {
          "content": "How are you?",
          "role": "user"
        }
      ],
      "input_filtering": {
        "message": "Filtering module executed successfully on content: no violations detected.",
        "data": {
          "azure_content_safety": {
            "hate": 0,
            "self_harm": 0,
            "sexual": 0,
            "violence": 2
          }
        }
      }
    },
    "headers": {
      "Content-Type": "application/json"
    }
  }
}

Steps to Reproduce

  1. Set up a prompt template with gpt-5/latest model and the temperature parameter
  2. Make request to the orchestration API with created config reference and any message history

Expected Behavior

OrchestrationFilterException should not be thrown, another one should be thrown instead

Screenshots

No response

Used Versions

  • openjdk version "25.0.4" 2026-07-21 LTS
  • Apache Maven 3.9.16
  • com.sap.ai.sdk:orchestration:1.22.0
  • Spring Boot 4.1.0-sap-01

Code Examples

Request configuration

        CompletionRequestConfigurationReferenceByNameScenarioVersion request = CompletionRequestConfigurationReferenceByNameScenarioVersion.create()
                .configRef(configRef)
                .config(config);
    protected CompletionPostResponse executeConfigRefOverlayRequest(CompletionPostRequest request) throws ResilienceRuntimeException {
        Duration requestTimeout = getRequestTimeout();
        TimeLimiterConfiguration timeout = TimeLimiterConfiguration.of(requestTimeout);
        ResilienceConfiguration resilienceConfiguration = ResilienceConfiguration.empty("config")
                .timeLimiterConfiguration(timeout);

        return ResilienceDecorator.executeSupplier(() -> this.orchestrationClient.executeRequest(request), resilienceConfiguration);
    }

Stack Trace

No response

Log File

Affected Development Phase

Development

Impact

Impaired

Timeline

No response

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions