Skip to content

Commit

Permalink
Resolving issues with loading dotprompt files (#92)
Browse files Browse the repository at this point in the history
- Adding plugin to samples which use prompt files
- Checking existence of prompt folder before reading dir
- Fixing bug in registry key
  • Loading branch information
maxl0rd authored May 9, 2024
1 parent 59f9dce commit 6946d0b
Show file tree
Hide file tree
Showing 8 changed files with 53 additions and 26 deletions.
42 changes: 23 additions & 19 deletions js/plugins/dotprompt/src/registry.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ export function registryDefinitionKey(name: string, variant?: string) {
}

export function registryLookupKey(name: string, variant?: string) {
return `prompt/${registryDefinitionKey(name, variant)}`;
return `/prompt/${registryDefinitionKey(name, variant)}`;
}

export async function lookupPrompt(
Expand Down Expand Up @@ -71,25 +71,29 @@ export async function loadPromptFolder(
): Promise<void> {
const promptsPath = resolve(dir);
return new Promise<void>((resolve, reject) => {
readdir(
promptsPath,
{
withFileTypes: true,
recursive: false,
},
(err, dirEnts) => {
if (err) {
reject(err);
} else {
dirEnts.forEach(async (dirEnt) => {
if (dirEnt.isFile() && dirEnt.name.endsWith('.prompt')) {
loadPrompt(dirEnt.path, dirEnt.name);
}
});
resolve();
if (existsSync(promptsPath)) {
readdir(
promptsPath,
{
withFileTypes: true,
recursive: false,
},
(err, dirEnts) => {
if (err) {
reject(err);
} else {
dirEnts.forEach(async (dirEnt) => {
if (dirEnt.isFile() && dirEnt.name.endsWith('.prompt')) {
loadPrompt(dirEnt.path, dirEnt.name);
}
});
resolve();
}
}
}
);
);
} else {
resolve();
}
});
}

Expand Down
16 changes: 14 additions & 2 deletions js/plugins/dotprompt/tests/prompt_test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,21 @@ import assert from 'node:assert';
import { describe, it } from 'node:test';

import { defineModel } from '@genkit-ai/ai/model';
import z from 'zod';

import { toJsonSchema, ValidationError } from '@genkit-ai/core/schema';
import z from 'zod';
import { registerPluginProvider } from '../../../core/src/registry.js';
import { defineDotprompt, Dotprompt, prompt } from '../src/index.js';
import { PromptMetadata } from '../src/metadata.js';

function registerDotprompt() {
registerPluginProvider('dotprompt', {
name: 'dotprompt',
async initializer() {
return {};
},
});
}

const echo = defineModel(
{ name: 'echo', supports: { tools: true } },
async (input) => ({
Expand Down Expand Up @@ -62,6 +71,7 @@ describe('Prompt', () => {
});

it('rejects input not matching the schema', async () => {
registerDotprompt();
const invalidSchemaPrompt = defineDotprompt(
{
name: 'invalidInput',
Expand Down Expand Up @@ -90,6 +100,7 @@ describe('Prompt', () => {
});

it('rejects input not matching the schema', async () => {
registerDotprompt();
const invalidSchemaPrompt = defineDotprompt(
{
name: 'invalidInput',
Expand Down Expand Up @@ -176,6 +187,7 @@ output:

describe('definePrompt', () => {
it('registers a prompt and its variant', async () => {
registerDotprompt();
defineDotprompt(
{
name: 'promptName',
Expand Down
2 changes: 2 additions & 0 deletions js/samples/byo-evaluator/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import { EvaluatorAction } from '@genkit-ai/ai';
import { ModelReference } from '@genkit-ai/ai/model';
import { configureGenkit, genkitPlugin, PluginProvider } from '@genkit-ai/core';
import { dotprompt } from '@genkit-ai/dotprompt';
import { firebase } from '@genkit-ai/firebase';
import { geminiPro, googleAI } from '@genkit-ai/googleai';
import * as z from 'zod';
Expand All @@ -42,6 +43,7 @@ import {

configureGenkit({
plugins: [
dotprompt(),
firebase(),
googleAI({ apiVersion: ['v1', 'v1beta'] }),
byoEval({
Expand Down
2 changes: 2 additions & 0 deletions js/samples/cat-eval/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import { configureGenkit } from '@genkit-ai/core';
import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore';
import { dotprompt } from '@genkit-ai/dotprompt';
import { genkitEval, GenkitMetric } from '@genkit-ai/evaluator';
import { firebase } from '@genkit-ai/firebase';
import { geminiPro, googleAI } from '@genkit-ai/googleai';
Expand Down Expand Up @@ -46,6 +47,7 @@ export const PERMISSIVE_SAFETY_SETTINGS: any = {

configureGenkit({
plugins: [
dotprompt(),
firebase(),
googleAI(),
genkitEval({
Expand Down
8 changes: 6 additions & 2 deletions js/samples/coffee-shop/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,18 @@
*/

import { configureGenkit } from '@genkit-ai/core';
import { defineDotprompt } from '@genkit-ai/dotprompt';
import { defineDotprompt, dotprompt } from '@genkit-ai/dotprompt';
import { firebase } from '@genkit-ai/firebase';
import { defineFlow, runFlow } from '@genkit-ai/flow';
import googleAI, { geminiPro } from '@genkit-ai/googleai';
import * as z from 'zod';

configureGenkit({
plugins: [googleAI({ apiVersion: ['v1', 'v1beta'] }), firebase()],
plugins: [
googleAI({ apiVersion: ['v1', 'v1beta'] }),
firebase(),
dotprompt(),
],
enableTracingAndMetrics: true,
flowStateStore: 'firebase',
logLevel: 'debug',
Expand Down
3 changes: 2 additions & 1 deletion js/samples/menu-example/basic/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,13 @@
// both.
import { generate } from '@genkit-ai/ai';
import { configureGenkit } from '@genkit-ai/core';
import { dotprompt } from '@genkit-ai/dotprompt';
import { defineFlow, startFlowsServer } from '@genkit-ai/flow';
import { geminiPro, googleAI } from '@genkit-ai/googleai';
import * as z from 'zod';

configureGenkit({
plugins: [googleAI()],
plugins: [googleAI(), dotprompt()],
logLevel: 'debug',
enableTracingAndMetrics: true,
});
Expand Down
4 changes: 2 additions & 2 deletions js/samples/prompt-file/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,13 @@
*/

import { configureGenkit } from '@genkit-ai/core';
import { prompt } from '@genkit-ai/dotprompt';
import { dotprompt, prompt } from '@genkit-ai/dotprompt';
import { defineFlow } from '@genkit-ai/flow';
import { googleAI } from '@genkit-ai/googleai';
import * as z from 'zod';

configureGenkit({
plugins: [googleAI()],
plugins: [googleAI(), dotprompt()],
enableTracingAndMetrics: true,
logLevel: 'debug',
});
Expand Down
2 changes: 2 additions & 0 deletions js/samples/rag/src/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@

import { configureGenkit } from '@genkit-ai/core';
import { devLocalVectorstore } from '@genkit-ai/dev-local-vectorstore';
import { dotprompt } from '@genkit-ai/dotprompt';
import { genkitEval, GenkitMetric } from '@genkit-ai/evaluator';
import { firebase } from '@genkit-ai/firebase';
import { googleAI } from '@genkit-ai/googleai';
Expand All @@ -31,6 +32,7 @@ import { pinecone } from 'genkitx-pinecone';

export default configureGenkit({
plugins: [
dotprompt(),
firebase(),
googleAI({ apiVersion: ['v1', 'v1beta'] }),
genkitEval({
Expand Down

0 comments on commit 6946d0b

Please sign in to comment.