Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/Demetrous-fd/alice_types
Pydantic модели для валидации протокола Я.Диалогов
https://github.com/Demetrous-fd/alice_types
alice pydantic pypi python yandex
Last synced: about 6 hours ago
JSON representation
Pydantic модели для валидации протокола Я.Диалогов
- Host: GitHub
- URL: https://github.com/Demetrous-fd/alice_types
- Owner: Demetrous-fd
- Created: 2023-12-20T11:52:31.000Z (11 months ago)
- Default Branch: main
- Last Pushed: 2024-02-10T15:37:40.000Z (9 months ago)
- Last Synced: 2024-11-15T16:41:50.437Z (about 22 hours ago)
- Topics: alice, pydantic, pypi, python, yandex
- Language: Python
- Homepage: https://pypi.org/project/alice-types/
- Size: 277 KB
- Stars: 4
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
- awesome-alice - LazyDeus/alice_types - Библиотека моделей Pydantic-V2 для валидации протокола Я.Диалогов (Разработка / SDK)
README
## AliceTypes
Библиотека моделей Pydantic-V2 для валидации протокола Я.Диалогов
## Установка:
```shell
pip install alice-types
```## Использование
Пример с FastApi
```python
from alice_types.response import AliceResponse
from alice_types.request import AliceRequest
from fastapi import FastAPIapp = FastAPI()
@app.post(path="/")
async def handler(alice_request: AliceRequest):
reply = AliceResponse()if alice_request.is_new_session():
reply.response.text = "Привет, скажи что-нибудь и я это повторю"
return replyreply.response.text = alice_request.request.original_utterance
return reply
```Пример с AIOHttp
```python
from alice_types.response import AliceResponse
from alice_types.request import AliceRequest
from aiohttp import webasync def handler(request):
body = await request.json()
alice_request = AliceRequest.model_validate(body)reply = AliceResponse()
if alice_request.is_new_session():
reply.response.text = "Привет, скажи что-нибудь и я это повторю"
else:
reply.response.text = alice_request.request.original_utterancebody = reply.model_dump()
return web.json_response(body)app = web.Application()
app.router.add_post('/', handler)if __name__ == "__main__":
web.run_app(app)```
### Расширение типов полей
В библиотеке имеются модели с динамически расширяемыми полями:
- [request.State](https://github.com/Demetrous-fd/alice_types/blob/main/examples/extend_fields/state.py)
- State.extend_session_model(model: BaseModel)
- State.extend_user_model(model: BaseModel)
- State.extend_application_model(model: BaseModel)
- [request.RequestPurchase.payload](https://github.com/Demetrous-fd/alice_types/blob/main/examples/extend_fields/purchase.py)
- RequestPurchase.extend_payload_model(model: BaseModel)### Ограничение размера хранилищ для модели ответа
В модели AliceResponse по умолчанию установлен стандартный размер хранилищ (1 КБ), который можно изменить при
необходимости:```python
from alice_types.response import AliceResponseAliceResponse.set_session_state_limit_size(1024 * 8)
AliceResponse.set_user_state_limit_size(1024 * 16)
AliceResponse.set_application_state_limit_size(1024 * 32)
```### Публичные методы
AliceRequest
- AliceRequest.is_ping()
- AliceRequest.is_new_session()
- AliceRequest.authorization_is_completed()
```python
from alice_types.response import AliceResponse, Response
from alice_types.request import AliceRequest
async def handler(alice_request: AliceRequest):
if alice_request.is_ping():
return AliceResponse(
response=Response(
text="pong"
)
)
elif alice_request.is_new_session():
return AliceResponse(
response=Response(
text="Привет, скажи что-нибудь и я это повторю"
)
)
elif alice_request.authorization_is_completed():
return AliceResponse(
response=Response(
text="Ты авторизован это хорошо 👍"
)
)
...
```
AliceRequest.request.nlu.entities
- entities.get(entity_type: SlotsType | str) - Возвращает список сущностей заданного типа.
- entity.available() - Возвращает список доступных атрибутов объекта, у которых значение не равно None. Метод доступен у всех сущностей.
- EntityDatetime.to_datetime(timezone: pytz.BaseTzInfo | str | None = None)
```python
from typing import List
from alice_types.request import AliceRequest, SlotsType, EntityFio, EntityDatetime
async def handler(alice_request: AliceRequest):
fio_entities: List[EntityFio] = alice_request.request.nlu.entities.get(SlotsType.YANDEX_FIO)
names = []
for entity in fio_entities:
if "first_name" in entity.value.available():
names.append(entity.value.first_name)
dates = []
datetime_entities: List[EntityDatetime] = alice_request.request.nlu.entities.get(SlotsType.YANDEX_DATETIME)
for entity in datetime_entities:
dates.append(
entity.to_datetime(
timezone=alice_request.meta.timezone # Default: None
)
)
...
```
AliceRequest.request.meta.interfaces
- interfaces.has(interface: Union[InterfaceType, str]) - Проверяет, существует ли этот интерфейс.
- interfaces.available() - Возвращает список доступных интерфейсов.
```python
from alice_types.request import AliceRequest, InterfaceType
async def handler(alice_request: AliceRequest):
if alice_request.meta.interfaces.has(InterfaceType.SCREEN):
pass
```
### Примеры
- [EchoBot](https://github.com/Demetrous-fd/alice_types/blob/main/examples/base.py)
- [Авторизация](https://github.com/Demetrous-fd/alice_types/blob/main/examples/auth.py)
- Расширение типов полей:
- [request.State](https://github.com/Demetrous-fd/alice_types/blob/main/examples/extend_fields/state.py)
- [request.RequestPurchase.payload](https://github.com/Demetrous-fd/alice_types/blob/main/examples/extend_fields/purchase.py)