Package: alice-types
AliceTypesБиблиотека моделей Pydantic-V2 для валидации протокола Я.ДиалоговУстановка:pipinstallalice-typesИспользованиеПример с FastApifromalice_types.responseimportAliceResponsefromalice_types.requestimportAliceRequestfromfastapiimportFastAPIapp=FastAPI()@app.post(path="/")asyncdefhandler(alice_request:AliceRequest):reply=AliceResponse()ifalice_request.is_new_session():reply.response.text="Привет, скажи что-нибудь и я это повторю"returnreplyreply.response.text=alice_request.request.original_utterancereturnreplyПример с AIOHttpfromalice_types.responseimportAliceResponsefromalice_types.requestimportAliceRequestfromaiohttpimportwebasyncdefhandler(request):body=awaitrequest.json()alice_request=AliceRequest.model_validate(body)reply=AliceResponse()ifalice_request.is_new_session():reply.response.text="Привет, скажи что-нибудь и я это повторю"else:reply.response.text=alice_request.request.original_utterancebody=reply.model_dump()returnweb.json_response(body)app=web.Application()app.router.add_post('/',handler)if__name__=="__main__":web.run_app(app)Расширение типов полейВ библиотеке имеются модели с динамически расширяемыми полями:request.StateState.extend_session_model(model: BaseModel)State.extend_user_model(model: BaseModel)State.extend_application_model(model: BaseModel)request.RequestPurchase.payloadRequestPurchase.extend_payload_model(model: BaseModel)Ограничение размера хранилищ для модели ответаВ модели AliceResponse по умолчанию установлен стандартный размер хранилищ (1 КБ), который можно изменить при
необходимости:fromalice_types.responseimportAliceResponseAliceResponse.set_session_state_limit_size(1024*8)AliceResponse.set_user_state_limit_size(1024*16)AliceResponse.set_application_state_limit_size(1024*32)Публичные методыAliceRequestAliceRequest.is_ping()AliceRequest.is_new_session()AliceRequest.authorization_is_completed()fromalice_types.responseimportAliceResponse,Responsefromalice_types.requestimportAliceRequestasyncdefhandler(alice_request:AliceRequest):ifalice_request.is_ping():returnAliceResponse(response=Response(text="pong"))elifalice_request.is_new_session():returnAliceResponse(response=Response(text="Привет, скажи что-нибудь и я это повторю"))elifalice_request.authorization_is_completed():returnAliceResponse(response=Response(text="Ты авторизован это хорошо 👍"))...AliceRequest.request.nlu.entitiesentities.get(entity_type: SlotsType | str) -Возвращает список сущностей заданного типа.entity.available() -Возвращает список доступных атрибутов объекта, у которых значение не равно None. Метод доступен у всех сущностей.EntityDatetime.to_datetime(timezone: pytz.BaseTzInfo | str | None = None)fromtypingimportListfromalice_types.requestimportAliceRequest,SlotsType,EntityFio,EntityDatetimeasyncdefhandler(alice_request:AliceRequest):fio_entities:List[EntityFio]=alice_request.request.nlu.entities.get(SlotsType.YANDEX_FIO)names=[]forentityinfio_entities:if"first_name"inentity.value.available():names.append(entity.value.first_name)dates=[]datetime_entities:List[EntityDatetime]=alice_request.request.nlu.entities.get(SlotsType.YANDEX_DATETIME)forentityindatetime_entities:dates.append(entity.to_datetime(timezone=alice_request.meta.timezone# Default: None))...AliceRequest.request.meta.interfacesinterfaces.has(interface: Union[InterfaceType, str]) -Проверяет, существует ли этот интерфейс.interfaces.available() -Возвращает список доступных интерфейсов.fromalice_types.requestimportAliceRequest,InterfaceTypeasyncdefhandler(alice_request:AliceRequest):ifalice_request.meta.interfaces.has(InterfaceType.SCREEN):passПримерыEchoBotАвторизацияРасширение типов полей:request.Staterequest.RequestPurchase.payload