odam-sdk


Nameodam-sdk JSON
Version 2.0.0 PyPI version JSON
download
home_pagehttps://api.odam.dev
SummaryОфіційний Python SDK для інтеграції з ODAM V4 - системою штучного інтелекту з людською пам'яттю
upload_time2025-08-06 21:34:19
maintainerNone
docs_urlNone
authorODAM Technologies
requires_python>=3.8
licenseMIT
keywords ai artificial-intelligence chatbot nlp natural-language-processing memory conversation chat api sdk machine-learning deep-learning neural-networks language-model text-generation entity-extraction knowledge-graph semantic-search vector-search embeddings medical-nlp healthcare multilingual ukrainian enterprise saas cloud rest-api fastapi python typescript javascript java dotnet
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🧠 ODAM V4 Python SDK

[![PyPI version](https://badge.fury.io/py/odam-sdk.svg)](https://badge.fury.io/py/odam-sdk)
[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)
[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://docs.odam.dev)

Офіційний Python SDK для інтеграції з **ODAM V4** - революційною системою штучного інтелекту з людською пам'яттю.

## 🌟 Особливості

- **🧠 Розумні чат-відповіді** з контекстуальною пам'яттю
- **💾 Система людської пам'яті** - запам'ятовує кожного користувача назавжди
- **🏥 Медичні NLP сутності** з точністю 90%+
- **🌐 Багатомовність** - підтримка 15+ мов з автоматичним визначенням
- **🕸️ Граф знань** - складні взаємозв'язки між сутностями
- **🎨 Персоналізація** - унікальний досвід для кожного користувача
- **⚡ Real-time обробка** - відповідь за < 100мс
- **🚀 Enterprise V7** - 98-100% персоналізація з Memory Enforcement
- **🛡️ Medical Safety** - гарантована медична безпека

## 📦 Встановлення

```bash
# Встановлення з PyPI
pip install odam-sdk

# Або з GitHub
pip install git+https://github.com/odam-ai/odam-sdk-python.git
```

## 🚀 Швидкий старт

### Базовий приклад

```python
from odam_sdk import ODAMClient

# Створення клієнта
client = ODAMClient(api_key="your_api_key")

# Відправка повідомлення
response = client.chat(
    message="Привіт! Як справи?",
    user_id="user_123"
)

print(response.response)
print(f"Сутності: {response.entities}")
print(f"Пам'ять оновлена: {response.memory_stats.memories_created}")
```

### Розширений приклад

```python
from odam_sdk import ODAMClient, Language, MemoryType

# Створення клієнта з налаштуваннями
client = ODAMClient(
    api_key="your_api_key",
    base_url="https://api.odam.dev",
    timeout=30,
    enable_logging=True
)

# Відправка повідомлення з усіма опціями
response = client.chat(
    message="Я хочу записатися до лікаря на наступний тиждень",
    user_id="user_maria_456",
    session_id="session_789",
    language=Language.UKRAINIAN,
    use_memory=True,
    use_medical_nlp=True,
    use_graph_search=True,
    enterprise_v7=True,
    medical_safety=True,
    context={
        "source": "mobile_app",
        "location": "kyiv",
        "user_type": "patient"
    }
)

# Аналіз відповіді
print(f"Відповідь: {response.response}")
print(f"Мова: {response.language_info.language}")
print(f"Сутності: {len(response.entities)} знайдено")
print(f"Пам'ять: {response.memory_stats.memories_found} спогадів знайдено")
print(f"Персоналізація: {response.personalization_score:.2%}")

# Отримання пам'яті користувача
memories = client.get_memory(
    user_id="user_maria_456",
    memory_type=MemoryType.EPISODIC,
    limit=10
)

print(f"Спогади користувача: {len(memories.memories)}")
```

## 📚 Основні методи

### 💬 Чат

```python
# Простий чат
response = client.chat("Привіт!", "user_123")

# Чат з контекстом
response = client.chat(
    message="Нагадай мені про зустріч",
    user_id="user_123",
    context={"app": "calendar", "priority": "high"}
)

# Batch обробка
messages = [
    {"message": "Привіт!", "user_id": "user_1"},
    {"message": "Як справи?", "user_id": "user_2"}
]
batch_response = client.chat_batch(messages)
```

### 🧠 Пам'ять

```python
# Отримання всіх спогадів
memories = client.get_memory("user_123")

# Отримання конкретного типу пам'яті
episodic_memories = client.get_memory(
    user_id="user_123",
    memory_type=MemoryType.EPISODIC,
    limit=20
)

# Отримання пам'яті за період
recent_memories = client.get_memory(
    user_id="user_123",
    start_date=datetime(2024, 1, 1),
    end_date=datetime(2024, 12, 31)
)
```

### 🏥 Сутності

```python
# Витягування сутностей
entities = client.extract_entities(
    text="Доктор Петренко призначив аспірин 500мг 2 рази на день",
    medical_mode=True
)

print(f"Знайдено сутностей: {len(entities.entities)}")
for entity in entities.entities:
    print(f"- {entity.text} ({entity.type})")
```

### 🕸️ Граф знань

```python
# Пошук в графі знань
graph_results = client.search_graph(
    query="лікарі в Києві",
    user_id="user_123",
    depth=3,
    limit=50
)

print(f"Знайдено вузлів: {len(graph_results.nodes)}")
print(f"Знайдено зв'язків: {len(graph_results.relationships)}")
```

### 📊 Аналітика

```python
# Отримання аналітики
analytics = client.get_analytics(
    user_id="user_123",
    start_date=datetime(2024, 1, 1),
    metrics=["conversations", "entities", "memory_usage"]
)

print(f"Аналітика: {analytics}")
```

## ⚙️ Конфігурація

### Environment Variables

```bash
# .env файл
ODAM_API_KEY=your_api_key_here
ODAM_BASE_URL=https://api.odam.dev
ODAM_TIMEOUT=30
ODAM_LOG_LEVEL=INFO
ODAM_ENABLE_CACHE=true
```

### Програмна конфігурація

```python
from odam_sdk import ODAMClient, ODAMConfig

# Створення конфігурації
config = ODAMConfig(
    api_key="your_api_key",
    base_url="https://api.odam.dev",
    timeout=30,
    max_retries=3,
    enable_logging=True,
    enable_cache=True,
    enterprise_v7_enabled=True,
    medical_safety_enabled=True
)

# Створення клієнта з конфігурацією
client = ODAMClient(config=config)
```

## 🔧 Розширені можливості

### Context Manager

```python
# Автоматичне закриття ресурсів
with ODAMClient(api_key="your_key") as client:
    response = client.chat("Привіт!", "user_123")
    print(response.response)
```

### Retry логіка

```python
# Автоматичні повторні спроби при помилках
@retry_on_failure(max_retries=5, delay=2.0)
def send_message(client, message, user_id):
    return client.chat(message, user_id)
```

### Кешування

```python
# Отримання статистики кешу
cache_stats = client.get_cache_stats()
print(f"Розмір кешу: {cache_stats['cache_size']}")

# Очищення кешу
client.clear_cache()
```

### Логування

```python
import logging

# Налаштування логування
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger("odam_sdk")

# Логування запитів та відповідей
client = ODAMClient(
    api_key="your_key",
    log_requests=True,
    log_responses=True
)
```

## 🏥 Медичні можливості

### Медичні сутності

```python
# Автоматичне витягування медичних сутностей
medical_text = """
Пацієнт: Іван Петренко, 45 років
Діагноз: Гіпертонія
Лікування: Еналаприл 10мг 1 раз на день
Алергії: Пеніцилін
"""

entities = client.extract_entities(
    text=medical_text,
    medical_mode=True
)

for entity in entities.entities:
    if entity.type in ["Person", "Medication", "Condition"]:
        print(f"Медична сутність: {entity.text} ({entity.type})")
```

### Medical Safety

```python
# Безпечна медична обробка
response = client.chat(
    message="У мене біль у грудях",
    user_id="patient_123",
    medical_safety=True,
    enterprise_v7=True
)

# Система автоматично додасть медичні попередження
print(response.response)
```

## 🌐 Багатомовність

### Автоматичне визначення мови

```python
# Автоматичне визначення мови
response = client.chat(
    message="Hello, how are you?",  # Англійська
    user_id="user_123"
)
print(f"Визначена мова: {response.language_info.language}")

response = client.chat(
    message="Привіт, як справи?",  # Українська
    user_id="user_123"
)
print(f"Визначена мова: {response.language_info.language}")
```

### Явне вказання мови

```python
from odam_sdk import Language

response = client.chat(
    message="Bonjour, comment allez-vous?",
    user_id="user_123",
    language=Language.FRENCH
)
```

## 🚀 Enterprise V7

### Memory Enforcement

```python
# Примусова персоналізація
response = client.chat(
    message="Нагадай мені про мої уподобання",
    user_id="user_123",
    memory_enforcement=True,
    enterprise_v7=True
)

print(f"Використання пам'яті: {response.v7_metrics.memory_utilization_score:.2%}")
```

### Senior Fallback

```python
# Примусова конвертація сутностей
response = client.chat(
    message="Я бачу лікаря",
    user_id="user_123",
    fallback_enabled=True,
    enterprise_v7=True
)

print(f"Використано fallback: {response.v7_metrics.fallback_used}")
```

## 📊 Моніторинг та метрики

### Health Check

```python
# Перевірка здоров'я системи
health = client.health_check()
print(f"Статус: {health.status}")
print(f"Версія: {health.version}")
print(f"Uptime: {health.uptime:.2f} секунд")
```

### Метрики продуктивності

```python
response = client.chat("Привіт!", "user_123")

print(f"Час обробки: {response.processing_time:.3f}с")
print(f"Персоналізація: {response.personalization_score:.2%}")
print(f"Результати пошуку: {response.search_results}")
```

## 🔒 Безпека

### Валідація API ключа

```python
from odam_sdk import validate_api_key

# Перевірка API ключа
if validate_api_key("your_api_key"):
    print("API ключ валідний")
else:
    print("API ключ невалідний")
```

### Безпечне зберігання

```python
import os

# Рекомендований спосіб зберігання API ключа
api_key = os.getenv("ODAM_API_KEY")
client = ODAMClient(api_key=api_key)
```

## 🧪 Тестування

### Unit тести

```python
import pytest
from unittest.mock import Mock
from odam_sdk import ODAMClient

def test_chat_response():
    # Мок відповіді
    mock_response = {
        "response": "Привіт! Як справи?",
        "user_id": "user_123",
        "processing_time": 0.1,
        "language_info": {"language": "uk", "confidence": 0.99},
        "entities": [],
        "memory_stats": {"memories_found": 0, "memories_created": 1},
        "search_results": {"vector_results": 0, "bm25_results": 0, "graph_results": 0},
        "personalization_score": 0.5,
        "timestamp": "2024-01-01T00:00:00Z"
    }
    
    # Тестування
    client = ODAMClient(api_key="test_key")
    client._make_request = Mock(return_value=mock_response)
    
    response = client.chat("Привіт!", "user_123")
    assert response.response == "Привіт! Як справи?"
    assert response.user_id == "user_123"
```

## 📖 Повна документація

- 📚 [API Reference](https://docs.odam.dev/api)
- 🚀 [Quick Start Guide](https://docs.odam.dev/quickstart)
- 🏥 [Medical NLP Guide](https://docs.odam.dev/medical)
- 🌐 [Multilingual Support](https://docs.odam.dev/multilingual)
- 🚀 [Enterprise V7 Features](https://docs.odam.dev/enterprise)
- 🔧 [Configuration Guide](https://docs.odam.dev/configuration)
- 🧪 [Testing Guide](https://docs.odam.dev/testing)
- 📊 [Analytics & Monitoring](https://docs.odam.dev/analytics)

## 🤝 Підтримка

- 📧 Email: support@odam.dev
- 💬 Discord: [ODAM Community](https://discord.gg/odam)
- 📖 Documentation: [docs.odam.dev](https://docs.odam.dev)
- 🐛 Issues: [GitHub Issues](https://github.com/odam-ai/odam-sdk-python/issues)
- 💡 Discussions: [GitHub Discussions](https://github.com/odam-ai/odam-sdk-python/discussions)

## 📄 Ліцензія

Цей проект ліцензовано під MIT License - дивіться файл [LICENSE](LICENSE) для деталей.

## 🙏 Подяки

Дякуємо всім спільноті ODAM за внесок у розвиток цього SDK!

---

**🧠 ODAM V4 - Майбутнє штучного інтелекту вже тут!** 

            

Raw data

            {
    "_id": null,
    "home_page": "https://api.odam.dev",
    "name": "odam-sdk",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "ai, artificial-intelligence, chatbot, nlp, natural-language-processing, memory, conversation, chat, api, sdk, machine-learning, deep-learning, neural-networks, language-model, text-generation, entity-extraction, knowledge-graph, semantic-search, vector-search, embeddings, medical-nlp, healthcare, multilingual, ukrainian, enterprise, saas, cloud, rest-api, fastapi, python, typescript, javascript, java, dotnet",
    "author": "ODAM Technologies",
    "author_email": "support@odam.dev",
    "download_url": "https://files.pythonhosted.org/packages/2c/9d/f1892bf93bc05b58056792218714d88a803fd6621c421e2ebc488f663a7e/odam_sdk-2.0.0.tar.gz",
    "platform": "any",
    "description": "# \ud83e\udde0 ODAM V4 Python SDK\n\n[![PyPI version](https://badge.fury.io/py/odam-sdk.svg)](https://badge.fury.io/py/odam-sdk)\n[![Python 3.8+](https://img.shields.io/badge/python-3.8+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Documentation](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://docs.odam.dev)\n\n\u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0438\u0439 Python SDK \u0434\u043b\u044f \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0457 \u0437 **ODAM V4** - \u0440\u0435\u0432\u043e\u043b\u044e\u0446\u0456\u0439\u043d\u043e\u044e \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u044e \u0448\u0442\u0443\u0447\u043d\u043e\u0433\u043e \u0456\u043d\u0442\u0435\u043b\u0435\u043a\u0442\u0443 \u0437 \u043b\u044e\u0434\u0441\u044c\u043a\u043e\u044e \u043f\u0430\u043c'\u044f\u0442\u0442\u044e.\n\n## \ud83c\udf1f \u041e\u0441\u043e\u0431\u043b\u0438\u0432\u043e\u0441\u0442\u0456\n\n- **\ud83e\udde0 \u0420\u043e\u0437\u0443\u043c\u043d\u0456 \u0447\u0430\u0442-\u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0456** \u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0443\u0430\u043b\u044c\u043d\u043e\u044e \u043f\u0430\u043c'\u044f\u0442\u0442\u044e\n- **\ud83d\udcbe \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u043b\u044e\u0434\u0441\u044c\u043a\u043e\u0457 \u043f\u0430\u043c'\u044f\u0442\u0456** - \u0437\u0430\u043f\u0430\u043c'\u044f\u0442\u043e\u0432\u0443\u0454 \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430 \u043d\u0430\u0437\u0430\u0432\u0436\u0434\u0438\n- **\ud83c\udfe5 \u041c\u0435\u0434\u0438\u0447\u043d\u0456 NLP \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u0456** \u0437 \u0442\u043e\u0447\u043d\u0456\u0441\u0442\u044e 90%+\n- **\ud83c\udf10 \u0411\u0430\u0433\u0430\u0442\u043e\u043c\u043e\u0432\u043d\u0456\u0441\u0442\u044c** - \u043f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430 15+ \u043c\u043e\u0432 \u0437 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0438\u043c \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f\u043c\n- **\ud83d\udd78\ufe0f \u0413\u0440\u0430\u0444 \u0437\u043d\u0430\u043d\u044c** - \u0441\u043a\u043b\u0430\u0434\u043d\u0456 \u0432\u0437\u0430\u0454\u043c\u043e\u0437\u0432'\u044f\u0437\u043a\u0438 \u043c\u0456\u0436 \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u044f\u043c\u0438\n- **\ud83c\udfa8 \u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f** - \u0443\u043d\u0456\u043a\u0430\u043b\u044c\u043d\u0438\u0439 \u0434\u043e\u0441\u0432\u0456\u0434 \u0434\u043b\u044f \u043a\u043e\u0436\u043d\u043e\u0433\u043e \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\n- **\u26a1 Real-time \u043e\u0431\u0440\u043e\u0431\u043a\u0430** - \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c \u0437\u0430 < 100\u043c\u0441\n- **\ud83d\ude80 Enterprise V7** - 98-100% \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f \u0437 Memory Enforcement\n- **\ud83d\udee1\ufe0f Medical Safety** - \u0433\u0430\u0440\u0430\u043d\u0442\u043e\u0432\u0430\u043d\u0430 \u043c\u0435\u0434\u0438\u0447\u043d\u0430 \u0431\u0435\u0437\u043f\u0435\u043a\u0430\n\n## \ud83d\udce6 \u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f\n\n```bash\n# \u0412\u0441\u0442\u0430\u043d\u043e\u0432\u043b\u0435\u043d\u043d\u044f \u0437 PyPI\npip install odam-sdk\n\n# \u0410\u0431\u043e \u0437 GitHub\npip install git+https://github.com/odam-ai/odam-sdk-python.git\n```\n\n## \ud83d\ude80 \u0428\u0432\u0438\u0434\u043a\u0438\u0439 \u0441\u0442\u0430\u0440\u0442\n\n### \u0411\u0430\u0437\u043e\u0432\u0438\u0439 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\n\n```python\nfrom odam_sdk import ODAMClient\n\n# \u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043a\u043b\u0456\u0454\u043d\u0442\u0430\nclient = ODAMClient(api_key=\"your_api_key\")\n\n# \u0412\u0456\u0434\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f\nresponse = client.chat(\n    message=\"\u041f\u0440\u0438\u0432\u0456\u0442! \u042f\u043a \u0441\u043f\u0440\u0430\u0432\u0438?\",\n    user_id=\"user_123\"\n)\n\nprint(response.response)\nprint(f\"\u0421\u0443\u0442\u043d\u043e\u0441\u0442\u0456: {response.entities}\")\nprint(f\"\u041f\u0430\u043c'\u044f\u0442\u044c \u043e\u043d\u043e\u0432\u043b\u0435\u043d\u0430: {response.memory_stats.memories_created}\")\n```\n\n### \u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0438\u0439 \u043f\u0440\u0438\u043a\u043b\u0430\u0434\n\n```python\nfrom odam_sdk import ODAMClient, Language, MemoryType\n\n# \u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043a\u043b\u0456\u0454\u043d\u0442\u0430 \u0437 \u043d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f\u043c\u0438\nclient = ODAMClient(\n    api_key=\"your_api_key\",\n    base_url=\"https://api.odam.dev\",\n    timeout=30,\n    enable_logging=True\n)\n\n# \u0412\u0456\u0434\u043f\u0440\u0430\u0432\u043a\u0430 \u043f\u043e\u0432\u0456\u0434\u043e\u043c\u043b\u0435\u043d\u043d\u044f \u0437 \u0443\u0441\u0456\u043c\u0430 \u043e\u043f\u0446\u0456\u044f\u043c\u0438\nresponse = client.chat(\n    message=\"\u042f \u0445\u043e\u0447\u0443 \u0437\u0430\u043f\u0438\u0441\u0430\u0442\u0438\u0441\u044f \u0434\u043e \u043b\u0456\u043a\u0430\u0440\u044f \u043d\u0430 \u043d\u0430\u0441\u0442\u0443\u043f\u043d\u0438\u0439 \u0442\u0438\u0436\u0434\u0435\u043d\u044c\",\n    user_id=\"user_maria_456\",\n    session_id=\"session_789\",\n    language=Language.UKRAINIAN,\n    use_memory=True,\n    use_medical_nlp=True,\n    use_graph_search=True,\n    enterprise_v7=True,\n    medical_safety=True,\n    context={\n        \"source\": \"mobile_app\",\n        \"location\": \"kyiv\",\n        \"user_type\": \"patient\"\n    }\n)\n\n# \u0410\u043d\u0430\u043b\u0456\u0437 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0456\nprint(f\"\u0412\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u044c: {response.response}\")\nprint(f\"\u041c\u043e\u0432\u0430: {response.language_info.language}\")\nprint(f\"\u0421\u0443\u0442\u043d\u043e\u0441\u0442\u0456: {len(response.entities)} \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e\")\nprint(f\"\u041f\u0430\u043c'\u044f\u0442\u044c: {response.memory_stats.memories_found} \u0441\u043f\u043e\u0433\u0430\u0434\u0456\u0432 \u0437\u043d\u0430\u0439\u0434\u0435\u043d\u043e\")\nprint(f\"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f: {response.personalization_score:.2%}\")\n\n# \u041e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043f\u0430\u043c'\u044f\u0442\u0456 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430\nmemories = client.get_memory(\n    user_id=\"user_maria_456\",\n    memory_type=MemoryType.EPISODIC,\n    limit=10\n)\n\nprint(f\"\u0421\u043f\u043e\u0433\u0430\u0434\u0438 \u043a\u043e\u0440\u0438\u0441\u0442\u0443\u0432\u0430\u0447\u0430: {len(memories.memories)}\")\n```\n\n## \ud83d\udcda \u041e\u0441\u043d\u043e\u0432\u043d\u0456 \u043c\u0435\u0442\u043e\u0434\u0438\n\n### \ud83d\udcac \u0427\u0430\u0442\n\n```python\n# \u041f\u0440\u043e\u0441\u0442\u0438\u0439 \u0447\u0430\u0442\nresponse = client.chat(\"\u041f\u0440\u0438\u0432\u0456\u0442!\", \"user_123\")\n\n# \u0427\u0430\u0442 \u0437 \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u043e\u043c\nresponse = client.chat(\n    message=\"\u041d\u0430\u0433\u0430\u0434\u0430\u0439 \u043c\u0435\u043d\u0456 \u043f\u0440\u043e \u0437\u0443\u0441\u0442\u0440\u0456\u0447\",\n    user_id=\"user_123\",\n    context={\"app\": \"calendar\", \"priority\": \"high\"}\n)\n\n# Batch \u043e\u0431\u0440\u043e\u0431\u043a\u0430\nmessages = [\n    {\"message\": \"\u041f\u0440\u0438\u0432\u0456\u0442!\", \"user_id\": \"user_1\"},\n    {\"message\": \"\u042f\u043a \u0441\u043f\u0440\u0430\u0432\u0438?\", \"user_id\": \"user_2\"}\n]\nbatch_response = client.chat_batch(messages)\n```\n\n### \ud83e\udde0 \u041f\u0430\u043c'\u044f\u0442\u044c\n\n```python\n# \u041e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0432\u0441\u0456\u0445 \u0441\u043f\u043e\u0433\u0430\u0434\u0456\u0432\nmemories = client.get_memory(\"user_123\")\n\n# \u041e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u043e\u0433\u043e \u0442\u0438\u043f\u0443 \u043f\u0430\u043c'\u044f\u0442\u0456\nepisodic_memories = client.get_memory(\n    user_id=\"user_123\",\n    memory_type=MemoryType.EPISODIC,\n    limit=20\n)\n\n# \u041e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u043f\u0430\u043c'\u044f\u0442\u0456 \u0437\u0430 \u043f\u0435\u0440\u0456\u043e\u0434\nrecent_memories = client.get_memory(\n    user_id=\"user_123\",\n    start_date=datetime(2024, 1, 1),\n    end_date=datetime(2024, 12, 31)\n)\n```\n\n### \ud83c\udfe5 \u0421\u0443\u0442\u043d\u043e\u0441\u0442\u0456\n\n```python\n# \u0412\u0438\u0442\u044f\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u0435\u0439\nentities = client.extract_entities(\n    text=\"\u0414\u043e\u043a\u0442\u043e\u0440 \u041f\u0435\u0442\u0440\u0435\u043d\u043a\u043e \u043f\u0440\u0438\u0437\u043d\u0430\u0447\u0438\u0432 \u0430\u0441\u043f\u0456\u0440\u0438\u043d 500\u043c\u0433 2 \u0440\u0430\u0437\u0438 \u043d\u0430 \u0434\u0435\u043d\u044c\",\n    medical_mode=True\n)\n\nprint(f\"\u0417\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u0435\u0439: {len(entities.entities)}\")\nfor entity in entities.entities:\n    print(f\"- {entity.text} ({entity.type})\")\n```\n\n### \ud83d\udd78\ufe0f \u0413\u0440\u0430\u0444 \u0437\u043d\u0430\u043d\u044c\n\n```python\n# \u041f\u043e\u0448\u0443\u043a \u0432 \u0433\u0440\u0430\u0444\u0456 \u0437\u043d\u0430\u043d\u044c\ngraph_results = client.search_graph(\n    query=\"\u043b\u0456\u043a\u0430\u0440\u0456 \u0432 \u041a\u0438\u0454\u0432\u0456\",\n    user_id=\"user_123\",\n    depth=3,\n    limit=50\n)\n\nprint(f\"\u0417\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0432\u0443\u0437\u043b\u0456\u0432: {len(graph_results.nodes)}\")\nprint(f\"\u0417\u043d\u0430\u0439\u0434\u0435\u043d\u043e \u0437\u0432'\u044f\u0437\u043a\u0456\u0432: {len(graph_results.relationships)}\")\n```\n\n### \ud83d\udcca \u0410\u043d\u0430\u043b\u0456\u0442\u0438\u043a\u0430\n\n```python\n# \u041e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0430\u043d\u0430\u043b\u0456\u0442\u0438\u043a\u0438\nanalytics = client.get_analytics(\n    user_id=\"user_123\",\n    start_date=datetime(2024, 1, 1),\n    metrics=[\"conversations\", \"entities\", \"memory_usage\"]\n)\n\nprint(f\"\u0410\u043d\u0430\u043b\u0456\u0442\u0438\u043a\u0430: {analytics}\")\n```\n\n## \u2699\ufe0f \u041a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f\n\n### Environment Variables\n\n```bash\n# .env \u0444\u0430\u0439\u043b\nODAM_API_KEY=your_api_key_here\nODAM_BASE_URL=https://api.odam.dev\nODAM_TIMEOUT=30\nODAM_LOG_LEVEL=INFO\nODAM_ENABLE_CACHE=true\n```\n\n### \u041f\u0440\u043e\u0433\u0440\u0430\u043c\u043d\u0430 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u044f\n\n```python\nfrom odam_sdk import ODAMClient, ODAMConfig\n\n# \u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0457\nconfig = ODAMConfig(\n    api_key=\"your_api_key\",\n    base_url=\"https://api.odam.dev\",\n    timeout=30,\n    max_retries=3,\n    enable_logging=True,\n    enable_cache=True,\n    enterprise_v7_enabled=True,\n    medical_safety_enabled=True\n)\n\n# \u0421\u0442\u0432\u043e\u0440\u0435\u043d\u043d\u044f \u043a\u043b\u0456\u0454\u043d\u0442\u0430 \u0437 \u043a\u043e\u043d\u0444\u0456\u0433\u0443\u0440\u0430\u0446\u0456\u0454\u044e\nclient = ODAMClient(config=config)\n```\n\n## \ud83d\udd27 \u0420\u043e\u0437\u0448\u0438\u0440\u0435\u043d\u0456 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u0456\n\n### Context Manager\n\n```python\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0435 \u0437\u0430\u043a\u0440\u0438\u0442\u0442\u044f \u0440\u0435\u0441\u0443\u0440\u0441\u0456\u0432\nwith ODAMClient(api_key=\"your_key\") as client:\n    response = client.chat(\"\u041f\u0440\u0438\u0432\u0456\u0442!\", \"user_123\")\n    print(response.response)\n```\n\n### Retry \u043b\u043e\u0433\u0456\u043a\u0430\n\n```python\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0456 \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u0456 \u0441\u043f\u0440\u043e\u0431\u0438 \u043f\u0440\u0438 \u043f\u043e\u043c\u0438\u043b\u043a\u0430\u0445\n@retry_on_failure(max_retries=5, delay=2.0)\ndef send_message(client, message, user_id):\n    return client.chat(message, user_id)\n```\n\n### \u041a\u0435\u0448\u0443\u0432\u0430\u043d\u043d\u044f\n\n```python\n# \u041e\u0442\u0440\u0438\u043c\u0430\u043d\u043d\u044f \u0441\u0442\u0430\u0442\u0438\u0441\u0442\u0438\u043a\u0438 \u043a\u0435\u0448\u0443\ncache_stats = client.get_cache_stats()\nprint(f\"\u0420\u043e\u0437\u043c\u0456\u0440 \u043a\u0435\u0448\u0443: {cache_stats['cache_size']}\")\n\n# \u041e\u0447\u0438\u0449\u0435\u043d\u043d\u044f \u043a\u0435\u0448\u0443\nclient.clear_cache()\n```\n\n### \u041b\u043e\u0433\u0443\u0432\u0430\u043d\u043d\u044f\n\n```python\nimport logging\n\n# \u041d\u0430\u043b\u0430\u0448\u0442\u0443\u0432\u0430\u043d\u043d\u044f \u043b\u043e\u0433\u0443\u0432\u0430\u043d\u043d\u044f\nlogging.basicConfig(level=logging.INFO)\nlogger = logging.getLogger(\"odam_sdk\")\n\n# \u041b\u043e\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u0437\u0430\u043f\u0438\u0442\u0456\u0432 \u0442\u0430 \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0435\u0439\nclient = ODAMClient(\n    api_key=\"your_key\",\n    log_requests=True,\n    log_responses=True\n)\n```\n\n## \ud83c\udfe5 \u041c\u0435\u0434\u0438\u0447\u043d\u0456 \u043c\u043e\u0436\u043b\u0438\u0432\u043e\u0441\u0442\u0456\n\n### \u041c\u0435\u0434\u0438\u0447\u043d\u0456 \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u0456\n\n```python\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0435 \u0432\u0438\u0442\u044f\u0433\u0443\u0432\u0430\u043d\u043d\u044f \u043c\u0435\u0434\u0438\u0447\u043d\u0438\u0445 \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u0435\u0439\nmedical_text = \"\"\"\n\u041f\u0430\u0446\u0456\u0454\u043d\u0442: \u0406\u0432\u0430\u043d \u041f\u0435\u0442\u0440\u0435\u043d\u043a\u043e, 45 \u0440\u043e\u043a\u0456\u0432\n\u0414\u0456\u0430\u0433\u043d\u043e\u0437: \u0413\u0456\u043f\u0435\u0440\u0442\u043e\u043d\u0456\u044f\n\u041b\u0456\u043a\u0443\u0432\u0430\u043d\u043d\u044f: \u0415\u043d\u0430\u043b\u0430\u043f\u0440\u0438\u043b 10\u043c\u0433 1 \u0440\u0430\u0437 \u043d\u0430 \u0434\u0435\u043d\u044c\n\u0410\u043b\u0435\u0440\u0433\u0456\u0457: \u041f\u0435\u043d\u0456\u0446\u0438\u043b\u0456\u043d\n\"\"\"\n\nentities = client.extract_entities(\n    text=medical_text,\n    medical_mode=True\n)\n\nfor entity in entities.entities:\n    if entity.type in [\"Person\", \"Medication\", \"Condition\"]:\n        print(f\"\u041c\u0435\u0434\u0438\u0447\u043d\u0430 \u0441\u0443\u0442\u043d\u0456\u0441\u0442\u044c: {entity.text} ({entity.type})\")\n```\n\n### Medical Safety\n\n```python\n# \u0411\u0435\u0437\u043f\u0435\u0447\u043d\u0430 \u043c\u0435\u0434\u0438\u0447\u043d\u0430 \u043e\u0431\u0440\u043e\u0431\u043a\u0430\nresponse = client.chat(\n    message=\"\u0423 \u043c\u0435\u043d\u0435 \u0431\u0456\u043b\u044c \u0443 \u0433\u0440\u0443\u0434\u044f\u0445\",\n    user_id=\"patient_123\",\n    medical_safety=True,\n    enterprise_v7=True\n)\n\n# \u0421\u0438\u0441\u0442\u0435\u043c\u0430 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u043e \u0434\u043e\u0434\u0430\u0441\u0442\u044c \u043c\u0435\u0434\u0438\u0447\u043d\u0456 \u043f\u043e\u043f\u0435\u0440\u0435\u0434\u0436\u0435\u043d\u043d\u044f\nprint(response.response)\n```\n\n## \ud83c\udf10 \u0411\u0430\u0433\u0430\u0442\u043e\u043c\u043e\u0432\u043d\u0456\u0441\u0442\u044c\n\n### \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043c\u043e\u0432\u0438\n\n```python\n# \u0410\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u043d\u0435 \u0432\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u043d\u044f \u043c\u043e\u0432\u0438\nresponse = client.chat(\n    message=\"Hello, how are you?\",  # \u0410\u043d\u0433\u043b\u0456\u0439\u0441\u044c\u043a\u0430\n    user_id=\"user_123\"\n)\nprint(f\"\u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043c\u043e\u0432\u0430: {response.language_info.language}\")\n\nresponse = client.chat(\n    message=\"\u041f\u0440\u0438\u0432\u0456\u0442, \u044f\u043a \u0441\u043f\u0440\u0430\u0432\u0438?\",  # \u0423\u043a\u0440\u0430\u0457\u043d\u0441\u044c\u043a\u0430\n    user_id=\"user_123\"\n)\nprint(f\"\u0412\u0438\u0437\u043d\u0430\u0447\u0435\u043d\u0430 \u043c\u043e\u0432\u0430: {response.language_info.language}\")\n```\n\n### \u042f\u0432\u043d\u0435 \u0432\u043a\u0430\u0437\u0430\u043d\u043d\u044f \u043c\u043e\u0432\u0438\n\n```python\nfrom odam_sdk import Language\n\nresponse = client.chat(\n    message=\"Bonjour, comment allez-vous?\",\n    user_id=\"user_123\",\n    language=Language.FRENCH\n)\n```\n\n## \ud83d\ude80 Enterprise V7\n\n### Memory Enforcement\n\n```python\n# \u041f\u0440\u0438\u043c\u0443\u0441\u043e\u0432\u0430 \u043f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f\nresponse = client.chat(\n    message=\"\u041d\u0430\u0433\u0430\u0434\u0430\u0439 \u043c\u0435\u043d\u0456 \u043f\u0440\u043e \u043c\u043e\u0457 \u0443\u043f\u043e\u0434\u043e\u0431\u0430\u043d\u043d\u044f\",\n    user_id=\"user_123\",\n    memory_enforcement=True,\n    enterprise_v7=True\n)\n\nprint(f\"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043d\u044f \u043f\u0430\u043c'\u044f\u0442\u0456: {response.v7_metrics.memory_utilization_score:.2%}\")\n```\n\n### Senior Fallback\n\n```python\n# \u041f\u0440\u0438\u043c\u0443\u0441\u043e\u0432\u0430 \u043a\u043e\u043d\u0432\u0435\u0440\u0442\u0430\u0446\u0456\u044f \u0441\u0443\u0442\u043d\u043e\u0441\u0442\u0435\u0439\nresponse = client.chat(\n    message=\"\u042f \u0431\u0430\u0447\u0443 \u043b\u0456\u043a\u0430\u0440\u044f\",\n    user_id=\"user_123\",\n    fallback_enabled=True,\n    enterprise_v7=True\n)\n\nprint(f\"\u0412\u0438\u043a\u043e\u0440\u0438\u0441\u0442\u0430\u043d\u043e fallback: {response.v7_metrics.fallback_used}\")\n```\n\n## \ud83d\udcca \u041c\u043e\u043d\u0456\u0442\u043e\u0440\u0438\u043d\u0433 \u0442\u0430 \u043c\u0435\u0442\u0440\u0438\u043a\u0438\n\n### Health Check\n\n```python\n# \u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 \u0437\u0434\u043e\u0440\u043e\u0432'\u044f \u0441\u0438\u0441\u0442\u0435\u043c\u0438\nhealth = client.health_check()\nprint(f\"\u0421\u0442\u0430\u0442\u0443\u0441: {health.status}\")\nprint(f\"\u0412\u0435\u0440\u0441\u0456\u044f: {health.version}\")\nprint(f\"Uptime: {health.uptime:.2f} \u0441\u0435\u043a\u0443\u043d\u0434\")\n```\n\n### \u041c\u0435\u0442\u0440\u0438\u043a\u0438 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0438\u0432\u043d\u043e\u0441\u0442\u0456\n\n```python\nresponse = client.chat(\"\u041f\u0440\u0438\u0432\u0456\u0442!\", \"user_123\")\n\nprint(f\"\u0427\u0430\u0441 \u043e\u0431\u0440\u043e\u0431\u043a\u0438: {response.processing_time:.3f}\u0441\")\nprint(f\"\u041f\u0435\u0440\u0441\u043e\u043d\u0430\u043b\u0456\u0437\u0430\u0446\u0456\u044f: {response.personalization_score:.2%}\")\nprint(f\"\u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u0438 \u043f\u043e\u0448\u0443\u043a\u0443: {response.search_results}\")\n```\n\n## \ud83d\udd12 \u0411\u0435\u0437\u043f\u0435\u043a\u0430\n\n### \u0412\u0430\u043b\u0456\u0434\u0430\u0446\u0456\u044f API \u043a\u043b\u044e\u0447\u0430\n\n```python\nfrom odam_sdk import validate_api_key\n\n# \u041f\u0435\u0440\u0435\u0432\u0456\u0440\u043a\u0430 API \u043a\u043b\u044e\u0447\u0430\nif validate_api_key(\"your_api_key\"):\n    print(\"API \u043a\u043b\u044e\u0447 \u0432\u0430\u043b\u0456\u0434\u043d\u0438\u0439\")\nelse:\n    print(\"API \u043a\u043b\u044e\u0447 \u043d\u0435\u0432\u0430\u043b\u0456\u0434\u043d\u0438\u0439\")\n```\n\n### \u0411\u0435\u0437\u043f\u0435\u0447\u043d\u0435 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u043d\u043d\u044f\n\n```python\nimport os\n\n# \u0420\u0435\u043a\u043e\u043c\u0435\u043d\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0441\u043f\u043e\u0441\u0456\u0431 \u0437\u0431\u0435\u0440\u0456\u0433\u0430\u043d\u043d\u044f API \u043a\u043b\u044e\u0447\u0430\napi_key = os.getenv(\"ODAM_API_KEY\")\nclient = ODAMClient(api_key=api_key)\n```\n\n## \ud83e\uddea \u0422\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f\n\n### Unit \u0442\u0435\u0441\u0442\u0438\n\n```python\nimport pytest\nfrom unittest.mock import Mock\nfrom odam_sdk import ODAMClient\n\ndef test_chat_response():\n    # \u041c\u043e\u043a \u0432\u0456\u0434\u043f\u043e\u0432\u0456\u0434\u0456\n    mock_response = {\n        \"response\": \"\u041f\u0440\u0438\u0432\u0456\u0442! \u042f\u043a \u0441\u043f\u0440\u0430\u0432\u0438?\",\n        \"user_id\": \"user_123\",\n        \"processing_time\": 0.1,\n        \"language_info\": {\"language\": \"uk\", \"confidence\": 0.99},\n        \"entities\": [],\n        \"memory_stats\": {\"memories_found\": 0, \"memories_created\": 1},\n        \"search_results\": {\"vector_results\": 0, \"bm25_results\": 0, \"graph_results\": 0},\n        \"personalization_score\": 0.5,\n        \"timestamp\": \"2024-01-01T00:00:00Z\"\n    }\n    \n    # \u0422\u0435\u0441\u0442\u0443\u0432\u0430\u043d\u043d\u044f\n    client = ODAMClient(api_key=\"test_key\")\n    client._make_request = Mock(return_value=mock_response)\n    \n    response = client.chat(\"\u041f\u0440\u0438\u0432\u0456\u0442!\", \"user_123\")\n    assert response.response == \"\u041f\u0440\u0438\u0432\u0456\u0442! \u042f\u043a \u0441\u043f\u0440\u0430\u0432\u0438?\"\n    assert response.user_id == \"user_123\"\n```\n\n## \ud83d\udcd6 \u041f\u043e\u0432\u043d\u0430 \u0434\u043e\u043a\u0443\u043c\u0435\u043d\u0442\u0430\u0446\u0456\u044f\n\n- \ud83d\udcda [API Reference](https://docs.odam.dev/api)\n- \ud83d\ude80 [Quick Start Guide](https://docs.odam.dev/quickstart)\n- \ud83c\udfe5 [Medical NLP Guide](https://docs.odam.dev/medical)\n- \ud83c\udf10 [Multilingual Support](https://docs.odam.dev/multilingual)\n- \ud83d\ude80 [Enterprise V7 Features](https://docs.odam.dev/enterprise)\n- \ud83d\udd27 [Configuration Guide](https://docs.odam.dev/configuration)\n- \ud83e\uddea [Testing Guide](https://docs.odam.dev/testing)\n- \ud83d\udcca [Analytics & Monitoring](https://docs.odam.dev/analytics)\n\n## \ud83e\udd1d \u041f\u0456\u0434\u0442\u0440\u0438\u043c\u043a\u0430\n\n- \ud83d\udce7 Email: support@odam.dev\n- \ud83d\udcac Discord: [ODAM Community](https://discord.gg/odam)\n- \ud83d\udcd6 Documentation: [docs.odam.dev](https://docs.odam.dev)\n- \ud83d\udc1b Issues: [GitHub Issues](https://github.com/odam-ai/odam-sdk-python/issues)\n- \ud83d\udca1 Discussions: [GitHub Discussions](https://github.com/odam-ai/odam-sdk-python/discussions)\n\n## \ud83d\udcc4 \u041b\u0456\u0446\u0435\u043d\u0437\u0456\u044f\n\n\u0426\u0435\u0439 \u043f\u0440\u043e\u0435\u043a\u0442 \u043b\u0456\u0446\u0435\u043d\u0437\u043e\u0432\u0430\u043d\u043e \u043f\u0456\u0434 MIT License - \u0434\u0438\u0432\u0456\u0442\u044c\u0441\u044f \u0444\u0430\u0439\u043b [LICENSE](LICENSE) \u0434\u043b\u044f \u0434\u0435\u0442\u0430\u043b\u0435\u0439.\n\n## \ud83d\ude4f \u041f\u043e\u0434\u044f\u043a\u0438\n\n\u0414\u044f\u043a\u0443\u0454\u043c\u043e \u0432\u0441\u0456\u043c \u0441\u043f\u0456\u043b\u044c\u043d\u043e\u0442\u0456 ODAM \u0437\u0430 \u0432\u043d\u0435\u0441\u043e\u043a \u0443 \u0440\u043e\u0437\u0432\u0438\u0442\u043e\u043a \u0446\u044c\u043e\u0433\u043e SDK!\n\n---\n\n**\ud83e\udde0 ODAM V4 - \u041c\u0430\u0439\u0431\u0443\u0442\u043d\u0454 \u0448\u0442\u0443\u0447\u043d\u043e\u0433\u043e \u0456\u043d\u0442\u0435\u043b\u0435\u043a\u0442\u0443 \u0432\u0436\u0435 \u0442\u0443\u0442!** \n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "\u041e\u0444\u0456\u0446\u0456\u0439\u043d\u0438\u0439 Python SDK \u0434\u043b\u044f \u0456\u043d\u0442\u0435\u0433\u0440\u0430\u0446\u0456\u0457 \u0437 ODAM V4 - \u0441\u0438\u0441\u0442\u0435\u043c\u043e\u044e \u0448\u0442\u0443\u0447\u043d\u043e\u0433\u043e \u0456\u043d\u0442\u0435\u043b\u0435\u043a\u0442\u0443 \u0437 \u043b\u044e\u0434\u0441\u044c\u043a\u043e\u044e \u043f\u0430\u043c'\u044f\u0442\u0442\u044e",
    "version": "2.0.0",
    "project_urls": {
        "Bug Tracker": "https://api.odam.dev/issues",
        "Documentation": "https://docs.odam.dev",
        "Homepage": "https://api.odam.dev",
        "Source Code": "https://api.odam.dev",
        "Website": "https://odam.dev"
    },
    "split_keywords": [
        "ai",
        " artificial-intelligence",
        " chatbot",
        " nlp",
        " natural-language-processing",
        " memory",
        " conversation",
        " chat",
        " api",
        " sdk",
        " machine-learning",
        " deep-learning",
        " neural-networks",
        " language-model",
        " text-generation",
        " entity-extraction",
        " knowledge-graph",
        " semantic-search",
        " vector-search",
        " embeddings",
        " medical-nlp",
        " healthcare",
        " multilingual",
        " ukrainian",
        " enterprise",
        " saas",
        " cloud",
        " rest-api",
        " fastapi",
        " python",
        " typescript",
        " javascript",
        " java",
        " dotnet"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "6c9e8454cf9a92a1428d46cb4ebaa50673da56f5d7b4f5176d7421aa9f22c639",
                "md5": "f014dfb7a42eedb9f775deab06be8d3e",
                "sha256": "59a2bc189c221b40bc4dde7b55ae93aa8f135ab6c588258e17ff076b38585326"
            },
            "downloads": -1,
            "filename": "odam_sdk-2.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "f014dfb7a42eedb9f775deab06be8d3e",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 28910,
            "upload_time": "2025-08-06T21:34:18",
            "upload_time_iso_8601": "2025-08-06T21:34:18.015521Z",
            "url": "https://files.pythonhosted.org/packages/6c/9e/8454cf9a92a1428d46cb4ebaa50673da56f5d7b4f5176d7421aa9f22c639/odam_sdk-2.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2c9df1892bf93bc05b58056792218714d88a803fd6621c421e2ebc488f663a7e",
                "md5": "3ce3bd2e76e2c17ce9f4dcaa681be525",
                "sha256": "bd4a7cd1a6ed16ad681619c4f33adbc6039bf1463e6a86d31e82888a422180e7"
            },
            "downloads": -1,
            "filename": "odam_sdk-2.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "3ce3bd2e76e2c17ce9f4dcaa681be525",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 33486,
            "upload_time": "2025-08-06T21:34:19",
            "upload_time_iso_8601": "2025-08-06T21:34:19.808883Z",
            "url": "https://files.pythonhosted.org/packages/2c/9d/f1892bf93bc05b58056792218714d88a803fd6621c421e2ebc488f663a7e/odam_sdk-2.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-08-06 21:34:19",
    "github": false,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "lcname": "odam-sdk"
}
        
Elapsed time: 0.96440s