Elegant Jinja2-based chat template parser for AI applications
Project description
🤖 Olingo LLM Parser
Elegant Jinja2-based chat template parser for AI applications
Transform your Jinja2 templates into structured chat conversations for OpenAI API spec. Perfect for OpenAI, Anthropic, and other chat-based language models.
✨ Features
- 🎯 Simple & Elegant: Clean syntax with custom
{% chat %}blocks - 🔧 Jinja2 Powered: Full support for variables, loops, conditionals
- 📋 Schema Integration: Automatic JSON schema loading for structured responses
- 🚀 AI Ready: Perfect for OpenAI, Anthropic, and other chat APIs
- 🎨 Flexible: Use anywhere - scripts, web apps, AI agents
- 📦 Minimal Dependencies: Just Jinja2, nothing else
🚀 Quick Start
Installation
pip install olingo-llm-parser
Basic Usage
1. Create a template (chat_template.jinja):
{% chat role="system" %}
You are a helpful AI assistant specializing in {{ domain }}.
{% endchat %}
{% chat role="user" %}
{{ user_question }}
{% endchat %}
2. Parse and use:
from olingo_llm_parser import parse_chat_template
# Parse template with variables
messages = parse_chat_template("chat_template.jinja", {
"domain": "data science",
"user_question": "What is machine learning?"
})
# Use with OpenAI
import openai
response = openai.chat.completions.create(
model="gpt-4",
messages=messages
)
Output:
[
{"role": "system", "content": "You are a helpful AI assistant specializing in data science."},
{"role": "user", "content": "What is machine learning?"}
]
🎨 Advanced Examples
With Loops and Conditions
{% chat role="system" %}
You are an expert {{ role }}.
{% endchat %}
{% for example in examples %}
{% chat role="user" %}
Example: {{ example.question }}
{% endchat %}
{% chat role="assistant" %}
{{ example.answer }}
{% endchat %}
{% endfor %}
{% chat role="user" %}
Now answer: {{ final_question }}
{% endchat %}
With JSON Schema
from olingo_llm_parser import parse_chat_and_schema
# Parse both template and schema
messages, response_format = parse_chat_and_schema(
template_path="template.jinja",
schema_path="response_schema.json",
variables={"topic": "AI"}
)
# Use with OpenAI structured output
response = openai.chat.completions.create(
model="gpt-4",
messages=messages,
response_format=response_format # Automatic structured JSON
)
Schema-Aware Templates
Your templates can even reference the schema:
{% chat role="system" %}
Respond in JSON format following this schema:
{{ json_schema }}
{% endchat %}
{% chat role="user" %}
Generate data about {{ topic }}.
{% endchat %}
📚 API Reference
Core Functions
parse_chat_template(template_path, variables=None)
Parse a Jinja2 template containing {% chat %} blocks.
Parameters:
template_path(str): Path to your .jinja template filevariables(dict, optional): Variables to pass to the template
Returns:
List[Dict[str, str]]: List of message dictionaries with 'role' and 'content'
load_json_schema(schema_path)
Load a JSON schema and format it for AI APIs.
Parameters:
schema_path(str): Path to your JSON schema file
Returns:
Dict: Formatted response_format for AI APIs
parse_chat_and_schema(template_path, schema_path=None, variables=None)
Parse both template and schema together.
Parameters:
template_path(str): Path to your .jinja template fileschema_path(str, optional): Path to your JSON schema filevariables(dict, optional): Variables to pass to the template
Returns:
Tuple[List[Dict], Dict]: (messages, response_format) ready for AI APIs
🏗️ Template Syntax
Chat Blocks
{% chat role="system" %}
Your system message here
{% endchat %}
{% chat role="user" %}
Your user message here
{% endchat %}
{% chat role="assistant" %}
Your assistant message here
{% endchat %}
Variables
{% chat role="user" %}
Hello {{ name }}, tell me about {{ topic }}.
{% endchat %}
Loops
{% for item in items %}
{% chat role="user" %}
Process this: {{ item }}
{% endchat %}
{% endfor %}
Conditionals
{% chat role="system" %}
{% if expert_mode %}
You are an expert assistant with advanced capabilities.
{% else %}
You are a helpful general assistant.
{% endif %}
{% endchat %}
🎯 Use Cases
- AI Chat Applications: Structure conversations for any chat API
- Prompt Engineering: Create reusable, dynamic prompt templates
- AI Agents: Build complex conversational flows
- Data Generation: Generate structured training data
- API Integration: Seamless integration with OpenAI, Anthropic, etc.
🤝 Why Choose Olingo LLM Parser?
| Feature | Olingo LLM Parser | Manual String Building | Other Solutions |
|---|---|---|---|
| Readability | ✅ Clean template syntax | ❌ Messy string concat | ⚠️ Complex APIs |
| Maintainability | ✅ Separate logic & content | ❌ Mixed code/content | ⚠️ Vendor lock-in |
| Flexibility | ✅ Full Jinja2 power | ❌ Limited logic | ⚠️ Restricted features |
| AI Integration | ✅ Perfect API format | ❌ Manual formatting | ⚠️ API-specific |
| Schema Support | ✅ Built-in JSON schema | ❌ No schema support | ❌ No schema support |
📋 Requirements
- Python 3.8+
- Jinja2 3.0+
🛠️ Development
# Clone repository
git clone https://github.com/ollsoft-ai/olingo-llm-parser.git
cd olingo-llm-parser
# Install development dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Format code
black .
isort .
📄 License
MIT License - see LICENSE file for details.
🌟 Contributing
We welcome contributions! Please see our Contributing Guide for details.
📞 Support
Made with ❤️ by the Ollsoft Team
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file olingo_llm_parser-0.1.0.tar.gz.
File metadata
- Download URL: olingo_llm_parser-0.1.0.tar.gz
- Upload date:
- Size: 9.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d6d777e2c451768529487f32294695e60300cf29b18b950e249147a4fa9459cb
|
|
| MD5 |
11f069c0dc3fca5b1a6b2656bfcd726f
|
|
| BLAKE2b-256 |
11c0856b2ca0f44a84211089b1eea4887f765fb90be3a52b1187f24c780984f9
|
File details
Details for the file olingo_llm_parser-0.1.0-py3-none-any.whl.
File metadata
- Download URL: olingo_llm_parser-0.1.0-py3-none-any.whl
- Upload date:
- Size: 7.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
25635348a2abedbb71ea8b5e48aebd0fa26ae837c6ef74cffc810a1e1679d179
|
|
| MD5 |
05f2b9a70500cb224bbde2634093a162
|
|
| BLAKE2b-256 |
5389fafdb6560b330e53ec7a850e32fa3404fcfe0dd57c30ce190a3183dba269
|