spring-ai icon indicating copy to clipboard operation
spring-ai copied to clipboard

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

Open dolukhanov opened this issue 6 months ago • 3 comments
trafficstars

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() );

    }
}

dolukhanov avatar Apr 23 '25 19:04 dolukhanov

Pull request added.

dolukhanov avatar Apr 23 '25 20:04 dolukhanov

The PR adds a new message type, but doesn't solve the ease of use problem in sending this new message type for openai when using chat client. needs some more thought.

markpollack avatar May 06 '25 04:05 markpollack

Created PR #3089

I followed @dolukhanov's implementation and tried to add support for the developer role in the ChatClient to help deliver this in time.

@markpollack @ilayaperumalg There might be something I missed, so please review and let me know if any adjustments are needed.

andresssantos avatar May 10 '25 21:05 andresssantos