@promptbook/openai 0.103.0-46 → 0.103.0-48
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm/index.es.js +196 -71
- package/esm/index.es.js.map +1 -1
- package/esm/typings/servers.d.ts +1 -7
- package/esm/typings/src/_packages/components.index.d.ts +4 -0
- package/esm/typings/src/_packages/core.index.d.ts +22 -14
- package/esm/typings/src/_packages/types.index.d.ts +14 -6
- package/esm/typings/src/book-2.0/agent-source/AgentBasicInformation.d.ts +7 -3
- package/esm/typings/src/book-2.0/agent-source/AgentModelRequirements.d.ts +6 -1
- package/esm/typings/src/book-2.0/agent-source/AgentSourceParseResult.d.ts +3 -2
- package/esm/typings/src/book-2.0/agent-source/computeAgentHash.d.ts +8 -0
- package/esm/typings/src/book-2.0/agent-source/computeAgentHash.test.d.ts +1 -0
- package/esm/typings/src/book-2.0/agent-source/createCommitmentRegex.d.ts +1 -1
- package/esm/typings/src/book-2.0/agent-source/createDefaultAgentName.d.ts +8 -0
- package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.d.ts +9 -0
- package/esm/typings/src/book-2.0/agent-source/normalizeAgentName.test.d.ts +1 -0
- package/esm/typings/src/book-2.0/agent-source/parseAgentSourceWithCommitments.d.ts +1 -1
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.d.ts +14 -0
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChat.test.d.ts +1 -0
- package/esm/typings/src/book-components/Chat/AgentChat/AgentChatProps.d.ts +13 -0
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentCollectionInSupabase.d.ts +1 -60
- package/esm/typings/src/collection/agent-collection/constructors/agent-collection-in-supabase/AgentsDatabaseSchema.d.ts +57 -32
- package/esm/typings/src/{book-2.0/commitments → commitments}/ACTION/ACTION.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/DELETE/DELETE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/FORMAT/FORMAT.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/GOAL/GOAL.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/KNOWLEDGE/KNOWLEDGE.d.ts +1 -5
- package/esm/typings/src/{book-2.0/commitments → commitments}/MEMORY/MEMORY.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/MESSAGE/MESSAGE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/META/META.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/META_IMAGE/META_IMAGE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/META_LINK/META_LINK.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/MODEL/MODEL.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/NOTE/NOTE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/PERSONA/PERSONA.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/RULE/RULE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/SAMPLE/SAMPLE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/SCENARIO/SCENARIO.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/STYLE/STYLE.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BaseCommitmentDefinition.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/CommitmentDefinition.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/NotYetImplementedCommitmentDefinition.d.ts +1 -1
- package/esm/typings/src/{book-2.0/commitments → commitments}/_base/createEmptyAgentModelRequirements.d.ts +1 -1
- package/esm/typings/src/execution/LlmExecutionTools.d.ts +1 -1
- package/esm/typings/src/llm-providers/_common/utils/assertUniqueModels.d.ts +12 -0
- package/esm/typings/src/llm-providers/agent/Agent.d.ts +10 -9
- package/esm/typings/src/llm-providers/agent/AgentLlmExecutionTools.d.ts +5 -1
- package/esm/typings/src/llm-providers/agent/CreateAgentLlmExecutionToolsOptions.d.ts +1 -1
- package/esm/typings/src/llm-providers/agent/RemoteAgent.d.ts +32 -0
- package/esm/typings/src/llm-providers/agent/RemoteAgentOptions.d.ts +11 -0
- package/esm/typings/src/llm-providers/openai/OpenAiAssistantExecutionTools.d.ts +29 -4
- package/esm/typings/src/llm-providers/openai/openai-models.test.d.ts +4 -0
- package/esm/typings/src/remote-server/startAgentServer.d.ts +1 -1
- package/esm/typings/src/remote-server/startRemoteServer.d.ts +1 -2
- package/esm/typings/src/storage/_common/PromptbookStorage.d.ts +1 -0
- package/esm/typings/src/transpilers/openai-sdk/register.d.ts +1 -1
- package/esm/typings/src/types/typeAliases.d.ts +12 -0
- package/esm/typings/src/utils/color/internal-utils/checkChannelValue.d.ts +0 -3
- package/esm/typings/src/utils/normalization/normalize-to-kebab-case.d.ts +2 -0
- package/esm/typings/src/utils/normalization/normalizeTo_PascalCase.d.ts +3 -0
- package/esm/typings/src/utils/normalization/normalizeTo_camelCase.d.ts +2 -0
- package/esm/typings/src/utils/normalization/titleToName.d.ts +2 -0
- package/esm/typings/src/utils/random/$generateBookBoilerplate.d.ts +2 -2
- package/esm/typings/src/utils/random/$randomFullnameWithColor.d.ts +1 -1
- package/esm/typings/src/version.d.ts +1 -1
- package/package.json +3 -4
- package/umd/index.umd.js +201 -75
- package/umd/index.umd.js.map +1 -1
- /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/BookCommitment.d.ts +0 -0
- /package/esm/typings/src/{book-2.0/commitments → commitments}/_base/ParsedCommitment.d.ts +0 -0
- /package/esm/typings/src/{book-2.0/commitments → commitments}/index.d.ts +0 -0
package/esm/index.es.js
CHANGED
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import colors from 'colors';
|
|
2
|
-
import { forEver } from 'waitasecond';
|
|
3
2
|
import spaceTrim$1, { spaceTrim } from 'spacetrim';
|
|
4
3
|
import { randomBytes } from 'crypto';
|
|
5
4
|
import Bottleneck from 'bottleneck';
|
|
@@ -20,7 +19,7 @@ const BOOK_LANGUAGE_VERSION = '2.0.0';
|
|
|
20
19
|
* @generated
|
|
21
20
|
* @see https://github.com/webgptorg/promptbook
|
|
22
21
|
*/
|
|
23
|
-
const PROMPTBOOK_ENGINE_VERSION = '0.103.0-
|
|
22
|
+
const PROMPTBOOK_ENGINE_VERSION = '0.103.0-48';
|
|
24
23
|
/**
|
|
25
24
|
* TODO: string_promptbook_version should be constrained to the all versions of Promptbook engine
|
|
26
25
|
* Note: [💞] Ignore a discrepancy between file name and entity name
|
|
@@ -474,9 +473,6 @@ function checkChannelValue(channelName, value) {
|
|
|
474
473
|
throw new Error(`${channelName} channel is greater than 255, it is ${value}`);
|
|
475
474
|
}
|
|
476
475
|
}
|
|
477
|
-
/**
|
|
478
|
-
* TODO: [🧠][🚓] Is/which combination it better to use asserts/check, validate or is utility function?
|
|
479
|
-
*/
|
|
480
476
|
|
|
481
477
|
/**
|
|
482
478
|
* Color object represents an RGB color with alpha channel
|
|
@@ -2364,17 +2360,17 @@ const OPENAI_MODELS = exportJson({
|
|
|
2364
2360
|
},
|
|
2365
2361
|
/**/
|
|
2366
2362
|
/*/
|
|
2367
|
-
|
|
2368
|
-
|
|
2369
|
-
|
|
2370
|
-
|
|
2371
|
-
|
|
2363
|
+
{
|
|
2364
|
+
modelTitle: 'tts-1-hd-1106',
|
|
2365
|
+
modelName: 'tts-1-hd-1106',
|
|
2366
|
+
},
|
|
2367
|
+
/**/
|
|
2372
2368
|
/*/
|
|
2373
|
-
|
|
2374
|
-
|
|
2375
|
-
|
|
2376
|
-
|
|
2377
|
-
|
|
2369
|
+
{
|
|
2370
|
+
modelTitle: 'tts-1-hd',
|
|
2371
|
+
modelName: 'tts-1-hd',
|
|
2372
|
+
},
|
|
2373
|
+
/**/
|
|
2378
2374
|
/**/
|
|
2379
2375
|
{
|
|
2380
2376
|
modelVariant: 'CHAT',
|
|
@@ -3560,7 +3556,7 @@ class OpenAiExecutionTools extends OpenAiCompatibleExecutionTools {
|
|
|
3560
3556
|
*
|
|
3561
3557
|
* This is useful for calling OpenAI API with a single assistant, for more wide usage use `OpenAiExecutionTools`.
|
|
3562
3558
|
*
|
|
3563
|
-
* Note: [🦖] There are several different things in Promptbook:
|
|
3559
|
+
* !!! Note: [🦖] There are several different things in Promptbook:
|
|
3564
3560
|
* - `Agent` - which represents an AI Agent with its source, memories, actions, etc. Agent is a higher-level abstraction which is internally using:
|
|
3565
3561
|
* - `LlmExecutionTools` - which wraps one or more LLM models and provides an interface to execute them
|
|
3566
3562
|
* - `AgentLlmExecutionTools` - which is a specific implementation of `LlmExecutionTools` that wraps another LlmExecutionTools and applies agent-specific system prompts and requirements
|
|
@@ -3666,17 +3662,21 @@ class OpenAiAssistantExecutionTools extends OpenAiExecutionTools {
|
|
|
3666
3662
|
console.info('connect', stream.currentEvent);
|
|
3667
3663
|
}
|
|
3668
3664
|
});
|
|
3665
|
+
/*
|
|
3669
3666
|
stream.on('messageDelta', (messageDelta) => {
|
|
3670
|
-
|
|
3671
|
-
|
|
3667
|
+
if (
|
|
3668
|
+
this.options.isVerbose &&
|
|
3672
3669
|
messageDelta &&
|
|
3673
3670
|
messageDelta.content &&
|
|
3674
3671
|
messageDelta.content[0] &&
|
|
3675
|
-
messageDelta.content[0].type === 'text'
|
|
3676
|
-
|
|
3672
|
+
messageDelta.content[0].type === 'text'
|
|
3673
|
+
) {
|
|
3674
|
+
console.info('messageDelta', messageDelta.content[0].text?.value);
|
|
3677
3675
|
}
|
|
3676
|
+
|
|
3678
3677
|
// <- TODO: [🐚] Make streaming and running tasks working
|
|
3679
3678
|
});
|
|
3679
|
+
*/
|
|
3680
3680
|
stream.on('messageCreated', (message) => {
|
|
3681
3681
|
if (this.options.isVerbose) {
|
|
3682
3682
|
console.info('messageCreated', message);
|
|
@@ -3731,15 +3731,19 @@ class OpenAiAssistantExecutionTools extends OpenAiExecutionTools {
|
|
|
3731
3731
|
},
|
|
3732
3732
|
});
|
|
3733
3733
|
}
|
|
3734
|
-
|
|
3734
|
+
/*
|
|
3735
|
+
public async playground() {
|
|
3735
3736
|
const client = await this.getClient();
|
|
3737
|
+
|
|
3736
3738
|
// List all assistants
|
|
3737
3739
|
const assistants = await client.beta.assistants.list();
|
|
3738
3740
|
console.log('!!! Assistants:', assistants);
|
|
3741
|
+
|
|
3739
3742
|
// Get details of a specific assistant
|
|
3740
3743
|
const assistantId = 'asst_MO8fhZf4dGloCfXSHeLcIik0';
|
|
3741
3744
|
const assistant = await client.beta.assistants.retrieve(assistantId);
|
|
3742
3745
|
console.log('!!! Assistant Details:', assistant);
|
|
3746
|
+
|
|
3743
3747
|
// Update an assistant
|
|
3744
3748
|
const updatedAssistant = await client.beta.assistants.update(assistantId, {
|
|
3745
3749
|
name: assistant.name + '(M)',
|
|
@@ -3749,71 +3753,103 @@ class OpenAiAssistantExecutionTools extends OpenAiExecutionTools {
|
|
|
3749
3753
|
},
|
|
3750
3754
|
});
|
|
3751
3755
|
console.log('!!! Updated Assistant:', updatedAssistant);
|
|
3756
|
+
|
|
3752
3757
|
await forEver();
|
|
3753
3758
|
}
|
|
3759
|
+
*/
|
|
3760
|
+
/**
|
|
3761
|
+
* Get an existing assistant tool wrapper
|
|
3762
|
+
*/
|
|
3763
|
+
getAssistant(assistantId) {
|
|
3764
|
+
return new OpenAiAssistantExecutionTools({
|
|
3765
|
+
...this.options,
|
|
3766
|
+
assistantId,
|
|
3767
|
+
});
|
|
3768
|
+
}
|
|
3754
3769
|
async createNewAssistant(options) {
|
|
3755
3770
|
if (!this.isCreatingNewAssistantsAllowed) {
|
|
3756
3771
|
throw new NotAllowed(`Creating new assistants is not allowed. Set \`isCreatingNewAssistantsAllowed: true\` in options to enable this feature.`);
|
|
3757
3772
|
}
|
|
3758
3773
|
// await this.playground();
|
|
3759
|
-
const { name, instructions } = options;
|
|
3774
|
+
const { name, instructions, knowledgeSources } = options;
|
|
3760
3775
|
const client = await this.getClient();
|
|
3761
|
-
|
|
3762
|
-
//
|
|
3763
|
-
|
|
3764
|
-
|
|
3765
|
-
|
|
3766
|
-
|
|
3767
|
-
|
|
3768
|
-
|
|
3769
|
-
|
|
3770
|
-
if (!res.ok) throw new Error(`Download error: ${url}`);
|
|
3771
|
-
const buffer = await res.arrayBuffer();
|
|
3772
|
-
fs.writeFileSync(filepath, Buffer.from(buffer));
|
|
3773
|
-
console.log(`📥 File downloaded: ${filename}`);
|
|
3774
|
-
|
|
3775
|
-
return filepath;
|
|
3776
|
-
}
|
|
3777
|
-
|
|
3778
|
-
async function uploadFileToOpenAI(filepath: string) {
|
|
3779
|
-
const file = await client.files.create({
|
|
3780
|
-
file: fs.createReadStream(filepath),
|
|
3781
|
-
purpose: 'assistants',
|
|
3776
|
+
let vectorStoreId;
|
|
3777
|
+
// If knowledge sources are provided, create a vector store with them
|
|
3778
|
+
if (knowledgeSources && knowledgeSources.length > 0) {
|
|
3779
|
+
if (this.options.isVerbose) {
|
|
3780
|
+
console.info(`📚 Creating vector store with ${knowledgeSources.length} knowledge sources...`);
|
|
3781
|
+
}
|
|
3782
|
+
// Create a vector store
|
|
3783
|
+
const vectorStore = await client.beta.vectorStores.create({
|
|
3784
|
+
name: `${name} Knowledge Base`,
|
|
3782
3785
|
});
|
|
3783
|
-
|
|
3784
|
-
|
|
3785
|
-
|
|
3786
|
-
|
|
3787
|
-
|
|
3788
|
-
|
|
3789
|
-
|
|
3790
|
-
|
|
3791
|
-
|
|
3792
|
-
|
|
3793
|
-
|
|
3794
|
-
|
|
3795
|
-
|
|
3796
|
-
|
|
3797
|
-
|
|
3798
|
-
|
|
3799
|
-
|
|
3800
|
-
|
|
3801
|
-
|
|
3802
|
-
|
|
3803
|
-
|
|
3804
|
-
|
|
3786
|
+
vectorStoreId = vectorStore.id;
|
|
3787
|
+
if (this.options.isVerbose) {
|
|
3788
|
+
console.info(`✅ Vector store created: ${vectorStoreId}`);
|
|
3789
|
+
}
|
|
3790
|
+
// Upload files from knowledge sources to the vector store
|
|
3791
|
+
const fileStreams = [];
|
|
3792
|
+
for (const source of knowledgeSources) {
|
|
3793
|
+
try {
|
|
3794
|
+
// Check if it's a URL
|
|
3795
|
+
if (source.startsWith('http://') || source.startsWith('https://')) {
|
|
3796
|
+
// Download the file
|
|
3797
|
+
const response = await fetch(source);
|
|
3798
|
+
if (!response.ok) {
|
|
3799
|
+
console.error(`Failed to download ${source}: ${response.statusText}`);
|
|
3800
|
+
continue;
|
|
3801
|
+
}
|
|
3802
|
+
const buffer = await response.arrayBuffer();
|
|
3803
|
+
const filename = source.split('/').pop() || 'downloaded-file';
|
|
3804
|
+
const blob = new Blob([buffer]);
|
|
3805
|
+
const file = new File([blob], filename);
|
|
3806
|
+
fileStreams.push(file);
|
|
3807
|
+
}
|
|
3808
|
+
else {
|
|
3809
|
+
// Assume it's a local file path
|
|
3810
|
+
// Note: This will work in Node.js environment
|
|
3811
|
+
// For browser environments, this would need different handling
|
|
3812
|
+
const fs = await import('fs');
|
|
3813
|
+
const fileStream = fs.createReadStream(source);
|
|
3814
|
+
fileStreams.push(fileStream);
|
|
3815
|
+
}
|
|
3816
|
+
}
|
|
3817
|
+
catch (error) {
|
|
3818
|
+
console.error(`Error processing knowledge source ${source}:`, error);
|
|
3819
|
+
}
|
|
3820
|
+
}
|
|
3821
|
+
// Batch upload files to the vector store
|
|
3822
|
+
if (fileStreams.length > 0) {
|
|
3823
|
+
try {
|
|
3824
|
+
await client.beta.vectorStores.fileBatches.uploadAndPoll(vectorStoreId, {
|
|
3825
|
+
files: fileStreams,
|
|
3826
|
+
});
|
|
3827
|
+
if (this.options.isVerbose) {
|
|
3828
|
+
console.info(`✅ Uploaded ${fileStreams.length} files to vector store`);
|
|
3829
|
+
}
|
|
3830
|
+
}
|
|
3831
|
+
catch (error) {
|
|
3832
|
+
console.error('Error uploading files to vector store:', error);
|
|
3833
|
+
}
|
|
3834
|
+
}
|
|
3805
3835
|
}
|
|
3806
|
-
|
|
3807
|
-
|
|
3808
|
-
// 3️⃣ Create assistant with uploaded files
|
|
3809
|
-
const assistant = await client.beta.assistants.create({
|
|
3836
|
+
// Create assistant with vector store attached
|
|
3837
|
+
const assistantConfig = {
|
|
3810
3838
|
name,
|
|
3811
3839
|
description: 'Assistant created via Promptbook',
|
|
3812
3840
|
model: 'gpt-4o',
|
|
3813
3841
|
instructions,
|
|
3814
3842
|
tools: [/* TODO: [🧠] Maybe add { type: 'code_interpreter' }, */ { type: 'file_search' }],
|
|
3815
|
-
|
|
3816
|
-
|
|
3843
|
+
};
|
|
3844
|
+
// Attach vector store if created
|
|
3845
|
+
if (vectorStoreId) {
|
|
3846
|
+
assistantConfig.tool_resources = {
|
|
3847
|
+
file_search: {
|
|
3848
|
+
vector_store_ids: [vectorStoreId],
|
|
3849
|
+
},
|
|
3850
|
+
};
|
|
3851
|
+
}
|
|
3852
|
+
const assistant = await client.beta.assistants.create(assistantConfig);
|
|
3817
3853
|
console.log(`✅ Assistant created: ${assistant.id}`);
|
|
3818
3854
|
// TODO: !!!! Try listing existing assistants
|
|
3819
3855
|
// TODO: !!!! Try marking existing assistants by DISCRIMINANT
|
|
@@ -3824,6 +3860,95 @@ class OpenAiAssistantExecutionTools extends OpenAiExecutionTools {
|
|
|
3824
3860
|
assistantId: assistant.id,
|
|
3825
3861
|
});
|
|
3826
3862
|
}
|
|
3863
|
+
async updateAssistant(options) {
|
|
3864
|
+
if (!this.isCreatingNewAssistantsAllowed) {
|
|
3865
|
+
throw new NotAllowed(`Updating assistants is not allowed. Set \`isCreatingNewAssistantsAllowed: true\` in options to enable this feature.`);
|
|
3866
|
+
}
|
|
3867
|
+
const { assistantId, name, instructions, knowledgeSources } = options;
|
|
3868
|
+
const client = await this.getClient();
|
|
3869
|
+
let vectorStoreId;
|
|
3870
|
+
// If knowledge sources are provided, create a vector store with them
|
|
3871
|
+
// TODO: [🧠] Reuse vector store creation logic from createNewAssistant
|
|
3872
|
+
if (knowledgeSources && knowledgeSources.length > 0) {
|
|
3873
|
+
if (this.options.isVerbose) {
|
|
3874
|
+
console.info(`📚 Creating vector store for update with ${knowledgeSources.length} knowledge sources...`);
|
|
3875
|
+
}
|
|
3876
|
+
// Create a vector store
|
|
3877
|
+
const vectorStore = await client.beta.vectorStores.create({
|
|
3878
|
+
name: `${name} Knowledge Base`,
|
|
3879
|
+
});
|
|
3880
|
+
vectorStoreId = vectorStore.id;
|
|
3881
|
+
if (this.options.isVerbose) {
|
|
3882
|
+
console.info(`✅ Vector store created: ${vectorStoreId}`);
|
|
3883
|
+
}
|
|
3884
|
+
// Upload files from knowledge sources to the vector store
|
|
3885
|
+
const fileStreams = [];
|
|
3886
|
+
for (const source of knowledgeSources) {
|
|
3887
|
+
try {
|
|
3888
|
+
// Check if it's a URL
|
|
3889
|
+
if (source.startsWith('http://') || source.startsWith('https://')) {
|
|
3890
|
+
// Download the file
|
|
3891
|
+
const response = await fetch(source);
|
|
3892
|
+
if (!response.ok) {
|
|
3893
|
+
console.error(`Failed to download ${source}: ${response.statusText}`);
|
|
3894
|
+
continue;
|
|
3895
|
+
}
|
|
3896
|
+
const buffer = await response.arrayBuffer();
|
|
3897
|
+
const filename = source.split('/').pop() || 'downloaded-file';
|
|
3898
|
+
const blob = new Blob([buffer]);
|
|
3899
|
+
const file = new File([blob], filename);
|
|
3900
|
+
fileStreams.push(file);
|
|
3901
|
+
}
|
|
3902
|
+
else {
|
|
3903
|
+
// Assume it's a local file path
|
|
3904
|
+
// Note: This will work in Node.js environment
|
|
3905
|
+
// For browser environments, this would need different handling
|
|
3906
|
+
const fs = await import('fs');
|
|
3907
|
+
const fileStream = fs.createReadStream(source);
|
|
3908
|
+
fileStreams.push(fileStream);
|
|
3909
|
+
}
|
|
3910
|
+
}
|
|
3911
|
+
catch (error) {
|
|
3912
|
+
console.error(`Error processing knowledge source ${source}:`, error);
|
|
3913
|
+
}
|
|
3914
|
+
}
|
|
3915
|
+
// Batch upload files to the vector store
|
|
3916
|
+
if (fileStreams.length > 0) {
|
|
3917
|
+
try {
|
|
3918
|
+
await client.beta.vectorStores.fileBatches.uploadAndPoll(vectorStoreId, {
|
|
3919
|
+
files: fileStreams,
|
|
3920
|
+
});
|
|
3921
|
+
if (this.options.isVerbose) {
|
|
3922
|
+
console.info(`✅ Uploaded ${fileStreams.length} files to vector store`);
|
|
3923
|
+
}
|
|
3924
|
+
}
|
|
3925
|
+
catch (error) {
|
|
3926
|
+
console.error('Error uploading files to vector store:', error);
|
|
3927
|
+
}
|
|
3928
|
+
}
|
|
3929
|
+
}
|
|
3930
|
+
const assistantUpdate = {
|
|
3931
|
+
name,
|
|
3932
|
+
instructions,
|
|
3933
|
+
tools: [/* TODO: [🧠] Maybe add { type: 'code_interpreter' }, */ { type: 'file_search' }],
|
|
3934
|
+
};
|
|
3935
|
+
if (vectorStoreId) {
|
|
3936
|
+
assistantUpdate.tool_resources = {
|
|
3937
|
+
file_search: {
|
|
3938
|
+
vector_store_ids: [vectorStoreId],
|
|
3939
|
+
},
|
|
3940
|
+
};
|
|
3941
|
+
}
|
|
3942
|
+
const assistant = await client.beta.assistants.update(assistantId, assistantUpdate);
|
|
3943
|
+
if (this.options.isVerbose) {
|
|
3944
|
+
console.log(`✅ Assistant updated: ${assistant.id}`);
|
|
3945
|
+
}
|
|
3946
|
+
return new OpenAiAssistantExecutionTools({
|
|
3947
|
+
...this.options,
|
|
3948
|
+
isCreatingNewAssistantsAllowed: false,
|
|
3949
|
+
assistantId: assistant.id,
|
|
3950
|
+
});
|
|
3951
|
+
}
|
|
3827
3952
|
/**
|
|
3828
3953
|
* Discriminant for type guards
|
|
3829
3954
|
*/
|