From a75d0366b7c1df159ca8b435ec8bc56aa1df4a93 Mon Sep 17 00:00:00 2001 From: Samuel Bushi Date: Fri, 14 Feb 2025 18:54:11 +0000 Subject: [PATCH 1/6] WIP, works but Dev UI does not load --- genkit-tools/cli/src/commands/eval-flow.ts | 18 +++++-- genkit-tools/cli/src/commands/eval-run.ts | 18 +++++-- genkit-tools/cli/src/commands/start.ts | 3 +- genkit-tools/cli/src/commands/ui-start.ts | 20 +------ genkit-tools/cli/src/commands/ui-stop.ts | 3 +- genkit-tools/common/src/utils/utils.ts | 62 ++++++++++++++++++++++ 6 files changed, 98 insertions(+), 26 deletions(-) diff --git a/genkit-tools/cli/src/commands/eval-flow.ts b/genkit-tools/cli/src/commands/eval-flow.ts index 10ea8fcc2f..8fe08467cc 100644 --- a/genkit-tools/cli/src/commands/eval-flow.ts +++ b/genkit-tools/cli/src/commands/eval-flow.ts @@ -31,10 +31,12 @@ import { } from '@genkit-ai/tools-common/eval'; import { confirmLlmUse, + getDevUiUrl, hasAction, loadInferenceDatasetFile, logger, } from '@genkit-ai/tools-common/utils'; +import * as clc from 'colorette'; import { Command } from 'commander'; import { runWithManager } from '../utils/manager-utils'; @@ -167,9 +169,19 @@ export const evalFlow = new Command('eval:flow') await exportFn(evalRun, options.output); } - console.log( - `Succesfully ran evaluation, with evalId: ${evalRun.key.evalRunId}` - ); + const devUiUrl = await getDevUiUrl(); + console.log('---', devUiUrl); + if (devUiUrl) { + logger.info( + clc.green( + `\n View the evaluation results at: ${devUiUrl}/evaluations/${evalRun.key.evalRunId}` + ) + ); + } else { + logger.info( + `Succesfully ran evaluation, with evalId: ${evalRun.key.evalRunId}` + ); + } }); } ); diff --git a/genkit-tools/cli/src/commands/eval-run.ts b/genkit-tools/cli/src/commands/eval-run.ts index f6e8384740..1a716e9aad 100644 --- a/genkit-tools/cli/src/commands/eval-run.ts +++ b/genkit-tools/cli/src/commands/eval-run.ts @@ -24,9 +24,11 @@ import { } from '@genkit-ai/tools-common/eval'; import { confirmLlmUse, + getDevUiUrl, loadEvaluationDatasetFile, logger, } from '@genkit-ai/tools-common/utils'; +import * as clc from 'colorette'; import { Command } from 'commander'; import { runWithManager } from '../utils/manager-utils'; @@ -113,8 +115,18 @@ export const evalRun = new Command('eval:run') await exportFn(evalRun, options.output); } - console.log( - `Succesfully ran evaluation, with evalId: ${evalRun.key.evalRunId}` - ); + const devUiUrl = await getDevUiUrl(); + console.log('---', devUiUrl); + if (devUiUrl) { + logger.info( + clc.green( + `\n View the evaluation results at: ${devUiUrl}/evaluations/${evalRun.key.evalRunId}` + ) + ); + } else { + logger.info( + `Succesfully ran evaluation, with evalId: ${evalRun.key.evalRunId}` + ); + } }); }); diff --git a/genkit-tools/cli/src/commands/start.ts b/genkit-tools/cli/src/commands/start.ts index 43a3be8fb6..58866ac567 100644 --- a/genkit-tools/cli/src/commands/start.ts +++ b/genkit-tools/cli/src/commands/start.ts @@ -16,7 +16,7 @@ import { RuntimeManager } from '@genkit-ai/tools-common/manager'; import { startServer } from '@genkit-ai/tools-common/server'; -import { logger } from '@genkit-ai/tools-common/utils'; +import { logger, setDevUiUrl } from '@genkit-ai/tools-common/utils'; import { spawn } from 'child_process'; import { Command } from 'commander'; import getPort, { makeRange } from 'get-port'; @@ -56,6 +56,7 @@ export const start = new Command('start') if (options.open) { open(`http://localhost:${port}`); } + await setDevUiUrl(`http://localhost:${port}`); } await managerPromise.then((manager: RuntimeManager) => { const telemetryServerUrl = manager?.telemetryServerUrl; diff --git a/genkit-tools/cli/src/commands/ui-start.ts b/genkit-tools/cli/src/commands/ui-start.ts index 98fbbc75e6..c21f190700 100644 --- a/genkit-tools/cli/src/commands/ui-start.ts +++ b/genkit-tools/cli/src/commands/ui-start.ts @@ -15,7 +15,9 @@ */ import { + DevToolsInfo, findServersDir, + isValidDevToolsInfo, logger, waitUntilHealthy, } from '@genkit-ai/tools-common/utils'; @@ -33,24 +35,6 @@ interface StartOptions { open?: boolean; } -export interface DevToolsInfo { - /** URL of the dev tools server. */ - url: string; - /** Timestamp of when the dev tools server was started. */ - timestamp: string; -} - -/** - * Checks if the provided data is a valid dev tools server state file. - */ -export function isValidDevToolsInfo(data: any): data is DevToolsInfo { - return ( - typeof data === 'object' && - typeof data.url === 'string' && - typeof data.timestamp === 'string' - ); -} - /** Command to start the Genkit Developer UI. */ export const uiStart = new Command('ui:start') .description( diff --git a/genkit-tools/cli/src/commands/ui-stop.ts b/genkit-tools/cli/src/commands/ui-stop.ts index 5f6710c21f..9ab74d87e5 100644 --- a/genkit-tools/cli/src/commands/ui-stop.ts +++ b/genkit-tools/cli/src/commands/ui-stop.ts @@ -15,7 +15,9 @@ */ import { + DevToolsInfo, findServersDir, + isValidDevToolsInfo, logger, waitUntilUnresponsive, } from '@genkit-ai/tools-common/utils'; @@ -24,7 +26,6 @@ import * as clc from 'colorette'; import { Command } from 'commander'; import fs from 'fs/promises'; import path from 'path'; -import { DevToolsInfo, isValidDevToolsInfo } from './ui-start'; /** Command to stop the Genkit Developer UI. */ export const uiStop = new Command('ui:stop') diff --git a/genkit-tools/common/src/utils/utils.ts b/genkit-tools/common/src/utils/utils.ts index a117714f18..7b10aed1d6 100644 --- a/genkit-tools/common/src/utils/utils.ts +++ b/genkit-tools/common/src/utils/utils.ts @@ -17,6 +17,14 @@ import * as fs from 'fs/promises'; import * as path from 'path'; import { Runtime } from '../manager/types'; +import { logger } from './logger'; + +export interface DevToolsInfo { + /** URL of the dev tools server. */ + url: string; + /** Timestamp of when the dev tools server was started. */ + timestamp: string; +} /** * Finds the project root by looking for a `package.json` file. @@ -215,3 +223,57 @@ export async function retriable( attempt++; } } + +/** + * Checks if the provided data is a valid dev tools server state file. + */ +export function isValidDevToolsInfo(data: any): data is DevToolsInfo { + return ( + typeof data === 'object' && + typeof data.url === 'string' && + typeof data.timestamp === 'string' + ); +} + +/** + * Fetches the Genkit Dev UI URL if available + */ +export async function getDevUiUrl( + projectRoot?: string +): Promise { + const serversDir = await findServersDir(projectRoot); + const toolsJsonPath = path.join(serversDir, 'tools.json'); + try { + const toolsJsonContent = await fs.readFile(toolsJsonPath, 'utf-8'); + const serverInfo = JSON.parse(toolsJsonContent) as DevToolsInfo; + if (isValidDevToolsInfo(serverInfo)) { + return (await checkServerHealth(serverInfo.url)) + ? serverInfo.url + : undefined; + } + } catch (error) { + logger.info('Error reading tools config', error); + return undefined; + } +} + +/** + * Sets the Genkit Dev UI URL + */ +export async function setDevUiUrl( + url: string, + projectRoot?: string +): Promise { + const serversDir = await findServersDir(projectRoot); + const toolsJsonPath = path.join(serversDir, 'tools.json'); + try { + const serverInfo = { + url, + timestamp: new Date().toISOString(), + } as DevToolsInfo; + await fs.mkdir(serversDir, { recursive: true }); + await fs.writeFile(toolsJsonPath, JSON.stringify(serverInfo, null, 2)); + } catch (error) { + logger.info('Error writing tools config', error); + } +} From 2f9eecd12ff7d73e81078a733ce00579e618e3dd Mon Sep 17 00:00:00 2001 From: Samuel Bushi Date: Fri, 14 Feb 2025 22:17:48 +0000 Subject: [PATCH 2/6] resolve evals start script --- genkit-tools/cli/src/commands/eval-flow.ts | 1 - genkit-tools/cli/src/commands/eval-run.ts | 3 +-- js/testapps/evals/package.json | 2 +- 3 files changed, 2 insertions(+), 4 deletions(-) diff --git a/genkit-tools/cli/src/commands/eval-flow.ts b/genkit-tools/cli/src/commands/eval-flow.ts index 8fe08467cc..7df4f1eb25 100644 --- a/genkit-tools/cli/src/commands/eval-flow.ts +++ b/genkit-tools/cli/src/commands/eval-flow.ts @@ -170,7 +170,6 @@ export const evalFlow = new Command('eval:flow') } const devUiUrl = await getDevUiUrl(); - console.log('---', devUiUrl); if (devUiUrl) { logger.info( clc.green( diff --git a/genkit-tools/cli/src/commands/eval-run.ts b/genkit-tools/cli/src/commands/eval-run.ts index 1a716e9aad..7250434f5f 100644 --- a/genkit-tools/cli/src/commands/eval-run.ts +++ b/genkit-tools/cli/src/commands/eval-run.ts @@ -116,11 +116,10 @@ export const evalRun = new Command('eval:run') } const devUiUrl = await getDevUiUrl(); - console.log('---', devUiUrl); if (devUiUrl) { logger.info( clc.green( - `\n View the evaluation results at: ${devUiUrl}/evaluations/${evalRun.key.evalRunId}` + `\nView the evaluation results at: ${devUiUrl}/evaluations/${evalRun.key.evalRunId}` ) ); } else { diff --git a/js/testapps/evals/package.json b/js/testapps/evals/package.json index 2a66e1f191..4ce3927ecc 100644 --- a/js/testapps/evals/package.json +++ b/js/testapps/evals/package.json @@ -11,7 +11,7 @@ "build:watch": "tsc --watch", "build-and-run": "pnpm build && node lib/index.js", "dev": "tsx --watch src/index.ts", - "genkit:dev": "genkit start -- tsx --watch src/index.ts" + "genkit:dev": "tsx --watch src/index.ts" }, "keywords": [], "author": "", From 3a42acb2658feec04a44de9bc51e2144ed5ec276 Mon Sep 17 00:00:00 2001 From: Samuel Bushi Date: Tue, 18 Feb 2025 20:49:45 +0000 Subject: [PATCH 3/6] fix URL --- genkit-tools/cli/src/commands/eval-flow.ts | 2 +- genkit-tools/cli/src/commands/eval-run.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/genkit-tools/cli/src/commands/eval-flow.ts b/genkit-tools/cli/src/commands/eval-flow.ts index 7df4f1eb25..372414693f 100644 --- a/genkit-tools/cli/src/commands/eval-flow.ts +++ b/genkit-tools/cli/src/commands/eval-flow.ts @@ -173,7 +173,7 @@ export const evalFlow = new Command('eval:flow') if (devUiUrl) { logger.info( clc.green( - `\n View the evaluation results at: ${devUiUrl}/evaluations/${evalRun.key.evalRunId}` + `\nView the evaluation results at: ${devUiUrl}/evaluate/${evalRun.key.evalRunId}` ) ); } else { diff --git a/genkit-tools/cli/src/commands/eval-run.ts b/genkit-tools/cli/src/commands/eval-run.ts index 7250434f5f..a62c474b44 100644 --- a/genkit-tools/cli/src/commands/eval-run.ts +++ b/genkit-tools/cli/src/commands/eval-run.ts @@ -119,7 +119,7 @@ export const evalRun = new Command('eval:run') if (devUiUrl) { logger.info( clc.green( - `\nView the evaluation results at: ${devUiUrl}/evaluations/${evalRun.key.evalRunId}` + `\nView the evaluation results at: ${devUiUrl}/evaluate/${evalRun.key.evalRunId}` ) ); } else { From 64f3aece7765b458607d093668032bc7a5a2329a Mon Sep 17 00:00:00 2001 From: ssbushi <66321939+ssbushi@users.noreply.github.com> Date: Wed, 19 Feb 2025 11:36:55 -0500 Subject: [PATCH 4/6] Update genkit-tools/common/src/utils/utils.ts Co-authored-by: Pavel Jbanov --- genkit-tools/common/src/utils/utils.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genkit-tools/common/src/utils/utils.ts b/genkit-tools/common/src/utils/utils.ts index 7b10aed1d6..78c25fa1d3 100644 --- a/genkit-tools/common/src/utils/utils.ts +++ b/genkit-tools/common/src/utils/utils.ts @@ -236,7 +236,7 @@ export function isValidDevToolsInfo(data: any): data is DevToolsInfo { } /** - * Fetches the Genkit Dev UI URL if available + * Finds the URL of the currently running Genkit Dev UI instance (if available). */ export async function getDevUiUrl( projectRoot?: string From 36cee7e1f678ff4aafda8a2313655391b618b70f Mon Sep 17 00:00:00 2001 From: Samuel Bushi Date: Mon, 24 Feb 2025 17:12:10 +0000 Subject: [PATCH 5/6] support mulitple dev UI servers --- genkit-tools/cli/src/commands/eval-flow.ts | 7 +- genkit-tools/cli/src/commands/eval-run.ts | 7 +- genkit-tools/cli/src/commands/start.ts | 3 +- genkit-tools/common/src/manager/manager.ts | 85 ++++++++++++++++++++++ genkit-tools/common/src/server/server.ts | 4 +- genkit-tools/common/src/utils/utils.ts | 46 +++++------- js/testapps/evals/package.json | 2 +- 7 files changed, 114 insertions(+), 40 deletions(-) diff --git a/genkit-tools/cli/src/commands/eval-flow.ts b/genkit-tools/cli/src/commands/eval-flow.ts index 372414693f..0fe489b8a8 100644 --- a/genkit-tools/cli/src/commands/eval-flow.ts +++ b/genkit-tools/cli/src/commands/eval-flow.ts @@ -31,7 +31,6 @@ import { } from '@genkit-ai/tools-common/eval'; import { confirmLlmUse, - getDevUiUrl, hasAction, loadInferenceDatasetFile, logger, @@ -169,11 +168,11 @@ export const evalFlow = new Command('eval:flow') await exportFn(evalRun, options.output); } - const devUiUrl = await getDevUiUrl(); - if (devUiUrl) { + const toolsInfo = manager.getMostRecentDevUI(); + if (toolsInfo) { logger.info( clc.green( - `\nView the evaluation results at: ${devUiUrl}/evaluate/${evalRun.key.evalRunId}` + `\nView the evaluation results at: ${toolsInfo.url}/evaluate/${evalRun.key.evalRunId}` ) ); } else { diff --git a/genkit-tools/cli/src/commands/eval-run.ts b/genkit-tools/cli/src/commands/eval-run.ts index a62c474b44..728d6f5e56 100644 --- a/genkit-tools/cli/src/commands/eval-run.ts +++ b/genkit-tools/cli/src/commands/eval-run.ts @@ -24,7 +24,6 @@ import { } from '@genkit-ai/tools-common/eval'; import { confirmLlmUse, - getDevUiUrl, loadEvaluationDatasetFile, logger, } from '@genkit-ai/tools-common/utils'; @@ -115,11 +114,11 @@ export const evalRun = new Command('eval:run') await exportFn(evalRun, options.output); } - const devUiUrl = await getDevUiUrl(); - if (devUiUrl) { + const toolsInfo = manager.getMostRecentDevUI(); + if (toolsInfo) { logger.info( clc.green( - `\nView the evaluation results at: ${devUiUrl}/evaluate/${evalRun.key.evalRunId}` + `\nView the evaluation results at: ${toolsInfo.url}/evaluate/${evalRun.key.evalRunId}` ) ); } else { diff --git a/genkit-tools/cli/src/commands/start.ts b/genkit-tools/cli/src/commands/start.ts index 58866ac567..43a3be8fb6 100644 --- a/genkit-tools/cli/src/commands/start.ts +++ b/genkit-tools/cli/src/commands/start.ts @@ -16,7 +16,7 @@ import { RuntimeManager } from '@genkit-ai/tools-common/manager'; import { startServer } from '@genkit-ai/tools-common/server'; -import { logger, setDevUiUrl } from '@genkit-ai/tools-common/utils'; +import { logger } from '@genkit-ai/tools-common/utils'; import { spawn } from 'child_process'; import { Command } from 'commander'; import getPort, { makeRange } from 'get-port'; @@ -56,7 +56,6 @@ export const start = new Command('start') if (options.open) { open(`http://localhost:${port}`); } - await setDevUiUrl(`http://localhost:${port}`); } await managerPromise.then((manager: RuntimeManager) => { const telemetryServerUrl = manager?.telemetryServerUrl; diff --git a/genkit-tools/common/src/manager/manager.ts b/genkit-tools/common/src/manager/manager.ts index bf466c9149..317875b970 100644 --- a/genkit-tools/common/src/manager/manager.ts +++ b/genkit-tools/common/src/manager/manager.ts @@ -29,9 +29,13 @@ import { GenkitErrorData } from '../types/error'; import { TraceData } from '../types/trace'; import { logger } from '../utils/logger'; import { + DevToolsInfo, checkServerHealth, findRuntimesDir, + findServersDir, + isValidDevToolsInfo, projectNameFromGenkitFilePath, + removeToolsInfoFile, retriable, } from '../utils/utils'; import { @@ -54,6 +58,7 @@ interface RuntimeManagerOptions { export class RuntimeManager { private filenameToRuntimeMap: Record = {}; + private filenameToDevUiMap: Record = {}; private idToFileMap: Record = {}; private eventEmitter = new EventEmitter(); @@ -71,6 +76,7 @@ export class RuntimeManager { options.manageHealth ?? true ); await manager.setupRuntimesWatcher(); + await manager.setupDevUiWatcher(); if (manager.manageHealth) { setInterval( async () => await manager.performHealthChecks(), @@ -112,6 +118,18 @@ export class RuntimeManager { ); } + /** + * Gets the Dev UI that was started most recently. + */ + getMostRecentDevUI(): DevToolsInfo | undefined { + const toolsInfo = Object.values(this.filenameToDevUiMap); + return toolsInfo.length === 0 + ? undefined + : toolsInfo.reduce((a, b) => + new Date(a.timestamp) > new Date(b.timestamp) ? a : b + ); + } + /** * Subscribe to changes to the available runtimes. e.g.) whenever a new * runtime is added or removed. @@ -326,6 +344,73 @@ export class RuntimeManager { } } + /** + * Sets up a watcher for the runtimes directory. + */ + private async setupDevUiWatcher() { + try { + const serversDir = await findServersDir(); + await fs.mkdir(serversDir, { recursive: true }); + const watcher = chokidar.watch(serversDir, { + persistent: true, + ignoreInitial: false, + }); + watcher.on('add', (filePath) => this.handleNewDevUi(filePath)); + if (this.manageHealth) { + watcher.on('unlink', (filePath) => this.handleRemovedDevUi(filePath)); + } + // eagerly check existing Dev UI on first load. + for (const toolsInfo of await fs.readdir(serversDir)) { + await this.handleNewDevUi(path.resolve(serversDir, toolsInfo)); + } + } catch (error) { + logger.error('Failed to set up runtimes watcher:', error); + } + } + + /** + * Handles a new Dev UI file. + */ + private async handleNewDevUi(filePath: string) { + try { + const { content, toolsInfo } = await retriable( + async () => { + const content = await fs.readFile(filePath, 'utf-8'); + const toolsInfo = JSON.parse(content) as DevToolsInfo; + return { content, toolsInfo }; + }, + { maxRetries: 10, delayMs: 500 } + ); + + if (isValidDevToolsInfo(toolsInfo)) { + const fileName = path.basename(filePath); + if (await checkServerHealth(toolsInfo.url)) { + this.filenameToDevUiMap[fileName] = toolsInfo; + } else { + logger.debug('Found an unhealthy tools config file', fileName); + await removeToolsInfoFile(fileName); + } + } else { + logger.error(`Unexpected file in the servers directory: ${content}`); + } + } catch (error) { + logger.info('Error reading tools config', error); + return undefined; + } + } + + /** + * Handles a removed Dev UI file. + */ + private handleRemovedDevUi(filePath: string) { + const fileName = path.basename(filePath); + if (fileName in this.filenameToDevUiMap) { + const toolsInfo = this.filenameToDevUiMap[fileName]; + delete this.filenameToDevUiMap[fileName]; + logger.debug(`Removed Dev UI with url ${toolsInfo.url}.`); + } + } + /** * Handles a new runtime file. */ diff --git a/genkit-tools/common/src/server/server.ts b/genkit-tools/common/src/server/server.ts index 100ca061ea..4b3ecf24ad 100644 --- a/genkit-tools/common/src/server/server.ts +++ b/genkit-tools/common/src/server/server.ts @@ -23,6 +23,7 @@ import os from 'os'; import path from 'path'; import { GenkitToolsError } from '../manager'; import { RuntimeManager } from '../manager/manager'; +import { writeToolsInfoFile } from '../utils'; import { logger } from '../utils/logger'; import { toolsPackage } from '../utils/package'; import { downloadAndExtractUiAssets } from '../utils/ui-assets'; @@ -162,9 +163,10 @@ export function startServer(manager: RuntimeManager, port: number) { }; app.use(errorHandler); - server = app.listen(port, () => { + server = app.listen(port, async () => { const uiUrl = 'http://localhost:' + port; logger.info(`${clc.green(clc.bold('Genkit Developer UI:'))} ${uiUrl}`); + await writeToolsInfoFile(uiUrl); }); return new Promise((resolve) => { diff --git a/genkit-tools/common/src/utils/utils.ts b/genkit-tools/common/src/utils/utils.ts index 78c25fa1d3..c59bdb3e84 100644 --- a/genkit-tools/common/src/utils/utils.ts +++ b/genkit-tools/common/src/utils/utils.ts @@ -236,36 +236,11 @@ export function isValidDevToolsInfo(data: any): data is DevToolsInfo { } /** - * Finds the URL of the currently running Genkit Dev UI instance (if available). + * Writes the toolsInfo file to the project root */ -export async function getDevUiUrl( - projectRoot?: string -): Promise { +export async function writeToolsInfoFile(url: string, projectRoot?: string) { const serversDir = await findServersDir(projectRoot); - const toolsJsonPath = path.join(serversDir, 'tools.json'); - try { - const toolsJsonContent = await fs.readFile(toolsJsonPath, 'utf-8'); - const serverInfo = JSON.parse(toolsJsonContent) as DevToolsInfo; - if (isValidDevToolsInfo(serverInfo)) { - return (await checkServerHealth(serverInfo.url)) - ? serverInfo.url - : undefined; - } - } catch (error) { - logger.info('Error reading tools config', error); - return undefined; - } -} - -/** - * Sets the Genkit Dev UI URL - */ -export async function setDevUiUrl( - url: string, - projectRoot?: string -): Promise { - const serversDir = await findServersDir(projectRoot); - const toolsJsonPath = path.join(serversDir, 'tools.json'); + const toolsJsonPath = path.join(serversDir, `tools-${process.pid}.json`); try { const serverInfo = { url, @@ -273,7 +248,22 @@ export async function setDevUiUrl( } as DevToolsInfo; await fs.mkdir(serversDir, { recursive: true }); await fs.writeFile(toolsJsonPath, JSON.stringify(serverInfo, null, 2)); + logger.debug(`Runtime file written: ${toolsJsonPath}`); } catch (error) { logger.info('Error writing tools config', error); } } + +/** + * Removes the toolsInfo file. + */ +export async function removeToolsInfoFile(fileName: string) { + try { + const serversDir = await findServersDir(); + const filePath = path.join(serversDir, fileName); + await fs.unlink(filePath); + logger.debug(`Removed unhealthy toolsInfo file ${fileName} from manager.`); + } catch (error) { + logger.debug(`Failed to delete toolsInfo file: ${error}`); + } +} diff --git a/js/testapps/evals/package.json b/js/testapps/evals/package.json index 4ce3927ecc..2a66e1f191 100644 --- a/js/testapps/evals/package.json +++ b/js/testapps/evals/package.json @@ -11,7 +11,7 @@ "build:watch": "tsc --watch", "build-and-run": "pnpm build && node lib/index.js", "dev": "tsx --watch src/index.ts", - "genkit:dev": "tsx --watch src/index.ts" + "genkit:dev": "genkit start -- tsx --watch src/index.ts" }, "keywords": [], "author": "", From c7acbb42c7705ca8c8551e9ed29f202abfa100e4 Mon Sep 17 00:00:00 2001 From: Samuel Bushi Date: Mon, 24 Feb 2025 17:20:58 +0000 Subject: [PATCH 6/6] fix comments --- genkit-tools/common/src/manager/manager.ts | 4 ++-- genkit-tools/common/src/utils/utils.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/genkit-tools/common/src/manager/manager.ts b/genkit-tools/common/src/manager/manager.ts index 317875b970..d899ac329a 100644 --- a/genkit-tools/common/src/manager/manager.ts +++ b/genkit-tools/common/src/manager/manager.ts @@ -345,7 +345,7 @@ export class RuntimeManager { } /** - * Sets up a watcher for the runtimes directory. + * Sets up a watcher for the servers directory. */ private async setupDevUiWatcher() { try { @@ -364,7 +364,7 @@ export class RuntimeManager { await this.handleNewDevUi(path.resolve(serversDir, toolsInfo)); } } catch (error) { - logger.error('Failed to set up runtimes watcher:', error); + logger.error('Failed to set up tools server watcher:', error); } } diff --git a/genkit-tools/common/src/utils/utils.ts b/genkit-tools/common/src/utils/utils.ts index c59bdb3e84..faeabed578 100644 --- a/genkit-tools/common/src/utils/utils.ts +++ b/genkit-tools/common/src/utils/utils.ts @@ -248,7 +248,7 @@ export async function writeToolsInfoFile(url: string, projectRoot?: string) { } as DevToolsInfo; await fs.mkdir(serversDir, { recursive: true }); await fs.writeFile(toolsJsonPath, JSON.stringify(serverInfo, null, 2)); - logger.debug(`Runtime file written: ${toolsJsonPath}`); + logger.debug(`Tools Info file written: ${toolsJsonPath}`); } catch (error) { logger.info('Error writing tools config', error); }