package Ġorg . rew ed ig ital . kon versation . generator . dialogflow Ċ Ċ import Ġorg . rew ed ig ital . kon versation .* Ċ import Ġorg . rew ed ig ital . kon versation . generator . Node Exporter Ċ import Ġorg . rew ed ig ital . kon versation . generator . Stream Exporter Ċ import Ġjava . io . OutputStream Ċ import Ġjava . util .* Ċ import Ġjava . util . zip . Zip Entry Ċ import Ġjava . util . zip . Zip OutputStream Ċ Ċ class ĠDialog flow Exporter ( private Ġval Ġinvocation Name : ĠString ) Ġ: ĠStream Exporter Ġ{ ĊĠĠĠ Ġprivate Ġval Ġlang Ġ= Ġ" de " ĊĠĠĠ Ġprivate Ġval Ġsupported Generic Types Ġ= ĠarrayOf (" any ", Ġ" number ", Ġ" ordinal ", Ġ" color ", Ġ" de - city ", Ġ" at - city ", Ġ" eu - city ", Ġ" us - city ", Ġ" gb - city ") ĊĊĠĠĠ Ġoverride Ġfun Ġpretty Print ed ( output Stream : ĠOutputStream , Ġintent s : ĠList < Intent >, Ġentities : ĠList < Entities > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzip Stream Ġ= ĠZip OutputStream ( output Stream ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġintent s . filter Ġ{ Ġ! it . name . startsWith (" AMA Z ON .", Ġignore Case Ġ= Ġtrue ) Ġ}. forEach Slot Type ( entities ) Ġ{ Ġslot Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= ĠEntity MetaData ( autom ated Expansion Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . name UUID From Bytes ("$ invocation Name :${ slot Type . name }". toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enum Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Over rid able Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġslot Type . name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta . pretty Print ed Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" entities /${ slot Type . name }. json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" entities /${ slot Type . name }. json :\ n $ json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġslot Type . values . map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntity ( key Ġ= Ġentry . key , Ġvalue Ġ= Ġentry . master , Ġsyn onyms Ġ= Ġentry . syn onyms ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ("\ n entities /${ slot Type . name }_ entries _< LANG >. json :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append ("[ \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Break able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . pretty Print ed Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasNext ()) Ġjson . append (", \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append ("\ n ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" entities /${ slot Type . name }_ entries _$ lang . json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ( json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġintent s . filter Ġ{ Ġ! it . name . startsWith (" AMA Z ON .", Ġignore Case Ġ= Ġtrue ) Ġ}. forEach Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Data Ġ= ĠDialog flow Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . name UUID From Bytes ( intent . name . toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Update Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġintent . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponses Ġ= Ġcreate Responses ( intent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfallback Intent Ġ= Ġintent . annotations . containsKey (" Fallback "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ= Ġintent . annotations [" Events "] Ġ?: Ġintent . annotations [" Event "] Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Data . pretty Print ed Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" int ents /${ intent . name }. json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" int ents /${ intent . name }_ users ays _< LANG >. json :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append ("[ \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println (" Dump ing Ġ${ intent . name } Ġ(${ intent . utter ances . sum By Long Ġ{ Ġit . permutation Count Ġ}} Ġutter ances ): ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslots Ġ= Ġintent . utter ances . flatMap Ġ{ Ġit . slot Types Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġit . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparts . first () Ġto Ġparts . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . utter ances . forEach Break able Ġ{ Ġutter ance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas More Ut ter ances Ġ= Ġhas Next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutter ance . per mutations . forEach Break able Ġ{ Ġsentence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġif Ġ( sentence . contains ("{ ") Ġ&& Ġsentence . contains (" } ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence . split ("{ ", Ġ"} "). filter Ġ{ Ġit . isNotEmpty () Ġ}. map Ġ{ Ġpart Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġslots [ part ]?. remove Prefix (" AMA Z ON .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġentities ?. first OrNull Ġ{ Ġit . name Ġ== Ġslots [ part ] Ġ} ?. values ?. map Ġ{ Ġit . master Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Ġ= Ġvalues ?. get OrNull ( i Ġ% ĠMath . max ( 1 , Ġvalues . size )) Ġ?: ĠdefaultValue ( type , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog flow Ut ter ance . Ut ter ance Part ( text Ġ= Ġsample , Ġalias Ġ= Ġpart , Ġmeta Ġ= Ġ"@ ${ use System Types ( type )} ", Ġuser Defined Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠDialog flow Ut ter ance . Ut ter ance Part ( text Ġ= Ġpart , Ġuser Defined Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Dialog flow Ut ter ance . Ut ter ance Part ( text Ġ= Ġsentence , Ġuser Defined Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog flow Ut ter ance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . name UUID From Bytes ("${ intent . name }: $ sentence ". toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Template Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. pretty Print ed Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasNext () Ġ|| Ġhas More Ut ter ances ) Ġjson . append (", \ n ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append ("\ n ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" int ents /${ intent . name }_ users ays _$ lang . json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ( json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġzip Stream . add (" package . json ", Ġjava . lang . StringBuilder (" {\ n Ġ Ġ\" version \": Ġ\" 1 . 0 . 0 \"\ n } ")) ĊĠĠĠĠĠĠĠ Ġzip Stream . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmin ified ( output Stream : ĠOutputStream , Ġintent s : ĠList < Intent >, Ġentities : ĠList < Entities > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġzip Stream Ġ= ĠZip OutputStream ( output Stream ) ĊĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠStringBuilder () ĊĠĠĠĠĠĠĠ Ġintent s . filter Ġ{ Ġ! it . name . startsWith (" AMA Z ON .") Ġ}. forEach Slot Type ( entities ) Ġ{ Ġslot Type Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmeta Ġ= ĠEntity MetaData ( autom ated Expansion Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . name UUID From Bytes ("$ invocation Name :${ slot Type . name }". toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enum Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Over rid able Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġslot Type . name . cleanup Slot Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmeta . min ified Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" entities /${ slot Type . name }. json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentries Ġ= Ġslot Type . values . map Ġ{ Ġentry Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEntity ( key Ġ= Ġentry . key , Ġvalue Ġ= Ġentry . master , Ġsyn onyms Ġ= Ġentry . syn onyms ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append ("[ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentries . forEach Break able Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . min ified Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasNext ()) Ġjson . append (",") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append (" ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" entities /${ slot Type . name }_ entries _$ lang . json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// println ( json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġintent s . filter Ġ{ Ġ! it . name . startsWith (" AMA Z ON .") Ġ}. forEach Ġ{ Ġintent Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Data Ġ= ĠDialog flow Intent ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . name UUID From Bytes ( intent . name . toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlast Update Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġintent . name , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponses Ġ= Ġcreate Responses ( intent ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfallback Intent Ġ= Ġintent . annotations . containsKey (" Fallback "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents Ġ= Ġintent . annotations [" Events "] Ġ?: Ġintent . annotations [" Event "] Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent Data . min ified Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" int ents /${ intent . name }. json ", Ġjson ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append ("[ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġslots Ġ= Ġintent . utter ances . flatMap Ġ{ Ġit . slot Types Ġ}. map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparts Ġ= Ġit . split (": ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġparts . first () Ġto Ġparts . last () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. toMap () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġintent . utter ances . forEach Break able Ġ{ Ġutter ance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhas More Ut ter ances Ġ= Ġhas Next () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutter ance . per mutations . forEach Break able Ġ{ Ġsentence Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġif Ġ( sentence . contains ("{ ") Ġ&& Ġsentence . contains (" } ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsentence . split ("{ ", Ġ"} "). filter Ġ{ Ġit . isNotEmpty () Ġ}. map Ġ{ Ġpart Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġslots [ part ]?. remove Prefix (" AMA Z ON .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalues Ġ= Ġentities ?. first OrNull Ġ{ Ġit . name Ġ== Ġslots [ part ] Ġ} ?. values ?. map Ġ{ Ġit . master Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Ġ= Ġvalues ?. get OrNull ( i Ġ% ĠMath . max ( 1 , Ġvalues . size )) Ġ?: ĠdefaultValue ( type , Ġi ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog flow Ut ter ance . Ut ter ance Part ( text Ġ= Ġsample , Ġalias Ġ= Ġpart , Ġmeta Ġ= Ġ"@ ${ use System Types ( type )} ", Ġuser Defined Ġ= Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: ĠDialog flow Ut ter ance . Ut ter ance Part ( text Ġ= Ġpart , Ġuser Defined Ġ= Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Dialog flow Ut ter ance . Ut ter ance Part ( text Ġ= Ġsentence , Ġuser Defined Ġ= Ġfalse )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDialog flow Ut ter ance ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcount Ġ= Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Ġ= Ġdata , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠUUID . name UUID From Bytes ("${ intent . name }: $ sentence ". toByteArray ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Template Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġupdated Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. min ified Ġ{ Ġs Ġ-> Ġjson . append ( s ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( hasNext () Ġ|| Ġhas More Ut ter ances ) Ġjson . append (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjson . append (" ]") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġzip Stream . add (" int ents /${ intent . name }_ users ays _$ lang . json ", Ġjson ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġzip Stream . add (" package . json ", Ġjava . lang . StringBuilder ("{ \" version \":\" 1 . 0 . 0 \" } ")) ĊĠĠĠĠĠĠĠ Ġzip Stream . close () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Responses ( intent : ĠIntent ) Ġ= ĊĠĠĠĠĠĠĠ ĠlistOf ( Response ( action Ġ= Ġintent . name , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessages Ġ= ĠlistOf NotNull ( Message ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlang Ġ= Ġlang , Ġ// ĠFIXME Ġthe Ġstructure Ġof Ġthe Ġexporter Ġdoes Ġnot Ġallow Ġthat Ġwe Ġknow Ġother Ġtranslations . ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġspeech Ġ= Ġintent . prompt . generate Samples ()), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Suggestion ( intent . suggestions )), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparameters Ġ= Ġintent . utter ances . flatMap Ġ{ Ġit . slot Types Ġ}. to HashSet (). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠResponse Parameter ( it , Ġintent . annotations [" List Parameters "] ?. contains ( it . substring Before (': ')) Ġ== Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ})) ĊĊĠĠĠ Ġprivate Ġfun Ġcreate Suggestion ( suggestions : ĠList < String >): ĠNode Exporter ? Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( suggestions . isEmpty ()) Ġnull Ġelse ĠQuick Reply ( lang , Ġsuggestions ) ĊĊĠĠĠ Ġfun ĠZip OutputStream . add ( fileName : ĠString , Ġcontent : ĠStringBuilder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠZip Entry ( fileName ) ĊĠĠĠĠĠĠĠ Ġput Next Entry ( file ) ĊĠĠĠĠĠĠĠ Ġwrite ( content . toString (). toByteArray ()) ĊĠĠĠĠĠĠĠ Ġclose Entry () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠList < Intent >. forEach Slot Type ( entities : ĠList < Entities > ?, Ġaction : Ġ( Entities ) Ġ-> ĠUnit ) Ġ= Ġthis ĊĠĠĠĠĠĠĠ Ġ. flatMap Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . utter ances . flatMap Ġ{ Ġutter ance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġutter ance . slot Types ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. to HashSet () ĊĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtype Ġ= Ġit . substring After (': ') ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ((! type . startsWith ("@ sys .") Ġ|| Ġ! type . startsWith (" sys .")) Ġ&& Ġ! supported Generic Types . contains ( type ) Ġ&& Ġentities ?. any Ġ{ Ġentity Ġ-> Ġentity . name Ġ== Ġtype Ġ} Ġ!= Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCli . L . warn (" No Ġdefinition Ġfor Ġslot Ġtype Ġ\"$ type \" Ġfound ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠTODO Ġadd Ġmigration Ġhints Ġor Ġdo Ġthat Ġsilent ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentities ?. first OrNull Ġ{ Ġentity Ġ-> Ġentity . name Ġ== Ġtype Ġ} Ġ// ?: ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ. to HashSet () ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . copy ( name Ġ= Ġit . name . cleanup Slot Name ()) Ġ} ĊĠĠĠĠĠĠĠ Ġ. forEach ( action ) ĊĊĠĠĠ Ġprivate Ġfun Ġuse System Types ( slot : ĠString ): ĠString Ġ= Ġwhen Ġ( slot ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" any " Ġ-> Ġ" sys . any " ĊĠĠĠĠĠĠĠ Ġ" number " Ġ-> Ġ" sys . number " ĊĠĠĠĠĠĠĠ Ġ" ordinal " Ġ-> Ġ" sys . ordinal " ĊĠĠĠĠĠĠĠ Ġ" color " Ġ-> Ġ" sys . color " ĊĠĠĠĠĠĠĠ Ġ" de - city ", ĊĠĠĠĠĠĠĠ Ġ" at - city ", ĊĠĠĠĠĠĠĠ Ġ" eu - city ", ĊĠĠĠĠĠĠĠ Ġ" us - city ", ĊĠĠĠĠĠĠĠ Ġ" gb - city " Ġ-> Ġ" sys . geo - city " ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġslot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠdefaultValue ( type : ĠString , Ġint : ĠInt ) Ġ= Ġwhen Ġ( type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ" any " Ġ-> Ġ" foo Ġbar " ĊĠĠĠĠĠĠĠ Ġ" number " Ġ-> Ġint . toString () ĊĠĠĠĠĠĠĠ Ġ" ordinal " Ġ-> Ġ"$ int ." ĊĠĠĠĠĠĠĠ Ġ" color " Ġ-> Ġ" B la u " ĊĠĠĠĠĠĠĠ Ġ" de - city " Ġ-> ĠlistOf (" St ut tg art ", Ġ" M Ã¼n chen ", Ġ" Ber lin ", Ġ" Pot sd am ", Ġ" B rem en ", Ġ" H ambur g ", Ġ" W ies bad en ", Ġ" Sch wer in ", Ġ" H ann over ", Ġ" D Ã¼ sse ld or f ", Ġ" Main z ", Ġ" S aar br Ã¼ck en ", Ġ" D res den ", Ġ" Mag deb urg ", Ġ" K iel ", Ġ" E rf urt "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( int Ġ% Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" at - city " Ġ-> ĠlistOf (" E is enst adt ", Ġ" Kl agen f urt Ġam ĠW Ã¶r ther see ", Ġ" St . ĠP Ã¶ lt en ", Ġ" Sal z burg ", Ġ" Gr az ", Ġ" In ns br uck ", Ġ" B reg enz ", Ġ" W ien "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( int Ġ% Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" eu - city " Ġ-> ĠlistOf (" Am ster dam ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" And or ra ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" A then ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bel grad ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ber lin ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" B ern ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Br atis l ava ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Br Ã¼ ssel ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" B ud ape st ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bu k arest ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Chi È Ļ in Äĥ u ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" C itt Ãł ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" D ub lin ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Hel sink i ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" K iew ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" K open h agen ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" L iss ab on ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Lj ub lj ana ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" L ondon ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" L ux em burg ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mad rid ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Min sk ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mon aco ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" M os ka u ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N ik os ia ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Os lo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Par is ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pod gor ica ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pr ag ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Re yk jav ÃŃ k ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" R iga ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rom ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sar aje vo ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sk op je ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" S of ia ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Stock hol m ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" T all inn ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" T ir ana ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" V ad uz ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Val let ta ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" V at ikan st adt ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" V il n ius ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" W ars ch au ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" W ien ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Z ag reb "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( int Ġ% Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" us - city " Ġ-> ĠlistOf (" Mont gom ery ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" June au ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ph o enix ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rock ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" S ac ram ento ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Den ver ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" H art ford ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" D over ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" T alla has see ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" At l anta ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Hon ol ulu ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Bo ise ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Spring field ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" In dian ap ol is ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" M oin es ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" To pe ka ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fr ank fort ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" R ou ge ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Aug ust a ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" An nap ol is ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" B oston ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" L ans ing ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pa ul ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Jack son ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" City ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Hel ena ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Lin col n ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" City ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Con cord ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" T rent on ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Fe ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Al b any ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" R ale igh ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" B is mar ck ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Col umb us ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" City ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sale m ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" H arris burg ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Pro vidence ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Col umb ia ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" P ier re ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" N ash ville ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" A ustin ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" City ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mont pel ier ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Rich mond ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" O ly mp ia ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Char le ston ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Mad ison ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Che y enne "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( int Ġ% Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ" gb - city " Ġ-> ĠlistOf (" L ondon ", Ġ" Ed in bur gh ", Ġ" Card iff ", Ġ" B elf ast "). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget ( int Ġ% Ġsize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġtype ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġthis Ġmethod Ġis Ġsomething Ġlike Ġa Ġzip Ġoperation , Ġbut Ġit Ġequal ized Ġthe Ġlist Ġlength Ġfirst ĊĠĠĠ Ġprivate Ġfun ĠPrompt . generate Samples (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġsynt actic Ġs ugar ĊĠĠĠĠĠĠĠ Ġoperator Ġfun ĠPart . component 1 () Ġ= Ġvariants ĊĊĠĠĠĠĠĠĠ Ġ// Ġget Ġmax imal Ġpart Ġlength ĊĠĠĠĠĠĠĠ Ġval Ġsizes Ġ= Ġmap Ġ{ Ġit . variants . size Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġmax Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġsizes . forEach Ġ{ Ġmax Ġ= ĠMath . max ( max , Ġit ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġall Ġlists Ġsame Ġsize Ġwith Ġrot ating Ġthe Ġvalues Ġuntil Ġall Ġare Ġsame Ġsized ĊĠĠĠĠĠĠĠ Ġval Ġequal ized Lists Ġ= Ġmap Ġ{ Ġ( variants ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnew Variants Ġ= Ġvariants . to Mutable List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġvariants . size Ġuntil Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnew Variants Ġ+= Ġvariants [ i Ġ% Ġvariants . size ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Variants ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġzip Ġthe Ġelements ĊĠĠĠĠĠĠĠ Ġval Ġsamples Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġmax ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsamples Ġ+= Ġequal ized Lists . join ToString ( separator Ġ= Ġ" Ġ") Ġ{ Ġit [ i ] Ġ}. replace (" Ġ* \ n Ġ". to Regex (), Ġ"\ n ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsamples ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠString . cleanup Slot Name () Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġstart sWith (" AMA Z ON .", Ġignore Case Ġ= Ġtrue ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrop ( 7 ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCli . L . warn (" Found ĠAmazon Ġprefix Ġin Ġslot Ġtype Ġ\"$ this \", Ġremoving Ġit Ġand Ġuse Ġ\"$ it \" Ġnow .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontains ('.') Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCli . L . warn (" Found Ġ\ ". \" Ġin Ġslot Ġtype Ġ\"$ this \", Ġreplacing Ġit Ġby Ġ\" _ \" .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreplace (".", Ġ"_ ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthis ĊĠĠĠ Ġ} Ċ }