diff --git a/examples/SomeFileToSave.pdf b/examples/ai/SomeFileToSave.pdf similarity index 100% rename from examples/SomeFileToSave.pdf rename to examples/ai/SomeFileToSave.pdf diff --git a/examples/assistant-with-search-index.ts b/examples/ai/assistant-with-search-index.ts similarity index 63% rename from examples/assistant-with-search-index.ts rename to examples/ai/assistant-with-search-index.ts index 0b529935..5b4d7991 100644 --- a/examples/assistant-with-search-index.ts +++ b/examples/ai/assistant-with-search-index.ts @@ -16,6 +16,7 @@ import { initOperationSdk } from '@yandex-cloud/nodejs-sdk/sdk/operation'; import { readFile } from 'fs/promises'; import { ExpirationConfig_ExpirationPolicy } from '@yandex-cloud/nodejs-sdk/proto/ai/common/common'; +import { Message } from '@yandex-cloud/nodejs-sdk/ai-assistants-v1/threads/message'; dotenv.config({ path: path.resolve(__dirname, '.env') }); @@ -41,8 +42,9 @@ const session = new Session({ iamToken }); const createFile = async () => { const fileSdk = initFileSdk(session); + const filePath = 'examples/assistants/SomeFileToSave.pdf'; - const fileToSaveContent = await readFile('./SomeFileToSave.pdf', { + const fileToSaveContent = await readFile(filePath, { encoding: 'binary', }); @@ -53,6 +55,8 @@ const createFile = async () => { expirationConfig, mimeType: 'application/pdf', content, + name: 'SomeFileToSave from example', + labels: { fileName: 'SomeFileToSave', filePath }, }); return file; @@ -64,6 +68,11 @@ const createSearchIndex = async (fileId: string) => { const createSearchIndexOperation = await searchIndexSdk.create({ folderId, fileIds: [fileId], + textSearchIndex: { + chunkingStrategy: { + staticStrategy: { chunkOverlapTokens: 300, maxChunkSizeTokens: 700 }, + }, + }, expirationConfig, }); @@ -79,7 +88,22 @@ const createAssistantWithSearchIndex = async (searchIndexId: string) => { const assistant = await assistantSdk.create({ folderId, modelId: 'yandexgpt/latest', - tools: [{ searchIndex: { searchIndexIds: [searchIndexId] } }], + name: 'Assistant from examples', + instruction: `Ты — помощник по внутренней документации компании. +Отвечай вежливо. +Если информация не содержится в документах ниже, не придумывай ответ. +`, + tools: [ + { + searchIndex: { + searchIndexIds: [searchIndexId], + // https://yandex.cloud/ru/docs/foundation-models/concepts/assistant/rephraser + rephraserOptions: { + rephraserUri: `gpt://${folderId}/rephraser/latest`, + }, + }, + }, + ], }); return assistant; @@ -87,17 +111,23 @@ const createAssistantWithSearchIndex = async (searchIndexId: string) => { (async function () { const file = await createFile(); - console.log(file); + console.log('File:\n'); + console.log(JSON.stringify(file, undefined, 4)); + console.log('\n'); const searchIndex = await createSearchIndex(file.id); const assistant = await createAssistantWithSearchIndex(searchIndex.id); - console.log(assistant); + console.log('Assistant:\n'); + console.log(JSON.stringify(assistant, undefined, 4)); + console.log('\n'); const threadSdk = initThreadSdk(session); - const thread = await threadSdk.create({ folderId, name: '' }).withSdk(); + const thread = await threadSdk.create({ folderId, name: 'Thread from example' }).withSdk(); - console.log(thread); + console.log('Thread:\n'); + console.log(JSON.stringify(await thread.data, undefined, 4)); + console.log('\n'); const asyncIterableStreamEvent = await thread .sendMessage({ @@ -105,6 +135,7 @@ const createAssistantWithSearchIndex = async (searchIndexId: string) => { }) .getAssistantResponse(assistant); + let completedMessage: Message | undefined; for await (const streamEvent of asyncIterableStreamEvent) { console.log('\n---------------------\n'); @@ -115,9 +146,14 @@ const createAssistantWithSearchIndex = async (searchIndexId: string) => { } if (streamEvent.completedMessage) { + completedMessage = streamEvent.completedMessage; console.log('Completed message:\n'); console.log(MessageSdk.messageContentToString(streamEvent.completedMessage.content)); console.log('\n'); } } + + console.log('Completed Message:\n'); + console.log(JSON.stringify(completedMessage, undefined, 4)); + console.log('\n'); })(); diff --git a/examples/chat-with-assistant-sdk.ts b/examples/ai/chat-with-assistant-sdk.ts similarity index 100% rename from examples/chat-with-assistant-sdk.ts rename to examples/ai/chat-with-assistant-sdk.ts diff --git a/examples/chat-with-assistant.ts b/examples/ai/chat-with-assistant.ts similarity index 100% rename from examples/chat-with-assistant.ts rename to examples/ai/chat-with-assistant.ts diff --git a/examples/generate-image-sdk.ts b/examples/ai/generate-image-sdk.ts similarity index 94% rename from examples/generate-image-sdk.ts rename to examples/ai/generate-image-sdk.ts index ed3f2c68..8d039c33 100644 --- a/examples/generate-image-sdk.ts +++ b/examples/ai/generate-image-sdk.ts @@ -5,7 +5,6 @@ import { writeFile } from 'fs'; import { Session } from '@yandex-cloud/nodejs-sdk/dist/session'; import { initOperationSdk } from '@yandex-cloud/nodejs-sdk/sdk/operation'; -import { imageGeneration } from '@yandex-cloud/nodejs-sdk/ai-foundation_models-v1'; import { initImageGenerationSdk } from '@yandex-cloud/nodejs-sdk/sdk/ai-foundation_models-v1'; dotenv.config({ path: path.resolve(__dirname, '.env') }); @@ -34,6 +33,7 @@ const folderId = getEnv('YC_FOLDER_ID'); folderId, modelId: 'yandex-art', generationOptions: { + seed: Math.random(), mimeType: 'image/jpeg', }, messages: [{ text: 'Three cats', weight: 1 }], diff --git a/examples/save-file-for-ai.ts b/examples/ai/save-file-for-ai.ts similarity index 100% rename from examples/save-file-for-ai.ts rename to examples/ai/save-file-for-ai.ts diff --git a/examples/package-lock.json b/examples/package-lock.json index e9432593..b87d5eb5 100644 --- a/examples/package-lock.json +++ b/examples/package-lock.json @@ -20,12 +20,12 @@ }, "..": { "name": "@yandex-cloud/nodejs-sdk", - "version": "3.0.0-alpha.11", + "version": "3.0.0-beta.1", "license": "MIT", "dependencies": { "@grpc/grpc-js": "^1.6.12", "abort-controller-x": "^0.4.1", - "axios": "^0.28.0", + "axios": "^1.8.2", "jsonwebtoken": "^9.0.0", "lodash": "^4.17.21", "log4js": "^6.4.0", @@ -78,7 +78,7 @@ "webpack-cli": "^5.1.4" }, "engines": { - "node": ">=18.0.0" + "node": ">=22.15.0" } }, "node_modules/@cspotcode/source-map-support": { @@ -478,7 +478,7 @@ "@typescript-eslint/parser": "^5.7.0", "@webpack-cli/generators": "^3.0.7", "abort-controller-x": "^0.4.1", - "axios": "^0.28.0", + "axios": "^1.8.2", "cross-env": "^7.0.3", "eslint": "^8.57.1", "eslint-config-airbnb-base": "^15.0.0", diff --git a/examples/tsconfig.json b/examples/tsconfig.json index 855f23a6..aca691ed 100644 --- a/examples/tsconfig.json +++ b/examples/tsconfig.json @@ -1,4 +1,4 @@ { "extends": "../tsconfig.json", - "include": ["./*.ts", "stream-stt/index.ts"] + "include": ["./**/*.ts", "stream-stt/index.ts"] } diff --git a/src/sdk/ai-assistants-v1/messageSdk.ts b/src/sdk/ai-assistants-v1/messageSdk.ts index 05410b56..25814bc5 100644 --- a/src/sdk/ai-assistants-v1/messageSdk.ts +++ b/src/sdk/ai-assistants-v1/messageSdk.ts @@ -25,7 +25,7 @@ export class MessageSdk { this.messageClient = session.client(MessageServiceClient, endpoint); } - static getMessageContent(...args: string[]): TypeFromProtoc { + static getMessageContent(...args: string[]): TypeFromProtoc { return { content: args.map((content) => ({ text: { content } })) }; }