genie-toolkit
genie-toolkit copied to clipboard
Numeric error codes are not handled correctly
The HTTP helpers in Thingpedia will throw errors with a numeric code
property. If those bubble up, Genie will barf:
Failed to invoke action HTTPError: Unexpected HTTP error 502 in request to https://streams.kqed.org/kqedradio
at IncomingMessage.<anonymous> (/var/home/gcampagn/Projects/almond-server/node_modules/thingpedia/dist/helpers/http.js:139:35)
at IncomingMessage.emit (events.js:387:35)
at endReadableNT (internal/streams/readable.js:1317:12)
at processTicksAndRejections (internal/process/task_queues.js:82:21) {
code: 502,
url: 'https://streams.kqed.org/kqedradio',
detail: ''
}
Genie says: Sorry, I had an error processing your command: The expression evaluated to a falsy value: assert_1.default(typeof value ==='string').
AssertionError [ERR_ASSERTION]: The expression evaluated to a falsy value:
assert_1.default(typeof value === 'string')
at new EnumValue (/var/home/gcampagn/Projects/almond-server/node_modules/thingtalk/dist/ast/values.js:1339:25)
at InferenceStatementExecutor.executeStatement (/var/home/gcampagn/Projects/almond-server/node_modules/genie-toolkit/dist/lib/dialogue-agent/statement_executor.js:131:30)
at processTicksAndRejections (internal/process/task_queues.js:95:5)
at async ExecutionDialogueAgent.execute (/var/home/gcampagn/Projects/almond-server/node_modules/genie-toolkit/dist/lib/dialogue-agent/abstract_dialogue_agent.js:124:93)
at async ThingTalkDialogueHandler._executeCurrentState (/var/home/gcampagn/Projects/almond-server/node_modules/genie-toolkit/dist/lib/dialogue-agent/handlers/thingtalk.js:369:81)
at async DialogueLoop._handleUserInput (/var/home/gcampagn/Projects/almond-server/node_modules/genie-toolkit/dist/lib/dialogue-agent/dialogue-loop.js:242:27)
at async DialogueLoop._loop (/var/home/gcampagn/Projects/almond-server/node_modules/genie-toolkit/dist/lib/dialogue-agent/dialogue-loop.js:288:21) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: false,
expected: true,
operator: '=='
}
Instead, it should recognize those errors and treat them as unexpected errors.