Asystent na dzien dzisiejszy ma z 6 dzialajacych juz funkcjonalnosci (ktore pewnie jeszcze beda dalej rozwijane). Wczoraj wieczorem postanowilem spedzic troche czasu na (ro)zbudowanie systemu randomowych odpowiedzi, zeby nadac asystentowi troche wiecej naturalnosci i czlowieczenstwa.
Sam asystent gada do mnie przy pomocy Googlowej chmury (tak wiem, asystent mial byc offline), ale raz przygotowane sample ktore mozna nazwac ‚re-useable’ sa juz zapisywane lokalnie, wiec zeby asystent powiedzial ‚good morning’ nie musi juz nigdy wiecej leciec do Googla.
Sample dostepne juz lokalnie trzymam w skategoryzowanych JSONach. No i postanowilem sprawdzic performance ile zajmuje zaladowanie kazdorazowo konkretnego JSONa (12 kb) z karty pamieci… no i kurna… 1.36 sek.
Mysle – niemozliwe – testuje ponownie no i dostaje rezultaty z przedzialu 1.20 – 1.11 sek (lepsze bo juz zcache’owane). Dalsze testy pokazaly sie praktycznie c alosc tego dlugiego startu bierze sie z importowanych modulow a nie z samego ladowania pliku do pamieci.
Niedawno marudzilem nieco ze samo ropoznanie glosu przez silnik (Pocketsphinx) to bylo ~1.18 sek, a calosc do wlaczenia swiatla w pokoju zajmowalo ~2.3 sek. To wynik porownywalny z Alexa, lub nieznacznie lepszy.Oryginalnie myslalem ze to overhead zwiazny z z-wave, ale moze nie do konca moje myslenie bylo w dobrym kierunku.
Wyglada na to ze czasy bede mogl poprawic poprzez przearanzowanie designu aplikacji.
W tym momencie aplikacja miala websocketowe polaczenie z Rhasspy.
W zaleznosci od intentu uruchamiala odpowiedni skrypt pythona (okreslona metode z parametrami). Czyli za kazdym razem z samych importow bibliotek w tych skryptach mam ten nieszczesny overhead na grubo ponad 1 sekunde.
Zmiana ktora wczoraj zaczalem tworzyc/testowac polega na stworzeniu mikro serwera (w oparciu o biblioteke socket) ktory bedzie nasluchiwal jaki intent zostal rozpoznany i jaka metode ma wykonac.
Z poziomu oczu end usera, roznicy nie ma zadnej. Patrzac jednak przez pryzmat performance’u okazuje sie ze roznica jest drastyczna.
Serwer na starcie ma zaimportowac biblioteki do pamieci (i tam je trzyma, bo jest caly czas uruchomiony).
Pierwsze testy pokazaly ze np. wywolanie funkcji odczytania JSONa z odpowiedziami asystenta, nagle zaczelo zajmowac 0.02 sek, a nie 1.3 sek.
Nie mam innych testow, nie wiem czy w dzialaniu asystenta to bedzie widoczne golym okiem, ale moim zdaniem uciecie 1 sekundy z czasu reakcji, powinno byc game-changerem.