Spaces:
Runtime error
Runtime error
File size: 7,120 Bytes
a9c9b93 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
#!/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()
|