mirror of
https://github.com/leon-ai/leon.git
synced 2024-11-24 04:31:31 +03:00
fix(bridge/nodejs): typings improvements
This commit is contained in:
parent
b65cfb70d6
commit
1625aaf3cd
@ -1,14 +1,18 @@
|
||||
import fs from 'node:fs'
|
||||
import path from 'node:path'
|
||||
|
||||
import type { SkillConfigSchema } from '@/schemas/skill-schemas'
|
||||
|
||||
import type { IntentObject } from '@sdk/leon'
|
||||
|
||||
const {
|
||||
argv: [, , INTENT_OBJ_FILE_PATH]
|
||||
} = process
|
||||
|
||||
export const INTENT_OBJECT = JSON.parse(
|
||||
export const INTENT_OBJECT: IntentObject = JSON.parse(
|
||||
fs.readFileSync(INTENT_OBJ_FILE_PATH as string, 'utf8')
|
||||
)
|
||||
export const SKILL_CONFIG = JSON.parse(
|
||||
export const SKILL_CONFIG: SkillConfigSchema = JSON.parse(
|
||||
fs.readFileSync(
|
||||
path.join(
|
||||
process.cwd(),
|
||||
|
@ -1,6 +1,7 @@
|
||||
import path from 'node:path'
|
||||
|
||||
import { INTENT_OBJECT } from '@bridge/constants'
|
||||
import type { ActionFunction, ActionParams } from '@sdk/leon'
|
||||
;(async (): Promise<void> => {
|
||||
const {
|
||||
domain,
|
||||
@ -8,25 +9,25 @@ import { INTENT_OBJECT } from '@bridge/constants'
|
||||
action,
|
||||
lang,
|
||||
utterance,
|
||||
current_entities: currentEntities,
|
||||
current_entities,
|
||||
entities,
|
||||
current_resolvers: currentResolvers,
|
||||
current_resolvers,
|
||||
resolvers,
|
||||
slots
|
||||
} = INTENT_OBJECT
|
||||
|
||||
const params = {
|
||||
const params: ActionParams = {
|
||||
lang,
|
||||
utterance,
|
||||
currentEntities,
|
||||
current_entities,
|
||||
entities,
|
||||
currentResolvers,
|
||||
current_resolvers,
|
||||
resolvers,
|
||||
slots
|
||||
}
|
||||
|
||||
try {
|
||||
const { [action]: actionFunction } = await import(
|
||||
const actionModule = await import(
|
||||
path.join(
|
||||
process.cwd(),
|
||||
'skills',
|
||||
@ -37,6 +38,7 @@ import { INTENT_OBJECT } from '@bridge/constants'
|
||||
`${action}.ts`
|
||||
)
|
||||
)
|
||||
const actionFunction: ActionFunction = actionModule[action]
|
||||
|
||||
await actionFunction(params)
|
||||
} catch (e) {
|
||||
|
@ -4,11 +4,7 @@ import {
|
||||
SKILL_SRC_CONFIG
|
||||
} from '@bridge/constants'
|
||||
|
||||
interface IntentObject {
|
||||
id: string
|
||||
domain: string
|
||||
skill: string
|
||||
action: string
|
||||
export interface ActionParams {
|
||||
lang: string
|
||||
utterance: string
|
||||
current_entities: unknown[] // TODO
|
||||
@ -17,32 +13,44 @@ interface IntentObject {
|
||||
resolvers: unknown[] // TODO
|
||||
slots: Record<string, unknown>[] // TODO
|
||||
}
|
||||
export type ActionFunction = (params: ActionParams) => Promise<void>
|
||||
|
||||
export interface IntentObject extends ActionParams {
|
||||
id: string
|
||||
domain: string
|
||||
skill: string
|
||||
action: string
|
||||
}
|
||||
|
||||
interface AnswerOutput extends IntentObject {
|
||||
output: {
|
||||
code: string
|
||||
codes: string
|
||||
speech: string
|
||||
core: AnswerCoreData
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
options: Record<string, any>
|
||||
core?: AnswerCoreData
|
||||
options: Record<string, string>
|
||||
}
|
||||
}
|
||||
|
||||
interface AnswerCoreData {
|
||||
restart?: boolean
|
||||
isInActionLoop?: boolean
|
||||
showNextActionSuggestions?: boolean
|
||||
showSuggestions?: boolean
|
||||
}
|
||||
|
||||
interface TextAnswer {
|
||||
key: string
|
||||
data?: AnswerData
|
||||
core?: AnswerCoreData
|
||||
}
|
||||
|
||||
interface WidgetAnswer {
|
||||
// TODO
|
||||
key: 'widget'
|
||||
data?: AnswerData
|
||||
core?: AnswerCoreData
|
||||
}
|
||||
|
||||
type AnswerData = Record<string, string | number> | null
|
||||
type AnswerInput = TextAnswer | WidgetAnswer
|
||||
|
||||
@ -59,8 +67,7 @@ class Leon {
|
||||
* Get source configuration
|
||||
* @example getSRCConfig() // { credentials: { apiKey: 'abc' } }
|
||||
*/
|
||||
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
||||
public getSRCConfig(key?: string): Record<string, any> {
|
||||
public getSRCConfig<T extends Record<string, string>>(key?: string): T {
|
||||
try {
|
||||
if (key) {
|
||||
return SKILL_SRC_CONFIG[key]
|
||||
@ -70,7 +77,7 @@ class Leon {
|
||||
} catch (e) {
|
||||
console.error('Error while getting source configuration:', e)
|
||||
|
||||
return {}
|
||||
return {} as T
|
||||
}
|
||||
}
|
||||
|
||||
@ -86,15 +93,15 @@ class Leon {
|
||||
): string | null {
|
||||
try {
|
||||
// In case the answer key is a raw answer
|
||||
if (!SKILL_CONFIG.answers[answerKey]) {
|
||||
if (SKILL_CONFIG.answers == null || !SKILL_CONFIG.answers[answerKey]) {
|
||||
return answerKey
|
||||
}
|
||||
|
||||
const answers = SKILL_CONFIG.answers[answerKey]
|
||||
let answer
|
||||
const answers = SKILL_CONFIG.answers[answerKey] ?? ''
|
||||
let answer: string
|
||||
|
||||
if (Array.isArray(answers)) {
|
||||
answer = answers[Math.floor(Math.random() * answers.length)]
|
||||
answer = answers[Math.floor(Math.random() * answers.length)] ?? ''
|
||||
} else {
|
||||
answer = answers
|
||||
}
|
||||
@ -134,7 +141,7 @@ class Leon {
|
||||
...INTENT_OBJECT,
|
||||
output: {
|
||||
codes: answerInput.key,
|
||||
speech: this.setAnswerData(answerInput.key, answerInput.data),
|
||||
speech: this.setAnswerData(answerInput.key, answerInput.data) ?? '',
|
||||
core: answerInput.core,
|
||||
options: this.getSRCConfig('options')
|
||||
}
|
||||
|
@ -1,18 +1,23 @@
|
||||
{
|
||||
"extends": "../../tsconfig.json",
|
||||
"compilerOptions": {
|
||||
"rootDir": "./src",
|
||||
"outDir": "./dist/bin",
|
||||
"baseUrl": ".",
|
||||
"paths": {
|
||||
"@bridge/*": ["./src/*"]
|
||||
}
|
||||
"@@/*": ["../../*"],
|
||||
"@/*": ["../../server/src/*"],
|
||||
"@server/schemas/*": ["../../server/src/schemas/*"],
|
||||
"@bridge/*": ["./src/*"],
|
||||
"@sdk/*": ["./src/sdk/*"]
|
||||
},
|
||||
"exactOptionalPropertyTypes": false,
|
||||
"declaration": true
|
||||
},
|
||||
"ts-node": {
|
||||
"swc": true,
|
||||
"require": ["tsconfig-paths/register"],
|
||||
"files": true
|
||||
},
|
||||
"include": ["src/**/*"],
|
||||
"include": ["src/**/*", "../../server/src/schemas/**/*"],
|
||||
"exclude": ["node_modules", "dist"]
|
||||
}
|
||||
|
@ -141,6 +141,9 @@ BUILD_TARGETS.set('tcp-server', {
|
||||
const distMainFilePath = path.join(
|
||||
NODEJS_BRIDGE_DIST_PATH,
|
||||
'bin',
|
||||
'bridges',
|
||||
'nodejs',
|
||||
'src',
|
||||
'main.js'
|
||||
)
|
||||
const distRenamedMainFilePath = path.join(
|
||||
|
@ -1,7 +1,8 @@
|
||||
import { leon } from '@sdk/leon'
|
||||
import type { ActionFunction } from '@sdk/leon'
|
||||
import { Button } from '@sdk/aurora/button'
|
||||
|
||||
export async function run(): Promise<void> {
|
||||
export const run: ActionFunction = async () => {
|
||||
await leon.answer({ key: 'default' })
|
||||
|
||||
await leon.answer({
|
||||
|
Loading…
Reference in New Issue
Block a user