question

jjaquinta avatar image
jjaquinta asked

Please combine all data for the interaction model in one file

I'm very please to see custom slots. I'm very displeased to see that it involves yet more manually entered uploads onto the web page. Having to enter stuff manually makes it difficult if you are trying to use a modern "devops" approach. The more stuff there, the harder it is. As a developer, it's a lot easier to maintain all the elements of your interaction model in a single file. That's how I do things currently. I have, then, a parser that splits up that file into the separate intents and utterances file that you require. Now I'm going to have to modify it again to emit several different files. Each time I update I'm going to have to generate and import all those different files. Any combined file format would do, but what I recommend is that you use a format that is a direct superset of what is currently required for the intents file. Since it is JSON, it is easily expanded. And still remains backward compatible. Here is an example of the format I use below. This covers all the bases (including the new custom slot feature). But any equivalent format that keeps all the information in one file, and with one way to upload would meet this need. [code] { "dictionaries":{ "drone":[ "attack drone", "attacker drone", "attack drones", "attacker drones", "attackers", "attacker", "attack", "defense drone", "defender drone", "defense drones", "defender drones", "defenders", "defender", "defend", "factory drone", "factory drones", "factories", "factory" ], "quantity":[ "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "twenty", "twenty five", "thirty", "thirty five", "forty", "fifty", "sixty", "seventy", "eighty", "ninety", "one hundred", ], "side":[ "hitotsu", "futatsu", "one", "two", "blue", "green" ], "topic":[ "intro", "introduction", "background", "setting", "stars", "productivity", "production", "resources", "drones", "attacker", "attackers", "defender", "defenders", "factory", "factories", "setting production", "how to play", "movement", "goto", "go to", "picking up", "pick up", "capture", "dropping off", "drop off", "release", "capacity", "side", "choose side", "help", ], "locations":[ "Accrington", "Acle", "Alcester", "Aldershot", "Alford", "Alnwick", "Alton", "Amble", "Amersham", "Amesbury", "Arlesey", "Ashburton", "Ashby", "Ashford", "Ashington", "Askern", "Aspatria", "Atherstone", "Attleborough", "Austell", "Axbridge", "Aylesbury", "Bacup", "Banbury", "Barking", "Barnes", "Barnoldswick", "Barrow", "Batley", "Battle", "Bawtry", "Beaconsfield", "Bebington", "Bedale", "Bedworth", "Belper", "Berwick", "Bewdley", "Bexhill", "Bexley", "Bicester", "Birchwood", "Bishop's Castle", "Bishop's Stortford", "Bishop's Waltham", "Blackburn", "Blackwater", "Blaise", "Blyth", "Bodmin", "Bollington", "Bolsover", "Bolton", "Bootle", "Boston", "Bournemouth", "Brackley", "Brading", "Bradninch", "Braintree", "Braunstone", "Brentford", "Bridgnorth", "Bridport", "Brigg", "Brixham", "Bromborough", "Bromley", "Bromyard", "Broseley", "Broughton", "Buckingham", "Budleigh Salterton", "Bulwell", "Buntingford", "Burnham", "Burnley", "Burntwood", "Burslem", "Burton", "Bushey", "Caistor", "Calne", "Camborne", "Cannock", "Carlton Colville", "Carnforth", "Carshalton", "Carterton", "Castle Cary", "Chagford", "Chapel", "Chatteris", "Cheadle", "Chesham", "Cheshunt", "Chester", "Chesterfield", "Chickerell", "Chingford", "Chippenham", "Chipping Campden", "Chorley", "Christchurch", "Chudleigh", "Church Stretton", "Cinderford", "Clare", "Cleator Moor", "Cleethorpes", "Clun", "Colburn", "Colchester", "Coleford", "Coleshill", "Colne", "Colyton", "Congleton", "Conisbrough", "Corbridge", "Corringham", "Corsham", "Crewe", "Cricklade", "Cromer", "Crowborough", "Crowle", "Darley Dale", "Darlington", "Darwen", "Daventry", "Dawlish", "Dereham", "Desborough", "Devizes", "Diss", "Doncaster", "Dorchester", "Downham Market", "Dudley", "Dukinfield", "Dunstable", "Dursley", "East Grinstead", "Eastwood", "Edmonton", "Ellesmere", "Ellesmere Port", "Epping", "Erith", "Eton", "Exmouth", "Fairford", "Falmouth", "Fareham", "Farnham", "Featherstone", "Felixstowe", "Ferndown", "Fleetwood", "Flitwick", "Folkestone", "Fordingbridge", "Framlingham", "Frinton", "Frome", "Gainsborough", "Garstang", "Gateshead", "Gillingham", "Glastonbury", "Glossop", "Goole", "Grange", "Grantham", "Gravesend", "Grays", "Great Dunmow", "Great Yarmouth", "Grimsby", "Guildford", "Hadleigh", "Hailsham", "Halesworth", "Halifax", "Haltwhistle", "Harlow", "Harpenden", "Harrogate", "Harrow", "Hastings", "Hatfield", "Havant", "Haxby", "Haywards Heath", "Heathfield", "Hebden Royd", "Hednesford", "Helston", "Hemel Hempstead", "Hemsworth", "Hexham", "High Wycombe", "Higham Ferrers", "Highbridge", "Highworth", "Hitchin", "Horley", "Hornsea", "Horsham", "Hounslow", "Hungerford", "Hunstanton", "Huntingdon", "Hyde", "Ilkeston", "Ilkley", "Immingham", "Ingleby Barwick", "Ipswich", "Irthlingborough", "Jarrow", "Keighley", "Kempston", "Kendal", "Keynsham", "King's Lynn", "Kingsbridge", "Kingston", "Kington", "Kirkby", "Kirkbymoorside", "Knaresborough", "Knutsford", "Leiston", "Lewes", "Leyburn", "Loddon", "Loftus", "Longtown", "Looe", "Loughton", "Louth", "Lowestoft", "Lynton", "Lytham St Annes", "Mablethorpe", "Macclesfield", "Madeley", "Maghull", "Maltby", "Manningtree", "Marazion", "March", "Margate", "Market Drayton", "Market Harborough", "Market Rasen", "Market Weighton", "Marlow", "Mary Cray", "Melksham", "Mere", "Mexborough", "Middleton", "Middlewich", "Midhurst", "Midsomer Norton", "Mildenhall", "Minehead", "Mirfield", "Mitcheldean", "Morecambe", "Moreton", "Moretonhampstead", "Morpeth", "Mossley", "Much Wenlock", "Nailsea", "Neston", "New Alresford", "New Mills", "New Milton", "Newcastle", "Newent", "Newhaven", "Newmarket", "Newport", "Newport Pagnell", "Newquay", "Newton", "North Hykeham", "North Petherton", "North Walsham", "Northallerton", "Northfleet", "Northleach with Eastington", "Northwich", "Norton", "Nuneaton", "Oakengates", "Oakham", "Orford", "Ormskirk", "Ossett", "Oswestry", "Oundle", "Padiham", "Peacehaven", "Penistone", "Penkridge", "Penrith", "Penwortham", "Petersfield", "Petworth", "Pickering", "Pocklington", "Polegate", "Pontefract", "Poole", "Portishead", "Portland", "Poynton", "Radstock", "Raunds", "Rayleigh", "Reading", "Redenhall with Harleston", "Reepham", "Ringwood", "Ripley", "Rochford", "Romsey", "Rowley Regis", "Royal Wootton Bassett", "Royston", "Rugby", "Rushden", "Rye", "Saltash", "Sandiacre", "Sandwich", "Saxmundham", "Scarborough", "Scunthorpe", "Seaham", "Shaftesbury", "Shanklin", "Shefford", "Shifnal", "Shipston", "Shoreham", "Shrewsbury", "Sidmouth", "Silloth", "Silsden", "Skegness", "Skelton", "Sleaford", "Solihull", "Somerton", "South Cave", "South Molton", "South Shields", "Southall", "Southam", "Southborough", "Southend", "Southwell", "Southwick", "Spalding", "Spilsby", "Staines", "Stalham", "Stalybridge", "Stamford", "Stanhope", "Stanley", "Stapleford", "Staveley", "Stevenage", "Steyning", "Stockport", "Stocksbridge", "Stone", "Stonehouse", "Stourport", "Stow", "Stowmarket", "Stretford", "Strood", "Sudbury", "Sutton", "Sutton Coldfield", "Swanley", "Swindon", "Tavistock", "Telscombe", "Tenterden", "Tetbury", "Tewkesbury", "Thatcham", "Thetford", "Thornaby", "Thrapston", "Tickhill", "Tidworth", "Tisbury", "Tonbridge", "Torquay", "Tottenham", "Towcester", "Trowbridge", "Tynemouth", "Uckfield", "Ulverston", "Verwood", "Wallingford", "Wallsend", "Walsall", "Walthamstow", "Wantage", "Ware", "Warminster", "Warrington", "Wath", "Watton", "Wednesbury", "Wellington", "Wem", "Wendover", "West Bedlington", "West Bromwich", "West Ham", "West Malling", "West Mersea", "West Tilbury", "Westbury", "Westhoughton", "Weston", "Weybridge", "Weymouth", "Whitby", "Whitchurch", "Whitehaven", "Whitnash", "Whittlesey", "Whitworth", "Widnes", "Wigton", "Wimbledon", "Wimborne Minster", "Wincanton", "Winchcombe", "Windermere", "Windsor", "Winsford", "Wisbech", "Witham", "Wiveliscombe", "Woburn", "Wokingham", "Woodbridge", "Woodley", "Wooler", "Workington", "Worksop", "Worthing", "Wymondham", "Yarm" ], "callsign":[ "alpha", "bravo", "charlie", "delta", "echo", "foxtrot", "golf", "hotel", "india", "juliet", "kilo", "lima", "mike", "november", "oscar", "papa", "quebec", "romeo", "sierra", "tango", "uniform", "victor", "x-ray", "yankee", "zulu" ] }, "intents": [ { "intent": "CURRENTLOCATION", "slots": [], "utterances":[ "where am I", "location", "current location" ] }, { "intent": "CURRENTSYSTEMCONTENTS", "slots": [], "utterances":[ "what's here", "what is here", "contents", "system contents", "what is here now", "what's here now" ] }, { "intent": "CURRENTSIDE", "slots": [], "utterances":[ "current side", "which side", "which side am I on", "what side", "what side am I on", "what is my current side", "what's my current side" ] }, { "intent": "CURRENTCALLSIGN", "slots": [], "utterances":[ "call sign", "current call sign", "what is my current call sign", "what is my call sign", "what's my call sign", "what's my current call sign" ] }, { "intent": "WHATPRODUCING", "slots": [], "utterances":[ "what are the factories producing", "what's being produced here", "what's being produced", "what is being produced here", "what is being produced", "production", "what are we producing", ] }, { "intent": "NEXTPRODUCING", "slots": [], "utterances":[ "when's the next one due to be built", "when is the next one due to be built", "next one", "next build", "how fast", "what's next", "what is next", "when's next", "when is next", "when's the next", "when is the next", ] }, { "intent": "YES", "slots": [], "utterances":[ "do it", "yes" ] }, { "intent": "NO", "slots": [], "utterances":[ "no" ] }, { "intent": "MORE", "slots": [], "utterances":[ "anything else", "continue", "tell me more", "more" ] }, { "intent": "DRONERESPONSE", "slots": [ { "name": "drone", "type": "LITERAL", "values": [ "~drone" ] } ], "utterances":[ "{drone}" ] }, { "intent": "CURRENTENVIRONMENT", "slots": [], "utterances":[ "what's it like here", "what is it like here", "what resources", "environment", "look", "look around" ] }, { "intent": "CURRENTNEIGHBORHOOD", "slots": [], "utterances":[ "what's nearby", "what's in the neighborhood", "neighborhood", "what is nearby", "what is in the neighborhood", "nearby stars", "stars", "nearby" ] }, { "intent": "HISTORY", "slots": [], "utterances":[ "what's going on here", "what is going on here", "what has been going on here", "what has been going on", "history", ] }, { "intent": "HISTORYTRANSIT", "slots": [], "utterances":[ "who", "who has been here", "whose been here", "ship activity", "what ships have been here", "history ships", "history transit", "history movement", "transit activity" ] }, { "intent": "HISTORYACTIVITY", "slots": [], "utterances":[ "what has been dropped off here", "what's been dropped off here", "what has been released here", "what's been released here", "what has been picked up here", "what's been picked up here", "what has been taken here", "what's been taken here", "drone activity" ] }, { "intent": "HISTORYCOMBAT", "slots": [], "utterances":[ "whose been fighting here", "combat history", "fighting history", "what's been destroyed here", "what has been destoryed here", "combats", "fighting" ] }, { "intent": "HISTORYPRODUCTION", "slots": [], "utterances":[ "what has been built here", "what's been built here", "building history", "production history" ] }, { "intent": "CURRENTSHIPCONTENTS", "slots": [], "utterances":[ "inventory", "what drones", "drones", "what drones do I have", "what do I have", "what drones do I have now", "what do I have now", "what drones am I carrying", "what am I carrying" ] }, { "intent": "GOTO", "slots": [ { "name": "location", "type": "LITERAL", "values": [ "~locations" ] } ], "utterances":[ "go to {location}", "jump to {location}", "move to {location}" ] }, { "intent": "DROPOFF", "slots": [ { "name": "quantity", "type": "NUMBER", "values": [ "~quantity" ] }, { "name": "drone", "type": "LITERAL", "values": [ "~drone" ] } ], "utterances":[ "release {quantity} {drone}", "drop off {quantity} {drone}" "drop {quantity} {drone}" "put down {quantity} {drone}" "put {quantity} {drone} down" "set down {quantity} {drone}" "set {quantity} {drone} down" "lay down {quantity} {drone}" "lay {quantity} {drone} down" ] }, { "intent": "PICKUP", "slots": [ { "name": "quantity", "type": "NUMBER", "values": [ "~quantity" ] }, { "name": "drone", "type": "LITERAL", "values": [ "~drone" ] } ], "utterances":[ "take {quantity} {drone}", "pick up {quantity} {drone}" "take up {quantity} {drone}" "pick {quantity} {drone}" "grab {quantity} {drone}", "get {quantity} {drone}", ] }, { "intent": "SWITCHPRODUCING", "slots": [ { "name": "drone", "type": "LITERAL", "values": [ "~drone" ] } ], "utterances":[ "set production to {drone}", "set production {drone}", "switch production to {drone}", "switch to making {drone}", "switch factory to making {drone}", "make {drone}", "start making {drone}" "produce {drone}", ] }, { "intent": "PICKSIDE", "slots": [ { "name": "side", "type": "LITERAL", "values": [ "~side" ] } ], "utterances":[ "set side to {side}", "pick {side}", "choose {side}", "choose side {side}", "i choose you {side}", "i choose {side}" ] }, { "intent": "SETCALLSIGN", "slots": [ { "name": "firstcallsign", "type": "LITERAL", "values": [ "~callsign" ] }, { "name": "secondcallsign", "type": "LITERAL", "values": [ "~callsign" ] }, { "name": "thirdcallsign", "type": "LITERAL", "values": [ "~callsign" ] } ], "utterances":[ "change call sign to {firstcallsign} {secondcallsign} {thirdcallsign}", "set call sign to {firstcallsign} {secondcallsign} {thirdcallsign}", "change call sign {firstcallsign} {secondcallsign} {thirdcallsign}", ] }, { "intent": "PRODUCINGRATE", "slots": [ { "name": "drone", "type": "LITERAL", "values": [ "~drone" ] } ], "utterances":[ "productivity", "how productive", "how productive would a factory be here", "how long would it take to make a {drone}", "what's the production rate", "how long will it take to make a {drone}", "how long for a {drone}", "how much time to make a {drone}", "how much time will it take to make a {drone}", "how much time for a {drone}", ] }, { "intent": "HELP", "slots": [ { "name": "topic", "type": "LITERAL", "values": [ "~topic" ] } ], "utterances":[ "help {topic}", "help about {topic}", "help me with {topic}", "give me help", "help me", "help", "info {topic}", "info on {topic}", "info", "about {topic}", "about", "intro", "introduction", ] }, { "intent": "ADVERT", "slots": [], "utterances":[ "add", "advert", "advertisement", "bonus", "freebies", ] }, { "intent": "ABORT", "slots": [], "utterances":[ "quit", "cancel", "stop", "done", ] } ] } [/code]
alexa skills kit
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

N. Fradkin avatar image
N. Fradkin answered
Yes, please do this. Having to edit each custom slot separately is annoying. Having everything, even including sample utterances, in single file so developers only need to cut and paste once when updating things would be a great convenience.
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Matt Kruse avatar image
Matt Kruse answered
Yes. This must happen. No one manually enters configuration data into form fields on a web form anymore. This needs to be something that can be automated into a build process.
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

N. Fradkin avatar image
N. Fradkin answered
Since I noticed Nick from Amazon has been on the board today I wanted to bump this request. Cut and paste deployment sucks, and the number of cut and paste operations has now increased greatly if one wants to define a lot of custom slots. The whole interaction model should be in a single file, intent definition, custom slots, and even the sample utterances. In addition to cut and paste, we should be able to upload the interaction model file. I'd even so one step further and have a way for the interaction model to be queried from the endpoint so that all one would need to do on the skill setup side is enter the endpoint and maybe hit a button to initiate requesting the interaction model file from the endpoint. This would also be a good lead in for my unlikely dream that it will be possible for the values for custom slots and utterances to be dynamically generated from the skill (e.g. a custom slot for "devices" in a home automation skill which would populate with the individual user's actual devices). So, Nick, can we get an I've passed this on and they are thinking about it" response on at least the idea of getting the interaction model into consolidated into just one or two files we can upload rather than having to cut and paste for each and every custom slot.
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

memo@amazon avatar image
memo@amazon answered
Hi, We hear you loud and clear! The development process is one of the things that will continue to change and improve as the Alexa platform grows. Thanks,
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

N. Fradkin avatar image
N. Fradkin answered
Thank you!
10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

ControlAV avatar image
ControlAV answered

So here I am, 16 months after "we hear you loud and clear", and I don't see a way of doing this yet. Am I missing something?

10 |5000

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.