Skip to content

Commit 63cdefe

Browse files
committed
Resolving issues with loading dotprompt files
- Adding plugin to samples which use prompt files - Checking existence of prompt folder before reading dir - Fixing bug in registry key
1 parent b0f02de commit 63cdefe

File tree

8 files changed

+53
-26
lines changed

8 files changed

+53
-26
lines changed

js/plugins/dotprompt/src/registry.ts

Lines changed: 23 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ export function registryDefinitionKey(name: string, variant?: string) {
2626
}
2727

2828
export function registryLookupKey(name: string, variant?: string) {
29-
return `prompt/${registryDefinitionKey(name, variant)}`;
29+
return `/prompt/${registryDefinitionKey(name, variant)}`;
3030
}
3131

3232
export async function lookupPrompt(
@@ -71,25 +71,29 @@ export async function loadPromptFolder(
7171
): Promise<void> {
7272
const promptsPath = resolve(dir);
7373
return new Promise<void>((resolve, reject) => {
74-
readdir(
75-
promptsPath,
76-
{
77-
withFileTypes: true,
78-
recursive: false,
79-
},
80-
(err, dirEnts) => {
81-
if (err) {
82-
reject(err);
83-
} else {
84-
dirEnts.forEach(async (dirEnt) => {
85-
if (dirEnt.isFile() && dirEnt.name.endsWith('.prompt')) {
86-
loadPrompt(dirEnt.path, dirEnt.name);
87-
}
88-
});
89-
resolve();
74+
if (existsSync(promptsPath)) {
75+
readdir(
76+
promptsPath,
77+
{
78+
withFileTypes: true,
79+
recursive: false,
80+
},
81+
(err, dirEnts) => {
82+
if (err) {
83+
reject(err);
84+
} else {
85+
dirEnts.forEach(async (dirEnt) => {
86+
if (dirEnt.isFile() && dirEnt.name.endsWith('.prompt')) {
87+
loadPrompt(dirEnt.path, dirEnt.name);
88+
}
89+
});
90+
resolve();
91+
}
9092
}
91-
}
92-
);
93+
);
94+
} else {
95+
resolve();
96+
}
9397
});
9498
}
9599

js/plugins/dotprompt/tests/prompt_test.ts

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,21 @@ import assert from 'node:assert';
1818
import { describe, it } from 'node:test';
1919

2020
import { defineModel } from '@genkit-ai/ai/model';
21-
import z from 'zod';
22-
2321
import { toJsonSchema, ValidationError } from '@genkit-ai/core/schema';
22+
import z from 'zod';
23+
import { registerPluginProvider } from '../../../core/src/registry.js';
2424
import { defineDotprompt, Dotprompt, prompt } from '../src/index.js';
2525
import { PromptMetadata } from '../src/metadata.js';
2626

27+
function registerDotprompt() {
28+
registerPluginProvider('dotprompt', {
29+
name: 'dotprompt',
30+
async initializer() {
31+
return {};
32+
},
33+
});
34+
}
35+
2736
const echo = defineModel(
2837
{ name: 'echo', supports: { tools: true } },
2938
async (input) => ({
@@ -62,6 +71,7 @@ describe('Prompt', () => {
6271
});
6372

6473
it('rejects input not matching the schema', async () => {
74+
registerDotprompt();
6575
const invalidSchemaPrompt = defineDotprompt(
6676
{
6777
name: 'invalidInput',
@@ -90,6 +100,7 @@ describe('Prompt', () => {
90100
});
91101

92102
it('rejects input not matching the schema', async () => {
103+
registerDotprompt();
93104
const invalidSchemaPrompt = defineDotprompt(
94105
{
95106
name: 'invalidInput',
@@ -176,6 +187,7 @@ output:
176187

177188
describe('definePrompt', () => {
178189
it('registers a prompt and its variant', async () => {
190+
registerDotprompt();
179191
defineDotprompt(
180192
{
181193
name: 'promptName',

js/samples/byo-evaluator/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
import { EvaluatorAction } from '@genkit-ai/ai';
1717
import { ModelReference } from '@genkit-ai/ai/model';
1818
import { configureGenkit, genkitPlugin, PluginProvider } from '@genkit-ai/core';
19+
import { dotprompt } from '@genkit-ai/dotprompt';
1920
import { firebase } from '@genkit-ai/firebase';
2021
import { geminiPro, googleAI } from '@genkit-ai/googleai';
2122
import * as z from 'zod';
@@ -42,6 +43,7 @@ import {
4243

4344
configureGenkit({
4445
plugins: [
46+
dotprompt(),
4547
firebase(),
4648
googleAI({ apiVersion: ['v1', 'v1beta'] }),
4749
byoEval({

js/samples/cat-eval/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import { configureGenkit } from '@genkit-ai/core';
1818
import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore';
19+
import { dotprompt } from '@genkit-ai/dotprompt';
1920
import { genkitEval, GenkitMetric } from '@genkit-ai/evaluator';
2021
import { firebase } from '@genkit-ai/firebase';
2122
import { geminiPro, googleAI } from '@genkit-ai/googleai';
@@ -46,6 +47,7 @@ export const PERMISSIVE_SAFETY_SETTINGS: any = {
4647

4748
configureGenkit({
4849
plugins: [
50+
dotprompt(),
4951
firebase(),
5052
googleAI(),
5153
genkitEval({

js/samples/coffee-shop/src/index.ts

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,14 +15,18 @@
1515
*/
1616

1717
import { configureGenkit } from '@genkit-ai/core';
18-
import { defineDotprompt } from '@genkit-ai/dotprompt';
18+
import { defineDotprompt, dotprompt } from '@genkit-ai/dotprompt';
1919
import { firebase } from '@genkit-ai/firebase';
2020
import { defineFlow, runFlow } from '@genkit-ai/flow';
2121
import googleAI, { geminiPro } from '@genkit-ai/googleai';
2222
import * as z from 'zod';
2323

2424
configureGenkit({
25-
plugins: [googleAI({ apiVersion: ['v1', 'v1beta'] }), firebase()],
25+
plugins: [
26+
googleAI({ apiVersion: ['v1', 'v1beta'] }),
27+
firebase(),
28+
dotprompt(),
29+
],
2630
enableTracingAndMetrics: true,
2731
flowStateStore: 'firebase',
2832
logLevel: 'debug',

js/samples/menu-example/basic/src/index.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,13 @@
1818
// both.
1919
import { generate } from '@genkit-ai/ai';
2020
import { configureGenkit } from '@genkit-ai/core';
21+
import { dotprompt } from '@genkit-ai/dotprompt';
2122
import { defineFlow, startFlowsServer } from '@genkit-ai/flow';
2223
import { geminiPro, googleAI } from '@genkit-ai/googleai';
2324
import * as z from 'zod';
2425

2526
configureGenkit({
26-
plugins: [googleAI()],
27+
plugins: [googleAI(), dotprompt()],
2728
logLevel: 'debug',
2829
enableTracingAndMetrics: true,
2930
});

js/samples/prompt-file/src/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,13 +15,13 @@
1515
*/
1616

1717
import { configureGenkit } from '@genkit-ai/core';
18-
import { prompt } from '@genkit-ai/dotprompt';
18+
import { dotprompt, prompt } from '@genkit-ai/dotprompt';
1919
import { defineFlow } from '@genkit-ai/flow';
2020
import { googleAI } from '@genkit-ai/googleai';
2121
import * as z from 'zod';
2222

2323
configureGenkit({
24-
plugins: [googleAI()],
24+
plugins: [googleAI(), dotprompt()],
2525
enableTracingAndMetrics: true,
2626
logLevel: 'debug',
2727
});

js/samples/rag/src/index.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616

1717
import { configureGenkit } from '@genkit-ai/core';
1818
import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore';
19+
import { dotprompt } from '@genkit-ai/dotprompt';
1920
import { genkitEval, GenkitMetric } from '@genkit-ai/evaluator';
2021
import { firebase } from '@genkit-ai/firebase';
2122
import { googleAI } from '@genkit-ai/googleai';
@@ -31,6 +32,7 @@ import { pinecone } from 'genkitx-pinecone';
3132

3233
export default configureGenkit({
3334
plugins: [
35+
dotprompt(),
3436
firebase(),
3537
googleAI({ apiVersion: ['v1', 'v1beta'] }),
3638
genkitEval({

0 commit comments

Comments
 (0)