free_llm_structure_output / example_usage.py
lyangas's picture
using grammar was added
a9c9b93
#!/usr/bin/env python3
"""
Пример использования Grammar-based структурированного вывода
Этот файл демонстрирует, как использовать новую функциональность грамматики
в вашем приложении для точного контроля структуры JSON ответа.
"""
import json
from typing import Dict, Any
# Пример использования как в запросе пользователя
def example_grammar_usage():
"""
Демонстрация использования грамматики для структурированного вывода
Аналогично примеру из запроса пользователя
"""
# JSON схема для профиля пользователя
profile_schema = {
"type": "object",
"properties": {
"name": {"type": "string"},
"age": {"type": "integer"},
"skills": {
"type": "array",
"items": {"type": "string"}
},
"manager": {"type": "boolean"},
"projects": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"budget": {"type": "number"}
}
}
}
},
"required": ["name", "age"]
}
prompt = "Return a profile for Alice, 29 y.o., Python and Rust, manager: false, projects: (Compiler, 120000.5) and (CLI, 5000)"
print("🚀 Пример использования Grammar Mode")
print("="*50)
print(f"Промпт: {prompt}")
print("\\nJSON Schema:")
print(json.dumps(profile_schema, indent=2, ensure_ascii=False))
print("\\n📝 Как использовать в коде:")
print("""
# Импорт необходимых модулей
from llama_cpp import Llama, LlamaGrammar
from app import _json_schema_to_gbnf, generate_structured_response
# Пример вызова с грамматикой
result = generate_structured_response(
prompt=prompt,
json_schema_str=json.dumps(profile_schema),
use_grammar=True, # Включить Grammar Mode
temperature=0.0, # Низкая температура для детерминированности
)
print(result)
""")
def example_advanced_schemas():
"""Примеры различных JSON схем для разных сценариев"""
schemas = {
"Анализ продуктов": {
"type": "object",
"properties": {
"product_name": {"type": "string"},
"category": {
"type": "string",
"enum": ["electronics", "clothing", "books", "home"]
},
"price": {"type": "number", "minimum": 0},
"rating": {"type": "number", "minimum": 1, "maximum": 5},
"features": {
"type": "array",
"items": {"type": "string"}
},
"in_stock": {"type": "boolean"}
},
"required": ["product_name", "category", "price"]
},
"Медицинские данные": {
"type": "object",
"properties": {
"patient_id": {"type": "string"},
"symptoms": {
"type": "array",
"items": {"type": "string"}
},
"severity": {
"type": "string",
"enum": ["low", "medium", "high", "critical"]
},
"vital_signs": {
"type": "object",
"properties": {
"temperature": {"type": "number"},
"blood_pressure": {"type": "string"},
"heart_rate": {"type": "integer"}
}
},
"diagnosis": {"type": "string"}
},
"required": ["patient_id", "symptoms", "severity"]
},
"Финансовый отчет": {
"type": "object",
"properties": {
"company": {"type": "string"},
"quarter": {"type": "string"},
"revenue": {"type": "number"},
"expenses": {"type": "number"},
"profit": {"type": "number"},
"departments": {
"type": "array",
"items": {
"type": "object",
"properties": {
"name": {"type": "string"},
"budget": {"type": "number"},
"employees": {"type": "integer"}
}
}
}
},
"required": ["company", "quarter", "revenue", "expenses"]
}
}
print("\\n🎯 Примеры продвинутых схем для разных сценариев:")
print("="*60)
for scenario, schema in schemas.items():
print(f"\\n📊 {scenario}:")
print(json.dumps(schema, indent=2, ensure_ascii=False))
def example_gradio_interface():
"""Пример использования в Gradio интерфейсе"""
print("\\n🖥️ Использование в Gradio интерфейсе:")
print("="*50)
print("""
1. Запустите приложение: python app.py
2. Откройте браузер и перейдите по адресу http://localhost:7860
3. В интерфейсе вы увидите:
- Поле для ввода промпта
- Поле для JSON схемы
- Чекбокс "🔗 Use Grammar (GBNF) Mode"
- Кнопку "🚀 Generate Response"
4. Включите чекбокс Grammar Mode для:
✅ Точного соблюдения структуры JSON
✅ Гарантированного валидного JSON вывода
✅ Поддержки сложных вложенных структур
✅ Автоматической валидации енумов
5. Отключите Grammar Mode для:
🔄 Более гибкой генерации текста
🔄 Случаев, когда схема слишком сложная
🔄 Экспериментирования с промптами
""")
def main():
"""Главная функция демонстрации"""
example_grammar_usage()
example_advanced_schemas()
example_gradio_interface()
print("\\n" + "="*60)
print("🎉 Готово! Теперь вы можете использовать Grammar Mode")
print(" для точного контроля структуры JSON ответов!")
print("="*60)
if __name__ == "__main__":
main()