Prompt is essentially a string, but it should behave somewhat differently from a standard string:
📏 Length & Slicing: A prompt string should consider the length in terms of tokens, not characters, and slicing should be done accordingly.
👨 Role & Concatenation: Prompt strings should have designated roles (e.g., system, user, assistant) and should be concatenated in a specific manner.
Features
prompt-string provides two types:
Pfor prompt, inherits fromstring. Length, Slicing and concatenation are modified and support new attributes like.role.p = P("You're a helpful assistant")
PCfor prompt chain, act likelist[P]. Link a series of prompt and support.messages(...)pc = p1 / p2 / p3
Install
pip install prompt-string
Quick Start
Length & Slicing
from prompt_string import P
prompt = P("you're a helpful assistant.")
print("Total token size:", len(prompt))
print("Decoded result of the second token:", prompt[2])
print("The decoded result of first three tokens:", prompt[:3])
P supports some str native methods to still return a P object:
.format.replace
prompt = P("you're a helpful assistant. {temp}")
print(len(prompt.format(temp="End of instructions")))
print(len(prompt.replace("{temp}", "")))
🧐 Raise an issue if you think other methods should be supported
Role
from prompt_string import P
sp = P("you're a helpful assistant.", role="system")
up = P("How are you?", role="user")
print(sp.role, up.role, (sp+up).role)
print(sp + up)
print(sp.message())
-
role can be
None,strforP -
For single prompt, like
sp, the role isstr(e.g.system) orNone -
sp+upwill concatenate two prompt string and generate a newP, whose role will be updated if the latter one has one.- For example,
sp+up's role isuser;sp+P('Hi')'s role issystem
- For example,
-
.message(...)return a JSON object of this prompt.
Concatenation
pc = sp / up
print(pc.roles)
print(pc.messages())
For concatenated prompts, like sp / up, the type will be converted to PC (prompt chain), PC has below things:
.roles, a list of roles. For example,(sp|up).rolesis['system', 'user'].messages(...)pack prompts into OpenAI-Compatible messages JSON, where you can directly pass it toclient.chat.completions.create(messages=...).messageswill assume the first role isuser, then proceed in the order of user-assistant. When a prompt has a role, it will use that role. checkpc.infer_rolefor final roles in messages.
Few promises in prompt-string
Pinherits fromstring. Therefore, aside from the mentioned features, its other behaviors are just like those of astringin Python.prompt-stringwon't add OpenAI and other AI SDKs as dependencies; it is simply a toolkit for prompts.prompt-stringwill be super light and fast, with no heavy processes running behind the scenes.
Release files for prompt-string 0.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| prompt_string-0.0.1.tar.gz | 6.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| prompt_string-0.0.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 12.2 kB
Release files / prompt_string-0.0.1.tar.gz
| Download URL | prompt_string-0.0.1.tar.gz |
|---|---|
| Size | 6.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c1c8c89006ff72bea5280d1bd2b62027a572d56a71df29a90a9dfa8590845e9c
|
|
BLAKE2b-256 checksum How to use checksums |
b0a284ab2e11b587ff78dbf5ea8a71b4f60d38d69877a1339455e491ecc6a98b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.9
|
Release files / prompt_string-0.0.1-py3-none-any.whl
| Download URL | prompt_string-0.0.1-py3-none-any.whl |
|---|---|
| Size | 6.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
6485f802ba7d3817a640f21e27f0f1766566fa304d4875ad700e97bc9d57ded9
|
|
BLAKE2b-256 checksum How to use checksums |
d7ce4d67cde02928fafdc8a26fa9875c8b7fb64ebd3a7cae677f4e5d05dda136
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/5.1.1 CPython/3.11.9
|