Skip to content

Commit

Permalink
chore(nlu-cli): arg --version prints independant version for nlu and …
Browse files Browse the repository at this point in the history
…lang server (#115)

* chore(nlu-cli): arg --version prints independant version for nlu and lang server

* added a small warning in release script

* fix prettier check

* fix eslint
  • Loading branch information
franklevasseur authored Oct 20, 2021
1 parent 98c84ef commit 677f1fd
Show file tree
Hide file tree
Showing 15 changed files with 258 additions and 160 deletions.
2 changes: 1 addition & 1 deletion packages/lang-server/package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@botpress/lang-server",
"version": "0.1.4",
"version": "1.1.0",
"description": "Botpress Language Server",
"main": "./dist/index.js",
"author": "Botpress, Inc.",
Expand Down
146 changes: 145 additions & 1 deletion packages/lang-server/src/index.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,146 @@
export { default as run } from './run'
import { centerText, LoggerLevel, Logger, makeLogger } from '@botpress/logger'
import { LanguageService, Logger as EngineLogger } from '@botpress/nlu-engine'
import chalk from 'chalk'
import _ from 'lodash'
import path from 'path'

import API, { APIOptions } from './api'
import { getAppDataPath } from './app-data'
import { requireJSON } from './require-json'
import DownloadManager from './service/download-manager'

const packageJsonPath = path.resolve(__dirname, '../package.json')
const packageJson = requireJSON<{ version: string }>(packageJsonPath)
if (!packageJson) {
throw new Error('Could not find package.json at the root of lang-server.')
}

const { version: pkgVersion } = packageJson

export { default as download } from './download'
export const version = pkgVersion

export interface ArgV {
port: number
host: string
limit: number
limitWindow: string
langDir?: string
authToken?: string
adminToken?: string
metadataLocation: string
offline: boolean
dim: number
domain: string
verbose: number
logFilter: string[] | undefined
}

const wrapLogger = (logger: Logger): EngineLogger => {
return {
debug: (msg: string) => logger.debug(msg),
info: (msg: string) => logger.info(msg),
warning: (msg: string, err?: Error) => (err ? logger.attachError(err).warn(msg) : logger.warn(msg)),
error: (msg: string, err?: Error) => (err ? logger.attachError(err).error(msg) : logger.error(msg)),
sub: (namespace: string) => wrapLogger(logger.sub(namespace))
}
}

export const run = async (options: ArgV) => {
const baseLogger = makeLogger({
level: Number(options.verbose) !== NaN ? Number(options.verbose) : LoggerLevel.Info,
filters: options.logFilter,
prefix: 'LANG'
})

const appDataPath = getAppDataPath()
options.langDir = options.langDir || path.join(appDataPath, 'embeddings')

const launcherLogger = baseLogger.sub('Launcher')
// Launcher always display
launcherLogger.configure({
level: LoggerLevel.Info,
filters: undefined
})

launcherLogger.debug('Language Server Options %o', options)

const languageServiceLogger = baseLogger.sub('lang').sub('service')

const langService = new LanguageService(
options.dim,
options.domain,
options.langDir,
wrapLogger(languageServiceLogger)
)
const downloadManager = new DownloadManager(
options.dim,
options.domain,
options.langDir,
options.metadataLocation,
baseLogger
)

const apiOptions: APIOptions = {
version,
host: options.host,
port: options.port,
authToken: options.authToken,
limit: options.limit,
limitWindow: options.limitWindow,
adminToken: options.adminToken || ''
}

launcherLogger.info(chalk`========================================
{bold ${centerText('Botpress Language Server', 40, 9)}}
{dim ${centerText(`Version ${version}`, 40, 9)}}
${_.repeat(' ', 9)}========================================`)

if (options.authToken?.length) {
launcherLogger.info(`authToken: ${chalk.greenBright('enabled')} (only users with this token can query your server)`)
} else {
launcherLogger.info(`authToken: ${chalk.redBright('disabled')} (anyone can query your language server)`)
}

if (options.adminToken?.length) {
launcherLogger.info(
`adminToken: ${chalk.greenBright('enabled')} (only users using this token can manage the server)`
)
} else {
launcherLogger.info(`adminToken: ${chalk.redBright('disabled')} (anyone can add, remove or change languages)`)
}

if (options.limit) {
launcherLogger.info(
`limit: ${chalk.greenBright('enabled')} allowing ${options.limit} requests/IP address in a ${
options.limitWindow
} timeframe `
)
} else {
launcherLogger.info(`limit: ${chalk.redBright('disabled')} (no protection - anyone can query without limitation)`)
}

if (options.offline) {
launcherLogger.info(
`mode: ${chalk.redBright(
'offline'
)} (languages need to be downloaded manually from a machine with Internet access)`
)
} else {
launcherLogger.info(
`Mode: ${chalk.greenBright('online')} (languages will be downloaded from ${options.metadataLocation})`
)
}

launcherLogger.info(`Serving ${options.dim} language dimensions from ${options.langDir}`)

if (options.offline) {
await Promise.all([API(apiOptions, baseLogger, langService), langService.initialize()])
} else {
await Promise.all([
API(apiOptions, baseLogger, langService, downloadManager),
downloadManager.initialize(),
langService.initialize()
])
}
}
6 changes: 6 additions & 0 deletions packages/lang-server/src/require-json.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
export const requireJSON = <T>(filePath: string): T | undefined => {
try {
const fileContent = require(filePath)
return fileContent
} catch (err) {}
}
135 changes: 0 additions & 135 deletions packages/lang-server/src/run.ts

This file was deleted.

2 changes: 2 additions & 0 deletions packages/lang-server/src/typings.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,3 +21,5 @@ export const download: (argv: {
domain: string
metadataLocation: string
}) => Promise<void>

export const version: string
5 changes: 4 additions & 1 deletion packages/logger/src/config.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@ import { ConsoleFormatter } from './formatters/console'
import { ConsoleTransport } from './transports/console'
import { LoggerConfig } from './typings'

const LOG_PREFIX = 'NLU'

export enum LoggerLevel {
Critical = 0,
Error = 1,
Expand All @@ -25,5 +27,6 @@ export const defaultConfig: LoggerConfig = {
formatter: new ConsoleFormatter({ indent: !!process.env.INDENT_LOGS }),
transports: [new ConsoleTransport()],
indent: false,
filters: undefined // show all logs
filters: undefined, // show all logs
prefix: LOG_PREFIX
}
5 changes: 4 additions & 1 deletion packages/logger/src/formatters/console.ts
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,10 @@ export class ConsoleFormatter implements LogEntryFormatter {
const time = moment().format(config.timeFormat)
const serializedMetadata = entry.metadata ? _serializeArgs(entry.metadata) : ''

const displayName = this._opts.indent ? entry.namespace.substr(0, 15).padEnd(15, ' ') : `[NLU] ${entry.namespace}`
const prefix = config.prefix ? `[${config.prefix}] ` : ''
const displayName = this._opts.indent
? entry.namespace.substr(0, 15).padEnd(15, ' ')
: `${prefix}${entry.namespace}`
// eslint-disable-next-line prefer-template
const newLineIndent = chalk.dim(' '.repeat(`${config.timeFormat} ${displayName}`.length)) + ' '
let indentedMessage =
Expand Down
1 change: 1 addition & 0 deletions packages/logger/src/typings.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -42,6 +42,7 @@ export interface LoggerConfig {
colors: { [level: number]: string }
indent: boolean
filters: string[] | undefined // if undefined, all logs are displayed
prefix?: string
}

export const centerText: (text: string, width: number, indent: number = 0) => string
Expand Down
6 changes: 4 additions & 2 deletions packages/nlu-cli/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,11 +16,14 @@
"outputPath": "../dist"
},
"dependencies": {
"@botpress/lang-server": "*",
"@botpress/logger": "*",
"@botpress/nlu-server": "*",
"@botpress/lang-server": "*"
"yargs": "^17.2.1"
},
"devDependencies": {
"@types/node": "^12.13.0",
"@types/yargs": "^17.0.4",
"@typescript-eslint/eslint-plugin": "^4.22.0",
"@typescript-eslint/parser": "^4.22.0",
"cross-env": "^5.2.0",
Expand All @@ -33,7 +36,6 @@
"prettier": "^2.2.1",
"ts-jest": "^26.5.5",
"ts-node-dev": "^1.1.6",
"@types/node": "^12.13.0",
"typescript": "^3.9.10"
},
"scripts": {
Expand Down
Loading

0 comments on commit 677f1fd

Please sign in to comment.