To me it makes a bit of sense because I had built a GPT3-based chat two weeks ago, based on their completion documentation^1
The "format" for this prompt already has everything needed: System prompt and history of messages.
```
The following is a conversation with an AI assistant. The assistant is helpful, creative, clever, and very friendly.
Human: Hello, who are you?
AI: I am an AI created by OpenAI. How can I help you today?
Human: Please translate "Hello" to German
AI:
```
To retain context, I kept the system prompt on top and added the prior prompt/completions to the history stack in-between.
End-user-experience-wise, this worked really, really well. Practically as good as the ChatGPT UI.
As a developer though, it was a lot of fiddling, splicing, and dicing of strings. But again, this worked well and I would have kept it as-is for as long as possible.
When I saw the ChatML format, it wasn't a giant leap.
```
<|im_start|>system
You are ChatGPT, a large language model trained by OpenAI. Answer as concisely as possible.
Knowledge cutoff: 2021-09-01
Current date: 2023-03-01<|im_end|>
<|im_start|>user
Hello, who are you?<|im_end|>
<|im_start|>assistant
I am an AI created by OpenAI. How can I help you today?
<|im_end|>
<|im_start|>user
Please translate "Hello" to German<|im_end|>
```
I've used that, too. Handling of prior conversations became a bit more manageable. But to honest, there's a lot of markup to keep track of.
To me, the less-discussed JSON format^2 works best. (I'm building a macOS app in Swift)
```
{
"model": "gpt-3.5-turbo",
"messages": [
{
"role": "system",
"content": "You are a helpful and succinct assistant AI created by OpenAI."
},
{
"role": "user",
"content": "Hello, who are you?"
},
{
"role": "assistant",
"content": "I am an AI created by OpenAI. How can I help you today?"
},
{
"role": "user",
"content": "Please translate "Hello" to German"
}