Skip to content

Commit 776d6d0

Browse files
committed
fix: reduce the number of new GPTScript clients created
Signed-off-by: tylerslaton <[email protected]>
1 parent 4ca27f8 commit 776d6d0

File tree

6 files changed

+31
-33
lines changed

6 files changed

+31
-33
lines changed

actions/scripts/fetch.tsx

+4-7
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"use server"
22
import { Tool, GPTScript, Block } from '@gptscript-ai/gptscript';
3-
import { SCRIPTS_PATH } from '@/config/env';
3+
import { SCRIPTS_PATH, gpt } from '@/config/env';
44
import fs from 'fs/promises';
55

66
const external = (file: string): boolean => {
@@ -15,9 +15,8 @@ export const path = async (file: string): Promise<string> => {
1515
export const fetchFullScript = async (file: string): Promise<Block[]> => {
1616
if (!external(file)) file = `${SCRIPTS_PATH()}/${file}.gpt`;
1717

18-
const gptscript = new GPTScript();
1918
try {
20-
return await gptscript.parse(file);
19+
return await gpt().parse(file);
2120
} catch (e) {
2221
throw e;
2322
}
@@ -26,9 +25,8 @@ export const fetchFullScript = async (file: string): Promise<Block[]> => {
2625
export const fetchScript = async (file: string): Promise<Tool> => {
2726
if (!external(file)) file = `${SCRIPTS_PATH()}/${file}.gpt`;
2827

29-
const gptscript = new GPTScript();
3028
try {
31-
const script = await gptscript.parse(file);
29+
const script = await gpt().parse(file);
3230
for (let tool of script) {
3331
if (tool.type === 'text') continue;
3432
return tool;
@@ -49,10 +47,9 @@ export const fetchScripts = async (): Promise<Record<string, string>> => {
4947

5048
if (gptFiles.length === 0) throw new Error('no files found in scripts directory');
5149

52-
const gptscript = new GPTScript();
5350
const scripts: Record<string, string> = {};
5451
for (const file of gptFiles) {
55-
const script = await gptscript.parse(`${SCRIPTS_PATH()}/${file}`);
52+
const script = await gpt().parse(`${SCRIPTS_PATH()}/${file}`);
5653
let description = '';
5754
for (let tool of script) {
5855
if (tool.type === 'text') continue;

actions/scripts/update.tsx

+3-5
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
"use server"
22

33
import { Tool, GPTScript, Block } from '@gptscript-ai/gptscript';
4-
import { SCRIPTS_PATH } from '@/config/env';
4+
import { SCRIPTS_PATH, gpt} from '@/config/env';
55
import fs from 'fs/promises';
66

77
const external = (file: string): boolean => {
@@ -16,9 +16,8 @@ export const path = async (file: string): Promise<string> => {
1616
export const updateScript = async (file: string, script: Block[]) => {
1717
if (external(file)) throw new Error('cannot update external tools');
1818

19-
const gptscript = new GPTScript();
2019
try {
21-
await fs.writeFile(`${SCRIPTS_PATH()}/${file}.gpt`, await gptscript.stringify(script));
20+
await fs.writeFile(`${SCRIPTS_PATH()}/${file}.gpt`, await gpt().stringify(script));
2221
} catch (e) {
2322
throw e;
2423
}
@@ -27,9 +26,8 @@ export const updateScript = async (file: string, script: Block[]) => {
2726
export const updateTool = async (file: string, name: string, script: Block[]) => {
2827
if (external(file)) throw new Error('cannot update external tools');
2928

30-
const gptscript = new GPTScript();
3129
try {
32-
return await gptscript.stringify(script);
30+
return await gpt().stringify(script);
3331
} catch (e) {
3432
throw e;
3533
}

app/api/file/[name]/[tool]/route.ts

+6-8
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
export const dynamic = 'force-dynamic' // defaults to autover'
2-
import { GPTScript, type Block, Tool} from '@gptscript-ai/gptscript'
2+
import {type Block, Tool} from '@gptscript-ai/gptscript'
33
import { Positions } from '../route';
44
import { promises as fs } from 'fs';
55
import path from 'path';
6-
import { SCRIPTS_PATH } from '@/config/env';
7-
8-
const gptscript = new GPTScript();
6+
import { SCRIPTS_PATH, gpt} from '@/config/env';
97

108
// Create a datastructure for the tool bindings in the UI
119
export async function PUT(
@@ -15,11 +13,11 @@ export async function PUT(
1513
try {
1614
const { name, tool } = params as any;
1715

18-
const script = await gptscript.parse(path.join(SCRIPTS_PATH(),`${name}.gpt`));
16+
const script = await gpt().parse(path.join(SCRIPTS_PATH(),`${name}.gpt`));
1917
const updatedScript = updateScript(script, tool, (await req.json()) as Tool);
2018

21-
await fs.writeFile(path.join(SCRIPTS_PATH(),`${name}.gpt`), await gptscript.stringify(updatedScript));
22-
return Response.json(await gptscript.parse(path.join(SCRIPTS_PATH(),`${name}.gpt`)));
19+
await fs.writeFile(path.join(SCRIPTS_PATH(),`${name}.gpt`), await gpt().stringify(updatedScript));
20+
return Response.json(await gpt().parse(path.join(SCRIPTS_PATH(),`${name}.gpt`)));
2321
} catch (e) {
2422
if (`${e}`.includes('no such file')){
2523
return Response.json({ error: '.gpt file not found' }, { status: 404 });
@@ -39,7 +37,7 @@ const updateScript = (script: Block[], tool: string, updatedTool: Tool) => {
3937
if (tool !== updatedTool.name) {
4038
updatedScript = script.map(block => {
4139
if (block.type === 'tool' && block.name !== tool) {
42-
block.tools = block.tools?.map(t => t === tool ? updatedTool.name : t);
40+
block.tools = block.tools?.map(t => t === tool ? updatedTool.name : t) as string[] | undefined;
4341
} else if (block.type === 'text') {
4442
const positions = JSON.parse(block.content) as Positions
4543
block.content = JSON.stringify(

app/api/file/[name]/route.ts

+5-8
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,15 @@
11
export const dynamic = 'force-dynamic' // defaults to auto
22
import { NextRequest } from 'next/server'
3-
import { GPTScript, type Block, Text } from '@gptscript-ai/gptscript'
3+
import { type Block, Text } from '@gptscript-ai/gptscript'
44
import { promises as fs } from 'fs';
55
import path from 'path';
6-
import { SCRIPTS_PATH } from '@/config/env';
6+
import { SCRIPTS_PATH, gpt } from '@/config/env';
77
import type {
88
Node as RFNode,
99
Edge as RFEdge,
1010
XYPosition,
1111
} from 'reactflow';
1212

13-
const gptscript = new GPTScript();
14-
15-
1613
export async function DELETE(
1714
_: NextRequest,
1815
{ params }: { params: { slug: string } }
@@ -46,7 +43,7 @@ export async function GET(
4643
) {
4744
try {
4845
const { name } = params as any;
49-
const script = await gptscript.parse(path.join(SCRIPTS_PATH(),`${name}.gpt`));
46+
const script = await gpt().parse(path.join(SCRIPTS_PATH(),`${name}.gpt`));
5047
if (req.nextUrl.searchParams.get('nodeify') === 'true') {
5148
const { nodes, edges } = await nodeify(script);
5249
return Response.json({ nodes: nodes, edges: edges });
@@ -69,8 +66,8 @@ export async function PUT(
6966
const nodes = (await req.json()) as RFNode[];
7067
const script = denodeify(nodes);
7168

72-
await fs.writeFile(path.join(SCRIPTS_PATH(),`${name}.gpt`), await gptscript.stringify(script));
73-
return Response.json(await gptscript.parse(path.join(SCRIPTS_PATH(),`${name}.gpt`)));
69+
await fs.writeFile(path.join(SCRIPTS_PATH(),`${name}.gpt`), await gpt().stringify(script));
70+
return Response.json(await gpt().parse(path.join(SCRIPTS_PATH(),`${name}.gpt`)));
7471
} catch (e) {
7572
if (`${e}`.includes('no such file')){
7673
return Response.json({ error: '.gpt file not found' }, { status: 404 });

app/api/file/route.ts

+2-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,7 @@
11
export const dynamic = 'force-dynamic' // defaults to auto
22
import { GPTScript } from '@gptscript-ai/gptscript'
33
import { promises as fs } from 'fs';
4-
import { SCRIPTS_PATH } from '@/config/env';
5-
6-
const gptscript = new GPTScript();
4+
import { SCRIPTS_PATH, gpt } from '@/config/env';
75

86
export async function GET() {
97
try {
@@ -15,7 +13,7 @@ export async function GET() {
1513

1614
const scripts: Record<string, string> = {};
1715
for (const file of gptFiles) {
18-
const script = await gptscript.parse(`${SCRIPTS_PATH()}/${file}`);
16+
const script = await gpt().parse(`${SCRIPTS_PATH()}/${file}`);
1917
let description = '';
2018
for (let tool of script) {
2119
if (tool.type === 'text') continue;

config/env.ts

+11-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,15 @@
1+
import { GPTScript } from "@gptscript-ai/gptscript"
2+
13
export const SCRIPTS_PATH = () => process.env.SCRIPTS_PATH || "gptscripts";
24
export const WORKSPACE_DIR = () => process.env.GPTSCRIPT_WORKSPACE_DIR || "";
35

46
export const set_WORKSPACE_DIR = (dir: string) => process.env.GPTSCRIPT_WORKSPACE_DIR = dir;
5-
export const set_SCRIPTS_PATH = (dir: string) => process.env.SCRIPTS_PATH = dir;
7+
export const set_SCRIPTS_PATH = (dir: string) => process.env.SCRIPTS_PATH = dir;
8+
9+
let gptscript: GPTScript | null = null;
10+
export function gpt() {
11+
if (!gptscript) {
12+
gptscript = new GPTScript()
13+
};
14+
return gptscript;
15+
}

0 commit comments

Comments
 (0)