Metadata-Version: 2.1
Name: promplate
Version: 0.2.2
Summary: cross-language prompt engineering framework
Home-page: https://promplate.dev/
License: MIT
Keywords: prompt,template,nlp,llm
Author: Muspi Merol
Author-email: admin@muspimerol.site
Requires-Python: >=3.10,<4.0
Classifier: Development Status :: 4 - Beta
Classifier: License :: OSI Approved :: MIT License
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Topic :: Text Processing :: Markup
Classifier: Typing :: Typed
Provides-Extra: aiofiles
Provides-Extra: all
Provides-Extra: httpx
Provides-Extra: openai
Requires-Dist: aiofiles (>=23.2,<24.0) ; extra == "aiofiles" or extra == "all"
Requires-Dist: httpx (>=0.24,<1.0) ; extra == "httpx" or extra == "all"
Requires-Dist: openai (>=0.27,<1.0) ; extra == "openai" or extra == "all"
Project-URL: Repository, https://github.com/promplate/core
Description-Content-Type: text/markdown

# Promplate

```text
</Promplate/> = /prompt/ + <template>
```

**Promplate** is a prompting framework focusing on developing experience. However, it can also be a super-convenient SDK for simple LLM calls. Promplate progressively enhance your prompting workflow. And it values flexibility as well as perfect conventions. [Learn more](https://docs.promplate.dev/py)

## IDE Support 🌹

I try to make the syntax compatible with `Jinja2`.

## Future Features (or TODOs?)

- [x] (lazy) template compiling
- [x] support any evaluatable expression inside template like `{{ [ i for i in range(n) ] }}`
- [ ] create documentation
- [ ] javascript implementation
- [ ] support chains and agents
- [ ] error handling
- [ ] template rich printing
- [x] implement component syntax `{% Component * arg1 arg2 kwarg1=1 kwarg2=2 **kwargs %}`
- [ ] allow more corner cases for the component syntax
  - [ ] `{% Componnet arg=" * " %}`
  - [ ] `{% Componnet arg = " * " %}`
  - [ ] `{% Componnet arg = await f()`
- [ ] if the outer context is a `defaultdict`, the context passing to component should be?
  - or maybe this should be determined by the component itself
  - because a component could be a `Node` and a `Node` can have preprocesses
- [ ] support while loop and isolated variable declaration
- [x] `else` and `elif` tag
- [ ] directory based routing
- [ ] caching (and cache-controls maybe?)
- [x] implement more [loaders](https://jinja.palletsprojects.com/api/#loaders)
  - for now you can load template from local filesystem or web urls
  - but component syntax only support variables from the context
- [x] multi-file chat template
  - using components

