A TypeScript port of chat-completion-md that converts between JSON and Markdown formats for OpenAI chat completions.
This project provides utilities to convert between JSON format (used for OpenAI's Chat Completion API) and a more readable Markdown format, making it easier to work with and version control your prompts.
This project is a TypeScript port of chat-completion-md by S1M0N38. The original project was written in Python, and this version maintains the same functionality while leveraging TypeScript and Zod for type safety and validation.
# Using bun
bun add chat-completion-md-ts
# Using npm
npm install chat-completion-md-ts
# Using yarn
yarn add chat-completion-md-ts
Convert a JSON chat completion request to a markdown format:
import { jsonToMd } from 'chat-completion-md-ts';
const json = `{
"model": "gpt-4",
"temperature": 0.7,
"messages": [
{
"role": "system",
"content": "You are a helpful assistant."
},
{
"role": "user",
"content": "Hello, how are you?"
}
]
}`;
const markdown = jsonToMd(json);
console.log(markdown);
Output:
---
model: gpt-4
temperature: 0.7
---
# system
You are a helpful assistant.
---
# user
Hello, how are you?
---
Convert a markdown format back to JSON for use with the OpenAI API:
import { mdToJson } from 'chat-completion-md-ts';
const markdown = `---
model: gpt-4
temperature: 0.7
---
# system
You are a helpful assistant.
---
# user
Hello, how are you?
---`;
const json = mdToJson(markdown);
console.log(JSON.parse(json));
This library uses Zod for runtime type checking and validation. It will validate:
- Required fields (e.g.,
model
) - Message roles (
system
,user
,assistant
,developer
,tool
) - Data types for all fields
- Structure of the JSON and Markdown
{
frequency_penalty?: number;
logit_bias?: Record<string, number>;
max_tokens?: number;
model: string;
presence_penalty?: number;
stream?: boolean;
temperature?: number;
top_p?: number;
}
{
content: string;
role: "assistant" | "developer" | "system" | "tool" | "user";
}
Tests are written using Bun's test runner. To run the tests:
bun test
MIT
Contributions are welcome! Please feel free to submit a Pull Request.
If you find a bug or have a feature request, please create an issue on the GitHub repository.