semvec/pypi-packages huggingface dataset:
dhi 1.1.21
Ultra-fast data validation for Python - 28M validations/sec, 3x faster than Rust alternatives
License: MIT
Requires Python: >=3.9
Keywords: validation, data-validation, pydantic, zig, performance, fast, validator, email, url, uuid, schema

# dhi - Ultra-Fast Data Validation for Python

**The fastest data validation library for Python.** Powered by Zig for maximum performance.

## 🚀 Performance

**28 million validations/sec** - 3x faster than satya (Rust), 3x faster than msgspec (C)

```python
# Validate 10,000 users in 0.36ms
from dhi import _dhi_native

users = [{"name": "Alice", "email": "alice@example.com", "age": 25}, ...]

field_specs = {
    'name': ('string', 2, 100),
    'email': ('email',),
    'age': ('int_positive',),
}

results, valid_count = _dhi_native.validate_batch_direct(users, field_specs)
# 28M users/sec! 🔥
```

## ✨ Features

- **�� Fastest**: 3x faster than satya (Rust) and msgspec (C)
- **🎯 24+ Validators**: Email, URL, UUID, IPv4, dates, numbers, strings
- **🔋 Zero Python Overhead**: C extension extracts directly from dicts
- **🌍 General Purpose**: Works with any dict structure
- **💪 Production Ready**: Thoroughly tested and benchmarked

## 📦 Installation

```bash
pip install dhi
```

## 🎯 Quick Start

```python
from dhi import _dhi_native

users = [
    {"name": "Alice", "email": "alice@example.com", "age": 25},
    {"name": "Bob", "email": "bob@example.com", "age": 30},
]

field_specs = {
    'name': ('string', 2, 100),
    'email': ('email',),
    'age': ('int_positive',),
}

results, valid_count = _dhi_native.validate_batch_direct(users, field_specs)
print(f"Valid: {valid_count}/{len(users)}")
```

## �� Available Validators

### String: `email`, `url`, `uuid`, `ipv4`, `base64`, `iso_date`, `iso_datetime`, `string`
### Number: `int`, `int_gt`, `int_gte`, `int_lt`, `int_lte`, `int_positive`, `int_non_negative`, `int_multiple_of`

## 🏆 Benchmarks

```
dhi:     28M users/sec  🥇
satya:    9M users/sec  (3.0x slower)
msgspec:  9M users/sec  (3.1x slower)
```

## 📝 License

MIT License - see LICENSE file

## 🔗 Links

- GitHub: https://github.com/justrach/satya-zig
- PyPI: https://pypi.org/project/dhi/
langfuse-runnable-config 0.2.0
Утилита для создания RunnableConfig с Langfuse callbacks. Автоматически определяет версию Langfuse и настраивает callbacks с опциональной обрезкой данных.
License: MIT
Requires Python: >=3.8.1
Keywords: langfuse, langchain, tracing, observability, llm, monitoring

# Langfuse Runnable Config

Утилита для создания `RunnableConfig` с Langfuse callbacks. Автоматически определяет версию Langfuse и создает правильную конфигурацию. Langfuse не обеспечил обратную совместимость между версиями v2 и v3. API для создания callbacks и конфигураций изменился, и код, написанный для одной версии, не работает с другой. Эта утилита решает проблему, предоставляя единый API, который работает одинаково с обеими версиями.

## Установка

```bash
pip install langfuse-runnable-config langfuse
```

## Использование

Три способа инициализации:

```python
from langfuse_runnable_config import LangfuseRunnableConfig, LangfuseSettings

# 1. Прямая передача параметров
runnable_config = LangfuseRunnableConfig.create_config(
    url="https://cloud.langfuse.com",
    public_key="pk-...",
    secret_key="sk-...",
)

# 2. Через объект настроек
settings = LangfuseSettings(url="...", public_key="...", secret_key="...")
runnable_config = LangfuseRunnableConfig.create_config(settings=settings)

# 3. Из переменных окружения
runnable_config = LangfuseRunnableConfig.create_config()  # или settings = LangfuseSettings()
```

Применение:

```python
chain = prompt | llm
chain = chain.with_config(runnable_config)
chain.invoke(input)
```

Создание callback:

```python
callback = LangfuseRunnableConfig.create_callback()  # все три способа работают
chain.invoke(input, config={"callbacks": [callback]})
```

С автоматической обрезкой данных:

```python
from langfuse_runnable_config import LangfuseTruncatingRunnableConfig, LangfuseTruncatingSettings

runnable_config = LangfuseTruncatingRunnableConfig.create_config()
# или с параметрами обрезки
runnable_config = LangfuseTruncatingRunnableConfig.create_config(
    url="...", public_key="...", secret_key="...",
    truncate_max_length=5000,
    truncate_max_vector_elements=5,
)
```

Настройки: [`LangfuseSettings`](langfuse_runnable_config/settings/simple.py), [`LangfuseTruncatingSettings`](langfuse_runnable_config/settings/truncating.py). Переменные окружения читаются автоматически с префиксом `LANGFUSE_`.