@camera.ui/server 2.2.5-beta.4 → 2.2.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/interface/assets/{404-YZOLos9r.js → 404-BLVuKvLk.js} +1 -1
- package/dist/interface/assets/{About-HtxMc8JZ.js → About-C-AJ0jfI.js} +1 -1
- package/dist/interface/assets/Assistant-BJKGIvVo.js +1 -0
- package/dist/interface/assets/{Assistant-BMscGKnc.css → Assistant-BQ6Ld-bt.css} +1 -1
- package/dist/interface/assets/{Automation-D3DcUyui.js → Automation-C95DzuZb.js} +3 -3
- package/dist/interface/assets/{AutomationImport-Dp_hT6hQ.js → AutomationImport-C8VYjDzf.js} +2 -2
- package/dist/interface/assets/{AutomationStore-BKR7GXMk.js → AutomationStore-CE4PKRGd.js} +2 -2
- package/dist/interface/assets/{AutomationStoreDetail-B9yh51WQ.js → AutomationStoreDetail-DavWfjLv.js} +2 -2
- package/dist/interface/assets/Automations-BOP_17Ri.js +2 -0
- package/dist/interface/assets/Camera-BW9ikKqh.css +1 -0
- package/dist/interface/assets/Camera-C5S7eI9a.js +2 -0
- package/dist/interface/assets/{CameraConsole-BI93OaRt.js → CameraConsole-C4AmtcrM.js} +1 -1
- package/dist/interface/assets/{Cameras-Ctub8sVt.js → Cameras-DR577Bno.js} +2 -2
- package/dist/interface/assets/{Camview-CZct5cnP.css → Camview-Bri_T7Tq.css} +1 -1
- package/dist/interface/assets/Camview-CHxKB41T.js +1 -0
- package/dist/interface/assets/{CertificateUpload-xW55NA1Q.js → CertificateUpload-BYFKZCP9.js} +1 -1
- package/dist/interface/assets/Config-BrDDGWpr.js +2 -0
- package/dist/interface/assets/{ConfigActionAssistant-B488rOp5.js → ConfigActionAssistant-YtCVI8LZ.js} +1 -1
- package/dist/interface/assets/{ConfigActionCameraControl-ZMUuBxOs.js → ConfigActionCameraControl-Dg_1zOYt.js} +1 -1
- package/dist/interface/assets/{ConfigActionDelay-BJ11xvOW.js → ConfigActionDelay-_EqbfWgo.js} +1 -1
- package/dist/interface/assets/{ConfigActionHttp-DOUo69OR.js → ConfigActionHttp-BzwLv2tn.js} +1 -1
- package/dist/interface/assets/{ConfigActionImageInput-BMzuVZW9.js → ConfigActionImageInput-CLdY2sV4.js} +1 -1
- package/dist/interface/assets/{ConfigActionMqtt-Co_uksca.js → ConfigActionMqtt-lGqYshl3.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotification-CcZkstYx.js → ConfigActionNotification-D5Dj3EoU.js} +1 -1
- package/dist/interface/assets/{ConfigActionNotificationControl--VeucoTw.js → ConfigActionNotificationControl-Dy5fKamr.js} +1 -1
- package/dist/interface/assets/{ConfigActionOutput-CyDa1LGA.js → ConfigActionOutput-DzsQ31L0.js} +1 -1
- package/dist/interface/assets/{ConfigActionPlugin-Kfg3ZEQF.js → ConfigActionPlugin-BFrBcXvL.js} +1 -1
- package/dist/interface/assets/{ConfigActionSensor-DhAF0HPw.js → ConfigActionSensor-CX8ePlan.js} +1 -1
- package/dist/interface/assets/{ConfigActionSnapshot-zMe3SPvW.js → ConfigActionSnapshot-BATLRmh6.js} +1 -1
- package/dist/interface/assets/{ConfigActionVariable-BE5q3NwY.js → ConfigActionVariable-Dgn5jvaR.js} +1 -1
- package/dist/interface/assets/{ConfigConditionIfElse-BNIRtSVD.js → ConfigConditionIfElse-D5IIBjyk.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSensorState-DTNd-SzI.js → ConfigConditionSensorState-C0JxBWdG.js} +1 -1
- package/dist/interface/assets/{ConfigConditionSwitch-BU5wWMU1.js → ConfigConditionSwitch-Brlgd0XP.js} +1 -1
- package/dist/interface/assets/{ConfigConditionTime-KXTCIVIV.js → ConfigConditionTime-CM4bSMyU.js} +1 -1
- package/dist/interface/assets/{ConfigSensorValueInput-BC1FpMm-.js → ConfigSensorValueInput-CtuH8dCa.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerDetection-hIN1hi53.js → ConfigTriggerDetection-DsL7lLQl.js} +1 -1
- package/dist/interface/assets/ConfigTriggerGeofence-CAGIk1_W.js +1 -0
- package/dist/interface/assets/{ConfigTriggerManual-C5vwxS-e.js → ConfigTriggerManual-DgkR-GWy.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerMqtt-B4PtWC3E.js → ConfigTriggerMqtt-B_iFalAQ.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSchedule-BZzUdGBa.js → ConfigTriggerSchedule-E_QWfNKy.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSensor-D18nwMsj.js → ConfigTriggerSensor-hYNbLXUu.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerSystem-BhygWLB4.js → ConfigTriggerSystem-DR1EFpE9.js} +1 -1
- package/dist/interface/assets/{ConfigTriggerWebhook-yyuBuhLD.js → ConfigTriggerWebhook-C-B5GGFH.js} +1 -1
- package/dist/interface/assets/Console-cIr6lYux.js +1 -0
- package/dist/interface/assets/CuiAssistantConversation-Bigl43Ph.js +5 -0
- package/dist/interface/assets/CuiAssistantConversation-BmshW6Vc.css +1 -0
- package/dist/interface/assets/CuiAutomationRunsDialog-Ci7SWAml.js +1 -0
- package/dist/interface/assets/{CuiBottomSheet-DWefGWK2.js → CuiBottomSheet-C2sM2E3M.js} +1 -1
- package/dist/interface/assets/CuiBottomSheet-ViBOgklN.js +1 -0
- package/dist/interface/assets/CuiCameraPipCard-wdK7xir-.js +1 -0
- package/dist/interface/assets/CuiCameraRecordings-BB7bF67B.js +1 -0
- package/dist/interface/assets/{CuiCameraShares-DcqOcePX.js → CuiCameraShares-B6jdUBVm.js} +1 -1
- package/dist/interface/assets/CuiCameraTable-CHnQFkce.js +1 -0
- package/dist/interface/assets/{CuiCameraTable-BOkfp_5M.js → CuiCameraTable-CpBo25Qc.js} +2 -2
- package/dist/interface/assets/{CuiChartTable-DP38uBwK.js → CuiChartTable-dIcxGtfl.js} +1 -1
- package/dist/interface/assets/{CuiConsole-C7xE_nQg.js → CuiConsole-BGptpT6r.js} +2 -2
- package/dist/interface/assets/CuiDataTable-CQmp5mAy.js +1 -0
- package/dist/interface/assets/CuiLightControl-wbZi3fA1.js +1 -0
- package/dist/interface/assets/{CuiList-DJp0__mV.js → CuiList-Dsu5m0TA.js} +1 -1
- package/dist/interface/assets/{CuiMarkdownContent-BUYtK_wD.js → CuiMarkdownContent-BYBQX_aF.js} +1 -1
- package/dist/interface/assets/CuiMarkdownContent-DTAm-EDR.js +1 -0
- package/dist/interface/assets/CuiPluginCard-BjIc7It9.js +2 -0
- package/dist/interface/assets/{CuiPluginCategoryChip-Ch_upS6Y.js → CuiPluginCategoryChip-BtJ_6_gN.js} +1 -1
- package/dist/interface/assets/{CuiPluginOAuthButton-DEQ9xILN.js → CuiPluginOAuthButton-Duf35I8K.js} +2 -2
- package/dist/interface/assets/{CuiPluginTrustBadge-sVWdvHcM.js → CuiPluginTrustBadge-jxXeRTH2.js} +1 -1
- package/dist/interface/assets/{CuiQRCode-DqSF4SkD.js → CuiQRCode-BNchrpoB.js} +1 -1
- package/dist/interface/assets/CuiSchema-DGTMkVSe.js +1 -0
- package/dist/interface/assets/{CuiTopNavbarItem-B_KWykgq.js → CuiTopNavbarItem-CHtLvn53.js} +1 -1
- package/dist/interface/assets/Faces-p18jNfXl.js +1 -0
- package/dist/interface/assets/FirstSteps-HzaBMDbH.js +1 -0
- package/dist/interface/assets/Floorplan-DYyEx7WO.js +1 -0
- package/dist/interface/assets/Instances-Dl-6rL5O.js +1 -0
- package/dist/interface/assets/{Logs-BSPT80vP.js → Logs-DsJkuQFq.js} +2 -2
- package/dist/interface/assets/{Menu-HHtuhIS2.js → Menu-D_woMkjL.js} +1 -1
- package/dist/interface/assets/Metrics-ChVnC6f6.css +1 -0
- package/dist/interface/assets/Metrics-l3UwykCM.js +12 -0
- package/dist/interface/assets/{OAuthDeviceFlow-Bn1nlWNa.js → OAuthDeviceFlow-CXfILAE1.js} +1 -1
- package/dist/interface/assets/Plugin-Ldj3HygQ.js +1 -0
- package/dist/interface/assets/Plugin-Qr_Q_Qfi.css +1 -0
- package/dist/interface/assets/{PluginConsole-Cv-uhnPY.js → PluginConsole-C96m5zKy.js} +1 -1
- package/dist/interface/assets/{PluginDetail-cpOz7FkA.js → PluginDetail-CnfaI1vh.js} +2 -2
- package/dist/interface/assets/{PluginSchema-DW3TGeTM.js → PluginSchema-u1bqXU29.js} +1 -1
- package/dist/interface/assets/PluginSearch-BiXG3Xk2.js +2 -0
- package/dist/interface/assets/PluginSearch-BuE7we1T.js +1 -0
- package/dist/interface/assets/{PluginUpdateProgress-n6q6vzyd.js → PluginUpdateProgress-BT4lN9HT.js} +1 -1
- package/dist/interface/assets/Plugins-Csx6AXaW.js +1 -0
- package/dist/interface/assets/{RecentEventsFilter-CTR5JK_P.js → RecentEventsFilter-Kp_lTOuG.js} +1 -1
- package/dist/interface/assets/Recordings-BEKAn6QK.css +1 -0
- package/dist/interface/assets/Recordings-D0KTY5cI.js +1 -0
- package/dist/interface/assets/SensorEdit-zs-f_o1N.js +1 -0
- package/dist/interface/assets/{SensorHistory-9CdOpCPs.js → SensorHistory-Cet35_RO.js} +1 -1
- package/dist/interface/assets/Sensors-BLAoalEt.js +2 -0
- package/dist/interface/assets/Settings-C-LCDIbK.js +1 -0
- package/dist/interface/assets/SettingsAccount-BsN7jGmo.js +1 -0
- package/dist/interface/assets/SettingsAccount-DuVyCSE-.js +1 -0
- package/dist/interface/assets/{SettingsAppearance-BY1xQMx4.js → SettingsAppearance-BS4EQNjH.js} +1 -1
- package/dist/interface/assets/SettingsAppearance-DQcGbYbV.js +1 -0
- package/dist/interface/assets/SettingsAssistant-B0PF3Rdg.css +1 -0
- package/dist/interface/assets/SettingsAssistant-DViJklFd.js +1 -0
- package/dist/interface/assets/{SettingsBackup-D_weokqu.js → SettingsBackup-DBlV1gej.js} +1 -1
- package/dist/interface/assets/{SettingsList-Bq24WTDU.js → SettingsList-D8eSwbBY.js} +1 -1
- package/dist/interface/assets/SettingsMqtt-JoszJJgV.js +1 -0
- package/dist/interface/assets/{SettingsNotifications-8TZOUxg2.js → SettingsNotifications-3veSrxa_.js} +1 -1
- package/dist/interface/assets/{SettingsPermissions-M8u_jrN0.js → SettingsPermissions-CJiz0Z7B.js} +1 -1
- package/dist/interface/assets/{SettingsRecordings-C1Kp5xW_.js → SettingsRecordings-CLz9Zp47.js} +1 -1
- package/dist/interface/assets/SettingsRemote-DUyl8k7I.js +2 -0
- package/dist/interface/assets/{SettingsSystem-Cetu2faJ.js → SettingsSystem-txTFGomQ.js} +2 -2
- package/dist/interface/assets/{SettingsUsers-CDwtQLdV.js → SettingsUsers-CUp6vQPc.js} +1 -1
- package/dist/interface/assets/Terminal-hln2UuSR.js +4 -0
- package/dist/interface/assets/Training-Bkn52mPJ.css +1 -0
- package/dist/interface/assets/Training-D6lhvUf-.js +1 -0
- package/dist/interface/assets/Updates-BwSWt9w7.js +2 -0
- package/dist/interface/assets/{VariableInput-BxPj5wo6.js → VariableInput-183LygmK.js} +1 -1
- package/dist/interface/assets/{VariableSuggestions-CbizvAkz.js → VariableSuggestions-DwLtlzVz.js} +1 -1
- package/dist/interface/assets/{VersionsHandler-CePyEUVO.js → VersionsHandler-DkbkcypK.js} +2 -2
- package/dist/interface/assets/{VirtualSensorCreate-D_GVoeL7.js → VirtualSensorCreate-Bn4tgdxA.js} +1 -1
- package/dist/interface/assets/Workers-B6b15izn.js +2 -0
- package/dist/interface/assets/{account-Bu30He0P.js → account-DwW7pBOb.js} +1 -1
- package/dist/interface/assets/{alert-circle-D2fAQwTX.js → alert-circle-BdUVAt1B.js} +1 -1
- package/dist/interface/assets/{alert-outline-D7zaSJH_.js → alert-outline-IRxYbw0j.js} +1 -1
- package/dist/interface/assets/api-C9mnOxie.js +4 -0
- package/dist/interface/assets/api-Cj9a6qPu.css +2 -0
- package/dist/interface/assets/{api-DW2niHRN.js → api-h4HRB3ef.js} +1 -1
- package/dist/interface/assets/{arrow-left-BGLyEqqa.js → arrow-left-Bk-ZrOVr.js} +1 -1
- package/dist/interface/assets/assistant-4hYyIu6D.js +1 -0
- package/dist/interface/assets/{assistantModels-D0soYqq7.js → assistantModels-BsSgRsws.js} +1 -1
- package/dist/interface/assets/{auth-Dc8bUpc-.js → auth-DFesRtwI.js} +1 -1
- package/dist/interface/assets/{automations-DXrjbArj.js → automations-D2bnX8uw.js} +1 -1
- package/dist/interface/assets/{back-filled-BPBVnQjx.js → back-filled-D-X19YMO.js} +1 -1
- package/dist/interface/assets/{bell-ring-CyCFPUL_.js → bell-ring-DreEHgoT.js} +1 -1
- package/dist/interface/assets/{brain-CIJB1ree.js → brain-DuDAg544.js} +1 -1
- package/dist/interface/assets/{cameraSources-QJfUDOQJ.js → cameraSources-DmVZWs4-.js} +1 -1
- package/dist/interface/assets/{cctv-D6kxZ-lp.js → cctv-DM-C_8_6.js} +1 -1
- package/dist/interface/assets/{check-circle-DHAAn6A6.js → check-circle-Bevuw8-0.js} +1 -1
- package/dist/interface/assets/{check-circle-outline-BbqeKfIK.js → check-circle-outline-aMxkvksr.js} +1 -1
- package/dist/interface/assets/{chevron-down-ZYTrU871.js → chevron-down-CCFn9Z56.js} +1 -1
- package/dist/interface/assets/{chevron-up-LQXNz9CE.js → chevron-up-CSImUM3_.js} +1 -1
- package/dist/interface/assets/{clock-outline-CKTiLKoR.js → clock-outline-DH3WIEJt.js} +1 -1
- package/dist/interface/assets/{close-BbEPZQqa.js → close-CMxyM4v9.js} +1 -1
- package/dist/interface/assets/{close-circle-BSUSUs4K.js → close-circle-CfgJCZ9A.js} +1 -1
- package/dist/interface/assets/{cloud-check-BTGbrAQ_.js → cloud-check-CbdFLIdR.js} +1 -1
- package/dist/interface/assets/cloudHandoff-Ba98bzeq.js +1 -0
- package/dist/interface/assets/{config-CiQDwB4t.js → config-DDaCrMSU.js} +1 -1
- package/dist/interface/assets/{content-copy-V0DW9ZbH.js → content-copy-Bz49QPOI.js} +1 -1
- package/dist/interface/assets/{copy-DsmMEtSH.js → copy-DA6QQHRt.js} +1 -1
- package/dist/interface/assets/{cube-scan-DGhUFV1x.js → cube-scan-IiH8zwm2.js} +1 -1
- package/dist/interface/assets/database-refresh-outline-CIUDpcuq.js +1 -0
- package/dist/interface/assets/{delete-CY8fsIW6.js → delete-Btu-UVx9.js} +1 -1
- package/dist/interface/assets/{dist-DNyx_J8o.js → dist-D_qWDAKp.js} +1 -1
- package/dist/interface/assets/{dots-vertical-pP1vP0Qa.js → dots-vertical-D496SIss.js} +1 -1
- package/dist/interface/assets/{download-CyjJ7yJW.js → download-BSC7lwq_.js} +1 -1
- package/dist/interface/assets/esm-Bn9gXwX4.js +1 -0
- package/dist/interface/assets/esm-BzM6y2-F.js +1 -0
- package/dist/interface/assets/esm-CP3JWrtj.js +1 -0
- package/dist/interface/assets/esm-CjAXkqCf.js +1 -0
- package/dist/interface/assets/esm-Cqxk-j1S.js +1 -0
- package/dist/interface/assets/esm-DFHd3JNU.js +1 -0
- package/dist/interface/assets/esm-DfMLJtug.js +1 -0
- package/dist/interface/assets/esm-DhDrpq7a.js +1 -0
- package/dist/interface/assets/esm-DvhM-SOd.js +1 -0
- package/dist/interface/assets/esm-G63bqygQ.js +1 -0
- package/dist/interface/assets/esm-Gn-Y59hU.js +1 -0
- package/dist/interface/assets/esm-KJSOz2vj.js +1 -0
- package/dist/interface/assets/esm-Ryfc94Tm.js +1 -0
- package/dist/interface/assets/esm-rSfI5Poy.js +1 -0
- package/dist/interface/assets/{eventIcons-cdzqQc0W.js → eventIcons-UQutPG3p.js} +1 -1
- package/dist/interface/assets/{eye-off-JCu1iUer.js → eye-off-CSU0U8g7.js} +1 -1
- package/dist/interface/assets/{eye-off-outline-GErp76H2.js → eye-off-outline-DCxLRGo_.js} +1 -1
- package/dist/interface/assets/{flowSchema-BRTZHQ1w.js → flowSchema-YJtAu9gB.js} +1 -1
- package/dist/interface/assets/{help-circle-outline-G43EJuch.js → help-circle-outline-Cr_yNhPi.js} +1 -1
- package/dist/interface/assets/{history-CNJREqJG.js → history-anuCbp1T.js} +1 -1
- package/dist/interface/assets/{home-B-_OQpZ6.js → home-N3bDR1vX.js} +1 -1
- package/dist/interface/assets/{information-outline-Blt4EtWJ.js → information-outline-CMWIvLNB.js} +1 -1
- package/dist/interface/assets/{intercomService-BnA-FQ0Q.js → intercomService-CjoJaOZ7.js} +1 -1
- package/dist/interface/assets/{lan-C3jliANx.js → lan-CYXjdk7L.js} +1 -1
- package/dist/interface/assets/main-C796FmqQ.js +3 -0
- package/dist/interface/assets/{main-BoGhBedC.css → main-DVa5U7UB.css} +1 -1
- package/dist/interface/assets/{microphone-B6xc9JQ2.js → microphone-BB2pATI_.js} +1 -1
- package/dist/interface/assets/{minus-BI5qXFwJ.js → minus-BCp3ZNKO.js} +1 -1
- package/dist/interface/assets/{mqtt-iD9XHYO_.js → mqtt-DGBPptzB.js} +1 -1
- package/dist/interface/assets/native-CZJE8bTs.js +1 -0
- package/dist/interface/assets/native-DKZwialB.js +1 -0
- package/dist/interface/assets/{nodeDefinitions-Dop49tx8.js → nodeDefinitions-ByrqsENY.js} +1 -1
- package/dist/interface/assets/{notifications-CbAJX7RF.js → notifications-5yeK345h.js} +1 -1
- package/dist/interface/assets/{pause-DKzvPG2b.js → pause-BQlxwAW2.js} +1 -1
- package/dist/interface/assets/{pencil-DKbi9SsG.js → pencil-CDsNnEXi.js} +1 -1
- package/dist/interface/assets/{pencil-outline-CD3Xv98d.js → pencil-outline-CIQL5Kui.js} +1 -1
- package/dist/interface/assets/plugin-DSEMkqaK.js +1 -0
- package/dist/interface/assets/{plugins-eIUrXNeM.js → plugins-BTOdE_zv.js} +1 -1
- package/dist/interface/assets/{plus-CHPYoMO_.js → plus-Bp4q9G7S.js} +1 -1
- package/dist/interface/assets/{plus--kDl8ben.js → plus-CySoovdr.js} +1 -1
- package/dist/interface/assets/{power-C9wmNlFS.js → power-WmBLDR0-.js} +1 -1
- package/dist/interface/assets/{radar-B3ra28GD.js → radar-CyYAmume.js} +1 -1
- package/dist/interface/assets/{refresh-DfqyhMOh.js → refresh-CHTA3jVN.js} +1 -1
- package/dist/interface/assets/{restore-FMacmqd_.js → restore-C8RNM5yX.js} +1 -1
- package/dist/interface/assets/{rooms-BqPyo8jc.js → rooms-BCdm6IAx.js} +1 -1
- package/dist/interface/assets/{round-alt-arrow-left-bold-56eF9Bol.js → round-alt-arrow-left-bold-Gh5mi_yR.js} +1 -1
- package/dist/interface/assets/{search-BXbDWhLk.js → search-BajCVmOI.js} +1 -1
- package/dist/interface/assets/sensorIcons-5Ynqwo3e.js +1 -0
- package/dist/interface/assets/{sensorSlots-BZCXtnb6.js → sensorSlots-BF70tpV7.js} +1 -1
- package/dist/interface/assets/{sensors-DttBNEEt.js → sensors-CeFEEz8r.js} +1 -1
- package/dist/interface/assets/{server-DUFhf2c_.js → server-bhW2Mw4D.js} +1 -1
- package/dist/interface/assets/{settings-Cw63SIJl.js → settings-DnksaK7m.js} +1 -1
- package/dist/interface/assets/{source-branch-oyzrlfCD.js → source-branch-CzqIPffP.js} +1 -1
- package/dist/interface/assets/{theme-BMmjtQ4w.js → theme-DF_XA58O.js} +1 -1
- package/dist/interface/assets/{trash-2-BQc04l9M.js → trash-2-DJeEhHf4.js} +1 -1
- package/dist/interface/assets/{trash-can-outline-Bk5eENNM.js → trash-can-outline-DrT6iw7I.js} +1 -1
- package/dist/interface/assets/{trash-fill-CXk8BmtF.js → trash-fill-Bb_-UicM.js} +1 -1
- package/dist/interface/assets/{trash2-2rUvghml.js → trash2-Dsl8gfxq.js} +1 -1
- package/dist/interface/assets/{types-CXw7CEzu.js → types-ArGM5-5O.js} +1 -1
- package/dist/interface/assets/types-BcAxmlqC.js +1 -0
- package/dist/interface/assets/{types-DWTSNJ79.js → types-CklFkUXk.js} +1 -1
- package/dist/interface/assets/{undo-Dcf7vcsv.js → undo-DoqJW-k7.js} +1 -1
- package/dist/interface/assets/{ungrouped-DHMJ9Rg1.css → ungrouped-BnQIcSQd.css} +1 -1
- package/dist/interface/assets/ungrouped-CkIlDUwl.js +1 -0
- package/dist/interface/assets/{updates-TIPWXKzL.js → updates-D3x_kPMM.js} +1 -1
- package/dist/interface/assets/{upload-nnbfDypK.js → upload-C3w1XH-o.js} +1 -1
- package/dist/interface/assets/{upload-B-ZYPekV.js → upload-DtIcwiNC.js} +1 -1
- package/dist/interface/assets/{useAppVersion-BIz44Bg4.js → useAppVersion-Dcvu95bZ.js} +1 -1
- package/dist/interface/assets/{useAssistantActions-CLkkw9kB.js → useAssistantActions-Cc_O6M9_.js} +1 -1
- package/dist/interface/assets/useBackupRestore-xp5KhKVn.js +1 -0
- package/dist/interface/assets/{useCameraOptions-A97teAIr.js → useCameraOptions-8I4MTDgj.js} +1 -1
- package/dist/interface/assets/useKeyboardInset-C0Lp0UcX.js +1 -0
- package/dist/interface/assets/{useLogsSocket-BlFxVXjF.js → useLogsSocket-bpOiLgWT.js} +1 -1
- package/dist/interface/assets/{useNavLayout-C5obaCNv.js → useNavLayout-Cjf6Da2u.js} +1 -1
- package/dist/interface/assets/{usePermissions-C8hB_pG1.js → usePermissions-BXTw4tII.js} +1 -1
- package/dist/interface/assets/{usePluginUpdates-DO0-Gk4Q.js → usePluginUpdates-bOMj-IvL.js} +1 -1
- package/dist/interface/assets/{usePushRegistration-BUttCraQ.js → usePushRegistration-HOvLuUVP.js} +2 -2
- package/dist/interface/assets/{useServerRestart-Cz9eVHUE.js → useServerRestart-CQN4cdHJ.js} +1 -1
- package/dist/interface/assets/{useStreamStatus-BhS_MCCB.js → useStreamStatus-Da7c2Wme.js} +1 -1
- package/dist/interface/assets/{useTabSwipe-D4k8lm1M.js → useTabSwipe-fFuyJJBQ.js} +1 -1
- package/dist/interface/assets/{useUpdateChannel-D9lhfW0y.js → useUpdateChannel-Ca1RX32u.js} +1 -1
- package/dist/interface/assets/{useUpdatesSocket-DnH9sON5.js → useUpdatesSocket-DHZNpLQX.js} +1 -1
- package/dist/interface/assets/useUserOptions-BQdOB-Dp.js +1 -0
- package/dist/interface/assets/{variable-CcE0ZwTr.js → variable-ywTlRfo5.js} +1 -1
- package/dist/interface/assets/{vendor-cameraui-QXD8jkcj.js → vendor-cameraui-CK4yHsJi.js} +45 -45
- package/dist/interface/assets/{vendor-capacitor-COL6Kz75.js → vendor-capacitor-Bs_WzL0Q.js} +2 -2
- package/dist/interface/assets/{vendor-chart-80wrH3md.js → vendor-chart-DBK083Hu.js} +1 -1
- package/dist/interface/assets/{vendor-core-CnhnyKDl.js → vendor-core-B-Q4es-f.js} +1 -1
- package/dist/interface/assets/{vendor-dnd-CEJS9JKU.js → vendor-dnd-DGQLvX6Y.js} +1 -1
- package/dist/interface/assets/{vendor-draggabilly-BY7O1F_Z.js → vendor-draggabilly-D8CK6M-y.js} +1 -1
- package/dist/interface/assets/{vendor-DGke_6M4.js → vendor-gFkr2qsZ.js} +1 -1
- package/dist/interface/assets/vendor-gridstack-DtDG3os6.js +3 -0
- package/dist/interface/assets/{vendor-markdown-DD4teg2u.js → vendor-markdown-qHIinIUE.js} +1 -1
- package/dist/interface/assets/{vendor-primevue-CCUqY55W.js → vendor-primevue-Cmp3VjIC.js} +72 -72
- package/dist/interface/assets/{vendor-vueflow-Bmwd2les.js → vendor-vueflow-bSwRZ9X8.js} +1 -1
- package/dist/interface/assets/web-BDNQnMmA.js +1 -0
- package/dist/interface/assets/web-B_9Qyt8E.js +1 -0
- package/dist/interface/assets/web-BhJykCtq.js +1 -0
- package/dist/interface/assets/web-BjKL51lK-wWFeZlLg.js +1 -0
- package/dist/interface/assets/web-C7nJwIOa.js +1 -0
- package/dist/interface/assets/web-CGJsJQDb.js +1 -0
- package/dist/interface/assets/web-CJwASxrl.js +1 -0
- package/dist/interface/assets/web-CLe0L31Y.js +1 -0
- package/dist/interface/assets/web-DEv1hAn1.js +1 -0
- package/dist/interface/assets/web-DaeQvsXT.js +1 -0
- package/dist/interface/assets/web-H3-wNunW.js +1 -0
- package/dist/interface/assets/web-LCdyqJq1.js +1 -0
- package/dist/interface/assets/web-XZWYTK65.js +1 -0
- package/dist/interface/assets/web-rU5hlxxW.js +1 -0
- package/dist/interface/assets/{webhook-oVbP79Yk.js → webhook-CWKf2Qxu.js} +1 -1
- package/dist/interface/assets/workbox-window.prod.es5-BEYAF-e-.js +1 -0
- package/dist/interface/assets/{zoom-in-GKNy8xA7.js → zoom-in-CHkXAWHy.js} +1 -1
- package/dist/interface/ha/{404-DLhJqxRl.js → 404-C0mWQGWl.js} +1 -1
- package/dist/interface/ha/{About-DC0i1iE4.js → About-ByE7XErJ.js} +6 -6
- package/dist/interface/ha/{Assistant-BmazMPIg.js → Assistant-Z3FTR868.js} +2233 -2099
- package/dist/interface/ha/{Automation-gabF9YzQ.js → Automation-COQqTFNw.js} +237 -237
- package/dist/interface/ha/{AutomationImport-DaqZNs9s.js → AutomationImport-ueWqMBX9.js} +6 -6
- package/dist/interface/ha/{AutomationStore-DzM4huo5.js → AutomationStore-DBO4aZqy.js} +76 -76
- package/dist/interface/ha/{AutomationStoreDetail-CpzQMt_D.js → AutomationStoreDetail-DMnYu7hf.js} +19 -19
- package/dist/interface/ha/{Automations-Dcm4Us50.js → Automations-CMdbidc0.js} +73 -73
- package/dist/interface/ha/{Camera-CNK3QR7l.js → Camera-C28q_3pu.js} +183 -180
- package/dist/interface/ha/{CameraConsole-CpcF0411.js → CameraConsole-oMNZfKE6.js} +3 -3
- package/dist/interface/ha/{Cameras-Cf9rwRyf.js → Cameras-CsqrLx97.js} +166 -166
- package/dist/interface/ha/{Camview-BFKR2t6C.js → Camview-Br0LUakz.js} +389 -389
- package/dist/interface/ha/{Config-1XH3zfr2.js → Config-Y5eUNSW7.js} +110 -110
- package/dist/interface/ha/{ConfigActionAssistant-C0-NFoTB.js → ConfigActionAssistant-hl-6ZACj.js} +4 -4
- package/dist/interface/ha/{ConfigActionCameraControl-DNSKZPSZ.js → ConfigActionCameraControl-DnXlVFWD.js} +3 -3
- package/dist/interface/ha/{ConfigActionHttp-DVJAcGkl.js → ConfigActionHttp-BkpkMmRd.js} +2 -2
- package/dist/interface/ha/{ConfigActionImageInput-VVbHHHZs.js → ConfigActionImageInput-Dp78_QS_.js} +1 -1
- package/dist/interface/ha/{ConfigActionMqtt-N5OUJDzM.js → ConfigActionMqtt-DA_UWb5j.js} +4 -4
- package/dist/interface/ha/{ConfigActionNotification-s142tQoU.js → ConfigActionNotification-CQ4Ses3a.js} +3 -3
- package/dist/interface/ha/{ConfigActionNotificationControl-Dh7kaKVP.js → ConfigActionNotificationControl-Cb5PNGz-.js} +2 -2
- package/dist/interface/ha/{ConfigActionOutput-B4HHTg5C.js → ConfigActionOutput-DLuNHwRb.js} +1 -1
- package/dist/interface/ha/{ConfigActionPlugin-D20G2Dqf.js → ConfigActionPlugin-ChKFCNaj.js} +5 -5
- package/dist/interface/ha/{ConfigActionSensor-BS3jrFaG.js → ConfigActionSensor-DOutFalW.js} +5 -5
- package/dist/interface/ha/{ConfigActionSnapshot-CInLAcwK.js → ConfigActionSnapshot-GWgY6YIN.js} +2 -2
- package/dist/interface/ha/{ConfigActionVariable-C5vADGNF.js → ConfigActionVariable-bu-9VYTG.js} +1 -1
- package/dist/interface/ha/{ConfigConditionIfElse-CPeWDD31.js → ConfigConditionIfElse-iNp8tlZV.js} +3 -3
- package/dist/interface/ha/{ConfigConditionSensorState-BM5GmpN6.js → ConfigConditionSensorState-Dn7kcHpJ.js} +4 -4
- package/dist/interface/ha/{ConfigConditionSwitch-Dmz9FduJ.js → ConfigConditionSwitch-DaUlDgo0.js} +5 -5
- package/dist/interface/ha/{ConfigSensorValueInput-Ch5njvtv.js → ConfigSensorValueInput-D6m6suqJ.js} +9 -9
- package/dist/interface/ha/{ConfigTriggerDetection-BR2QWNyO.js → ConfigTriggerDetection-C5B_DC_L.js} +12 -12
- package/dist/interface/ha/{ConfigTriggerGeofence-CaImOjyW.js → ConfigTriggerGeofence-B4WVNcK5.js} +5 -5
- package/dist/interface/ha/{ConfigTriggerMqtt-DWz1XwZQ.js → ConfigTriggerMqtt-wnMfk_Un.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSensor-lfnhz0im.js → ConfigTriggerSensor-xFpI5KPu.js} +1 -1
- package/dist/interface/ha/{ConfigTriggerSystem-CwUhyFAj.js → ConfigTriggerSystem-YI9WYYVM.js} +2 -2
- package/dist/interface/ha/{ConfigTriggerWebhook-J6Xts7GQ.js → ConfigTriggerWebhook-58c2KgUe.js} +2 -2
- package/dist/interface/ha/{Console-BSdKFm6Y.js → Console-Coiqh32K.js} +13 -13
- package/dist/interface/ha/{CuiAutomationRunsDialog-BU8sympp.js → CuiAutomationRunsDialog-CJ2MGfEY.js} +2 -2
- package/dist/interface/ha/{CuiBottomSheet-Bnp7ta7V.js → CuiBottomSheet-BlG9Pl9j.js} +1 -1
- package/dist/interface/ha/{CuiCameraRecordings-E-mMqKSs.js → CuiCameraRecordings-DLXEB4Q7.js} +13 -13
- package/dist/interface/ha/{CuiCameraShares-DcNwd2OC.js → CuiCameraShares-BCIeaM6u.js} +6 -6
- package/dist/interface/ha/{CuiCameraTable-DNW9Vm_A.js → CuiCameraTable-PYYC7sOu.js} +9 -9
- package/dist/interface/ha/{CuiChartTable-muC7jL2H.js → CuiChartTable-FQ2iR5Hd.js} +42 -42
- package/dist/interface/ha/{CuiConsole-ND8bcuTg.js → CuiConsole-C77k5q_-.js} +6 -6
- package/dist/interface/ha/{CuiDataTable-CN4T8DgP.js → CuiDataTable-CIKQLseG.js} +6 -6
- package/dist/interface/ha/{CuiPluginCard-nIQiyQvH.js → CuiPluginCard-DZNXKP_P.js} +51 -51
- package/dist/interface/ha/{CuiPluginOAuthButton-FJ49NfUh.js → CuiPluginOAuthButton-DVf52_Zc.js} +6 -6
- package/dist/interface/ha/{CuiPluginTrustBadge-D6eanMyI.js → CuiPluginTrustBadge-CPljYiM8.js} +3 -3
- package/dist/interface/ha/{CuiQRCode-BdJzeeoE.js → CuiQRCode-oe8PLnLj.js} +7 -7
- package/dist/interface/ha/{CuiSchema-DY0V-8xP.js → CuiSchema-CQy94ZTs.js} +60 -60
- package/dist/interface/ha/{CuiTopNavbarItem-DT5pAKHp.js → CuiTopNavbarItem-D6OHZLQY.js} +5 -5
- package/dist/interface/ha/Faces-DxAPvemO.js +1441 -0
- package/dist/interface/ha/{FirstSteps-yS2M2cor.js → FirstSteps-ZINTSaeL.js} +67 -67
- package/dist/interface/ha/{Floorplan-DSOeScjI.js → Floorplan-DkbL8ppT.js} +300 -300
- package/dist/interface/ha/{Instances-B4h5EKpF.js → Instances-totWtqd7.js} +66 -66
- package/dist/interface/ha/{Logs-BH0Lxvs6.js → Logs-CzabIFja.js} +11 -11
- package/dist/interface/ha/{Menu-COH7QXuE.js → Menu-DcVBOQfw.js} +12 -12
- package/dist/interface/ha/{Metrics-BtnRqL_I.js → Metrics-B_SN5hbp.js} +410 -409
- package/dist/interface/ha/{OAuthDeviceFlow-D2QJ9MnP.js → OAuthDeviceFlow-B28TPsTQ.js} +7 -7
- package/dist/interface/ha/{Plugin-EfUSqwyh.js → Plugin-B2PbbB8d.js} +418 -279
- package/dist/interface/ha/{PluginConsole-hh_o15f7.js → PluginConsole-_KeG4FvO.js} +4 -4
- package/dist/interface/ha/{PluginDetail-DFiXGkrY.js → PluginDetail-GK_Fx14e.js} +185 -185
- package/dist/interface/ha/{PluginSearch-Cdrfubrj.js → PluginSearch-qSy4aqAW.js} +51 -51
- package/dist/interface/ha/{PluginUpdateProgress-BD2g2kVj.js → PluginUpdateProgress-C4Q2j6VO.js} +3 -3
- package/dist/interface/ha/{Plugins-qFiHW-Nk.js → Plugins-D0tvZHie.js} +64 -64
- package/dist/interface/ha/{RecentEventsFilter-UWrXnvfq.js → RecentEventsFilter-9ZkDHD1g.js} +1 -1
- package/dist/interface/ha/{Recordings-BzeC6tOz.js → Recordings-CpxJYaAa.js} +510 -489
- package/dist/interface/ha/{SensorEdit-BSgy7lkZ.js → SensorEdit-8KtqLXEu.js} +377 -377
- package/dist/interface/ha/{SensorHistory-IDvP8LKH.js → SensorHistory-CPTTsdjM.js} +2 -2
- package/dist/interface/ha/{Sensors-Diqp4oZ0.js → Sensors-DJt_Hnn2.js} +484 -469
- package/dist/interface/ha/{Settings-BgDsxAlx.js → Settings-B-OdG5pG.js} +18 -18
- package/dist/interface/ha/{SettingsAccount-DBXMQPYk.js → SettingsAccount-Ba2-2Lbi.js} +175 -175
- package/dist/interface/ha/{SettingsAppearance-VmbjnT3o.js → SettingsAppearance-D56HjSuQ.js} +7 -7
- package/dist/interface/ha/SettingsAssistant-DglU0auc.js +2025 -0
- package/dist/interface/ha/{SettingsBackup-BqY9TwYn.js → SettingsBackup-DZx4McDz.js} +38 -38
- package/dist/interface/ha/{SettingsList-CzHcfo2N.js → SettingsList-D9nIGkbE.js} +4 -4
- package/dist/interface/ha/{SettingsMqtt-DqV3h3Ow.js → SettingsMqtt-BOszh--k.js} +150 -150
- package/dist/interface/ha/{SettingsNotifications-yn5fIR_7.js → SettingsNotifications-DBVpZfp0.js} +118 -118
- package/dist/interface/ha/{SettingsRecordings-DDs1lyfY.js → SettingsRecordings-D3oJnizu.js} +9 -9
- package/dist/interface/ha/{SettingsRemote-jBw3l5E0.js → SettingsRemote-BOotvcOT.js} +332 -332
- package/dist/interface/ha/{SettingsSystem-BOv9hNlk.js → SettingsSystem-Bg11qoQX.js} +10 -10
- package/dist/interface/ha/{SettingsUsers-Biv-2F4C.js → SettingsUsers-KpLs9Jnh.js} +92 -92
- package/dist/interface/ha/{Terminal-CmcrGEV0.js → Terminal-D6opTHYI.js} +165 -170
- package/dist/interface/ha/Training-OB2KOQ7L.js +1694 -0
- package/dist/interface/ha/{Updates-DJAcmDQJ.js → Updates-C_OvXJjd.js} +12 -12
- package/dist/interface/ha/{VariableInput-DlYg7t0m.js → VariableInput-CfaDp67S.js} +1 -1
- package/dist/interface/ha/{VersionsHandler-UnrAWn-b.js → VersionsHandler-D1FVeYUZ.js} +10 -10
- package/dist/interface/ha/{VirtualSensorCreate-CssxeaCC.js → VirtualSensorCreate-DJIgMVrt.js} +7 -7
- package/dist/interface/ha/{Workers-CLpqLugC.js → Workers-cJMI4mYX.js} +29 -29
- package/dist/interface/ha/{api-B_tDa73J.js → api-CDawdL4p.js} +3 -3
- package/dist/interface/ha/{api-BP7mlzjP.js → api-D2VzV4is.js} +9943 -9546
- package/dist/interface/ha/{assistant-Cb6ACguQ.js → assistant-BmDAfChm.js} +101 -97
- package/dist/interface/ha/{auth-DOYDRgFm.js → auth-CvLz9C4w.js} +33 -33
- package/dist/interface/ha/{automationBlueprint-CbbG_ku4.js → automationBlueprint-BhNaeOZ1.js} +4 -4
- package/dist/interface/ha/{base-C-TYDHjS.js → base-XgWmQghV.js} +14 -3
- package/dist/interface/ha/cameraui-cards.js +1 -1
- package/dist/interface/ha/{cards-BpBP1zVW.js → cards-MQrnU0T8.js} +1197 -1121
- package/dist/interface/ha/{config-DroY1HBs.js → config-t_oAKFkJ.js} +14 -14
- package/dist/interface/ha/database-refresh-outline-PiqlCkA7.js +19 -0
- package/dist/interface/ha/{dist-BTp4AyuI.js → dist-BIngHzHx.js} +5 -5
- package/dist/interface/ha/{dist-C6MBHJhs.js → dist-oFWkn6pD.js} +5 -8
- package/dist/interface/ha/{esm-i8Tigknm.js → esm-C9XVFkXu.js} +4 -4
- package/dist/interface/ha/{mqtt-NJTVdd53.js → mqtt-C20h1uze.js} +14 -14
- package/dist/interface/ha/{native-DBH9ocSq.js → native-BVUxNLM1.js} +4 -4
- package/dist/interface/ha/{notifications-BPTvvgvv.js → notifications-Cy9DKiEn.js} +19 -19
- package/dist/interface/ha/{pinia-C6gt7A_Q.js → pinia-BokSpDzj.js} +640 -625
- package/dist/interface/ha/{plugins-B29K3nQP.js → plugins-jozYyBhV.js} +53 -53
- package/dist/interface/ha/{rooms-DLw0WUy_.js → rooms-DyfT3cXp.js} +11 -11
- package/dist/interface/ha/{server-B4b5_Ecu.js → server-hCCjQjZE.js} +28 -28
- package/dist/interface/ha/{types-DJHHL7nn.js → types-RG0SckNR.js} +49 -38
- package/dist/interface/ha/{types-XqA3YJPD.js → types-wLECk3Ml.js} +3 -1
- package/dist/interface/ha/{ungrouped-xyK1QrsM.js → ungrouped-BbyfoCQp.js} +121 -121
- package/dist/interface/ha/{updates-XFSu9Tfm.js → updates-hUgVDgoD.js} +36 -36
- package/dist/interface/ha/{useAppVersion-BH3rU1zz.js → useAppVersion-wNhZDuvR.js} +1 -1
- package/dist/interface/ha/useKeyboardInset-Cmbvb_W3.js +27 -0
- package/dist/interface/ha/{useLogsSocket-CaTRzvgU.js → useLogsSocket-y9Aex3tJ.js} +1 -1
- package/dist/interface/ha/{useNavLayout-DV0_OQx0.js → useNavLayout-Ehb0t34k.js} +2 -2
- package/dist/interface/ha/{useServerRestart-C8tynLUf.js → useServerRestart-CRSVcz3z.js} +1 -1
- package/dist/interface/ha/{useTabSwipe-CFoLDp3j.js → useTabSwipe-B_bseZkI.js} +1 -1
- package/dist/interface/ha/{useUpdateChannel-DSG2RTPe.js → useUpdateChannel-C_GU6lj6.js} +2 -2
- package/dist/interface/ha/{useUpdatesSocket-CSQ0g7-6.js → useUpdatesSocket-CYgHb7UX.js} +1 -1
- package/dist/interface/ha/{useUserOptions-CFaCy6L1.js → useUserOptions-pVYr-s3O.js} +1 -1
- package/dist/interface/ha/{web-D_q41D0i.js → web-CLbVbnCW.js} +5 -5
- package/dist/interface/index.html +70 -70
- package/dist/interface/sw.js +1 -1
- package/dist/server/package.json +30 -30
- package/dist/server/requirements.txt +2 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/__init__.py +44 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/config.py +2 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/camera/detection.py +7 -2
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/__init__.py +42 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/assistant_models.py +300 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/contract.py +9 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/helper.py +21 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/plugin/interfaces.py +80 -4
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/__init__.py +6 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/base.py +2 -0
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face.py +3 -7
- package/dist/server/src/_camera_ui_tools/camera_ui_sdk/sensor/face_embedder.py +69 -0
- package/dist/server/src/api/controllers/assistant.controller.js +1 -1
- package/dist/server/src/api/controllers/assistant.controller.js.map +1 -1
- package/dist/server/src/api/controllers/rooms.controller.js +3 -1
- package/dist/server/src/api/controllers/rooms.controller.js.map +1 -1
- package/dist/server/src/api/database/index.d.ts +1 -1
- package/dist/server/src/api/database/index.js +1 -1
- package/dist/server/src/api/database/migrations/v2-2-5.d.ts +3 -0
- package/dist/server/src/api/database/migrations/v2-2-5.js +19 -0
- package/dist/server/src/api/database/migrations/v2-2-5.js.map +1 -0
- package/dist/server/src/api/database/record-schemas.d.ts +4 -2
- package/dist/server/src/api/database/record-schemas.js +4 -1
- package/dist/server/src/api/database/record-schemas.js.map +1 -1
- package/dist/server/src/api/database/types.d.ts +6 -1
- package/dist/server/src/api/schemas/assistant.schema.d.ts +23 -7
- package/dist/server/src/api/schemas/assistant.schema.js +5 -1
- package/dist/server/src/api/schemas/assistant.schema.js.map +1 -1
- package/dist/server/src/api/schemas/cameras.schema.d.ts +56 -8
- package/dist/server/src/api/schemas/cameras.schema.js +4 -3
- package/dist/server/src/api/schemas/cameras.schema.js.map +1 -1
- package/dist/server/src/api/services/assistant.service.d.ts +1 -1
- package/dist/server/src/api/services/assistant.service.js +4 -1
- package/dist/server/src/api/services/assistant.service.js.map +1 -1
- package/dist/server/src/api/services/cameras.service.d.ts +1 -0
- package/dist/server/src/api/services/cameras.service.js +10 -2
- package/dist/server/src/api/services/cameras.service.js.map +1 -1
- package/dist/server/src/api/websocket/nsp/worker-perf.js +13 -0
- package/dist/server/src/api/websocket/nsp/worker-perf.js.map +1 -1
- package/dist/server/src/api/websocket/types.d.ts +12 -0
- package/dist/server/src/assistant/budget.d.ts +27 -0
- package/dist/server/src/assistant/budget.js +118 -0
- package/dist/server/src/assistant/budget.js.map +1 -0
- package/dist/server/src/assistant/compaction.d.ts +10 -0
- package/dist/server/src/assistant/compaction.js +83 -0
- package/dist/server/src/assistant/compaction.js.map +1 -0
- package/dist/server/src/assistant/docs.js +4 -3
- package/dist/server/src/assistant/docs.js.map +1 -1
- package/dist/server/src/assistant/history.d.ts +1 -0
- package/dist/server/src/assistant/history.js +28 -0
- package/dist/server/src/assistant/history.js.map +1 -1
- package/dist/server/src/assistant/manager.d.ts +11 -0
- package/dist/server/src/assistant/manager.js +262 -63
- package/dist/server/src/assistant/manager.js.map +1 -1
- package/dist/server/src/assistant/plugin-models.d.ts +34 -0
- package/dist/server/src/assistant/plugin-models.js +266 -0
- package/dist/server/src/assistant/plugin-models.js.map +1 -0
- package/dist/server/src/assistant/prompt.d.ts +7 -1
- package/dist/server/src/assistant/prompt.js +75 -11
- package/dist/server/src/assistant/prompt.js.map +1 -1
- package/dist/server/src/assistant/providers.js +7 -3
- package/dist/server/src/assistant/providers.js.map +1 -1
- package/dist/server/src/assistant/recap.d.ts +3 -0
- package/dist/server/src/assistant/recap.js +65 -0
- package/dist/server/src/assistant/recap.js.map +1 -0
- package/dist/server/src/assistant/registry.d.ts +16 -1
- package/dist/server/src/assistant/registry.js +49 -1
- package/dist/server/src/assistant/registry.js.map +1 -1
- package/dist/server/src/assistant/retry.js +38 -24
- package/dist/server/src/assistant/retry.js.map +1 -1
- package/dist/server/src/assistant/router.d.ts +7 -0
- package/dist/server/src/assistant/router.js +67 -0
- package/dist/server/src/assistant/router.js.map +1 -0
- package/dist/server/src/assistant/scheduler.js +8 -1
- package/dist/server/src/assistant/scheduler.js.map +1 -1
- package/dist/server/src/assistant/skills.d.ts +8 -0
- package/dist/server/src/assistant/skills.js +59 -1
- package/dist/server/src/assistant/skills.js.map +1 -1
- package/dist/server/src/assistant/threads.d.ts +1 -0
- package/dist/server/src/assistant/threads.js +7 -1
- package/dist/server/src/assistant/threads.js.map +1 -1
- package/dist/server/src/assistant/tool-names.js +9 -1
- package/dist/server/src/assistant/tool-names.js.map +1 -1
- package/dist/server/src/assistant/tool-rank.d.ts +2 -0
- package/dist/server/src/assistant/tool-rank.js +48 -0
- package/dist/server/src/assistant/tool-rank.js.map +1 -0
- package/dist/server/src/assistant/tool-schema.d.ts +3 -0
- package/dist/server/src/assistant/tool-schema.js +65 -0
- package/dist/server/src/assistant/tool-schema.js.map +1 -0
- package/dist/server/src/assistant/tools/api.js +7 -9
- package/dist/server/src/assistant/tools/api.js.map +1 -1
- package/dist/server/src/assistant/tools/ask.js +1 -2
- package/dist/server/src/assistant/tools/ask.js.map +1 -1
- package/dist/server/src/assistant/tools/automations.js +3 -5
- package/dist/server/src/assistant/tools/automations.js.map +1 -1
- package/dist/server/src/assistant/tools/cameras.js +3 -4
- package/dist/server/src/assistant/tools/cameras.js.map +1 -1
- package/dist/server/src/assistant/tools/docs.js +5 -6
- package/dist/server/src/assistant/tools/docs.js.map +1 -1
- package/dist/server/src/assistant/tools/instance.js +19 -19
- package/dist/server/src/assistant/tools/instance.js.map +1 -1
- package/dist/server/src/assistant/tools/memory.js +3 -4
- package/dist/server/src/assistant/tools/memory.js.map +1 -1
- package/dist/server/src/assistant/tools/metrics.js +1 -2
- package/dist/server/src/assistant/tools/metrics.js.map +1 -1
- package/dist/server/src/assistant/tools/notifications.js +4 -11
- package/dist/server/src/assistant/tools/notifications.js.map +1 -1
- package/dist/server/src/assistant/tools/plugins.js +12 -14
- package/dist/server/src/assistant/tools/plugins.js.map +1 -1
- package/dist/server/src/assistant/tools/report.js +17 -12
- package/dist/server/src/assistant/tools/report.js.map +1 -1
- package/dist/server/src/assistant/tools/schedules.js +6 -11
- package/dist/server/src/assistant/tools/schedules.js.map +1 -1
- package/dist/server/src/assistant/tools/sensors.js +63 -4
- package/dist/server/src/assistant/tools/sensors.js.map +1 -1
- package/dist/server/src/assistant/tools/settings.js +2 -3
- package/dist/server/src/assistant/tools/settings.js.map +1 -1
- package/dist/server/src/assistant/tools/system.js +3 -5
- package/dist/server/src/assistant/tools/system.js.map +1 -1
- package/dist/server/src/assistant/tools/terminal.js +4 -5
- package/dist/server/src/assistant/tools/terminal.js.map +1 -1
- package/dist/server/src/assistant/types.d.ts +10 -1
- package/dist/server/src/assistant/uploads.d.ts +2 -1
- package/dist/server/src/assistant/uploads.js +25 -3
- package/dist/server/src/assistant/uploads.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-coordinator.d.ts +5 -0
- package/dist/server/src/camera/decoder/detection-coordinator.js +45 -14
- package/dist/server/src/camera/decoder/detection-coordinator.js.map +1 -1
- package/dist/server/src/camera/decoder/detection-pipeline.js +2 -1
- package/dist/server/src/camera/decoder/detection-pipeline.js.map +1 -1
- package/dist/server/src/camera/decoder/event-manager.d.ts +27 -4
- package/dist/server/src/camera/decoder/event-manager.js +175 -48
- package/dist/server/src/camera/decoder/event-manager.js.map +1 -1
- package/dist/server/src/camera/decoder/nvr-sink.d.ts +4 -1
- package/dist/server/src/camera/decoder/nvr-sink.js +1 -1
- package/dist/server/src/camera/decoder/nvr-sink.js.map +1 -1
- package/dist/server/src/camera/decoder/perf-tracker.d.ts +10 -0
- package/dist/server/src/camera/decoder/perf-tracker.js +20 -0
- package/dist/server/src/camera/decoder/perf-tracker.js.map +1 -1
- package/dist/server/src/camera/decoder/secondary-stage.d.ts +21 -1
- package/dist/server/src/camera/decoder/secondary-stage.js +301 -59
- package/dist/server/src/camera/decoder/secondary-stage.js.map +1 -1
- package/dist/server/src/camera/decoder/side-queue.d.ts +13 -0
- package/dist/server/src/camera/decoder/side-queue.js +53 -0
- package/dist/server/src/camera/decoder/side-queue.js.map +1 -0
- package/dist/server/src/camera/decoder/sources/buffered-source.d.ts +2 -0
- package/dist/server/src/camera/decoder/sources/buffered-source.js +7 -1
- package/dist/server/src/camera/decoder/sources/buffered-source.js.map +1 -1
- package/dist/server/src/camera/decoder/types.d.ts +11 -1
- package/dist/server/src/camera/decoder/types.js +9 -1
- package/dist/server/src/camera/decoder/types.js.map +1 -1
- package/dist/server/src/camera/sensors/controller.d.ts +1 -0
- package/dist/server/src/camera/sensors/controller.js +28 -4
- package/dist/server/src/camera/sensors/controller.js.map +1 -1
- package/dist/server/src/main.js +11 -2
- package/dist/server/src/main.js.map +1 -1
- package/dist/server/src/plugins/index.js +5 -4
- package/dist/server/src/plugins/index.js.map +1 -1
- package/dist/server/src/plugins/runtime/python/proxy/camera_device.py +1 -14
- package/dist/server/src/plugins/runtime/python/proxy/sensor.py +14 -1
- package/dist/server/src/plugins/runtime/python/proxy/sensor_manager.py +1 -13
- package/dist/server/src/rpc/interfaces/detection.d.ts +14 -2
- package/dist/server/src/rpc/server.js +1 -0
- package/dist/server/src/rpc/server.js.map +1 -1
- package/dist/server/src/services/config/index.d.ts +1 -0
- package/dist/server/src/services/config/index.js +6 -11
- package/dist/server/src/services/config/index.js.map +1 -1
- package/dist/server/src/utils/camera.js +8 -5
- package/dist/server/src/utils/camera.js.map +1 -1
- package/dist/server/src/utils/instance-lock.d.ts +1 -0
- package/dist/server/src/utils/instance-lock.js +57 -0
- package/dist/server/src/utils/instance-lock.js.map +1 -0
- package/dist/server/src/workers/agent.d.ts +2 -0
- package/dist/server/src/workers/agent.js +11 -1
- package/dist/server/src/workers/agent.js.map +1 -1
- package/dist/server/src/workers/manager.js +9 -2
- package/dist/server/src/workers/manager.js.map +1 -1
- package/dist/server/src/workers/types.d.ts +1 -0
- package/npm-shrinkwrap.json +213 -213
- package/package.json +30 -30
- package/dist/interface/assets/Assistant-bB8RBo-m.js +0 -1
- package/dist/interface/assets/Automations-BdZZW2eN.js +0 -2
- package/dist/interface/assets/Camera-B4ojNnKb.css +0 -1
- package/dist/interface/assets/Camera-Ct7ndOxr.js +0 -2
- package/dist/interface/assets/Camview-BjQdTHNh.js +0 -1
- package/dist/interface/assets/Config-CBTbYd5v.js +0 -2
- package/dist/interface/assets/ConfigTriggerGeofence-Bl2ZacbY.js +0 -1
- package/dist/interface/assets/Console-Cfk9MA9m.js +0 -1
- package/dist/interface/assets/CuiAssistantConversation-BHK_i56I.js +0 -5
- package/dist/interface/assets/CuiAssistantConversation-lkpZg3ML.css +0 -1
- package/dist/interface/assets/CuiAutomationRunsDialog-B0ohEHw0.js +0 -1
- package/dist/interface/assets/CuiBottomSheet-NgX7VFao.js +0 -1
- package/dist/interface/assets/CuiCameraPipCard-C2qaGJlH.js +0 -1
- package/dist/interface/assets/CuiCameraRecordings-BTD-CQAg.js +0 -1
- package/dist/interface/assets/CuiCameraTable-KPk46Xcl.js +0 -1
- package/dist/interface/assets/CuiDataTable-CsqH-RB1.js +0 -1
- package/dist/interface/assets/CuiLightControl-ChGYpQAK.js +0 -1
- package/dist/interface/assets/CuiMarkdownContent-DSArmS0V.js +0 -1
- package/dist/interface/assets/CuiPluginCard-CWImTZ6l.js +0 -2
- package/dist/interface/assets/CuiSchema-ytExUVhI.js +0 -1
- package/dist/interface/assets/Faces-Cb6XMxDC.js +0 -1
- package/dist/interface/assets/FirstSteps-QNYTkEJo.js +0 -1
- package/dist/interface/assets/Floorplan-DbqADtN1.js +0 -1
- package/dist/interface/assets/Instances-DrMzPD65.js +0 -1
- package/dist/interface/assets/Metrics-BUP_-7o7.css +0 -1
- package/dist/interface/assets/Metrics-CqhUnVRA.js +0 -12
- package/dist/interface/assets/Plugin-BDqNeTCT.css +0 -1
- package/dist/interface/assets/Plugin-DyOg_fbg.js +0 -1
- package/dist/interface/assets/PluginSearch-BgecD9Ob.js +0 -2
- package/dist/interface/assets/PluginSearch-C8xHKikH.js +0 -1
- package/dist/interface/assets/Plugins-CuujWEtM.js +0 -1
- package/dist/interface/assets/Recordings-9FJqCfdM.css +0 -1
- package/dist/interface/assets/Recordings-ths9khZr.js +0 -1
- package/dist/interface/assets/SensorEdit-BzoIH7QC.js +0 -1
- package/dist/interface/assets/Sensors-CK5uExfU.js +0 -2
- package/dist/interface/assets/Settings-DN5hFtw_.js +0 -1
- package/dist/interface/assets/SettingsAccount-BCrmon5O.js +0 -1
- package/dist/interface/assets/SettingsAccount-CSy1BAIH.js +0 -1
- package/dist/interface/assets/SettingsAppearance-h_XPZfQl.js +0 -1
- package/dist/interface/assets/SettingsAssistant-BESab92C.css +0 -1
- package/dist/interface/assets/SettingsAssistant-D8FmVbUL.js +0 -1
- package/dist/interface/assets/SettingsMqtt-DCkLIYpF.js +0 -1
- package/dist/interface/assets/SettingsRemote-DXlQKwlT.js +0 -2
- package/dist/interface/assets/Terminal-Dl-aAZME.js +0 -4
- package/dist/interface/assets/Training-B1oQjAr8.css +0 -1
- package/dist/interface/assets/Training-DdZjXgt1.js +0 -1
- package/dist/interface/assets/Updates-CkB1lXuo.js +0 -2
- package/dist/interface/assets/Workers-7yiebNkl.js +0 -2
- package/dist/interface/assets/api-DK2Bav9D.js +0 -4
- package/dist/interface/assets/api-DTCqDA-h.css +0 -2
- package/dist/interface/assets/assistant-BJ6xKcw_.js +0 -1
- package/dist/interface/assets/cloudHandoff-DtlquYGZ.js +0 -1
- package/dist/interface/assets/esm-4Hzzm93H.js +0 -1
- package/dist/interface/assets/esm-BrFPi5_4.js +0 -1
- package/dist/interface/assets/esm-C7pcdfXf.js +0 -1
- package/dist/interface/assets/esm-C8bsO829.js +0 -1
- package/dist/interface/assets/esm-CXzdnAMk.js +0 -1
- package/dist/interface/assets/esm-CZNGZkPu.js +0 -1
- package/dist/interface/assets/esm-D0iI7OVb.js +0 -1
- package/dist/interface/assets/esm-DKolm6KU.js +0 -1
- package/dist/interface/assets/esm-DTywI9gs.js +0 -1
- package/dist/interface/assets/esm-DifXcK9i.js +0 -1
- package/dist/interface/assets/esm-Dq5o-Xb4.js +0 -1
- package/dist/interface/assets/esm-IbQuUZ5l.js +0 -1
- package/dist/interface/assets/esm-Xre_AP5i.js +0 -1
- package/dist/interface/assets/esm-zYnXHhpH.js +0 -1
- package/dist/interface/assets/main-D74mRIxc.js +0 -3
- package/dist/interface/assets/native-CAujTO6L.js +0 -1
- package/dist/interface/assets/native-sQ88qazf.js +0 -1
- package/dist/interface/assets/plugin-D7K50k_y.js +0 -1
- package/dist/interface/assets/sensorIcons-DQVgryYP.js +0 -1
- package/dist/interface/assets/types-5rE8Tz0_.js +0 -1
- package/dist/interface/assets/ungrouped-D56FGIrg.js +0 -1
- package/dist/interface/assets/useBackupRestore-Crfd592q.js +0 -1
- package/dist/interface/assets/useKeyboardInset-DXVi1dLG.js +0 -1
- package/dist/interface/assets/useUserOptions-BTRBUuE2.js +0 -1
- package/dist/interface/assets/vendor-gridstack-anPyIu9V.js +0 -3
- package/dist/interface/assets/web-3M-ddn4G.js +0 -1
- package/dist/interface/assets/web-BY80VGyU.js +0 -1
- package/dist/interface/assets/web-B_tUYyM0.js +0 -1
- package/dist/interface/assets/web-BjKL51lK-Bb5NYhpJ.js +0 -1
- package/dist/interface/assets/web-Bv-4PJGI.js +0 -1
- package/dist/interface/assets/web-C3Pk8qeB.js +0 -1
- package/dist/interface/assets/web-CLcvGPH6.js +0 -1
- package/dist/interface/assets/web-DO8gTOVJ.js +0 -1
- package/dist/interface/assets/web-DR5q_DmI.js +0 -1
- package/dist/interface/assets/web-DRHbG4Te.js +0 -1
- package/dist/interface/assets/web-DaQ8d8yk.js +0 -1
- package/dist/interface/assets/web-EVRW5whF.js +0 -1
- package/dist/interface/assets/web-S6Dk3UWN.js +0 -1
- package/dist/interface/assets/web-pWIp0wf0.js +0 -1
- package/dist/interface/assets/workbox-window.prod.es5-Dz5rcO1z.js +0 -1
- package/dist/interface/ha/Faces-C_svyTrr.js +0 -1282
- package/dist/interface/ha/SettingsAssistant-C2R4ZetE.js +0 -1857
- package/dist/interface/ha/Training-BEzPiXZg.js +0 -1512
|
@@ -0,0 +1,300 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from collections.abc import AsyncIterator
|
|
4
|
+
from typing import Any, Literal, NotRequired, Protocol, TypedDict, runtime_checkable
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
class AssistantModelSpec(TypedDict):
|
|
8
|
+
"""One model a plugin offers to the assistant. The user picks it under
|
|
9
|
+
Settings, Assistant like any other model; the host never sees a key or an
|
|
10
|
+
endpoint of it.
|
|
11
|
+
|
|
12
|
+
Example:
|
|
13
|
+
```python
|
|
14
|
+
on_device: AssistantModelSpec = {
|
|
15
|
+
"id": "apple-on-device",
|
|
16
|
+
"name": "Apple on-device",
|
|
17
|
+
"contextTokens": 8192,
|
|
18
|
+
"vision": True,
|
|
19
|
+
"toolCalling": True,
|
|
20
|
+
"structuredOutput": True,
|
|
21
|
+
"note": "Runs on this Mac, nothing leaves the house.",
|
|
22
|
+
}
|
|
23
|
+
```
|
|
24
|
+
"""
|
|
25
|
+
|
|
26
|
+
id: str
|
|
27
|
+
"""Model id, unique within the plugin and stable across restarts: the settings store it."""
|
|
28
|
+
|
|
29
|
+
name: str
|
|
30
|
+
"""Name shown in the model list."""
|
|
31
|
+
|
|
32
|
+
contextTokens: int
|
|
33
|
+
"""Hard context limit of the model in tokens. The host plans prompt, tools and history with it."""
|
|
34
|
+
|
|
35
|
+
vision: bool
|
|
36
|
+
"""The model reads images. Without it the host sends text only."""
|
|
37
|
+
|
|
38
|
+
toolCalling: bool
|
|
39
|
+
"""The model calls tools. Without it the assistant answers from the conversation alone."""
|
|
40
|
+
|
|
41
|
+
structuredOutput: bool
|
|
42
|
+
"""The model honors a JSON schema. Without it the host asks for free text and parses defensively."""
|
|
43
|
+
|
|
44
|
+
toolRouting: NotRequired[bool]
|
|
45
|
+
"""The host picks the tools for a question with a short call of its own and puts only
|
|
46
|
+
those in front of the model. For a small model that calls the tools it sees but
|
|
47
|
+
does not work through a catalog of fifty."""
|
|
48
|
+
|
|
49
|
+
note: NotRequired[str]
|
|
50
|
+
"""One line shown next to the model, for example where it runs or what it costs."""
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
class AssistantModelText(TypedDict):
|
|
54
|
+
"""Text part of a message."""
|
|
55
|
+
|
|
56
|
+
type: Literal["text"]
|
|
57
|
+
"""Always ``text``."""
|
|
58
|
+
|
|
59
|
+
text: str
|
|
60
|
+
"""The text itself."""
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
class AssistantModelImage(TypedDict):
|
|
64
|
+
"""Image part of a message. Arrives only for a model whose spec says
|
|
65
|
+
``vision``, and only when the instance allows pictures to reach the model."""
|
|
66
|
+
|
|
67
|
+
type: Literal["image"]
|
|
68
|
+
"""Always ``image``."""
|
|
69
|
+
|
|
70
|
+
data: str
|
|
71
|
+
"""Base64-encoded image bytes."""
|
|
72
|
+
|
|
73
|
+
mimeType: Literal["image/jpeg", "image/png", "image/webp"]
|
|
74
|
+
"""MIME type of ``data``."""
|
|
75
|
+
|
|
76
|
+
|
|
77
|
+
AssistantModelContent = AssistantModelText | AssistantModelImage
|
|
78
|
+
"""Part of a message: text or an image."""
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class AssistantModelToolCall(TypedDict):
|
|
82
|
+
"""A tool call: which tool with which arguments."""
|
|
83
|
+
|
|
84
|
+
id: str
|
|
85
|
+
"""Id the host uses to match the result, unique within the request."""
|
|
86
|
+
|
|
87
|
+
name: str
|
|
88
|
+
"""Name of the tool as declared in ``AssistantModelRequest["tools"]``."""
|
|
89
|
+
|
|
90
|
+
arguments: dict[str, Any]
|
|
91
|
+
"""Arguments as parsed JSON, matching the tool's input schema."""
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
class AssistantModelMessage(TypedDict):
|
|
95
|
+
"""One message of the conversation. ``tool`` messages carry the result of
|
|
96
|
+
the call with the matching ``toolCallId``."""
|
|
97
|
+
|
|
98
|
+
role: Literal["user", "assistant", "tool"]
|
|
99
|
+
"""Who wrote it."""
|
|
100
|
+
|
|
101
|
+
content: list[AssistantModelContent]
|
|
102
|
+
"""Text and images of the message."""
|
|
103
|
+
|
|
104
|
+
toolCalls: NotRequired[list[AssistantModelToolCall]]
|
|
105
|
+
"""Tool calls the assistant asked for, on ``assistant`` messages."""
|
|
106
|
+
|
|
107
|
+
toolCallId: NotRequired[str]
|
|
108
|
+
"""Call this message answers, on ``tool`` messages."""
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class AssistantModelTool(TypedDict):
|
|
112
|
+
"""A tool the model may call in this request."""
|
|
113
|
+
|
|
114
|
+
name: str
|
|
115
|
+
"""Name the model uses in its call."""
|
|
116
|
+
|
|
117
|
+
description: str
|
|
118
|
+
"""What the tool does, written for the model."""
|
|
119
|
+
|
|
120
|
+
inputSchema: dict[str, Any]
|
|
121
|
+
"""JSON Schema object of the arguments."""
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
class AssistantModelRequest(TypedDict):
|
|
125
|
+
"""One request to a plugin model: the conversation so far plus what the
|
|
126
|
+
model may do with it."""
|
|
127
|
+
|
|
128
|
+
modelId: str
|
|
129
|
+
"""Model id from ``AssistantModelSpec["id"]``."""
|
|
130
|
+
|
|
131
|
+
system: list[str]
|
|
132
|
+
"""Instructions that precede the conversation."""
|
|
133
|
+
|
|
134
|
+
messages: list[AssistantModelMessage]
|
|
135
|
+
"""The conversation, oldest first. The host has already trimmed it to ``contextTokens``."""
|
|
136
|
+
|
|
137
|
+
tools: list[AssistantModelTool]
|
|
138
|
+
"""Tools the model may call. Empty when the run allows none."""
|
|
139
|
+
|
|
140
|
+
outputSchema: NotRequired[dict[str, Any]]
|
|
141
|
+
"""JSON Schema the answer has to match. Only set for models whose spec says ``structuredOutput``."""
|
|
142
|
+
|
|
143
|
+
maxOutputTokens: NotRequired[int]
|
|
144
|
+
"""Upper bound for the answer in tokens, when the host has one."""
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
class AssistantModelTextChunk(TypedDict):
|
|
148
|
+
"""A piece of the answer text."""
|
|
149
|
+
|
|
150
|
+
type: Literal["text"]
|
|
151
|
+
"""Always ``text``."""
|
|
152
|
+
|
|
153
|
+
delta: str
|
|
154
|
+
"""The text generated since the last chunk."""
|
|
155
|
+
|
|
156
|
+
|
|
157
|
+
class AssistantModelToolCallChunk(TypedDict):
|
|
158
|
+
"""A tool call the model asks for, with complete arguments."""
|
|
159
|
+
|
|
160
|
+
type: Literal["tool_call"]
|
|
161
|
+
"""Always ``tool_call``."""
|
|
162
|
+
|
|
163
|
+
call: AssistantModelToolCall
|
|
164
|
+
"""The call itself."""
|
|
165
|
+
|
|
166
|
+
|
|
167
|
+
class AssistantModelUsageChunk(TypedDict):
|
|
168
|
+
"""What the answer consumed."""
|
|
169
|
+
|
|
170
|
+
type: Literal["usage"]
|
|
171
|
+
"""Always ``usage``."""
|
|
172
|
+
|
|
173
|
+
promptTokens: int
|
|
174
|
+
"""Tokens the request consumed."""
|
|
175
|
+
|
|
176
|
+
completionTokens: int
|
|
177
|
+
"""Tokens the answer consumed."""
|
|
178
|
+
|
|
179
|
+
|
|
180
|
+
class AssistantModelDoneChunk(TypedDict):
|
|
181
|
+
"""End of the answer, yielded exactly once."""
|
|
182
|
+
|
|
183
|
+
type: Literal["done"]
|
|
184
|
+
"""Always ``done``."""
|
|
185
|
+
|
|
186
|
+
finish: Literal["stop", "tool_calls", "length", "error"]
|
|
187
|
+
"""Why the model stopped."""
|
|
188
|
+
|
|
189
|
+
message: NotRequired[str]
|
|
190
|
+
"""What went wrong, with ``error``."""
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
AssistantModelChunk = (
|
|
194
|
+
AssistantModelTextChunk | AssistantModelToolCallChunk | AssistantModelUsageChunk | AssistantModelDoneChunk
|
|
195
|
+
)
|
|
196
|
+
"""A piece of the answer: text, a tool call, token counts, or the end."""
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
class AssistantModelStatus(TypedDict):
|
|
200
|
+
"""Whether the plugin can answer right now. A model that has to be
|
|
201
|
+
downloaded or loaded first reports ``ready: False`` with a line the settings
|
|
202
|
+
page shows, and a ``progress`` while it knows one.
|
|
203
|
+
|
|
204
|
+
Example:
|
|
205
|
+
```python
|
|
206
|
+
{"ready": False, "message": "macOS is downloading the model", "progress": 0.62}
|
|
207
|
+
```
|
|
208
|
+
"""
|
|
209
|
+
|
|
210
|
+
ready: bool
|
|
211
|
+
"""The models of this plugin can answer right now."""
|
|
212
|
+
|
|
213
|
+
message: NotRequired[str]
|
|
214
|
+
"""One line for the user: what the plugin is waiting for, or what it is doing."""
|
|
215
|
+
|
|
216
|
+
progress: NotRequired[float]
|
|
217
|
+
"""How far the loading got, between 0 and 1."""
|
|
218
|
+
|
|
219
|
+
|
|
220
|
+
class AssistantModelContext(TypedDict):
|
|
221
|
+
"""Who the answer is for and when to stop writing it."""
|
|
222
|
+
|
|
223
|
+
userId: NotRequired[str]
|
|
224
|
+
"""ID of the user the answer is for. Absent for scheduled runs and plugin requests."""
|
|
225
|
+
|
|
226
|
+
language: str
|
|
227
|
+
"""BCP 47 language tag the answer should use."""
|
|
228
|
+
|
|
229
|
+
timeoutMs: int
|
|
230
|
+
"""Milliseconds the host waits before it drops the answer."""
|
|
231
|
+
|
|
232
|
+
|
|
233
|
+
@runtime_checkable
|
|
234
|
+
class AssistantModelProvider(Protocol):
|
|
235
|
+
"""Implemented by plugins that list ``PluginInterface.AssistantModels`` in
|
|
236
|
+
their contract. Such a plugin is a bridge to a model the host cannot reach
|
|
237
|
+
itself: one without an HTTP API, one behind an unusual authentication, or
|
|
238
|
+
one that lives on the machine the plugin runs on. The plugin holds no
|
|
239
|
+
conversation state, every request carries the whole conversation.
|
|
240
|
+
|
|
241
|
+
Example:
|
|
242
|
+
```python
|
|
243
|
+
class ApplePlugin(BasePlugin):
|
|
244
|
+
async def assistantModels(self) -> list[AssistantModelSpec]:
|
|
245
|
+
return [
|
|
246
|
+
{
|
|
247
|
+
"id": "apple-on-device",
|
|
248
|
+
"name": "Apple on-device",
|
|
249
|
+
"contextTokens": 8192,
|
|
250
|
+
"vision": True,
|
|
251
|
+
"toolCalling": True,
|
|
252
|
+
"structuredOutput": True,
|
|
253
|
+
}
|
|
254
|
+
]
|
|
255
|
+
|
|
256
|
+
async def assistantGenerate(
|
|
257
|
+
self, request: AssistantModelRequest, ctx: AssistantModelContext
|
|
258
|
+
) -> AsyncIterator[AssistantModelChunk]:
|
|
259
|
+
async for delta in self.session.stream(request, ctx["timeoutMs"]):
|
|
260
|
+
yield {"type": "text", "delta": delta}
|
|
261
|
+
yield {"type": "done", "finish": "stop"}
|
|
262
|
+
```
|
|
263
|
+
"""
|
|
264
|
+
|
|
265
|
+
async def assistantModels(self) -> list[AssistantModelSpec]:
|
|
266
|
+
"""List the models this plugin offers. Called after the plugin is ready
|
|
267
|
+
and whenever the settings page is opened.
|
|
268
|
+
|
|
269
|
+
Returns:
|
|
270
|
+
The specs, empty while the plugin has no usable model (no hardware,
|
|
271
|
+
no permission yet).
|
|
272
|
+
"""
|
|
273
|
+
...
|
|
274
|
+
|
|
275
|
+
async def assistantModelStatus(self) -> AssistantModelStatus:
|
|
276
|
+
"""Report whether the models can answer right now. The host asks before
|
|
277
|
+
it offers them and while the settings page is open, so a model that is
|
|
278
|
+
still downloading shows up as busy instead of missing. Leave it out when
|
|
279
|
+
the models are usable as soon as the plugin runs.
|
|
280
|
+
|
|
281
|
+
Returns:
|
|
282
|
+
Readiness, with a line and a progress while it loads.
|
|
283
|
+
"""
|
|
284
|
+
...
|
|
285
|
+
|
|
286
|
+
def assistantGenerate(
|
|
287
|
+
self, request: AssistantModelRequest, ctx: AssistantModelContext
|
|
288
|
+
) -> AsyncIterator[AssistantModelChunk]:
|
|
289
|
+
"""Answer one request. The host reads chunks until ``done``, then either
|
|
290
|
+
returns the text to the user or runs the tool calls and asks again with
|
|
291
|
+
their results in ``messages``.
|
|
292
|
+
|
|
293
|
+
Args:
|
|
294
|
+
request: Conversation, tools and schema for this answer.
|
|
295
|
+
ctx: Who asks, in which language, and how long the host waits.
|
|
296
|
+
|
|
297
|
+
Returns:
|
|
298
|
+
The answer in pieces.
|
|
299
|
+
"""
|
|
300
|
+
...
|
|
@@ -35,6 +35,9 @@ class PluginRole(StrEnum):
|
|
|
35
35
|
CameraAndSensorProvider = "cameraAndSensorProvider"
|
|
36
36
|
"""Manages cameras and exposes sensors, on its own cameras and, with ``consumes`` set, on foreign ones."""
|
|
37
37
|
|
|
38
|
+
Service = "service"
|
|
39
|
+
"""Serves camera.ui itself, for example with a language model. Touches no cameras and no sensors, and is never assigned to one."""
|
|
40
|
+
|
|
38
41
|
|
|
39
42
|
class PluginInterface(StrEnum):
|
|
40
43
|
"""Capability flags a plugin advertises in its contract.
|
|
@@ -64,6 +67,9 @@ class PluginInterface(StrEnum):
|
|
|
64
67
|
ClipDetection = "ClipDetection"
|
|
65
68
|
"""Implements ClipDetectionInterface (CLIP image and text embeddings used for semantic search)."""
|
|
66
69
|
|
|
70
|
+
FaceEmbedding = "FaceEmbedding"
|
|
71
|
+
"""Implements FaceEmbeddingInterface (turns a face crop into a vector). Matching against enrolled faces happens in the NVR."""
|
|
72
|
+
|
|
67
73
|
DiscoveryProvider = "DiscoveryProvider"
|
|
68
74
|
"""Implements DiscoveryProvider (network scan + adoption). Only valid for camera-controlling roles."""
|
|
69
75
|
|
|
@@ -91,6 +97,9 @@ class PluginInterface(StrEnum):
|
|
|
91
97
|
AssistantTools = "AssistantTools"
|
|
92
98
|
"""Implements AssistantToolProvider, so the assistant can offer the plugin's tools to the model."""
|
|
93
99
|
|
|
100
|
+
AssistantModels = "AssistantModels"
|
|
101
|
+
"""Implements AssistantModelProvider, so its models appear in the assistant settings."""
|
|
102
|
+
|
|
94
103
|
|
|
95
104
|
class PluginCapability(StrEnum):
|
|
96
105
|
"""Permission a plugin requests so it can call a host-provided system
|
|
@@ -134,6 +134,8 @@ def validate_contract_consistency(contract: PluginContract, plugin_name: str | N
|
|
|
134
134
|
raise ValueError(f"{prefix}SensorProvider plugins must provide at least one sensor type.")
|
|
135
135
|
if role == PluginRole.CameraAndSensorProvider and len(provides) == 0:
|
|
136
136
|
raise ValueError(f"{prefix}CameraAndSensorProvider plugins must provide at least one sensor type.")
|
|
137
|
+
if role == PluginRole.Service and (len(provides) > 0 or len(contract["consumes"]) > 0):
|
|
138
|
+
raise ValueError(f"{prefix}Service plugins cannot provide or consume sensors.")
|
|
137
139
|
|
|
138
140
|
|
|
139
141
|
def is_hub(contract: PluginContract) -> bool:
|
|
@@ -155,6 +157,25 @@ def is_hub(contract: PluginContract) -> bool:
|
|
|
155
157
|
return contract["role"] == PluginRole.Hub
|
|
156
158
|
|
|
157
159
|
|
|
160
|
+
def is_service(contract: PluginContract) -> bool:
|
|
161
|
+
"""Report whether the plugin only serves camera.ui itself (role Service),
|
|
162
|
+
which means it never appears in a camera's plugin list.
|
|
163
|
+
|
|
164
|
+
Args:
|
|
165
|
+
contract: Plugin contract to inspect.
|
|
166
|
+
|
|
167
|
+
Returns:
|
|
168
|
+
True if the role is :attr:`PluginRole.Service`.
|
|
169
|
+
|
|
170
|
+
Example:
|
|
171
|
+
```python
|
|
172
|
+
if is_service(contract):
|
|
173
|
+
skip_camera_assignment()
|
|
174
|
+
```
|
|
175
|
+
"""
|
|
176
|
+
return contract["role"] == PluginRole.Service
|
|
177
|
+
|
|
178
|
+
|
|
158
179
|
def can_create_cameras(contract: PluginContract) -> bool:
|
|
159
180
|
"""Report whether the plugin can create cameras (role is CameraController
|
|
160
181
|
or CameraAndSensorProvider). Used to gate camera-creating operations such
|
|
@@ -24,6 +24,7 @@ from .assistant import AssistantToolProvider
|
|
|
24
24
|
|
|
25
25
|
if TYPE_CHECKING:
|
|
26
26
|
from ..camera import CameraConfig, CameraDevice
|
|
27
|
+
from ..camera.enums import Point
|
|
27
28
|
from ..manager import AdoptedSensor, DiscoveredCamera, DiscoveredSensor
|
|
28
29
|
from ..sensor.base import Sensor, SensorLike
|
|
29
30
|
from ..storage import DeviceStorage, JsonSchemaWithoutCallbacks
|
|
@@ -96,10 +97,7 @@ class FaceDetectionPluginResponse(TypedDict):
|
|
|
96
97
|
"""True when the run produced at least one detection."""
|
|
97
98
|
|
|
98
99
|
detections: list[FaceDetection]
|
|
99
|
-
"""
|
|
100
|
-
|
|
101
|
-
embeddingModel: NotRequired[str]
|
|
102
|
-
"""Model that produced the embeddings; consumers must not mix models."""
|
|
100
|
+
"""Located faces. Vectors come from a face-embedding plugin, not from here."""
|
|
103
101
|
|
|
104
102
|
|
|
105
103
|
class LicensePlateDetectionPluginResponse(TypedDict):
|
|
@@ -135,6 +133,22 @@ class ClipDetectionPluginResponse(TypedDict):
|
|
|
135
133
|
"""[floor, ceiling] of raw text-image cosine scores for this model; consumers map scores to a 0..1 relevance scale and treat a missing band as score 0."""
|
|
136
134
|
|
|
137
135
|
|
|
136
|
+
class FaceEmbeddingPluginResponse(TypedDict):
|
|
137
|
+
"""Result of a face embedding run on a single image."""
|
|
138
|
+
|
|
139
|
+
embedding: list[float]
|
|
140
|
+
"""Embedding vector for the face, empty when no face could be embedded."""
|
|
141
|
+
|
|
142
|
+
embeddingModel: str
|
|
143
|
+
"""Model that produced the embedding; consumers must not mix models."""
|
|
144
|
+
|
|
145
|
+
landmarks: NotRequired[list[Point]]
|
|
146
|
+
"""The five points the face was aligned on, in 0 - 1 of the input image: right eye, left eye, nose, right and left mouth corner."""
|
|
147
|
+
|
|
148
|
+
quality: NotRequired[float]
|
|
149
|
+
"""How sure the model is that those points sit on a face (0 - 1)."""
|
|
150
|
+
|
|
151
|
+
|
|
138
152
|
class ClipTextEmbeddingResult(TypedDict):
|
|
139
153
|
"""Result of a CLIP text embedding request."""
|
|
140
154
|
|
|
@@ -254,6 +268,38 @@ class BasePlugin(ABC, Generic[StorageT]):
|
|
|
254
268
|
return None
|
|
255
269
|
|
|
256
270
|
|
|
271
|
+
class ServicePlugin(BasePlugin[StorageT]):
|
|
272
|
+
"""Base class for a plugin with the role :attr:`PluginRole.Service`: it
|
|
273
|
+
serves camera.ui itself and never touches cameras, so the camera lifecycle
|
|
274
|
+
hooks are already implemented as no-ops.
|
|
275
|
+
|
|
276
|
+
Example:
|
|
277
|
+
```python
|
|
278
|
+
class MyModels(ServicePlugin):
|
|
279
|
+
async def assistantModels(self) -> list[AssistantModelSpec]:
|
|
280
|
+
return [
|
|
281
|
+
{
|
|
282
|
+
"id": "local",
|
|
283
|
+
"name": "Local model",
|
|
284
|
+
"contextTokens": 8192,
|
|
285
|
+
"vision": False,
|
|
286
|
+
"toolCalling": False,
|
|
287
|
+
"structuredOutput": True,
|
|
288
|
+
}
|
|
289
|
+
]
|
|
290
|
+
```
|
|
291
|
+
"""
|
|
292
|
+
|
|
293
|
+
async def configureCameras(self, cameras: list[CameraDevice]) -> None:
|
|
294
|
+
"""Does nothing, a service plugin owns no cameras."""
|
|
295
|
+
|
|
296
|
+
async def onCameraAdded(self, camera: CameraDevice) -> None:
|
|
297
|
+
"""Does nothing, a service plugin owns no cameras."""
|
|
298
|
+
|
|
299
|
+
async def onCameraReleased(self, cameraId: str) -> None:
|
|
300
|
+
"""Does nothing, a service plugin owns no cameras."""
|
|
301
|
+
|
|
302
|
+
|
|
257
303
|
@runtime_checkable
|
|
258
304
|
class DiscoveryProvider(Protocol):
|
|
259
305
|
"""Implemented by plugins that can scan the network for new cameras and
|
|
@@ -499,6 +545,36 @@ class ClassifierDetectionInterface(Protocol):
|
|
|
499
545
|
...
|
|
500
546
|
|
|
501
547
|
|
|
548
|
+
@runtime_checkable
|
|
549
|
+
class FaceEmbeddingInterface(Protocol):
|
|
550
|
+
"""Implemented by plugins that turn a face crop into an embedding vector.
|
|
551
|
+
|
|
552
|
+
Split from face detection so the two can run on different hosts: locating a
|
|
553
|
+
face is cheap, embedding it is not.
|
|
554
|
+
"""
|
|
555
|
+
|
|
556
|
+
async def embedFaceImages(
|
|
557
|
+
self,
|
|
558
|
+
images: list[bytes],
|
|
559
|
+
config: dict[str, Any] | None = None,
|
|
560
|
+
landmarks: list[list[Point] | None] | None = None,
|
|
561
|
+
) -> list[FaceEmbeddingPluginResponse | None]:
|
|
562
|
+
"""Embed a batch of encoded images (JPEG/PNG), each showing one face.
|
|
563
|
+
|
|
564
|
+
One result per input in the same order. An empty ``embedding`` means the
|
|
565
|
+
picture holds no face this model can use, None that the plugin could not run
|
|
566
|
+
at all: the caller may drop such a picture, so the two must not be mixed up.
|
|
567
|
+
Meant for re-embedding stored pictures after an embedding-model change.
|
|
568
|
+
``landmarks`` holds the points an earlier result returned for the same picture,
|
|
569
|
+
one entry per image: with them the face is not searched again.
|
|
570
|
+
"""
|
|
571
|
+
...
|
|
572
|
+
|
|
573
|
+
async def faceEmbeddingSettings(self) -> list[JsonSchema] | None:
|
|
574
|
+
"""Return the JSON schema for the face-embedding settings form in the UI, or None for no schema."""
|
|
575
|
+
...
|
|
576
|
+
|
|
577
|
+
|
|
502
578
|
@runtime_checkable
|
|
503
579
|
class ClipDetectionInterface(Protocol):
|
|
504
580
|
"""Implemented by plugins that generate CLIP image and text embeddings
|
|
@@ -65,6 +65,10 @@ from .face import (
|
|
|
65
65
|
FaceResult,
|
|
66
66
|
FaceSensor,
|
|
67
67
|
)
|
|
68
|
+
from .face_embedder import (
|
|
69
|
+
FaceEmbedderSensor,
|
|
70
|
+
FaceEmbeddingResult,
|
|
71
|
+
)
|
|
68
72
|
from .garage import (
|
|
69
73
|
GarageControl,
|
|
70
74
|
GarageState,
|
|
@@ -204,6 +208,7 @@ __all__ = [
|
|
|
204
208
|
"TrackedDetection",
|
|
205
209
|
"ClipEmbedding",
|
|
206
210
|
"ClipResult",
|
|
211
|
+
"FaceEmbeddingResult",
|
|
207
212
|
# Public sensor classes
|
|
208
213
|
"MotionSensor",
|
|
209
214
|
"MotionDetectorSensor",
|
|
@@ -213,6 +218,7 @@ __all__ = [
|
|
|
213
218
|
"AudioDetectorSensor",
|
|
214
219
|
"FaceSensor",
|
|
215
220
|
"FaceDetectorSensor",
|
|
221
|
+
"FaceEmbedderSensor",
|
|
216
222
|
"LicensePlateSensor",
|
|
217
223
|
"LicensePlateDetectorSensor",
|
|
218
224
|
"ClassifierSensor",
|
|
@@ -52,6 +52,8 @@ class SensorType(StrEnum):
|
|
|
52
52
|
"""Audio event detection (glass break, scream, etc.)."""
|
|
53
53
|
Face = "face"
|
|
54
54
|
"""Face detection and recognition."""
|
|
55
|
+
FaceEmbedder = "faceEmbedder"
|
|
56
|
+
"""Face embedding generation from a face crop, for recognition against enrolled faces."""
|
|
55
57
|
LicensePlate = "licensePlate"
|
|
56
58
|
"""License plate detection and OCR."""
|
|
57
59
|
Classifier = "classifier"
|
|
@@ -19,7 +19,7 @@ class FaceProperty(StrEnum):
|
|
|
19
19
|
Detected = "detected"
|
|
20
20
|
"""Whether any face is currently detected."""
|
|
21
21
|
Detections = "detections"
|
|
22
|
-
"""List of detected faces with
|
|
22
|
+
"""List of detected faces, with an identity where one was matched."""
|
|
23
23
|
Identities = "identities"
|
|
24
24
|
"""Names of the faces recognized during the active detection phase."""
|
|
25
25
|
|
|
@@ -31,10 +31,6 @@ class FaceDetection(Detection):
|
|
|
31
31
|
"""Sub-detection attribute, fixed to "face"."""
|
|
32
32
|
identity: NotRequired[str]
|
|
33
33
|
"""Recognized identity name, if matched against known faces."""
|
|
34
|
-
embedding: NotRequired[list[float]]
|
|
35
|
-
"""Face embedding vector for recognition/comparison."""
|
|
36
|
-
thumbnail: NotRequired[bytes]
|
|
37
|
-
"""JPEG thumbnail crop of the detected face."""
|
|
38
34
|
|
|
39
35
|
|
|
40
36
|
class FaceSensorProperties(TypedDict):
|
|
@@ -123,8 +119,8 @@ class FaceSensor(Sensor[FaceSensorProperties, TStorage, str], Generic[TStorage])
|
|
|
123
119
|
- ``reportDetections(True)``: face detected without specifics (e.g. a
|
|
124
120
|
bare face-event from a discovery provider). The SDK synthesizes a
|
|
125
121
|
single full-frame face detection without identity.
|
|
126
|
-
- ``reportDetections(True, [...])``: explicit face detections with
|
|
127
|
-
identity
|
|
122
|
+
- ``reportDetections(True, [...])``: explicit face detections, with an
|
|
123
|
+
identity where the plugin recognizes the face itself.
|
|
128
124
|
- ``reportDetections(False)``: clear.
|
|
129
125
|
|
|
130
126
|
Args:
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
from __future__ import annotations
|
|
2
|
+
|
|
3
|
+
from abc import abstractmethod
|
|
4
|
+
from collections.abc import Mapping
|
|
5
|
+
from typing import Any, Generic, NotRequired
|
|
6
|
+
|
|
7
|
+
from typing_extensions import TypedDict, TypeVar
|
|
8
|
+
|
|
9
|
+
from ..camera.enums import Point
|
|
10
|
+
from .base import Sensor, SensorCategory, SensorType
|
|
11
|
+
from .detection import VideoFrameData
|
|
12
|
+
from .spec import ModelSpec
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class FaceEmbeddingResult(TypedDict):
|
|
16
|
+
"""Return type for FaceEmbedderSensor.embedFaces()."""
|
|
17
|
+
|
|
18
|
+
embedding: list[float]
|
|
19
|
+
"""Embedding vector for the face in this crop, empty when no face could be embedded."""
|
|
20
|
+
embeddingModel: str
|
|
21
|
+
"""Identifier of the embedding model that produced the vector."""
|
|
22
|
+
landmarks: NotRequired[list[Point]]
|
|
23
|
+
"""The five points the face was aligned on, in 0 - 1 of the input image: right eye, left eye, nose, right and left mouth corner."""
|
|
24
|
+
quality: NotRequired[float]
|
|
25
|
+
"""How sure the model is that those points sit on a face (0 - 1)."""
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
TStorage = TypeVar("TStorage", bound=Mapping[str, Any], default=dict[str, Any])
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
class FaceEmbedderSensor(Sensor[dict[str, Any], TStorage, str], Generic[TStorage]):
|
|
32
|
+
"""Face embedder that turns a face crop into a vector for recognition.
|
|
33
|
+
|
|
34
|
+
Extend this class and implement ``embedFaces``.
|
|
35
|
+
|
|
36
|
+
The crop comes from the face detector's box, cut from the source frame, so
|
|
37
|
+
the sensor runs after face detection rather than on the raw scene. What a
|
|
38
|
+
vector means depends on the model that produced it: vectors from different
|
|
39
|
+
models are not comparable, which is why every result carries its
|
|
40
|
+
``embeddingModel``.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
_requires_frames = True
|
|
44
|
+
|
|
45
|
+
def __init__(self, name: str = "Face Embedder", *, native_id: str | None = None) -> None:
|
|
46
|
+
super().__init__(name, native_id=native_id)
|
|
47
|
+
|
|
48
|
+
@property
|
|
49
|
+
def type(self) -> SensorType:
|
|
50
|
+
return SensorType.FaceEmbedder
|
|
51
|
+
|
|
52
|
+
@property
|
|
53
|
+
def category(self) -> SensorCategory:
|
|
54
|
+
return SensorCategory.Sensor
|
|
55
|
+
|
|
56
|
+
@property
|
|
57
|
+
@abstractmethod
|
|
58
|
+
def modelSpec(self) -> ModelSpec: ...
|
|
59
|
+
|
|
60
|
+
@abstractmethod
|
|
61
|
+
async def embedFaces(self, frames: list[VideoFrameData]) -> list[FaceEmbeddingResult]:
|
|
62
|
+
"""Embed faces in batch. Each frame is one face crop, padded around the detected
|
|
63
|
+
box and pre-scaled to ``modelSpec['input']``. Must return exactly one
|
|
64
|
+
FaceEmbeddingResult per input frame, in the same order; return an empty
|
|
65
|
+
``embedding`` for a crop the model could not use."""
|
|
66
|
+
...
|
|
67
|
+
|
|
68
|
+
async def updateValue(self, property: str, value: Any) -> None:
|
|
69
|
+
"""Read-only sensor: external writes are ignored."""
|
|
@@ -11,7 +11,7 @@ export class AssistantController {
|
|
|
11
11
|
}
|
|
12
12
|
async getInfo(req, reply) {
|
|
13
13
|
try {
|
|
14
|
-
return reply.code(200).send(this.service.info(req.locals.user?.role));
|
|
14
|
+
return reply.code(200).send(await this.service.info(req.locals.user?.role));
|
|
15
15
|
}
|
|
16
16
|
catch (error) {
|
|
17
17
|
return reply.code(500).send({ statusCode: 500, message: error.message });
|