diff --git a/decanlp/predict.py b/decanlp/predict.py index edfbea13..7e08d937 100644 --- a/decanlp/predict.py +++ b/decanlp/predict.py @@ -272,7 +272,7 @@ def get_args(argv): 'dimension', 'load', 'max_val_context_length', 'val_batch_size', 'transformer_heads', 'max_output_length', 'max_generative_vocab', 'lower', 'cove', 'intermediate_cove', 'elmo', 'glove_and_char', - 'use_maxmargin_loss', 'small_glove'] + 'use_maxmargin_loss', 'small_glove', 'thingpedia'] for r in retrieve: if r in config: setattr(args, r, config[r]) diff --git a/decanlp/tests/dataset/thingpedia-8.json b/decanlp/tests/dataset/thingpedia-8.json new file mode 100644 index 00000000..8edeabe8 --- /dev/null +++ b/decanlp/tests/dataset/thingpedia-8.json @@ -0,0 +1,6533 @@ +{ + "devices": [ + { + "kind": "com.facebook", + "kind_type": "primary", + "kind_canonical": "facebook account", + "triggers": {}, + "queries": { + }, + "actions": { + "post": { + "types": [ + "String" + ], + "args": [ + "status" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "post $status on Facebook", + "confirmation_remote": "post $status on $__person's Facebook", + "doc": "post a status update to Facebook", + "canonical": "post on facebook", + "argcanonicals": [ + "status" + ], + "questions": [ + "What do you want to post?" + ], + "string_values": [ + "tt:long_free_text" + ] + }, + "post_picture": { + "types": [ + "Entity(tt:picture)", + "String" + ], + "args": [ + "picture_url", + "caption" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "upload a picture on Facebook with caption $caption", + "confirmation_remote": "upload a picture on $__person's Facebook with caption $caption", + "doc": "upload a photo to your Facebook", + "canonical": "post picture on facebook", + "argcanonicals": [ + "picture url", + "caption" + ], + "questions": [ + "Upload the picture now.", + "What should be the caption of the picture?" + ], + "string_values": [ + null, + "com.instagram:caption" + ] + } + } + }, + { + "kind": "com.google", + "kind_type": "primary", + "kind_canonical": "google account", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "com.linkedin", + "kind_type": "primary", + "kind_canonical": "linkedin account", + "triggers": {}, + "queries": { + "get_profile": { + "types": [ + "String", + "String", + "String", + "String", + "Array(String)", + "Entity(tt:picture)" + ], + "args": [ + "formatted_name", + "headline", + "industry", + "specialties", + "positions", + "profile_picture" + ], + "required": [ + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "your LinkedIn profile", + "confirmation_remote": "$__person's LinkedIn profile", + "doc": "retrieve your LinkedIn profile", + "canonical": "get profile on linkedin", + "argcanonicals": [ + "formatted name", + "headline", + "industry", + "specialties", + "positions", + "profile picture" + ], + "questions": [ + "", + "", + "", + "", + "", + "" + ], + "string_values": [ + "tt:person_full_name", + "tt:job_title", + "com.linkedin:industry", + null, + null, + null + ] + } + }, + "actions": { + "share": { + "types": [ + "String" + ], + "args": [ + "status" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "share $status on your LinkedIn", + "confirmation_remote": "share $status on $__person's LinkedIn", + "doc": "share a comment and a link ", + "canonical": "post on linkedin", + "argcanonicals": [ + "status" + ], + "questions": [ + "What do you want to post? Include a link to a page." + ], + "string_values": [ + "tt:long_free_text" + ] + } + } + }, + { + "kind": "com.twitter", + "kind_type": "primary", + "kind_canonical": "twitter account", + "triggers": {}, + "queries": { + "direct_messages": { + "types": [ + "Entity(tt:username)", + "String" + ], + "args": [ + "sender", + "message" + ], + "required": [ + false, + false + ], + "is_input": [ + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "direct messages you received on Twitter", + "confirmation_remote": "direct messages $__person received on Twitter", + "doc": "get recent direct messages you received", + "canonical": "twitter direct messages", + "argcanonicals": [ + "sender", + "message" + ], + "questions": [ + "", + "" + ], + "string_values": [ + "com.twitter:username", + "tt:message" + ] + }, + "home_timeline": { + "types": [ + "String", + "Array(Entity(tt:hashtag))", + "Array(Entity(tt:url))", + "Entity(tt:username)", + "Entity(tt:username)", + "Entity(com.twitter:id)" + ], + "args": [ + "text", + "hashtags", + "urls", + "author", + "in_reply_to", + "tweet_id" + ], + "required": [ + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "tweets from anyone you follow", + "confirmation_remote": "tweets from anyone $__person's follow", + "doc": "shows your Twitter timeline (the home page of Twitter)", + "canonical": "twitter home timeline", + "argcanonicals": [ + "text", + "hashtags", + "urls", + "author", + "in reply to", + "tweet id" + ], + "questions": [ + "", + "", + "", + "", + "", + "" + ], + "string_values": [ + "tt:long_free_text", + "com.twitter:hashtag", + null, + "com.twitter:username", + "com.twitter:username", + null + ] + }, + "my_tweets": { + "types": [ + "String", + "Array(Entity(tt:hashtag))", + "Array(Entity(tt:url))", + "Entity(tt:username)", + "Entity(com.twitter:id)" + ], + "args": [ + "text", + "hashtags", + "urls", + "in_reply_to", + "tweet_id" + ], + "required": [ + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "tweets from you", + "confirmation_remote": "tweets from $__person", + "doc": "get your recent tweets", + "canonical": "my tweets on twitter", + "argcanonicals": [ + "text", + "hashtags", + "urls", + "in reply to", + "tweet id" + ], + "questions": [ + "", + "", + "", + "", + "" + ], + "string_values": [ + "tt:long_free_text", + "com.twitter:hashtag", + null, + "com.twitter:username", + null + ] + }, + "search": { + "types": [ + "Number", + "String", + "Array(Entity(tt:hashtag))", + "Array(Entity(tt:url))", + "Entity(tt:username)", + "Entity(tt:username)", + "Entity(com.twitter:id)" + ], + "args": [ + "count", + "text", + "hashtags", + "urls", + "author", + "in_reply_to", + "tweet_id" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "recent tweets", + "confirmation_remote": "recent tweets", + "doc": "search recent tweets; default is 5", + "canonical": "search on twitter", + "argcanonicals": [ + "count", + "text", + "hashtags", + "urls", + "author", + "in reply to", + "tweet id" + ], + "questions": [ + "How many tweets do you want?", + "", + "", + "", + "From which user do you want tweets?", + "In reply to which user do you want tweets?", + "" + ], + "string_values": [ + null, + "tt:long_free_text", + "com.twitter:hashtag", + null, + "com.twitter:username", + "com.twitter:username", + null + ] + } + }, + "actions": { + "follow": { + "types": [ + "Entity(tt:username)" + ], + "args": [ + "user_name" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "follow $user_name on Twitter", + "confirmation_remote": "follow $user_name with $__person's Twitter", + "doc": "follow the named user", + "canonical": "follow on twitter", + "argcanonicals": [ + "user name" + ], + "questions": [ + "What user do you want to follow?" + ], + "string_values": [ + "com.twitter:username" + ] + }, + "post": { + "types": [ + "String" + ], + "args": [ + "status" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "tweet $status", + "confirmation_remote": "post $status on $__person's Twitter", + "doc": "post a tweet; use # to include a hashtag and @ to reply", + "canonical": "post on twitter", + "argcanonicals": [ + "status" + ], + "questions": [ + "What do you want to tweet?" + ], + "string_values": [ + "tt:long_free_text" + ] + }, + "post_picture": { + "types": [ + "String", + "Entity(tt:picture)" + ], + "args": [ + "caption", + "picture_url" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "tweet $caption with an attached picture", + "confirmation_remote": "post $caption and a picture on $__person's Twitter", + "doc": "post a tweet with a picture", + "canonical": "post picture on twitter", + "argcanonicals": [ + "caption", + "picture url" + ], + "questions": [ + "What caption do you want?", + "Upload the picture now." + ], + "string_values": [ + "com.instagram:caption", + null + ] + }, + "retweet": { + "types": [ + "Entity(com.twitter:id)" + ], + "args": [ + "tweet_id" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "retween $tweet_id", + "confirmation_remote": "retweet $tweet_id on $__person's Twitter Account", + "doc": "retweet a given tweet, by id", + "canonical": "retweet", + "argcanonicals": [ + "tweet id" + ], + "questions": [ + "What tweet do you want to retweet?" + ], + "string_values": [ + null + ] + }, + "send_direct_message": { + "types": [ + "Entity(tt:username)", + "String" + ], + "args": [ + "to", + "message" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a direct message on Twitter to $to saying $message", + "confirmation_remote": "send a direct message on $__person's Twitter to $to saying $message", + "doc": "send a direct message", + "canonical": "send dm on twitter", + "argcanonicals": [ + "to", + "message" + ], + "questions": [ + "Who do you want to send the message to?", + "What message do you want to send?" + ], + "string_values": [ + "com.twitter:username", + "tt:message" + ] + }, + "unfollow": { + "types": [ + "Entity(tt:username)" + ], + "args": [ + "user_name" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "unfollow $user_name on Twitter", + "confirmation_remote": "unfollow $user_name from $__person's Twitter", + "doc": "stop following the named user; this call succeeds even if the user was already followed before", + "canonical": "unfollow on twitter", + "argcanonicals": [ + "user name" + ], + "questions": [ + "What user do you want to unfollow?" + ], + "string_values": [ + "com.twitter:username" + ] + } + } + }, + { + "kind": "org.thingpedia.builtin.bluetooth.generic", + "kind_type": "primary", + "kind_canonical": "generic bluetooth device", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "online-account", + "kind_type": "category", + "kind_canonical": "online account", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "messaging", + "kind_type": "other", + "kind_canonical": "messaging", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "com.thecatapi", + "kind_type": "primary", + "kind_canonical": "the cat api", + "triggers": {}, + "queries": { + "get": { + "types": [ + "Entity(com.thecatapi:image_id)", + "Number", + "Entity(tt:picture)", + "Entity(tt:url)" + ], + "args": [ + "image_id", + "count", + "picture_url", + "link" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + false, + true, + false, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "cat pictures", + "confirmation_remote": "cat pictures", + "doc": "get `count` many cat pictures", + "canonical": "get cat on thecatapi", + "argcanonicals": [ + "image id", + "count", + "picture url", + "link" + ], + "questions": [ + "", + "How many cats do you want?", + "", + "" + ], + "string_values": [ + null, + null, + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "data-source", + "kind_type": "category", + "kind_canonical": "data source", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "org.thingpedia.builtin.thingengine.phone", + "kind_type": "primary", + "kind_canonical": "phone", + "triggers": {}, + "queries": { + "get_gps": { + "types": [ + "Location", + "Measure(m)", + "Number", + "Measure(mps)" + ], + "args": [ + "location", + "altitude", + "bearing", + "speed" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "your location", + "confirmation_remote": "$__person's location", + "doc": "get last known GPS location", + "canonical": "get current location on phone", + "argcanonicals": [ + "location", + "altitude", + "bearing", + "speed" + ], + "questions": [ + "What location are you interested in?", + "", + "", + "" + ], + "string_values": [ + null, + null, + null, + null + ] + }, + "sms": { + "types": [ + "Entity(tt:phone_number)", + "String", + "Date" + ], + "args": [ + "sender", + "message", + "date" + ], + "required": [ + false, + false, + false + ], + "is_input": [ + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "your SMS", + "confirmation_remote": "$__person's SMS", + "doc": "trigger when an SMS is received", + "canonical": "receive sms on phone", + "argcanonicals": [ + "sender", + "message", + "date" + ], + "questions": [ + "What number do you want to monitor?", + "", + "" + ], + "string_values": [ + null, + "tt:message", + null + ] + } + }, + "actions": { + "call": { + "types": [ + "Entity(tt:phone_number)" + ], + "args": [ + "number" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "call $number", + "confirmation_remote": "call $number using $__person's phone", + "doc": "place a phone call", + "canonical": "make call on phone", + "argcanonicals": [ + "number" + ], + "questions": [ + "Who do you want to call?" + ], + "string_values": [ + null + ] + }, + "call_emergency": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "call emergency assistance", + "confirmation_remote": "call emergency assistance from $__person's phone", + "doc": "place an emergency call; due to regulations on emergency numbers, the call is not actually placed, it just shows the dialer with the right number", + "canonical": "call emergency on phone", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "send_sms": { + "types": [ + "Entity(tt:phone_number)", + "String" + ], + "args": [ + "to", + "message" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a message to $to containing $message", + "confirmation_remote": "send a message from $__person to $to containing $message", + "doc": "send a message to the specified phone number (carrier charges apply)", + "canonical": "send sms on phone", + "argcanonicals": [ + "to", + "message" + ], + "questions": [ + "Who do you want to text?", + "What do you want to say in your text?" + ], + "string_values": [ + null, + "tt:message" + ] + }, + "set_ringer": { + "types": [ + "Enum(normal,vibrate,silent)" + ], + "args": [ + "mode" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your phone to $mode", + "confirmation_remote": "set $__person's phone to $mode", + "doc": "set ringer mode; valid values are \"normal\", \"vibrate\" and \"silent\"", + "canonical": "set ringer on phone", + "argcanonicals": [ + "mode" + ], + "questions": [ + "What mode to you want to set?" + ], + "string_values": [ + null + ] + } + } + }, + { + "kind": "com.nest", + "kind_type": "primary", + "kind_canonical": "nest account", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "thermostat", + "kind_type": "other", + "kind_canonical": "thermostat", + "triggers": {}, + "queries": { + "get_humidity": { + "types": [ + "Number" + ], + "args": [ + "value" + ], + "required": [ + false + ], + "is_input": [ + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the humidity reported by your thermostat", + "confirmation_remote": "the humidity reported by $__person's thermostat", + "doc": "get the current humidity (in percent)", + "canonical": "get humidity on thermostat", + "argcanonicals": [ + "value" + ], + "questions": [ + "" + ], + "string_values": [] + }, + "get_hvac_state": { + "types": [ + "Enum(heat,cool,heat_cool,off)", + "Enum(heating,cooling,off)" + ], + "args": [ + "mode", + "state" + ], + "required": [ + false, + false + ], + "is_input": [ + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the state of your heating system", + "confirmation_remote": "the state of $__person's heating system", + "doc": "get the state of the heating system", + "canonical": "get hvac state on thermostat", + "argcanonicals": [ + "mode", + "state" + ], + "questions": [ + "", + "" + ], + "string_values": [] + }, + "get_temperature": { + "types": [ + "Measure(C)" + ], + "args": [ + "value" + ], + "required": [ + false + ], + "is_input": [ + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the temperature on your thermostat", + "confirmation_remote": "the temperature on $__person's thermostat", + "doc": "get the current temperature", + "canonical": "get temperature on thermostat", + "argcanonicals": [ + "value" + ], + "questions": [ + "" + ], + "string_values": [] + } + }, + "actions": { + "set_hvac_mode": { + "types": [ + "Enum(heat,cool,heat_cool,off)" + ], + "args": [ + "mode" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your HVAC to $mode", + "confirmation_remote": "set your HVAC to $mode", + "doc": "change the mode of the HVAC system associated with this thermostat", + "canonical": "set hvac mode on thermostat", + "argcanonicals": [ + "mode" + ], + "questions": [ + "What mode do you want to set?" + ], + "string_values": [] + }, + "set_minmax_temperature": { + "types": [ + "Measure(C)", + "Measure(C)" + ], + "args": [ + "low", + "high" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your thermostat between $low and $high", + "confirmation_remote": "set your thermostat between $low and $high", + "doc": "set desired temperature range", + "canonical": "set minimum maximum temperature on thermostat", + "argcanonicals": [ + "low", + "high" + ], + "questions": [ + "What low temperature do you want to set?", + "What high temperature do you want to set?" + ], + "string_values": [] + }, + "set_target_temperature": { + "types": [ + "Measure(C)" + ], + "args": [ + "value" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your thermostat to $value", + "confirmation_remote": "set your thermostat to $value", + "doc": "set target temperature", + "canonical": "set target temperature on thermostat", + "argcanonicals": [ + "value" + ], + "questions": [ + "What temperature do you want to set?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.tesla", + "kind_type": "primary", + "kind_canonical": "tesla account", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "car", + "kind_type": "other", + "kind_canonical": "car", + "triggers": {}, + "queries": {}, + "actions": { + "honk_horn": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "honk your car's horn", + "confirmation_remote": "honk your car's horn", + "doc": "honk the car horn once", + "canonical": "honk horn on car", + "argcanonicals": [], + "questions": [], + "string_values": [] + } + } + }, + { + "kind": "security-camera", + "kind_type": "other", + "kind_canonical": "security camera", + "triggers": {}, + "queries": { + "current_event": { + "types": [ + "Date", + "Boolean", + "Boolean", + "Boolean", + "Entity(tt:picture)" + ], + "args": [ + "start_time", + "has_sound", + "has_motion", + "has_person", + "picture_url" + ], + "required": [ + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the current event detected on your security camera", + "confirmation_remote": "the current event detected on $__person's security camera", + "doc": "trigger on any new event detected by the camera, providing the start time of the event and a small gif", + "canonical": "current event on security camera", + "argcanonicals": [ + "start time", + "has sound", + "has motion", + "has person", + "picture url" + ], + "questions": [ + "", + "Do you want events with sound?", + "Do you want events with motion?", + "Do you want events with people in front of the camera?", + "" + ], + "string_values": [] + } + }, + "actions": { + "set_power": { + "types": [ + "Enum(on,off)" + ], + "args": [ + "power" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "turn $power your security camera", + "confirmation_remote": "turn $power $__person's security camera", + "doc": "change the streaming status of the camera", + "canonical": "set power on security camera", + "argcanonicals": [ + "power" + ], + "questions": [ + "Do you want to turn your camera on or off?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.slack", + "kind_type": "primary", + "kind_canonical": "slack", + "triggers": {}, + "queries": { + "channel_history": { + "types": [ + "Entity(tt:hashtag)", + "Date", + "Entity(tt:username)", + "String" + ], + "args": [ + "channel", + "date", + "sender", + "message" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "your messages on Slack", + "confirmation_remote": "$__person's messages on Slack", + "doc": "Polls Slack and sends you any new messages that appear in public channels of your Slack team.", + "canonical": "get message on slack", + "argcanonicals": [ + "channel", + "date", + "sender", + "message" + ], + "questions": [ + "What channel are you interested in?", + "", + "What user are you interested in?", + "" + ], + "string_values": [ + null, + null, + null, + "tt:message" + ] + } + }, + "actions": { + "send": { + "types": [ + "Entity(tt:hashtag)", + "String" + ], + "args": [ + "channel", + "message" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a message on slack to channel $channel saying $message", + "confirmation_remote": "send a message on $__person's slack to channel $channel saying $message", + "doc": "Send a message to the specified Slack channel as a bot named after you. Omit the hashtag from the channel name.", + "canonical": "send message on slack", + "argcanonicals": [ + "channel", + "message" + ], + "questions": [ + "What channel do you want to send the message to?", + "What message do you want me to send?" + ], + "string_values": [ + null, + "tt:message" + ] + }, + "send_picture": { + "types": [ + "Entity(tt:hashtag)", + "String", + "Entity(tt:picture)" + ], + "args": [ + "channel", + "caption", + "picture_url" + ], + "required": [ + true, + true, + true + ], + "is_input": [ + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a picture on slack to channel $channel with caption $caption", + "confirmation_remote": "send a picture on $__person's slack to channel $channel with caption $caption", + "doc": "Send a message with a picture attachment to the specified Slack channel. Omit the hashtag from the channel name.", + "canonical": "send picture on slack", + "argcanonicals": [ + "channel", + "caption", + "picture url" + ], + "questions": [ + "What channel do you want to send the message to?", + "What is the caption of the picture?", + "Upload the picture now." + ], + "string_values": [ + null, + "tt:message", + null + ] + }, + "setPresence": { + "types": [ + "Enum(away,auto)" + ], + "args": [ + "presence" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your presence status on slack to $presence", + "confirmation_remote": "set $__person's presence status on slack to $presence", + "doc": "Update your displayed presence. Presence must be 'away' or 'auto'.", + "canonical": "set presence on slack", + "argcanonicals": [ + "presence" + ], + "questions": [ + "What should be your new presence?" + ], + "string_values": [ + null + ] + }, + "updateChannelPurpose": { + "types": [ + "Entity(tt:hashtag)", + "String" + ], + "args": [ + "channel", + "purpose" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "update the purpose of slack channel $channel to $purpose", + "confirmation_remote": "update the purpose of $__person's slack channel $channel to $purpose", + "doc": "Update the specified channel's purpose. Omit the hashtag from the channel name.", + "canonical": "update channel purpose on slack", + "argcanonicals": [ + "channel", + "purpose" + ], + "questions": [ + "What channel do you want to change?", + "What purpose do you want to set?" + ], + "string_values": [ + null, + null + ] + }, + "updateChannelTopic": { + "types": [ + "Entity(tt:hashtag)", + "String" + ], + "args": [ + "channel", + "topic" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "update the topic of slack channel $channel to $topic", + "confirmation_remote": "update the topic of $__person's slack channel $channel to $topic", + "doc": "Update the specified channel's topic. Omit the hashtag from the channel name.", + "canonical": "update channel topic on slack", + "argcanonicals": [ + "channel", + "topic" + ], + "questions": [ + "What channel do you want to change?", + "What should be the new topic?" + ], + "string_values": [ + null, + null + ] + } + } + }, + { + "kind": "org.thingpedia.bluetooth.speaker.a2dp", + "kind_type": "primary", + "kind_canonical": "bluetooth speaker", + "triggers": {}, + "queries": {}, + "actions": { + "lower_volume": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "decrease the volume on your bluetooth speaker", + "confirmation_remote": "decrease the volume on $__person's bluetooth speaker", + "doc": "increase the audio volume on this speaker (by some platform specific amount)", + "canonical": "lower volume on bluetooth speaker", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "play_music": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "play some music on your bluetooth speaker", + "confirmation_remote": "play some music on $__person's bluetooth speaker", + "doc": "play music on this device; the result is platform dependent (eg might open the default music player app)", + "canonical": "play music on bluetooth speaker", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "raise_volume": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "increase the volume on your bluetooth speaker", + "confirmation_remote": "increase the volume on $__person's bluetooth speaker", + "doc": "increase the audio volume on this speaker (by some platform specific amount)", + "canonical": "raise volume on bluetooth speaker", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "set_sink": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your bluetooth speaker to be the default audio output", + "confirmation_remote": "set $__person's bluetooth speaker to be his default audio output", + "doc": "set this speaker as the default audio output device", + "canonical": "set audio sink on bluetooth speaker", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "set_volume": { + "types": [ + "Number" + ], + "args": [ + "percent" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set the volume on your bluetooth speaker to $percent %", + "confirmation_remote": "set the volume on $__person's bluetooth speaker to $percent%", + "doc": "set the volume on this device to the given percent value", + "canonical": "set volume on bluetooth speaker", + "argcanonicals": [ + "percent" + ], + "questions": [ + "What volume do you want to set (in percent)?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.bing", + "kind_type": "primary", + "kind_canonical": "bing search", + "triggers": {}, + "queries": { + "image_search": { + "types": [ + "String", + "String", + "Entity(tt:picture)", + "Entity(tt:url)", + "Number", + "Number" + ], + "args": [ + "query", + "title", + "picture_url", + "link", + "width", + "height" + ], + "required": [ + true, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "images matching $query from Bing", + "confirmation_remote": "images matching $query from Bing", + "doc": "search for `query` on Bing Images", + "canonical": "image search on bing", + "argcanonicals": [ + "query", + "title", + "picture url", + "link", + "width", + "height" + ], + "questions": [ + "What do you want to search?", + "", + "", + "", + "What width are you looking for (in pixels)?", + "What height are you looking for (in pixels)?" + ], + "string_values": [ + "tt:search_query", + null, + null, + null, + null, + null + ] + }, + "web_search": { + "types": [ + "String", + "String", + "String", + "Entity(tt:url)" + ], + "args": [ + "query", + "title", + "description", + "link" + ], + "required": [ + true, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "websites matching $query on Bing", + "confirmation_remote": "websites matching $query on Bing", + "doc": "search for `query` on Bing", + "canonical": "web search on bing", + "argcanonicals": [ + "query", + "title", + "description", + "link" + ], + "questions": [ + "What do you want to search?", + "", + "", + "" + ], + "string_values": [ + "tt:search_query", + null, + "tt:long_free_text", + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.github", + "kind_type": "primary", + "kind_canonical": "github account", + "triggers": {}, + "queries": { + "get_commit": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:username)", + "String", + "Date", + "Array(Entity(tt:path_name))", + "Array(Entity(tt:path_name))", + "Array(Entity(tt:path_name))" + ], + "args": [ + "repo_name", + "user", + "message", + "time", + "modified_files", + "added_files", + "deleted_files" + ], + "required": [ + true, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "commits of repository $repo_name on Github", + "confirmation_remote": "commits of repository $repo_name on $__person's Github", + "doc": "commits to a particular repository", + "canonical": "commits on github", + "argcanonicals": [ + "repo name", + "user", + "message", + "time", + "modified files", + "added files", + "deleted files" + ], + "questions": [ + "What repository do you want to watch?", + "What user are you interested in?", + "", + "", + "", + "", + "" + ], + "string_values": [] + }, + "get_file": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:path_name)", + "Entity(tt:url)" + ], + "args": [ + "repo_name", + "file_name", + "url" + ], + "required": [ + true, + true, + false + ], + "is_input": [ + true, + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "link of ${file_name} in Github repository ${repo_name}", + "confirmation_remote": "link of ${file_name} in $__person's Github repository ${repo_name}", + "doc": "generate a temporary link for the given file", + "canonical": "link of file in github", + "argcanonicals": [ + "repo name", + "file name", + "url" + ], + "questions": [ + "What repository is the file in?", + "What file do you want to get?", + "" + ], + "string_values": [] + }, + "get_issue": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:username)", + "Number", + "String", + "String", + "Date" + ], + "args": [ + "repo_name", + "user", + "number", + "title", + "body", + "time" + ], + "required": [ + true, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "opened issues of repository $repo_name on Github", + "confirmation_remote": "opened issues of repository $repo_name on $__person's Github", + "doc": "issues on a particular repository", + "canonical": "issues on github", + "argcanonicals": [ + "repo name", + "user", + "number", + "title", + "body", + "time" + ], + "questions": [ + "What repository do you want to watch?", + "What user are you interested in?", + "", + "", + "", + "" + ], + "string_values": [] + }, + "get_issue_comment": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:username)", + "Number", + "String", + "Date" + ], + "args": [ + "repo_name", + "user", + "issue_number", + "body", + "time" + ], + "required": [ + true, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "comments on issues on Github repository $repo_name", + "confirmation_remote": "comments on issues on $__person's Github repository $repo_name ", + "doc": "comments on issues", + "canonical": "get issue comments on github", + "argcanonicals": [ + "repo name", + "user", + "issue number", + "body", + "time" + ], + "questions": [ + "What repository do you want to watch?", + "What user are you interested in?", + "What issue number to want to watch?", + "", + "" + ], + "string_values": [] + }, + "get_milestone": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:username)", + "String", + "Date", + "String" + ], + "args": [ + "repo_name", + "user", + "description", + "time", + "title" + ], + "required": [ + true, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the milestones created on Github repository $repo_name", + "confirmation_remote": "the milestones created on $__person's Github repository", + "doc": "milestones from a particular repository", + "canonical": "milestones on github", + "argcanonicals": [ + "repo name", + "user", + "description", + "time", + "title" + ], + "questions": [ + "What repository do you want to watch?", + "What user are you interested in?", + "", + "", + "" + ], + "string_values": [] + } + }, + "actions": { + "add_email": { + "types": [ + "Entity(tt:email_address)" + ], + "args": [ + "email" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "add $email to your Github account", + "confirmation_remote": "add $email to $__person's Github account", + "doc": "Add a new email to account", + "canonical": "add email on github", + "argcanonicals": [ + "email" + ], + "questions": [ + "What email do youli want to add?" + ], + "string_values": [] + }, + "comment_issue": { + "types": [ + "Entity(tt:path_name)", + "Number", + "String" + ], + "args": [ + "repo_name", + "issue_number", + "body" + ], + "required": [ + true, + true, + true + ], + "is_input": [ + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "comment on issue $issue_number in $repo_name on Github", + "confirmation_remote": "comment on issue $issue_number in $repo_name on $__person's Github", + "doc": "post a new comment on a given issue", + "canonical": "comment on issue on github", + "argcanonicals": [ + "repo name", + "issue number", + "body" + ], + "questions": [ + "What repository do you want to comment on?", + "What issue do you want to comment on?", + "What do you want to comment?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.xkcd", + "kind_type": "primary", + "kind_canonical": "xkcd", + "triggers": {}, + "queries": { + "get_comic": { + "types": [ + "Number", + "String", + "Entity(tt:picture)", + "Entity(tt:url)", + "String" + ], + "args": [ + "number", + "title", + "picture_url", + "link", + "alt_text" + ], + "required": [ + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "an Xkcd comic", + "confirmation_remote": "an Xkcd comic", + "doc": "retrieve the comic with a given number, or the latest comit", + "canonical": "xkcd comic", + "argcanonicals": [ + "number", + "title", + "picture url", + "link", + "alt text" + ], + "questions": [ + "What Xkcd comic do you want?", + "", + "", + "", + "" + ], + "string_values": [ + null, + "com.xkcd:title", + null, + null, + "com.xkcd:alt_text" + ] + }, + "random_comic": { + "types": [ + "Number", + "String", + "Entity(tt:picture)", + "Entity(tt:url)", + "String" + ], + "args": [ + "number", + "title", + "picture_url", + "link", + "alt_text" + ], + "required": [ + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "a random Xkcd comic", + "confirmation_remote": "a random Xkcd comic", + "doc": "retrieve a random xkcd", + "canonical": "random xkcd comic", + "argcanonicals": [ + "number", + "title", + "picture url", + "link", + "alt text" + ], + "questions": [ + "", + "", + "", + "", + "" + ], + "string_values": [ + null, + "com.xkcd:title", + null, + null, + "com.xkcd:alt_text" + ] + }, + "what_if": { + "types": [ + "String", + "Entity(tt:url)", + "Date" + ], + "args": [ + "title", + "link", + "updated_time" + ], + "required": [ + false, + false, + false + ], + "is_input": [ + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "Xkcd's What If blog posts", + "confirmation_remote": "Xkcd's What If blog posts", + "doc": "retrieve the latest posts on Xkcd's What If blog", + "canonical": "xkcd what if blog posts", + "argcanonicals": [ + "title", + "link", + "updated time" + ], + "questions": [ + "", + "", + "" + ], + "string_values": [ + "com.xkcd:what_if_title", + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.uber", + "kind_type": "primary", + "kind_canonical": "uber", + "triggers": {}, + "queries": { + "price_estimate": { + "types": [ + "Location", + "Location", + "Enum(pool,uber_x,uber_xl,uber_black,select,suv,assist)", + "Currency", + "Currency", + "Number", + "Measure(ms)", + "Measure(m)" + ], + "args": [ + "start", + "end", + "uber_type", + "low_estimate", + "high_estimate", + "surge", + "duration", + "distance" + ], + "required": [ + true, + true, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + true, + false, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "estimated prices for Uber from $start to $end", + "confirmation_remote": "estimated prices for Uber from $start to $end", + "doc": "returns estimated prices for a given trip on all available products", + "canonical": "get price estimate on uber", + "argcanonicals": [ + "start", + "end", + "uber type", + "low estimate", + "high estimate", + "surge", + "duration", + "distance" + ], + "questions": [ + "Where do you want to be picked up?", + "Where do you want to go?", + "", + "", + "", + "", + "", + "" + ], + "string_values": [ + null, + null, + null, + null, + null, + null, + null, + null + ] + }, + "time_estimate": { + "types": [ + "Location", + "Enum(pool,uber_x,uber_xl,uber_black,select,suv,assist)", + "Measure(ms)" + ], + "args": [ + "start", + "uber_type", + "estimate" + ], + "required": [ + true, + false, + false + ], + "is_input": [ + true, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "ETAs for uber services at $start", + "confirmation_remote": "ETAs for uber services at $start", + "doc": "returns ETAs for all Uber products (pool, uberX, select, etc.) offered at a given location", + "canonical": "get time estimate on uber", + "argcanonicals": [ + "start", + "uber type", + "estimate" + ], + "questions": [ + "Where do you want to call Uber?", + "", + "" + ], + "string_values": [ + null, + null, + null + ] + } + }, + "actions": { + } + }, + { + "kind": "com.yandex.translate", + "kind_type": "primary", + "kind_canonical": "yandex translate", + "triggers": {}, + "queries": { + "detect_language": { + "types": [ + "String", + "Entity(tt:iso_lang_code)" + ], + "args": [ + "text", + "value" + ], + "required": [ + true, + false + ], + "is_input": [ + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "the language of $text ", + "confirmation_remote": "the language of $text ", + "doc": "returns the ISO code of the guessed language of the given text", + "canonical": "detect language on ytranslate", + "argcanonicals": [ + "text", + "value" + ], + "questions": [ + "What text do you want to analyze?", + "" + ], + "string_values": [] + }, + "translate": { + "types": [ + "Entity(tt:iso_lang_code)", + "Entity(tt:iso_lang_code)", + "String", + "String" + ], + "args": [ + "source_language", + "target_language", + "text", + "translated_text" + ], + "required": [ + false, + true, + true, + false + ], + "is_input": [ + true, + true, + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "the translation of $text to $target_language", + "confirmation_remote": "the translation of $text to $target_language", + "doc": "Translate text from source to destination language", + "canonical": "translate on ytranslate", + "argcanonicals": [ + "source language", + "target language", + "text", + "translated text" + ], + "questions": [ + "What's the source language? Use an ISO language code like it, en or zh.", + "What's the target language? Use an ISO language code like it, en or zh.", + "What do you want to translate?", + "" + ], + "string_values": [] + } + }, + "actions": {} + }, + { + "kind": "com.yahoo.finance", + "kind_type": "primary", + "kind_canonical": "yahoo finance", + "triggers": {}, + "queries": { + "get_stock_div": { + "types": [ + "Entity(tt:stock_id)", + "String", + "Number", + "Currency", + "Date", + "Date" + ], + "args": [ + "stock_id", + "company_name", + "yield", + "value", + "pay_date", + "ex_dividend_date" + ], + "required": [ + true, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the dividend info of $stock_id", + "confirmation_remote": "the dividend info of $stock_id", + "doc": "Poll dividend info on stock", + "canonical": "stock dividend change on yahoofinance", + "argcanonicals": [ + "stock id", + "company name", + "yield", + "value", + "pay date", + "ex dividend date" + ], + "questions": [ + "What company's stock do you want to watch? Use the 4 letter ID, like GOOG, AAPL or MSFT", + "", + "", + "", + "", + "" + ], + "string_values": [] + }, + "get_stock_quote": { + "types": [ + "Entity(tt:stock_id)", + "String", + "Currency", + "Currency" + ], + "args": [ + "stock_id", + "company_name", + "ask_price", + "bid_price" + ], + "required": [ + true, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the stock price of $stock_id", + "confirmation_remote": "the stock price of $stock_id", + "doc": "Poll stock information for specified stock ID.", + "canonical": "get stock price", + "argcanonicals": [ + "stock id", + "company name", + "ask price", + "bid price" + ], + "questions": [ + "What company's stock do you want to watch? Use the 4 letter ID, like GOOG, AAPL or MSFT", + "", + "", + "" + ], + "string_values": [] + } + }, + "actions": {} + }, + { + "kind": "org.thingpedia.rss", + "kind_type": "primary", + "kind_canonical": "rss feed", + "triggers": {}, + "queries": { + "get_post": { + "types": [ + "String", + "Entity(tt:url)" + ], + "args": [ + "title", + "link" + ], + "required": [ + false, + false + ], + "is_input": [ + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "posts on the RSS feed", + "confirmation_remote": "posts on the RSS feed", + "doc": "Poll for new posts (every 3 hours)", + "canonical": "get post on rss", + "argcanonicals": [ + "title", + "link" + ], + "questions": [ + "", + "" + ], + "string_values": [ + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.youtube", + "kind_type": "primary", + "kind_canonical": "youtube account", + "triggers": {}, + "queries": { + "channels_by_category": { + "types": [ + "Enum(best_of_youtube,recommended,paid,music,comedy,film_and_entertainment,gaming,beauty_and_fashion,from_tv,automotive,animation,sports,diy,tech,science,cooking,causes,news_and_politics,lifestyle)", + "Entity(com.youtube:channel_id)", + "String", + "String", + "Entity(tt:picture)" + ], + "args": [ + "category_id", + "channel_id", + "title", + "description", + "thumbnail" + ], + "required": [ + true, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "channels in YouTube Category $category_id", + "confirmation_remote": "channels in YouTube Category $category_id", + "doc": "list channel in a given YouTube Guide Category", + "canonical": "list channel by category on youtube", + "argcanonicals": [ + "category id", + "channel id", + "title", + "description", + "thumbnail" + ], + "questions": [ + "What category do you want to list?", + "", + "", + "", + "" + ], + "string_values": [ + null, + null, + "com.youtube:channel_title", + "com.youtube:video_title", + null + ] + }, + "list_subscriptions": { + "types": [ + "Entity(com.youtube:channel_id)", + "String", + "String", + "Entity(tt:picture)" + ], + "args": [ + "channel_id", + "title", + "description", + "thumbnail" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "your subscribed channels on YouTube", + "confirmation_remote": "your subscribed channels on YouTube", + "doc": "list channel you're subscribed to", + "canonical": "list subscriptions on youtube", + "argcanonicals": [ + "channel id", + "title", + "description", + "thumbnail" + ], + "questions": [ + "", + "", + "", + "" + ], + "string_values": [ + null, + "com.youtube:channel_title", + "tt:long_free_text", + null + ] + }, + "list_videos": { + "types": [ + "Entity(com.youtube:channel_id)", + "String", + "String", + "Entity(com.youtube:video_id)", + "Entity(tt:url)", + "String", + "Entity(tt:picture)" + ], + "args": [ + "channel_id", + "channel_title", + "title", + "video_id", + "video_url", + "description", + "thumbnail" + ], + "required": [ + true, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "recent videos in YouTube channel ${channel_id}", + "confirmation_remote": "recent videos in YouTube channel ${channel_id}", + "doc": "trigger on new videos uploaded on the given channel", + "canonical": "list video on youtube", + "argcanonicals": [ + "channel id", + "channel title", + "title", + "video id", + "video url", + "description", + "thumbnail" + ], + "questions": [ + "What channel do you want to be notified about? Use the full channel URL, like https://www.youtube.com/channels/xxxxxxx.", + "", + "", + "", + "", + "", + "" + ], + "string_values": [ + null, + "com.youtube:channel_title", + "com.youtube:video_title", + null, + null, + "tt:long_free_text", + null + ] + }, + "search_channel": { + "types": [ + "String", + "Entity(com.youtube:channel_id)", + "String", + "String", + "Entity(tt:picture)" + ], + "args": [ + "query", + "channel_id", + "title", + "description", + "thumbnail" + ], + "required": [ + true, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "YouTube channels matching $query", + "confirmation_remote": "YouTube channels matching $query", + "doc": "search channels", + "canonical": "search channel on youtube", + "argcanonicals": [ + "query", + "channel id", + "title", + "description", + "thumbnail" + ], + "questions": [ + "What do you want to search?", + "", + "", + "", + "" + ], + "string_values": [ + "tt:search_query", + null, + "com.youtube:channel_title", + "tt:long_free_text", + null + ] + }, + "search_videos": { + "types": [ + "String", + "Entity(com.youtube:video_id)", + "Entity(com.youtube:channel_id)", + "String", + "String", + "Entity(tt:picture)", + "Number", + "Entity(tt:url)" + ], + "args": [ + "query", + "video_id", + "channel_id", + "title", + "description", + "thumbnail", + "count", + "video_url" + ], + "required": [ + true, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + true, + false, + false, + false, + true, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "YouTube videos matching $query", + "confirmation_remote": "YouTube videos matching $query", + "doc": "search videos", + "canonical": "search video on youtube", + "argcanonicals": [ + "query", + "video id", + "channel id", + "title", + "description", + "thumbnail", + "count", + "video url" + ], + "questions": [ + "What do you want to search?", + "", + "What channel do you want to limit the search to?", + "", + "", + "", + "How many search results do you want?", + "" + ], + "string_values": [ + "tt:search_query", + null, + null, + "com.youtube:video_title", + "tt:long_free_text", + null, + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "org.thingpedia.weather", + "kind_type": "primary", + "kind_canonical": "weather api", + "triggers": {}, + "queries": { + "current": { + "types": [ + "Location", + "Measure(C)", + "Measure(mps)", + "Number", + "Number", + "Number", + "Enum(raining,cloudy,sunny,snowy,sleety,drizzling,windy)", + "Entity(tt:picture)" + ], + "args": [ + "location", + "temperature", + "wind_speed", + "humidity", + "cloudiness", + "fog", + "status", + "icon" + ], + "required": [ + true, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the current weather for $location", + "confirmation_remote": "the current weather for $location", + "doc": "Information about current weather", + "canonical": "get current weather on weatherapi", + "argcanonicals": [ + "location", + "temperature", + "wind speed", + "humidity", + "cloudiness", + "fog", + "status", + "icon" + ], + "questions": [ + "What location do you want the current weather for?", + "", + "", + "", + "", + "", + "", + "" + ], + "string_values": [] + }, + "moon": { + "types": [ + "Location", + "Date", + "Enum(new_moon,waxing_crescent,first_quarter,waxing_gibbous,full_moon,waning_gibbous,third_quarter,waning_crescent)" + ], + "args": [ + "location", + "date", + "phase" + ], + "required": [ + true, + false, + false + ], + "is_input": [ + true, + true, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the moon phase for $location", + "confirmation_remote": "the moon phase for $location", + "doc": "Information about moon times and moon phase", + "canonical": "get moon phase on weatherapi", + "argcanonicals": [ + "location", + "date", + "phase" + ], + "questions": [ + "What location do you want moon time info for?", + "What day are you interested in?", + "" + ], + "string_values": [] + }, + "sunrise": { + "types": [ + "Location", + "Date", + "Time", + "Time" + ], + "args": [ + "location", + "date", + "sunrise_time", + "sunset_time" + ], + "required": [ + true, + false, + false, + false + ], + "is_input": [ + true, + true, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the sunrise and sunset time for location $location", + "confirmation_remote": "the sunrise and sunset time for location $location", + "doc": "Information about sunrise and sunset", + "canonical": "get sunrise on weatherapi", + "argcanonicals": [ + "location", + "date", + "sunrise time", + "sunset time" + ], + "questions": [ + "What location do you want sun time info for?", + "What day are you interested in?", + "", + "" + ], + "string_values": [] + } + }, + "actions": {} + }, + { + "kind": "com.instagram", + "kind_type": "primary", + "kind_canonical": "instagram", + "triggers": {}, + "queries": { + "get_pictures": { + "types": [ + "Number", + "Entity(instagram:media_id)", + "Entity(tt:picture)", + "String", + "Entity(tt:url)", + "Entity(com.instagram:filter)", + "Array(Entity(tt:hashtag))", + "Location" + ], + "args": [ + "count", + "media_id", + "picture_url", + "caption", + "link", + "filter", + "hashtags", + "location" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "your recent Instagram pictures", + "confirmation_remote": "$__person's recent Instagram pictures", + "doc": "get pictures recently uploaded by the user", + "canonical": "get pictures on instagram", + "argcanonicals": [ + "count", + "media id", + "picture url", + "caption", + "link", + "filter", + "hashtags", + "location" + ], + "questions": [ + "How many pictures do you want?", + "", + "", + "", + "", + "With what filters do you want pictures?", + "", + "" + ], + "string_values": [ + null, + null, + null, + "com.instagram:caption", + null, + null, + "com.instagram:hashtag", + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.live.onedrive", + "kind_type": "primary", + "kind_canonical": "onedrive account", + "triggers": {}, + "queries": { + "list_files": { + "types": [ + "Entity(com.live.onedrive:file_id)", + "Entity(tt:path_name)", + "String", + "Date", + "Date", + "Entity(com.live.onedrive:user_id)", + "Entity(tt:url)", + "Enum(created_time_increasing,created_time_decreasing,modified_time_increasing,modified_time_decreasing,name_increasing,name_decreasing)" + ], + "args": [ + "file_id", + "file_name", + "description", + "created_time", + "modified_time", + "modified_by", + "link", + "order_by" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false, + false, + true + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "files your OneDrive", + "confirmation_remote": "files on $__person's OneDrive", + "doc": "list files in your onedrive", + "canonical": "file created on onedrive", + "argcanonicals": [ + "file id", + "file name", + "description", + "created time", + "modified time", + "modified by", + "link", + "order by" + ], + "questions": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "string_values": [] + }, + "open": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:url)" + ], + "args": [ + "file_name", + "url" + ], + "required": [ + true, + false + ], + "is_input": [ + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "the link to $file_name in your Onedrive", + "confirmation_remote": "the link to $file_name in $__person's Onedrive", + "doc": "open (retrieve a temporary link to) a file", + "canonical": "open on onedrive", + "argcanonicals": [ + "file name", + "url" + ], + "questions": [ + "What file do you want to open? Use the full path name.", + "" + ], + "string_values": [] + } + }, + "actions": { + "create_file": { + "types": [ + "Entity(tt:path_name)", + "String" + ], + "args": [ + "file_name", + "contents" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "create a new file on OneDrive named $file_name containing $contents", + "confirmation_remote": "create a new file on OneDrive named $file_name containing $contents", + "doc": "create a new file in your onedrive", + "canonical": "create file on onedrive", + "argcanonicals": [ + "file name", + "contents" + ], + "questions": [ + "What should be the name of the file?", + "What do you want to write in the file?" + ], + "string_values": [] + }, + "delete_file": { + "types": [ + "Entity(tt:path_name)" + ], + "args": [ + "file_name" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "delete the file $file_name from OneDrive", + "confirmation_remote": "delete the file $file_name from OneDrive", + "doc": "delete a file in your onedrive", + "canonical": "delete file on onedrive", + "argcanonicals": [ + "file name" + ], + "questions": [ + "What file do you want to delete?" + ], + "string_values": [] + }, + "rename_file": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:path_name)" + ], + "args": [ + "old_name", + "new_name" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "rename $old_name to $new_name on OneDrive", + "confirmation_remote": "rename $old_name to $new_name on OneDrive", + "doc": "rename a file in your onedrive", + "canonical": "rename file on onedrive", + "argcanonicals": [ + "old name", + "new name" + ], + "questions": [ + "What file do you want to rename?", + "What should be the new name?" + ], + "string_values": [] + }, + "upload_picture": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:picture)" + ], + "args": [ + "file_name", + "picture_url" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "upload a picture on OneDrive as $file_name", + "confirmation_remote": "upload a picture on OneDrive as $file_name", + "doc": "upload a picture in your onedrive", + "canonical": "upload picture on onedrive", + "argcanonicals": [ + "file name", + "picture url" + ], + "questions": [ + "What should be the file name of the picture?", + "Upload the picture now." + ], + "string_values": [] + } + } + }, + { + "kind": "org.thingpedia.builtin.thingengine.builtin", + "kind_type": "primary", + "kind_canonical": "miscellaneous interfaces", + "triggers": {}, + "queries": { + "get_date": { + "types": [ + "Date" + ], + "args": [ + "date" + ], + "required": [ + false + ], + "is_input": [ + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "today's date", + "confirmation_remote": "today's date", + "doc": "get the current date; this is equivalent to $now() and exists mostly so that Sabrina can codegen it; also equivalent to get_time() but the default formatting is different", + "canonical": "get date", + "argcanonicals": [ + "date" + ], + "questions": [ + "" + ], + "string_values": [ + null + ] + }, + "get_random_between": { + "types": [ + "Number", + "Number", + "Number" + ], + "args": [ + "low", + "high", + "random" + ], + "required": [ + true, + true, + false + ], + "is_input": [ + true, + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "a random integer between $low and $high", + "confirmation_remote": "a random integer between $low and $high", + "doc": "get a uniform random integer between `low` and `high`; this is equivalent to $random() and some rounding/mod operation", + "canonical": "get random integer", + "argcanonicals": [ + "low", + "high", + "random" + ], + "questions": [ + "What should be the lower bound?", + "What should be the upper bound?", + "" + ], + "string_values": [ + null, + null, + null + ] + }, + "get_time": { + "types": [ + "Date" + ], + "args": [ + "time" + ], + "required": [ + false + ], + "is_input": [ + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "the current time", + "confirmation_remote": "the current time", + "doc": "get the current time; this is equivalent to $now() and exists mostly so that Sabrina can codegen it", + "canonical": "get time", + "argcanonicals": [ + "time" + ], + "questions": [ + "" + ], + "string_values": [ + null + ] + } + }, + "actions": { + "debug_log": { + "types": [ + "String" + ], + "args": [ + "message" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "write $message in the developer logs", + "confirmation_remote": "write $message in the developer logs on $__person's phone", + "doc": "log a message in the developer logs", + "canonical": "log", + "argcanonicals": [ + "message" + ], + "questions": [ + "What should I write in the logs?" + ], + "string_values": [ + null + ] + }, + "discover": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "search for new devices", + "confirmation_remote": "search for new devices on $__person's Almond", + "doc": "start interactive discovery for new devices", + "canonical": "discover", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "say": { + "types": [ + "String" + ], + "args": [ + "message" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send me a message $message", + "confirmation_remote": "send $__person message $message", + "doc": "makes Almond say something; this is the codegennable version of @$notify", + "canonical": "say", + "argcanonicals": [ + "message" + ], + "questions": [ + "What do you want me to say?" + ], + "string_values": [ + "tt:message" + ] + } + } + }, + { + "kind": "light-bulb", + "kind_type": "other", + "kind_canonical": "light bulb", + "triggers": {}, + "queries": {}, + "actions": { + "alert_long": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "flash alerts on your lightbulb", + "confirmation_remote": "flash alerts on $__person's lightbulb", + "doc": "Flashes light on the light bulb 10 times", + "canonical": "flash alert lights on light bulb", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "color_loop": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "loop colors on your lightbulb", + "confirmation_remote": "loop colors on $__person's lightbulb", + "doc": "loops all colors on the light bulb", + "canonical": "color loop lights on light bulb", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "set_power": { + "types": [ + "Enum(on,off)" + ], + "args": [ + "power" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "turn $power your lightbulb", + "confirmation_remote": "turn $power $__person's lightbulb", + "doc": "set power on the light bulb", + "canonical": "set power on light bulb", + "argcanonicals": [ + "power" + ], + "questions": [ + "Do you want to turn it on or off?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.hue", + "kind_type": "primary", + "kind_canonical": "philips hue", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "com.gmail", + "kind_type": "primary", + "kind_canonical": "gmail account", + "triggers": {}, + "queries": { + "inbox": { + "types": [ + "String", + "Entity(tt:email_address)", + "String", + "Date", + "Array(String)", + "String", + "Entity(com.gmail:thread_id)", + "Entity(com.gmail:email_id)", + "Boolean", + "Boolean" + ], + "args": [ + "sender_name", + "sender_address", + "subject", + "date", + "labels", + "snippet", + "thread_id", + "email_id", + "is_important", + "is_primary" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false, + false, + false, + true, + true + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the emails in your GMail inbox", + "confirmation_remote": "the emails in $__person's GMail inbox", + "doc": "retrieve your inbox", + "canonical": "list email in inbox", + "argcanonicals": [ + "sender name", + "sender address", + "subject", + "date", + "labels", + "snippet", + "thread id", + "email id", + "is important", + "is primary" + ], + "questions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "string_values": [ + "tt:person_full_name", + null, + "tt:email_subject", + null, + null, + "tt:long_free_text", + null, + null, + null, + null + ] + } + }, + "actions": { + "reply": { + "types": [ + "Entity(com.gmail:email_id)", + "String", + "String" + ], + "args": [ + "email_id", + "subject", + "message" + ], + "required": [ + true, + false, + true + ], + "is_input": [ + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "reply to $email_id saying $message", + "confirmation_remote": "reply to $email_id saying $message from $__person's GMail", + "doc": "reply to emails", + "canonical": "gmail reply email", + "argcanonicals": [ + "email id", + "subject", + "message" + ], + "questions": [ + "What email do you want to reply to?", + "", + "What do you want to say in your reply?" + ], + "string_values": [ + null, + "tt:email_subject", + "tt:long_free_text" + ] + }, + "send_email": { + "types": [ + "Entity(tt:email_address)", + "String", + "String" + ], + "args": [ + "to", + "subject", + "message" + ], + "required": [ + true, + true, + true + ], + "is_input": [ + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send an email to $to with subject $subject on GMail", + "confirmation_remote": "send an email to $to with subject $subject using $__person's GMail", + "doc": "send an email", + "canonical": "send email on gmail", + "argcanonicals": [ + "to", + "subject", + "message" + ], + "questions": [ + "Who do you want to send to?", + "With what subject?", + "What message do you want to send?" + ], + "string_values": [ + null, + "tt:email_subject", + "tt:long_free_text" + ] + }, + "send_picture": { + "types": [ + "Entity(tt:email_address)", + "String", + "String", + "Entity(tt:picture)" + ], + "args": [ + "to", + "subject", + "message", + "picture_url" + ], + "required": [ + true, + true, + true, + true + ], + "is_input": [ + true, + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a picture to $to with subject $subject on GMail", + "confirmation_remote": "send a picture to $to with subject $subject using $__person's GMail", + "doc": "send an email with a picture attached", + "canonical": "send picture on gmail", + "argcanonicals": [ + "to", + "subject", + "message", + "picture url" + ], + "questions": [ + "Who do you want to send to?", + "With what subject?", + "What message do you want to send?", + "Upload the picture now." + ], + "string_values": [ + null, + "tt:email_subject", + "tt:long_free_text", + null + ] + } + } + }, + { + "kind": "smoke-alarm", + "kind_type": "other", + "kind_canonical": "smoke alarm", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "com.google.drive", + "kind_type": "primary", + "kind_canonical": "google drive", + "triggers": {}, + "queries": { + "list_drive_files": { + "types": [ + "Entity(com.google.drive:file_id)", + "Entity(tt:path_name)", + "Entity(tt:mime_type)", + "String", + "Boolean", + "Date", + "Date", + "Measure(byte)", + "Enum(created_time_increasing,created_time_decreasing,modified_time_increasing,modified_time_decreasing,name_increasing,name_decreasing)", + "String", + "Entity(tt:url)" + ], + "args": [ + "file_id", + "file_name", + "mime_type", + "description", + "starred", + "created_time", + "modified_time", + "file_size", + "order_by", + "last_modified_by", + "link" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false, + false, + false, + true, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "files in your Google Drive", + "confirmation_remote": "files in $__person's Google Drive", + "doc": "list files in Google Drive, sort by the given order, or modification date by default", + "canonical": "google drive file list", + "argcanonicals": [ + "file id", + "file name", + "mime type", + "description", + "starred", + "created time", + "modified time", + "file size", + "order by", + "last modified by", + "link" + ], + "questions": [ + "", + "", + "", + "", + "", + "", + "", + "", + "", + "", + "" + ], + "string_values": [] + } + }, + "actions": { + "create_new_drive_file": { + "types": [ + "Entity(tt:path_name)" + ], + "args": [ + "file_name" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "create a file with name $file_name on google drive", + "confirmation_remote": "create a file with name $file_name on google drive", + "doc": "create a new file with the specified name on google drive", + "canonical": "create a new file on google drive", + "argcanonicals": [ + "file name" + ], + "questions": [ + "what's the name of the file?" + ], + "string_values": [] + } + } + }, + { + "kind": "org.thingpedia.icalendar", + "kind_type": "primary", + "kind_canonical": "icalendar events", + "triggers": {}, + "queries": { + "list_events": { + "types": [ + "Date", + "Date", + "String", + "String", + "Number", + "String", + "String", + "Enum(scheduled,upcoming,started,ended)" + ], + "args": [ + "start_date", + "end_date", + "summary", + "description", + "sequence", + "organizer", + "location", + "status" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the events in your calendar", + "confirmation_remote": "the events in $__person's calendar", + "doc": "list events in the calendar matching the provided arguments", + "canonical": "list event on icalendar", + "argcanonicals": [ + "start date", + "end date", + "summary", + "description", + "sequence", + "organizer", + "location", + "status" + ], + "questions": [ + "", + "", + "", + "", + "", + "Who should be the organizer of the events?", + "What should be the location of the events?", + "" + ], + "string_values": [] + } + }, + "actions": {} + }, + { + "kind": "org.thingpedia.holidays", + "kind_type": "primary", + "kind_canonical": "holidays calendar", + "triggers": {}, + "queries": { + "get_holidays": { + "types": [ + "Entity(tt:country)", + "Date", + "String", + "String" + ], + "args": [ + "country", + "date", + "summary", + "description" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the holidays in ${country}", + "confirmation_remote": "the holidays in ${country}", + "doc": "Retrieve the Holidays.", + "canonical": "get holidays", + "argcanonicals": [ + "country", + "date", + "summary", + "description" + ], + "questions": [ + "", + "", + "", + "" + ], + "string_values": [] + } + }, + "actions": {} + }, + { + "kind": "com.dropbox", + "kind_type": "primary", + "kind_canonical": "dropbox account", + "triggers": {}, + "queries": { + "get_space_usage": { + "types": [ + "Measure(byte)", + "Measure(byte)" + ], + "args": [ + "used_space", + "total_space" + ], + "required": [ + false, + false + ], + "is_input": [ + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "your Dropbox quota info", + "confirmation_remote": "$__person's Dropbox quota info", + "doc": "retrieves the used and allocated space", + "canonical": "get space usage on dropbox", + "argcanonicals": [ + "used space", + "total space" + ], + "questions": [ + "", + "" + ], + "string_values": [] + }, + "list_folder": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:path_name)", + "Boolean", + "Date", + "Measure(byte)", + "Entity(tt:path_name)", + "Enum(modified_time_decreasing,modified_time_increasing,name_decreasing,name_increasing)" + ], + "args": [ + "folder_name", + "file_name", + "is_folder", + "modified_time", + "file_size", + "full_path", + "order_by" + ], + "required": [ + true, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false, + true + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the content of $folder_name in your Dropbox", + "confirmation_remote": "the content of $folder_name in $__person's Dropbox", + "doc": "list the content of a folder", + "canonical": "list folder on dropbox", + "argcanonicals": [ + "folder name", + "file name", + "is folder", + "modified time", + "file size", + "full path", + "order by" + ], + "questions": [ + "What folder do you want to list?", + "", + "", + "", + "", + "", + "" + ], + "string_values": [] + }, + "open": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:url)" + ], + "args": [ + "file_name", + "url" + ], + "required": [ + true, + false + ], + "is_input": [ + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "the link to $file_name in your Dropbox", + "confirmation_remote": "the link to $file_name in $__person's Dropbox", + "doc": "open (retrieve a temporary link to) a file", + "canonical": "open on dropbox", + "argcanonicals": [ + "file name", + "url" + ], + "questions": [ + "What file do you want to open? Use the full path name.", + "" + ], + "string_values": [] + } + }, + "actions": { + "create_new_folder": { + "types": [ + "Entity(tt:path_name)" + ], + "args": [ + "folder_name" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "create a new folder called $folder_name in your Dropbox", + "confirmation_remote": "create a new folder called $folder_name in $__person's Dropbox", + "doc": "creates new folder in user's root directory", + "canonical": "create folder on dropbox", + "argcanonicals": [ + "folder name" + ], + "questions": [ + "How do you want to call the folder?" + ], + "string_values": [] + }, + "move": { + "types": [ + "Entity(tt:path_name)", + "Entity(tt:path_name)" + ], + "args": [ + "old_name", + "new_name" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "rename $old_name to $new_name in your Dropbox", + "confirmation_remote": "rename $old_name to $new_name in $__person's Dropbox", + "doc": "moves/renames a file", + "canonical": "move on dropbox", + "argcanonicals": [ + "old name", + "new name" + ], + "questions": [ + "What file do you want to move?", + "What should be the new name?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.imgflip", + "kind_type": "primary", + "kind_canonical": "imgflip meme generator", + "triggers": {}, + "queries": { + "generate": { + "types": [ + "Entity(imgflip:meme_id)", + "String", + "String", + "Entity(tt:picture)" + ], + "args": [ + "template", + "text_top", + "text_bottom", + "picture_url" + ], + "required": [ + true, + true, + true, + false + ], + "is_input": [ + true, + true, + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "the meme $template with $text_top at the top and $text_bottom at the bottom, generated using Imflip", + "confirmation_remote": "the meme $template with $text_top at the top and $text_bottom at the bottom, generated using Imflip", + "doc": "generate a meme by name", + "canonical": "generate meme on imgflip", + "argcanonicals": [ + "template", + "text top", + "text bottom", + "picture url" + ], + "questions": [ + "What meme do you want to generate?", + "What do you want to write at the top? Leave blank for the default (if recognized)", + "What do you want to write at the bottom? Leave blank for the default (if recognized)", + "" + ], + "string_values": [ + null, + "com.imgflip:meme_text", + "com.imgflip:meme_text", + null + ] + }, + "list": { + "types": [ + "String", + "Entity(tt:picture)" + ], + "args": [ + "name", + "picture_url" + ], + "required": [ + false, + false + ], + "is_input": [ + false, + false + ], + "is_list": true, + "is_monitorable": false, + "confirmation": "meme templates available on Imgflip", + "confirmation_remote": "meme templates available on Imgflip", + "doc": "list available meme templates", + "canonical": "list meme templates on imgflip", + "argcanonicals": [ + "name", + "picture url" + ], + "questions": [ + "What meme do you want?", + "" + ], + "string_values": [ + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.giphy", + "kind_type": "primary", + "kind_canonical": "giphy", + "triggers": {}, + "queries": { + "get": { + "types": [ + "Entity(tt:hashtag)", + "Entity(tt:picture)" + ], + "args": [ + "tag", + "picture_url" + ], + "required": [ + false, + false + ], + "is_input": [ + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "a gif from giphy", + "confirmation_remote": "a gif from giphy", + "doc": "get a gif from Giphy, optionally with the given tag", + "canonical": "random giphy gif", + "argcanonicals": [ + "tag", + "picture url" + ], + "questions": [ + "With what tag?", + "" + ], + "string_values": [ + "com.twitter:hashtag", + null + ] + } + }, + "actions": {} + }, + { + "kind": "media", + "kind_type": "category", + "kind_canonical": "media", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "service", + "kind_type": "category", + "kind_canonical": "service", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "social-network", + "kind_type": "category", + "kind_canonical": "social network", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "communication", + "kind_type": "category", + "kind_canonical": "communication", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "home", + "kind_type": "category", + "kind_canonical": "home", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "health", + "kind_type": "category", + "kind_canonical": "health", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "data-management", + "kind_type": "category", + "kind_canonical": "data management", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "com.washingtonpost", + "kind_type": "primary", + "kind_canonical": "the washington post", + "triggers": {}, + "queries": { + "get_article": { + "types": [ + "Enum(politics,opinions,local,sports,national,world,business,lifestyle)", + "String", + "Entity(tt:url)", + "String", + "Entity(tt:picture)" + ], + "args": [ + "section", + "title", + "link", + "description", + "picture_url" + ], + "required": [ + true, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the latest articles in the ${section} section of the Washington Post", + "confirmation_remote": "the latest articles in the ${section} section of the Washington Post", + "doc": "read washington post", + "canonical": "articles on washington post", + "argcanonicals": [ + "section", + "title", + "link", + "description", + "picture url" + ], + "questions": [ + "What section do you want to read?", + "", + "", + "", + "" + ], + "string_values": [ + null, + "tt:news_title", + null, + "tt:news_description", + null + ] + }, + "get_blog_post": { + "types": [ + "Enum(the_fix,politics,powerpost,fact_checker,world_views,compost,the_plum_line,post_partisan,post_everything,right_turn,capital_weather_gang,morning_mix,wonkblog)", + "String", + "Entity(tt:url)", + "Date" + ], + "args": [ + "section", + "title", + "link", + "updated" + ], + "required": [ + true, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the latest articles in the $section blog of the Washington Post", + "confirmation_remote": "the latest articles in the $section blog of the Washington Post", + "doc": "trigger on new blog posts", + "canonical": "blog post on washington post", + "argcanonicals": [ + "section", + "title", + "link", + "updated" + ], + "questions": [ + "What blog do you want to monitor?", + "", + "", + "" + ], + "string_values": [ + null, + "tt:news_title", + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.phdcomics", + "kind_type": "primary", + "kind_canonical": "piled higher and deeper", + "triggers": {}, + "queries": { + "get_post": { + "types": [ + "String", + "Entity(tt:url)", + "Entity(tt:picture)", + "Date" + ], + "args": [ + "title", + "link", + "picture_url", + "updated_time" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "PhD comics", + "confirmation_remote": "PhD comics", + "doc": "get the latest phd comics posts", + "canonical": "phdcomics posts", + "argcanonicals": [ + "title", + "link", + "picture url", + "updated time" + ], + "questions": [ + "", + "", + "", + "" + ], + "string_values": [ + "com.phdcomics:title", + null, + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "gov.nasa", + "kind_type": "primary", + "kind_canonical": "nasa daily", + "triggers": {}, + "queries": { + "apod": { + "types": [ + "String", + "String", + "Entity(tt:picture)" + ], + "args": [ + "title", + "description", + "picture_url" + ], + "required": [ + false, + false, + false + ], + "is_input": [ + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "NASA's Astronomy Picture of the Day", + "confirmation_remote": "NASA's Astronomy Picture of the Day", + "doc": "Title, description, and image URL of NASA's Astronomy Picture of the Day (APOD)", + "canonical": "get astronomy picture of the day on nasa", + "argcanonicals": [ + "title", + "description", + "picture url" + ], + "questions": [ + "", + "", + "" + ], + "string_values": [ + "gov.nasa:apod_title", + "tt:long_free_text", + null + ] + }, + "asteroid": { + "types": [ + "Entity(gov.nasa:asteroid_id)", + "String", + "Measure(m)", + "Measure(m)", + "Boolean", + "Measure(mps)", + "Measure(m)", + "String" + ], + "args": [ + "asteroid_id", + "name", + "estimated_diameter_min", + "estimated_diameter_max", + "is_dangerous", + "relative_velocity", + "distance", + "orbiting_body" + ], + "required": [ + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the asteroid passing close to Earth today", + "confirmation_remote": "the asteroid passing close to Earth today", + "doc": "Daily-updated data on the closest asteroid to earth", + "canonical": "close asteroid on nasa", + "argcanonicals": [ + "asteroid id", + "name", + "estimated diameter min", + "estimated diameter max", + "is dangerous", + "relative velocity", + "distance", + "orbiting body" + ], + "questions": [ + "", + "", + "", + "", + "", + "", + "", + "" + ], + "string_values": [ + null, + null, + null, + null, + null, + null, + null, + "tt:celestial_body" + ] + }, + "rover": { + "types": [ + "Date", + "Number", + "Entity(tt:picture)", + "Entity(gov.nasa:curiosity_rover_camera)" + ], + "args": [ + "date_taken", + "count", + "picture_url", + "camera_used" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + true, + true, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "Curiosity Rover photos from NASA", + "confirmation_remote": "Curiosity Rover photos from NASA", + "doc": "photos from the Curiosity Rover on Mars", + "canonical": "get curiosity rover picture on nasa", + "argcanonicals": [ + "date taken", + "count", + "picture url", + "camera used" + ], + "questions": [ + "From what Earth day do you want pictures?", + "How many pictures do you want?", + "", + "" + ], + "string_values": [ + null, + null, + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.tumblr", + "kind_type": "primary", + "kind_canonical": "tumblr", + "triggers": {}, + "queries": { + "new_photo": { + "types": [ + "Entity(tt:username)", + "Date", + "String", + "Entity(tt:url)", + "Array(Entity(tt:hashtag))", + "Array(Entity(tt:picture))" + ], + "args": [ + "blog_name", + "date", + "caption", + "link", + "tags", + "picture_urls" + ], + "required": [ + true, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "recent pictures in $blog_name on Tumblr", + "confirmation_remote": "recent pictures in $blog_name on Tumblr", + "doc": "Trigger when there is a new photo post. `photo_urls` is an array of all image source urls in the post", + "canonical": "get photo post on tumblr", + "argcanonicals": [ + "blog name", + "date", + "caption", + "link", + "tags", + "picture urls" + ], + "questions": [ + "What blog name do you want to follow?", + "", + "", + "", + "", + "" + ], + "string_values": [] + }, + "new_text": { + "types": [ + "Entity(tt:username)", + "Date", + "String", + "Entity(tt:url)", + "Array(Entity(tt:hashtag))", + "String" + ], + "args": [ + "blog_name", + "date", + "title", + "link", + "tags", + "body" + ], + "required": [ + true, + false, + false, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "recent posts in Tumblr blog $blog_name", + "confirmation_remote": "recent posts in Tumblr blog $blog_name", + "doc": "Trigger when there is a new text post.", + "canonical": "get text post on tumblr", + "argcanonicals": [ + "blog name", + "date", + "title", + "link", + "tags", + "body" + ], + "questions": [ + "What blog name do you want to follow?", + "", + "", + "", + "", + "" + ], + "string_values": [] + } + }, + "actions": {} + }, + { + "kind": "com.reddit.frontpage", + "kind_type": "primary", + "kind_canonical": "reddit frontpage", + "triggers": {}, + "queries": { + "get": { + "types": [ + "String", + "Entity(tt:url)", + "Entity(tt:username)", + "String", + "Date" + ], + "args": [ + "title", + "link", + "user", + "category", + "updated" + ], + "required": [ + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "the posts on the front page of Reddit", + "confirmation_remote": "the posts on the front page of Reddit", + "doc": "Url of link to Reddit comments whenever a post reaches the front page.", + "canonical": "get post on reddit front page", + "argcanonicals": [ + "title", + "link", + "user", + "category", + "updated" + ], + "questions": [ + "", + "", + "What user do you want to monitor?", + "What sub-reddit do you want to monitor?", + "" + ], + "string_values": [ + "tt:news_title", + null, + null, + "com.reddit.frontpage:category", + null + ] + } + }, + "actions": {} + }, + { + "kind": "com.lg.tv.webos2", + "kind_type": "primary", + "kind_canonical": "lg webos tv", + "triggers": {}, + "queries": {}, + "actions": { + "lower_volume": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "decrease the volume on your LG WebOS TV", + "confirmation_remote": "decrease the volume on $__person's LG WebOS TV", + "doc": "lower the audio volume on the tv", + "canonical": "lower volume on lg webos tv", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "mute": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "mute your LG WebOS TV", + "confirmation_remote": "mute $__person's LG WebOS TV", + "doc": "change the mute status on the tv", + "canonical": "mute on lg webos tv", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "play_url": { + "types": [ + "Entity(tt:url)" + ], + "args": [ + "url" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "play $url on your LG WebOS TV", + "confirmation_remote": "play $url on $__person's LG WebOS TV", + "doc": "start playing a video by URL", + "canonical": "play url on lg webos tv", + "argcanonicals": [ + "url" + ], + "questions": [ + "What video do you want to play? Use the full URL." + ], + "string_values": [] + }, + "raise_volume": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "increase the volume on your LG WebOS TV", + "confirmation_remote": "increase the volume on $__person's LG WebOS TV", + "doc": "increase the volume of the tv", + "canonical": "raise volume on lg webos tv", + "argcanonicals": [], + "questions": [], + "string_values": [] + }, + "set_power": { + "types": [ + "Enum(on,off)" + ], + "args": [ + "power" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "turn $power your LG WebOS TV", + "confirmation_remote": "turn $power $__person's LG WebOS TV", + "doc": "turn off the TV (turning on is not supported)", + "canonical": "set power on lg webos tv", + "argcanonicals": [ + "power" + ], + "questions": [ + "Do you want to turn the tv on or off?" + ], + "string_values": [] + }, + "set_volume": { + "types": [ + "Number" + ], + "args": [ + "percent" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set the volume on your LG WebOS TV to $percent%", + "confirmation_remote": "set the volume on $__person's LG WebOS TV to $percent%", + "doc": "set the volume on this device to the given percent value", + "canonical": "set volume on lg webos tv", + "argcanonicals": [ + "percent" + ], + "questions": [ + "What volume do you want to set (in percent)?" + ], + "string_values": [] + }, + "unmute": { + "types": [], + "args": [], + "required": [], + "is_input": [], + "is_list": false, + "is_monitorable": false, + "confirmation": "unmute your LG WebOS Tv", + "confirmation_remote": "unmute $__person's LG WebOS Tv", + "doc": "change the mute status on the tv", + "canonical": "unmute on lg webos tv", + "argcanonicals": [], + "questions": [], + "string_values": [] + } + } + }, + { + "kind": "com.wsj", + "kind_type": "primary", + "kind_canonical": "the wall street journal", + "triggers": {}, + "queries": { + "get": { + "types": [ + "Enum(opinions,world_news,us_business,markets,technology,lifestyle)", + "String", + "Entity(tt:url)", + "Date" + ], + "args": [ + "section", + "title", + "link", + "updated" + ], + "required": [ + true, + false, + false, + false + ], + "is_input": [ + true, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "articles published in the $section section of the Wall Street Journal", + "confirmation_remote": "articles published in the $section section of the Wall Street Journal", + "doc": "trigger on new articles", + "canonical": "get post on wall street journal", + "argcanonicals": [ + "section", + "title", + "link", + "updated" + ], + "questions": [ + "What section of the Wall Street Journal do you want to read?", + "", + "", + "" + ], + "string_values": [ + null, + "tt:news_title", + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "thingengine-system", + "kind_type": "category", + "kind_canonical": "thingengine system", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "org.thingpedia.builtin.thingengine", + "kind_type": "primary", + "kind_canonical": "thingengine", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "org.thingpedia.builtin.thingengine.remote", + "kind_type": "primary", + "kind_canonical": "remote thingengine", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "uk.co.thedogapi", + "kind_type": "primary", + "kind_canonical": "the dog api", + "triggers": {}, + "queries": { + "get": { + "types": [ + "Number", + "Entity(dogapi:image_id)", + "Entity(tt:picture)" + ], + "args": [ + "count", + "image_id", + "picture_url" + ], + "required": [ + false, + false, + false + ], + "is_input": [ + true, + false, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "dog pictures", + "confirmation_remote": "dog pictures", + "doc": "get `count` many dog pictures", + "canonical": "get dogs", + "argcanonicals": [ + "count", + "image id", + "picture url" + ], + "questions": [ + "How many dogs do you want?", + "", + "" + ], + "string_values": [ + null, + null, + null + ] + } + }, + "actions": {} + }, + { + "kind": "org.thingpedia.demo.coffee", + "kind_type": "primary", + "kind_canonical": "almond coffee", + "triggers": {}, + "queries": {}, + "actions": { + "order": { + "types": [ + "Enum(drip_coffee,espresso,latte,flat_white,mocha,caramel_mocha,white_mocha,macchiato,caramel_macchiato,cappuccino,americano)", + "Location", + "Enum(small,medium,large)", + "Boolean", + "Enum(none,milk,sugar,both)" + ], + "args": [ + "beverage", + "delivery_location", + "size", + "iced", + "extras" + ], + "required": [ + true, + true, + true, + false, + false + ], + "is_input": [ + true, + true, + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "order a $size $beverage to deliver at $delivery_location", + "confirmation_remote": "order a $size $beverage to deliver at $delivery_location for $__person", + "doc": "order fake coffee", + "canonical": "order coffee", + "argcanonicals": [ + "beverage", + "delivery location", + "size", + "iced", + "extras" + ], + "questions": [ + "What beverage do you want?", + "Where do you want it delivered?", + "What size do you want?", + "Do you want it iced?", + "Do you want milk or sugar?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.nytimes", + "kind_type": "primary", + "kind_canonical": "new york times", + "triggers": {}, + "queries": { + "get_front_page": { + "types": [ + "String", + "Entity(tt:url)", + "Date", + "String" + ], + "args": [ + "title", + "link", + "updated", + "description" + ], + "required": [ + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "New York Times articles", + "confirmation_remote": "New York Times articles", + "doc": "read the front page of the New York Times", + "canonical": "get new york times front page", + "argcanonicals": [ + "title", + "link", + "updated", + "description" + ], + "questions": [ + "", + "", + "", + "" + ], + "string_values": [ + "tt:news_title", + null, + null, + "tt:news_description" + ] + } + }, + "actions": {} + }, + { + "kind": "org.thingpedia.builtin.matrix", + "kind_type": "primary", + "kind_canonical": "matrix", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "org.thingpedia.builtin.test", + "kind_type": "primary", + "kind_canonical": "test device", + "triggers": {}, + "queries": { + "dup_data": { + "types": [ + "String", + "String" + ], + "args": [ + "data_in", + "data_out" + ], + "required": [ + true, + false + ], + "is_input": [ + true, + false + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "duplicate ${data_in} data", + "confirmation_remote": "duplicate ${data_in} data", + "doc": "duplicate the data (concatenate two copies); this is a simple deterministic get that depends on the input and is used to test param passing into a get", + "canonical": "duplicate data on test", + "argcanonicals": [ + "data in", + "data out" + ], + "questions": [ + "What data do you want to duplicate?", + "" + ], + "string_values": [] + }, + "get_data": { + "types": [ + "Measure(byte)", + "Number", + "String" + ], + "args": [ + "size", + "count", + "data" + ], + "required": [ + true, + false, + false + ], + "is_input": [ + true, + true, + false + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "generate $size of fake data", + "confirmation_remote": "generate $size of fake data on $__person's Almond", + "doc": "generate `size` amount of fake data", + "canonical": "get data on test", + "argcanonicals": [ + "size", + "count", + "data" + ], + "questions": [ + "How much fake data do you want?", + "", + "" + ], + "string_values": [] + } + }, + "actions": { + "eat_data": { + "types": [ + "String" + ], + "args": [ + "data" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "consume $data", + "confirmation_remote": "consume $data on $__person's Almond", + "doc": "consume some data, do nothing", + "canonical": "eat data on test", + "argcanonicals": [ + "data" + ], + "questions": [ + "What do you want me to consume?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.google.calendar", + "kind_type": "primary", + "kind_canonical": "google calendar", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "me.omlet.chat", + "kind_type": "primary", + "kind_canonical": "omlet account", + "triggers": {}, + "queries": { + "messages": { + "types": [ + "Entity(omlet:feed_id)", + "String", + "Boolean" + ], + "args": [ + "feed", + "message", + "from_me" + ], + "required": [ + false, + false, + false + ], + "is_input": [ + false, + false, + true + ], + "is_list": true, + "is_monitorable": true, + "confirmation": "Omlet messages", + "confirmation_remote": "$__person's Omlet messages", + "doc": "list omlet messages in a feed (or in all feeds)", + "canonical": "list messages on omlet", + "argcanonicals": [ + "feed", + "message", + "from me" + ], + "questions": [ + "What feed do you want to monitor?", + "", + "" + ], + "string_values": [] + } + }, + "actions": { + "send_picture": { + "types": [ + "Entity(tt:username)", + "Entity(tt:picture)", + "String" + ], + "args": [ + "to", + "picture_url", + "caption" + ], + "required": [ + true, + true, + true + ], + "is_input": [ + true, + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a picture on Omlet to $to with caption $caption", + "confirmation_remote": "send a picture on Omlet to $to with caption $caption", + "doc": "send a picture to a specific identity", + "canonical": "send picture on omlet", + "argcanonicals": [ + "to", + "picture url", + "caption" + ], + "questions": [ + "Who do you want to send the message to? Use the Omlet ID, phone number or email address.", + "Upload the picture you want to send now.", + "What caption should the picture have?" + ], + "string_values": [] + }, + "send_to": { + "types": [ + "Entity(tt:username)", + "String" + ], + "args": [ + "to", + "message" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "send a message on Omlet to $to saying $message", + "confirmation_remote": "send a message on Omlet to $to saying $message", + "doc": "send a message to a specific identity", + "canonical": "send message on omlet", + "argcanonicals": [ + "to", + "message" + ], + "questions": [ + "Who do you want to send the message to? Use the Omlet ID, phone number or email address.", + "What do you want to say?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.nest.security_camera", + "kind_type": "primary", + "kind_canonical": "nest security camera", + "triggers": {}, + "queries": { + "current_event": { + "types": [ + "Date", + "Boolean", + "Boolean", + "Boolean", + "Entity(tt:picture)" + ], + "args": [ + "start_time", + "has_sound", + "has_motion", + "has_person", + "picture_url" + ], + "required": [ + false, + false, + false, + false, + false + ], + "is_input": [ + false, + false, + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the current event detected on your Nest security camera", + "confirmation_remote": "the current event detected on $__person's Nest security camera", + "doc": "trigger on any new event detected by the camera, providing the start time of the event and a small gif", + "canonical": "current event on nest security camera", + "argcanonicals": [ + "start time", + "has sound", + "has motion", + "has person", + "picture url" + ], + "questions": [ + "", + "Do you want events with sound?", + "Do you want events with motion?", + "Do you want events with people in front of the camera?", + "" + ], + "string_values": [] + } + }, + "actions": { + "set_power": { + "types": [ + "Enum(on,off)" + ], + "args": [ + "power" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "turn $power your Nest security camera", + "confirmation_remote": "turn $power $__person's Nest security camera", + "doc": "change the streaming status of the camera", + "canonical": "set power on nest security camera", + "argcanonicals": [ + "power" + ], + "questions": [ + "Do you want to turn your camera on or off?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.nest.thermostat", + "kind_type": "primary", + "kind_canonical": "nest thermostat", + "triggers": {}, + "queries": { + "get_humidity": { + "types": [ + "Number" + ], + "args": [ + "value" + ], + "required": [ + false + ], + "is_input": [ + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the humidity reported by Nest Thermostat", + "confirmation_remote": "the humidity reported by $__person's thermostat", + "doc": "get the current humidity (in percent)", + "canonical": "get humidity on thermostat", + "argcanonicals": [ + "value" + ], + "questions": [ + "" + ], + "string_values": [] + }, + "get_hvac_state": { + "types": [ + "Enum(heat,cool,heat_cool,off)", + "Enum(heating,cooling,off)" + ], + "args": [ + "mode", + "state" + ], + "required": [ + false, + false + ], + "is_input": [ + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the state of your Nest Thermostat", + "confirmation_remote": "the state of $__person's Nest Thermostat", + "doc": "get the state of the heating system", + "canonical": "get hvac state on thermostat", + "argcanonicals": [ + "mode", + "state" + ], + "questions": [ + "", + "" + ], + "string_values": [] + }, + "get_temperature": { + "types": [ + "Measure(C)" + ], + "args": [ + "value" + ], + "required": [ + false + ], + "is_input": [ + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "the temperature on your thermostat", + "confirmation_remote": "the temperature on $__person's thermostat", + "doc": "get the current temperature", + "canonical": "get temperature on thermostat", + "argcanonicals": [ + "value" + ], + "questions": [ + "" + ], + "string_values": [] + } + }, + "actions": { + "set_hvac_mode": { + "types": [ + "Enum(heat,cool,heat_cool,off)" + ], + "args": [ + "mode" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your Nest Thermostat to $mode", + "confirmation_remote": "set your Nest Thermostat to $mode", + "doc": "change the mode of the HVAC system associated with this thermostat", + "canonical": "set hvac mode on thermostat", + "argcanonicals": [ + "mode" + ], + "questions": [ + "What mode do you want to set?" + ], + "string_values": [] + }, + "set_minmax_temperature": { + "types": [ + "Measure(C)", + "Measure(C)" + ], + "args": [ + "low", + "high" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your Nest Thermostat between $low and $high", + "confirmation_remote": "set your Nest Thermostat between $low and $high", + "doc": "set desired temperature range", + "canonical": "set minimum maximum temperature on thermostat", + "argcanonicals": [ + "low", + "high" + ], + "questions": [ + "What low temperature do you want to set?", + "What high temperature do you want to set?" + ], + "string_values": [] + }, + "set_target_temperature": { + "types": [ + "Measure(C)" + ], + "args": [ + "value" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "set your Nest Thermostat to $value", + "confirmation_remote": "set your Nest Thermostat to $value", + "doc": "set target temperature", + "canonical": "set target temperature on thermostat", + "argcanonicals": [ + "value" + ], + "questions": [ + "What temperature do you want to set?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.tumblr.blog", + "kind_type": "primary", + "kind_canonical": "tumblr blog", + "triggers": {}, + "queries": {}, + "actions": { + "post_picture": { + "types": [ + "String", + "Entity(tt:picture)" + ], + "args": [ + "caption", + "picture_url" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "post a picture with caption $caption in your Tumblr", + "confirmation_remote": "post a picture with caption $caption in your Tumblr", + "doc": "post a picture", + "canonical": "post picture on tumblr blog", + "argcanonicals": [ + "caption", + "picture url" + ], + "questions": [ + "What is the caption of the picture?", + "Upload the picture now." + ], + "string_values": [ + "com.instagram:caption", + null + ] + }, + "post_text": { + "types": [ + "String", + "String" + ], + "args": [ + "title", + "body" + ], + "required": [ + true, + true + ], + "is_input": [ + true, + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "post $title with body $body in your Tumblr", + "confirmation_remote": "post $title with body $body in your Tumblr", + "doc": "make a new post", + "canonical": "post on tumblr blog", + "argcanonicals": [ + "title", + "body" + ], + "questions": [ + "What is the title of the post?", + "What is the body of the post? Markdown is allowed." + ], + "string_values": [ + null, + "tt:long_free_text" + ] + } + } + }, + { + "kind": "com.fitbit", + "kind_type": "primary", + "kind_canonical": "fitbit tracker", + "triggers": {}, + "queries": { + "getbody": { + "types": [ + "Measure(kg)", + "Number", + "Number" + ], + "args": [ + "weight", + "bmi", + "fat" + ], + "required": [ + false, + false, + false + ], + "is_input": [ + false, + false, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "your body measurements from FitBit", + "confirmation_remote": "$__person's body measurements from FitBit", + "doc": "retrieve body measurements from Fitbit", + "canonical": "retrieve body measurements on fitbit", + "argcanonicals": [ + "weight", + "bmi", + "fat" + ], + "questions": [ + "", + "", + "" + ], + "string_values": [] + }, + "getsteps": { + "types": [ + "Date", + "Number" + ], + "args": [ + "date", + "steps" + ], + "required": [ + false, + false + ], + "is_input": [ + true, + false + ], + "is_list": false, + "is_monitorable": true, + "confirmation": "your step count from your FitBit", + "confirmation_remote": "$__person's step count from their FitBit", + "doc": "retrieves the step count for the date", + "canonical": "retrieve steps on fitbit", + "argcanonicals": [ + "date", + "steps" + ], + "questions": [ + "", + "" + ], + "string_values": [] + } + }, + "actions": { + "recordweight": { + "types": [ + "Measure(kg)" + ], + "args": [ + "weight" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "record weight", + "confirmation_remote": "record weight on $__person's fitbit", + "doc": "record weight on Fitbit", + "canonical": "record weight on fitbit", + "argcanonicals": [ + "weight" + ], + "questions": [ + "What is your weight?" + ], + "string_values": [] + } + } + }, + { + "kind": "com.nest.smoke_alarm", + "kind_type": "primary", + "kind_canonical": "nest smoke alarm", + "triggers": {}, + "queries": {}, + "actions": {} + }, + { + "kind": "org.thingpedia.builtin.test.invisible", + "kind_type": "primary", + "kind_canonical": "invisible device", + "triggers": {}, + "queries": {}, + "actions": { + "eat_data": { + "types": [ + "String" + ], + "args": [ + "data" + ], + "required": [ + true + ], + "is_input": [ + true + ], + "is_list": false, + "is_monitorable": false, + "confirmation": "consume $data", + "confirmation_remote": "consume $data on $__person's Almond", + "doc": "consume some data, do nothing", + "canonical": "eat data on test", + "argcanonicals": [ + "data" + ], + "questions": [ + "What do you want me to consume?" + ], + "string_values": [] + } + } + } + ], + "entities": [ + { + "type": "com.facebook:id", + "name": "Facebook post ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.gmail:email_id", + "name": "GMail Email ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.gmail:thread_id", + "name": "GMail Thread ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.google.contacts:contact_name", + "name": "Name of a contact in Google Contacts", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.google.drive:file_id", + "name": "Google Drive File ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.icanhazdadjoke:id", + "name": "Dad Joke ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.instagram:filter", + "name": "Instagram Filter", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "com.live.onedrive:file_id", + "name": "OneDrive File ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.live.onedrive:user_id", + "name": "OneDrive User ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.steampowered:user_id", + "name": "Steam User ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.thecatapi:image_id", + "name": "The Cat API Image ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.twitter:id", + "name": "Twitter API ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.youtube:channel_id", + "name": "YouTube Channel ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "com.youtube:video_id", + "name": "YouTube Video ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "dogapi:image_id", + "name": "The Dog API Image ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "gov.nasa:asteroid_id", + "name": "NASA Asteroid ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "gov.nasa:curiosity_rover_camera", + "name": "NASA Curiosity Rover Camera Identifier", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "imgflip:meme_id", + "name": "Imgflip Meme ID", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "instagram:media_id", + "name": "Instagram Media ID", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "omlet:feed_id", + "name": "Omlet Feed", + "is_well_known": 0, + "has_ner_support": 0 + }, + { + "type": "org.arxiv:category", + "name": "ArXiv Category", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "org.freedesktop:app_id", + "name": "Freedesktop App Identifier", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:eu_soccer_team", + "name": "Sportradar European Soccer Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:eu_tournament", + "name": "Sportradar EU Soccer Tournament ID", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:mlb_team", + "name": "Sportradar MLB Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:nba_team", + "name": "Sportradar NBA Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:ncaafb_team", + "name": "Sportradar NCAA Football Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:ncaambb_team", + "name": "Sportradar NCAA Men's Basketball Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:nfl_team", + "name": "Sportradar NFL Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:us_soccer_team", + "name": "Sportradar North American Soccer Team", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "sportradar:us_tournament", + "name": "Sportradar US Soccer Tournament ID", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:country", + "name": "ISO 3166-1 Alpha-2 Country Code", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:cryptocurrency_code", + "name": "Cryptocurrency Code", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:currency_code", + "name": "Currency Code", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:iso_lang_code", + "name": "ISO 639-1 Language Code", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:mime_type", + "name": "Media (MIME) Type", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:stock_id", + "name": "Company Stock ID", + "is_well_known": 0, + "has_ner_support": 1 + }, + { + "type": "tt:contact", + "name": "Contact Identity", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:contact_name", + "name": "Contact Name", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:device", + "name": "Device Name", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:email_address", + "name": "Email Address", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:flow_token", + "name": "Flow Identifier", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:function", + "name": "Function Name", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:hashtag", + "name": "Hashtag", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:path_name", + "name": "Unix Path", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:phone_number", + "name": "Phone Number", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:picture", + "name": "Picture", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:program", + "name": "Program", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:url", + "name": "URL", + "is_well_known": 1, + "has_ner_support": 0 + }, + { + "type": "tt:username", + "name": "Username", + "is_well_known": 1, + "has_ner_support": 0 + } + ] +} diff --git a/decanlp/tests/test.sh b/decanlp/tests/test.sh index 6f2ae278..f6964223 100755 --- a/decanlp/tests/test.sh +++ b/decanlp/tests/test.sh @@ -22,9 +22,12 @@ curl -O "https://parmesan.stanford.edu/glove/charNgram.txt.pt" ; mv charNgram.tx # train pipenv run decanlp train --train_tasks almond --train_iterations 4 --preserve_case --save_every 2 --log_every 2 --val_every 2 --save $workdir/model_$i --data $SRCDIR/dataset/ $hparams --exist_ok --skip_cache --root "" --embeddings $SRCDIR/embeddings --small_glove --no_commit + # thingpedia as context + pipenv run decanlp train --train_tasks almond --train_iterations 4 --preserve_case --save_every 2 --log_every 2 --val_every 2 --save $workdir/model_'$i'_with_thingpedia/ --data $SRCDIR/dataset/ $hparams --exist_ok --skip_cache --root "" --embeddings $SRCDIR/embeddings --small_glove --no_commit --thingpedia $SRCDIR/dataset/thingpedia-8.json # greedy decode pipenv run decanlp predict --tasks almond --evaluate test --path $workdir/model_$i --overwrite --eval_dir $workdir/model_$i/eval_results/ --data $SRCDIR/dataset/ --embeddings $SRCDIR/embeddings + pipenv run decanlp predict --tasks almond --evaluate test --path $workdir/model_'$i'_with_thingpedia/ --overwrite --eval_dir $workdir/model_'$i'_with_thingpedia/ /eval_results/ --data $SRCDIR/dataset/ --embeddings $SRCDIR/embeddings # export prediction results pipenv run python3 $SRCDIR/../utils/post_process_decoded_results.py --original_data $SRCDIR/dataset/almond/test.tsv --gold_program $workdir/model_$i/eval_results/test/almond.gold.txt --predicted_program $workdir/model_$i/eval_results/test/almond.txt --output_file $workdir/model_$i/results.tsv