# O1 models do not support 'system' role in chat completion?

**URL:** <https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880>\
**Category:** API\
**Tags:** o1\
**Created:** [September 24, 2024, 2:31am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880 "2024-09-24T02:31:22Z")\
**Posts on this page:** 20\
**Page:** 1

<div class="post-metadata">

**Author:** ![SomebodySysop](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/somebodysysop/32/17613_2.png) [@SomebodySysop](https://community.openai.com/u/SomebodySysop)\
**Post date:** [September 24, 2024, 2:31am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/1 "2024-09-24T02:31:22Z")

</div>

I just tried slotting the o1-preview and o1-mini models into my chat completion and code and am getting this error on both:

_Error occurred (getChatCompletionOpenAI): Unsupported value: ‘messages[0].role’ does not support ‘system’ with this model._

For all the other OpenAI models, this is how I initialize system and user roles:

```auto
		// Initialize the $systemMessage array with the system message
		$systemRole = array(
			array("role" => "system", "content" => $systemMessage)
		);
|||// Define the new user message (question + context docs)|
|---|---|---|
|||$newUserMessage = array(role => user, content => $prompt);|

```

This is no longer the case?

Here is the only documentation given:

```auto
curl https://api.openai.com/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -d "{
    \"model\": \"o1-preview\",
    \"messages\": [
      {
        \"role\": \"user\",
        \"content\": \"Write a bash script that takes a matrix represented as a string with format '[1,2],[3,4],[5,6]' and prints the transpose in the same format.\"
      }
    ]
  }"

```

[https://platform.openai.com/docs/guides/reasoning/quickstart?lang=curl](https://platform.openai.com/docs/guides/reasoning/quickstart?lang=curl)

What am I missing here?

---

<div class="post-metadata">

**Author:** ![jr.2509](https://avatars.discourse-cdn.com/v4/letter/j/76d3ee/32.png) [@jr.2509](https://community.openai.com/u/jr.2509)\
**Post date:** [September 24, 2024, 2:43am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/2 "2024-09-24T02:43:02Z")

</div>

System messages are currently not supported under the o1 models.

> **Beta limitations**
> 
> - **Message types** : user and assistant messages only, system messages are not supported.

It seems like this will change in the future though.

---

<div class="post-metadata">

**Author:** ![SomebodySysop](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/somebodysysop/32/17613_2.png) [@SomebodySysop](https://community.openai.com/u/SomebodySysop)\
**Post date:** [September 24, 2024, 3:40am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/3 "2024-09-24T03:40:55Z")

</div>

OK, thanks.

FYI for anybody else looking at this:

- Error occurred (getChatCompletionOpenAI): Unsupported parameter: ‘max\_tokens’ is not supported with this model. Use ‘max\_completion\_tokens’ instead.
- Error occurred (getChatCompletionOpenAI): Unsupported value: ‘temperature’ does not support 0 with this model. Only the default (1) value is supported.

Not sure if this is mentioned anywhere.

Oops. Guess I should read the documentation.

- **Other** : `temperature`, `top_p` and `n` are fixed at `1`, while `presence_penalty` and `frequency_penalty` are fixed at `0`.

---

<div class="post-metadata">

**Author:** ![\_j](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/_j/32/766292_2.png) [@\_j](https://community.openai.com/u/_j)\
**Post date:** [September 24, 2024, 3:56am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/4 "2024-09-24T03:56:48Z")

</div>

Yep, some examples of short-circuits I’ve added, because there’s no logical encompassing way to transition between models mid-chat.

```auto
            if self.aimodel.currentText().startswith("o1") and role == "system":
                role = "user"
                continue

```

```
            # Get the selected model name
            model_name = self.aimodel.currentText()

            # Initialize the parameter dictionary
            params = {
                'model': model_name,
                'messages': full_messages
            }

            # If the model does not start with "o1", add additional parameters
            if not model_name.startswith("o1"):
                params.update({
                    'temperature': softmax_temperature,
                    'max_tokens': response_tokens,
                    'top_p': top_p_set
                })

```

That is - when you’ve also put back some non-streaming calling and display methods, not offered functions and stripped them from chat history with facsimiles for context, stripped images out of messages, upped timeouts, greyed out retry on particular message criteria, etc.

---

<div class="post-metadata">

**Author:** ![search620](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/search620/32/139827_2.png) [@search620](https://community.openai.com/u/search620)\
**Post date:** [September 24, 2024, 4:09pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/5 "2024-09-24T16:09:20Z")

</div>

Did you consider that maybe it is not supported because the model itself is backend with system prompt? I think this is the reason why

---

<div class="post-metadata">

**Author:** ![shatzakis](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/shatzakis/32/140348_2.png) [@shatzakis](https://community.openai.com/u/shatzakis)\
**Post date:** [September 25, 2024, 2:28pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/6 "2024-09-25T14:28:14Z")

</div>

Correct. Replacing “system” with “user” should resolve that error for the o1 models. Note, that many other parameters are not supported though that may need to be changes/refactored in your code (i.e. streaming is not supported either).

---

<div class="post-metadata">

**Author:** ![\_j](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/_j/32/766292_2.png) [@\_j](https://community.openai.com/u/_j)\
**Post date:** [September 25, 2024, 3:13pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/7 "2024-09-25T15:13:41Z")

</div>

On the API, you can be assured that your entire input context is doubted and examined against rules and policy at every turn. Telling the AI it is a new “You are”, or the assistant introducing and talking about its new, unbelieved, name just invokes more reasoning tokens, specifically categorizing or countering “persona” or “role-play”, at output pricing.

 ![image](https://us1.discourse-cdn.com/openai1/original/4X/8/c/d/8cdd31f977467cb556e54abd6090a7c7cc0331b6.png)

---

<div class="post-metadata">

**Author:** ![fidika](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/fidika/32/448284_2.png) [@fidika](https://community.openai.com/u/fidika)\
**Post date:** [October 25, 2024, 8:19pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/8 "2024-10-25T20:19:33Z")

</div>

I’m just realizing now that o1-preview is fundamentally broken as an API, and missing a ton of stuff:

- no system prompt
- no temperature setting
- no response format (json-object)

makes this model completely unusable for me.

---

<div class="post-metadata">

**Author:** ![jr.2509](https://avatars.discourse-cdn.com/v4/letter/j/76d3ee/32.png) [@jr.2509](https://community.openai.com/u/jr.2509)\
**Post date:** [October 26, 2024, 5:21am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/9 "2024-10-26T05:21:51Z")

</div>

It’s in the planning for at least some of these features to become available once the models are out of the beta phase. See [here](https://platform.openai.com/docs/guides/reasoning/beta-limitations) for reference.

---

<div class="post-metadata">

**Author:** ![davthecoder](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/davthecoder/32/502737_2.png) [@davthecoder](https://community.openai.com/u/davthecoder)\
**Post date:** [November 20, 2024, 9:54am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/10 "2024-11-20T09:54:53Z")

</div>

You can try using “assistant” as a role.

---

<div class="post-metadata">

**Author:** ![vahid.vaezian](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/vahid.vaezian/32/154205_2.png) [@vahid.vaezian](https://community.openai.com/u/vahid.vaezian)\
**Post date:** [December 23, 2024, 4:31pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/12 "2024-12-23T16:31:28Z")

</div>

In the [docs](https://platform.openai.com/docs/guides/reasoning/beta-limitations#advice-on-prompting) it says:

- **Developer messages are the new system messages:** Starting with `o1-2024-12-17`, o1 models support `developer` messages rather than `system` messages, to align with the [chain of command behavior described in the model spec](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command). [Learn more](https://platform.openai.com/docs/guides/text-generation#building-prompts).

---

<div class="post-metadata">

**Author:** ![maxime.milhe](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/maxime.milhe/32/511259_2.png) [@maxime.milhe](https://community.openai.com/u/maxime.milhe)\
**Post date:** [January 5, 2025, 7:39pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/13 "2025-01-05T19:39:14Z")

</div>

The “developer” role is functional for models like 4o (while “system” remains compatible for legacy reasons). However, as of today, o1 does not accept the “developer” role, nor does it accept “system”.

---

<div class="post-metadata">

**Author:** ![milesanderson077](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/milesanderson077/32/509059_2.png) [@milesanderson077](https://community.openai.com/u/milesanderson077)\
**Post date:** [January 5, 2025, 7:48pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/14 "2025-01-05T19:48:39Z")

</div>

Hope so will be available in future

---

<div class="post-metadata">

**Author:** ![jhakulin](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/jhakulin/32/449110_2.png) [@jhakulin](https://community.openai.com/u/jhakulin)\
**Post date:** [January 19, 2025, 9:17pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/15 "2025-01-19T21:17:09Z")

</div>

I can use o1 model with the new developer role, however o1-mini seems not support currently either developer or system roles. I would have assumed all o1 models behave the same regarding this

---

<div class="post-metadata">

**Author:** ![glaksmono](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/glaksmono/32/448370_2.png) [@glaksmono](https://community.openai.com/u/glaksmono)\
**Post date:** [January 21, 2025, 6:01am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/16 "2025-01-21T06:01:34Z")

</div>

Is there a timeline on this?

---

<div class="post-metadata">

**Author:** ![\_j](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/_j/32/766292_2.png) [@\_j](https://community.openai.com/u/_j)\
**Post date:** [January 21, 2025, 6:40am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/17 "2025-01-21T06:40:46Z")

</div>

> [@glaksmono](#):
>
> Is there a timeline

The only “o1” series model to support a “developer” message is the model named `o1`, an alias for `o1-2024-12-17`.

This model is currently in roll-out to only tier-5 users so far.

Previous September 2024 models `o1-mini` and `o1-preview` do not have new revisions accepting a developer instruction.

What is not clearly documented is if only one developer message is actually used, if multiple can be interleaved in a chat, or if they are all appended into an enclosed initial message container.

---

<div class="post-metadata">

**Author:** ![glaksmono](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/glaksmono/32/448370_2.png) [@glaksmono](https://community.openai.com/u/glaksmono)\
**Post date:** [January 21, 2025, 6:51am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/18 "2025-01-21T06:51:47Z")

</div>

what’s the difference between “developer” and “system”?

---

<div class="post-metadata">

**Author:** ![\_j](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/_j/32/766292_2.png) [@\_j](https://community.openai.com/u/_j)\
**Post date:** [January 21, 2025, 6:55am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/19 "2025-01-21T06:55:07Z")

</div>

System is simply a role name. It can take place anywhere in a list of messages.

Developer is a new message purpose that fits in with “instruction hiearchy” AI architecture, made blander for you as “chain-of-command” in newest documentation. Specifically for o1 model.

> **Developer messages are the new system messages:** Starting with `o1-2024-12-17`, o1 models support `developer` messages rather than `system` messages, to align with the [chain of command behavior described in the model spec](https://cdn.openai.com/spec/model-spec-2024-05-08.html#follow-the-chain-of-command). [Learn more](https://platform.openai.com/docs/guides/text-generation#building-prompts).

Basically: you have less rights and less control of AI generation, vs OpenAI’s own “platform”, and “system” message is deprecated on existing models to train you to sacrifice ultimate control.

---

<div class="post-metadata">

**Author:** ![curt.kennedy](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/curt.kennedy/32/709249_2.png) [@curt.kennedy](https://community.openai.com/u/curt.kennedy)\
**Post date:** [January 21, 2025, 6:57am UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/20 "2025-01-21T06:57:57Z")

</div>

It’s just wording difference AFAIK. It’s in `o1` proper.

Just swap over to “developer” and think of it as “system” for these models.

 ![Screenshot 2025-01-20 at 11.52.51 PM](https://us1.discourse-cdn.com/openai1/original/4X/3/2/6/3266b9bc660452425162a71b1300ad7aa4c8ab61.png)

Another change is “max\_completion\_tokens” vs. max\_tokens. Or else it will error out.

Also, weirdly “system” still works in `o1`, for now, but it’s not documented, so maybe stay away from this until it makes it into the docs.

 ![Screenshot 2025-01-21 at 12.03.49 AM](https://us1.discourse-cdn.com/openai1/original/4X/2/7/1/271874534225079f4f9dce0f5abe2ee5e7fb0269.png)

---

<div class="post-metadata">

**Author:** ![Konsti](https://sea2.discourse-cdn.com/openai1/user_avatar/community.openai.com/konsti/32/236432_2.png) [@Konsti](https://community.openai.com/u/Konsti)\
**Post date:** [January 21, 2025, 3:42pm UTC](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880/21 "2025-01-21T15:42:22Z")

</div>

For me the only one working is “assistant”

 ![image](https://us1.discourse-cdn.com/openai1/original/4X/7/5/8/7583c6450bc1e6a905d02f62efaae8635b44496b.png)  
The other ones (system & developer) throw an error…

[Next page](https://community.openai.com/t/o1-models-do-not-support-system-role-in-chat-completion/953880.md?page=2)
