Skip to main content

Elegant Jinja2-based chat template parser for AI applications

Project description

🤖 Olingo LLM Parser

Elegant Jinja2-based chat template parser for AI applications

PyPI version Python Support License: MIT

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 file
  • variables (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 file
  • schema_path (str, optional): Path to your JSON schema file
  • variables (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

⭐ Star us on GitHub📦 PyPI Package

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

olingo_llm_parser-0.1.0.tar.gz (9.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

olingo_llm_parser-0.1.0-py3-none-any.whl (7.5 kB view details)

Uploaded Python 3

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

Hashes for olingo_llm_parser-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d6d777e2c451768529487f32294695e60300cf29b18b950e249147a4fa9459cb
MD5 11f069c0dc3fca5b1a6b2656bfcd726f
BLAKE2b-256 11c0856b2ca0f44a84211089b1eea4887f765fb90be3a52b1187f24c780984f9

See more details on using hashes here.

File details

Details for the file olingo_llm_parser-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for olingo_llm_parser-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 25635348a2abedbb71ea8b5e48aebd0fa26ae837c6ef74cffc810a1e1679d179
MD5 05f2b9a70500cb224bbde2634093a162
BLAKE2b-256 5389fafdb6560b330e53ec7a850e32fa3404fcfe0dd57c30ce190a3183dba269

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page