Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/narenaryan/promptml
Prompt markup language (A.K.A PromptML) library is specially built for AI systems - from Vidura AI
https://github.com/narenaryan/promptml
ai generative-ai machine-learning prompt-engineering
Last synced: 9 days ago
JSON representation
Prompt markup language (A.K.A PromptML) library is specially built for AI systems - from Vidura AI
- Host: GitHub
- URL: https://github.com/narenaryan/promptml
- Owner: narenaryan
- License: mit
- Created: 2024-04-27T01:29:48.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2024-05-19T03:00:29.000Z (7 months ago)
- Last Synced: 2024-05-20T03:03:25.587Z (7 months ago)
- Topics: ai, generative-ai, machine-learning, prompt-engineering
- Language: Python
- Homepage: https://www.promptml.org
- Size: 229 KB
- Stars: 16
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
- Code of conduct: CODE_OF_CONDUCT.md
Awesome Lists containing this project
- jimsghstars - narenaryan/promptml - Prompt markup language (A.K.A PromptML) library is specially built for AI systems - from Vidura AI (Python)
README
# PromptML (Prompt Markup Language)
![logo](./logo.png)
A simple, yet elegant markup language for defining AI Prompts as Code (APaC). Built to be used by AI agents to automatically prompt for other AI systems.
## Why PromptML ?
PromptML is built to provide a way for prompt engineers to define the AI prompts in a deterministic way. This is a Domain Specific Language (DSL) which defines characteristics of a prompt including context, objective, instructions and it's metadata.
A regular prompt is an amalgamation of all these aspects into one entity. PromptML splits it into multiple sections and makes the information explicit.The language grammar can be found here: [grammar.lark](./src/promptml/grammar.lark)
## For impatient:
Install `promptml-cli` from here: https://github.com/narenaryan/promptml-cli to run PromptML programs with OpenAI & Google models.## How PromptML looks ?
The language is simple. You start blocks with `@` section annotation. A section ends with `@end` marker. Comments are started with `#` key. The prompt files ends with `.pml` extension.
```pml
@prompt
# Add task context
@context
@end# Add task objective
@objective
# This is the final question or ask
@end# Add one or more instructions to execute the prompt
@instructions
@step
@end
@end# Add one or more examples
@examples
@example
@input
# Add your example input
@end
@output
# Add your example output
@end
@end
@end# Add task constraints
@constraints
@length min: 1 max: 10 @end
@end# Add prompt category
@category
@end# Add custom metadata
@metadata
@end
@end
```See [prompt.pml](./prompt.pml) to see for complete syntax.
## Design
Regular text prompts are very abstract in nature. Natural languages are very flexible but provides least reliability. How to provide context for an AI system and ask something ? Shouldn't we specify that explicitly.
PromptML is an attempt to make contents of a prompt explicit with a simple language.## Core tenets of PromptML
Below are the qualities PromptML brings to prompt engineering domain:
1. Standardization instead of fragmentation
2. Collaboration instead of confusion
3. Enabling version control-ability
4. Promoting verbosity for better results## Why not use XML, YAML, or JSON for PromptML ?
First, XML, JSON, and YAML are not DSL languages. They are data formats that can represent any form of data. Second, generative AI needs a strict, yet flexible data language with fixed constraints which evolve along with the domain.
PromptML is built exactly to solve those two issues.
Language grammar is influenced by XML & Ruby, so if you know any one of them, you will feel very comfortable writing prompts in PromptML.
## Usage
1. Install Python requirements
```bash
pip install -r requirements.txt
```2. import the parser and parse a promptML file
```py
from promptml.parser import PromptParserpromptml_code = '''
@prompt
@context
This is the context section.
@end@objective
This is the objective section.
@end@instructions
@step
Step 1
@end
@end@examples
@example
@input
Input example 1
@end
@output
Output example 1
@end
@end
@end@category
Prompt Management
@end@constraints
@length min: 1 max: 10 @end
@end@metadata
top_p: 0.9
n: 1
team: promptml
@end
@end
'''parser = PromptParser(promptml_code)
prompt = parser.parse()print(prompt)
# Output: {
# 'context': 'This is the context section.',
# 'objective': 'This is the objective section.',
# 'category': 'Prompt Management',
# 'instructions': ['Step 1'],
# 'examples': [
# {'input': 'Input example 1', 'output': 'Output example 1'}
# ],
# 'constraints': {'length': {'min': 1, 'max': 10}},
# 'metadata': {'top_p': 0.9, 'n': 1, 'team': 'promptml'}
# }
```## Defining variables
You can define variables in the promptML file and use them in the prompt `context` and `objective`. The variables are defined in the `@vars` section and referenced using `$var` syntax in either `context` or `objective` sections.
```pml
@vars
name = "John Doe"
@end@prompt
@context
You are a name changing expert.
@end@objective
You have to change the name: $name to an ancient name.
@end
@end
```## Serialization
PromptML document can be serialized into multiple formats like:
1. XML
2. YAML
3. JSONXML prompts are very-well understood by LLMs and promptML code can be used to generate an XML prompt like this:
From previous example in this README file, we can call a `to_xml()` method on `prompt` object to generate a XML prompt.
```python
# XML
serialized = prompt.to_xml()print(serialized)
```Similarly you can generate a YAML or JSON prompt respectively from the same object:
```python
# JSON
prompt.to_json()# YAML
prompt.to_yaml()
```## TODO
We are currently working on:
1. `VSCode` syntax highlighting support
2. Add more unit tests
3. Add RAG example