spring-projects / spring-projects/spring-ai

OpenAI o1 models support 'developer' role instead of 'system' role.

Open
#2,863 3 comments 0 reactions 1 assignee View on GitHub

@tzolov is already working on this.

Since May 6, 2025.

azure openai
Dominant language
Java
Stars
9.5k
Forks
2.9k
Avg merge
1d 7h
Merged PRs (30d)
6

Description

Bug description
According to the OpenAI Guide and the Model Spec the former 'system' role' has now been replaced by the 'developer' role.

The o1 range of models reject the system role within a prompt

Environment
Java: 21
Spring AI: M7
Spring Boot: 3.4.4

Steps to reproduce

Create a Prompt containing a SystemMessage and a UserMessage using an o1 model e.g. o1-mini-2024-09-12

The call fails with:

Caused by: org.springframework.ai.retry.NonTransientAiException: 400 - {
  "error": {
    "message": "Unsupported value: 'messages[0].role' does not support 'system' with this model.",
    "type": "invalid_request_error",
    "param": "messages[0].role",
    "code": "unsupported_value"
  }

Expected behavior
A successful call to Open AI

Minimal Complete Reproducible example

@Component
public class TestOpenAI
{
    private final static Logger log = LoggerFactory.getLogger( TestOpenAI.class );

    private OpenAiChatModel openAiChatModel;

    public TestOpenAI( OpenAiChatModel openAiChatModel )
    {
        this.openAiChatModel = openAiChatModel;
    }

    @PostConstruct
    public void run()
    {
        log.info( "Running OpenAI" );

        OpenAiChatOptions options = OpenAiChatOptions.builder().model( "o1-mini-2024-09-12" ).build();

        SystemMessage systemMessage = new SystemMessage(
                "You are a helpful assistant knowledgable about AI Platforms" );

        UserMessage userMessage = new UserMessage( "Tell me about OpenAI" );

        List<Message> openAiMessages = List.of( systemMessage, userMessage );
        Prompt prompt = new Prompt( openAiMessages, options );

        ChatResponse call = openAiChatModel.call( prompt );
        Generation generation = call.getResults().get( 0 );

        System.out.println( generation.getOutput().getText() );

    }
}

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.