From 78283e16864ff4c362ff4f76a5da4c7e61bc1cbb Mon Sep 17 00:00:00 2001 From: Danny Avila Date: Tue, 21 May 2024 17:01:49 -0400 Subject: [PATCH] =?UTF-8?q?=F0=9F=A4=96=20:=20Azure=20Assistants=20V2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- api/server/controllers/assistants/chatV2.js | 38 ++---------------- .../azureAssistants/initializeClient.js | 40 ------------------- api/server/services/start/assistants.js | 7 +++- api/server/utils/handleText.js | 1 - packages/data-provider/src/config.ts | 4 +- 5 files changed, 11 insertions(+), 79 deletions(-) diff --git a/api/server/controllers/assistants/chatV2.js b/api/server/controllers/assistants/chatV2.js index c72d5fc9b4..dcaa91a75c 100644 --- a/api/server/controllers/assistants/chatV2.js +++ b/api/server/controllers/assistants/chatV2.js @@ -19,9 +19,9 @@ const { saveAssistantMessage, } = require('~/server/services/Threads'); const { sendResponse, sendMessage, sleep, isEnabled, countTokens } = require('~/server/utils'); -const { runAssistant, createOnTextProgress } = require('~/server/services/AssistantService'); -const { createRun, StreamRunManager } = require('~/server/services/Runs'); +const { createOnTextProgress } = require('~/server/services/AssistantService'); const { addTitle } = require('~/server/services/Endpoints/assistants'); +const { StreamRunManager } = require('~/server/services/Runs'); const { getTransactions } = require('~/models/Transaction'); const checkBalance = require('~/models/checkBalance'); const { getConvo } = require('~/models/Conversation'); @@ -471,39 +471,7 @@ const chatV2 = async (req, res) => { /** @type {RunResponse | typeof StreamRunManager | undefined} */ let response; - const processRun = async (retry = false) => { - if (endpoint === EModelEndpoint.azureAssistants) { - body.model = openai._options.model; - openai.attachedFileIds = attachedFileIds; - if (retry) { - response = await runAssistant({ - openai, - thread_id, - run_id, - in_progress: openai.in_progress, - }); - return; - } - - /* NOTE: - * By default, a Run will use the model and tools configuration specified in Assistant object, - * but you can override most of these when creating the Run for added flexibility: - */ - const run = await createRun({ - openai, - thread_id, - body, - }); - - run_id = run.id; - await cache.set(cacheKey, `${thread_id}:${run_id}`, ten_minutes); - sendInitialResponse(); - - // todo: retry logic - response = await runAssistant({ openai, thread_id, run_id }); - return; - } - + const processRun = async () => { /** @type {{[AssistantStreamEvents.ThreadRunCreated]: (event: ThreadRunCreated) => Promise}} */ const handlers = { [AssistantStreamEvents.ThreadRunCreated]: async (event) => { diff --git a/api/server/services/Endpoints/azureAssistants/initializeClient.js b/api/server/services/Endpoints/azureAssistants/initializeClient.js index 69a55c74bb..8d225397bf 100644 --- a/api/server/services/Endpoints/azureAssistants/initializeClient.js +++ b/api/server/services/Endpoints/azureAssistants/initializeClient.js @@ -15,44 +15,6 @@ const OpenAIClient = require('~/app/clients/OpenAIClient'); const { isUserProvided } = require('~/server/utils'); const { constructAzureURL } = require('~/utils'); -class Files { - constructor(client) { - this._client = client; - } - /** - * Create an assistant file by attaching a - * [File](https://platform.openai.com/docs/api-reference/files) to an - * [assistant](https://platform.openai.com/docs/api-reference/assistants). - */ - create(assistantId, body, options) { - return this._client.post(`/assistants/${assistantId}/files`, { - body, - ...options, - headers: { 'OpenAI-Beta': 'assistants=v1', ...options?.headers }, - }); - } - - /** - * Retrieves an AssistantFile. - */ - retrieve(assistantId, fileId, options) { - return this._client.get(`/assistants/${assistantId}/files/${fileId}`, { - ...options, - headers: { 'OpenAI-Beta': 'assistants=v1', ...options?.headers }, - }); - } - - /** - * Delete an assistant file. - */ - del(assistantId, fileId, options) { - return this._client.delete(`/assistants/${assistantId}/files/${fileId}`, { - ...options, - headers: { 'OpenAI-Beta': 'assistants=v1', ...options?.headers }, - }); - } -} - const initializeClient = async ({ req, res, version, endpointOption, initAppClient = false }) => { const { PROXY, OPENAI_ORGANIZATION, AZURE_ASSISTANTS_API_KEY, AZURE_ASSISTANTS_BASE_URL } = process.env; @@ -168,8 +130,6 @@ const initializeClient = async ({ req, res, version, endpointOption, initAppClie ...opts, }); - openai.beta.assistants.files = new Files(openai); - openai.req = req; openai.res = res; diff --git a/api/server/services/start/assistants.js b/api/server/services/start/assistants.js index 394d7d1a3e..4a586e4835 100644 --- a/api/server/services/start/assistants.js +++ b/api/server/services/start/assistants.js @@ -12,7 +12,12 @@ const { logger } = require('~/config'); */ function azureAssistantsDefaults() { return { - capabilities: [Capabilities.tools, Capabilities.actions, Capabilities.code_interpreter], + capabilities: [ + Capabilities.tools, + Capabilities.actions, + Capabilities.code_interpreter, + Capabilities.retrieval, + ], version: defaultAssistantsVersion.azureAssistants, }; } diff --git a/api/server/utils/handleText.js b/api/server/utils/handleText.js index 70dc16b938..196859414e 100644 --- a/api/server/utils/handleText.js +++ b/api/server/utils/handleText.js @@ -181,7 +181,6 @@ function generateConfig(key, baseURL, endpoint) { config.retrievalModels = defaultRetrievalModels; config.capabilities = [ Capabilities.code_interpreter, - Capabilities.image_vision, Capabilities.retrieval, Capabilities.actions, Capabilities.tools, diff --git a/packages/data-provider/src/config.ts b/packages/data-provider/src/config.ts index 7deccbed0b..4e30654522 100644 --- a/packages/data-provider/src/config.ts +++ b/packages/data-provider/src/config.ts @@ -133,7 +133,7 @@ export enum Capabilities { export const defaultAssistantsVersion = { [EModelEndpoint.assistants]: 2, - [EModelEndpoint.azureAssistants]: 1, + [EModelEndpoint.azureAssistants]: 2, }; export const assistantEndpointSchema = z.object({ @@ -441,7 +441,7 @@ export const EndpointURLs: { [key in EModelEndpoint]: string } = { [EModelEndpoint.gptPlugins]: `/api/ask/${EModelEndpoint.gptPlugins}`, [EModelEndpoint.azureOpenAI]: `/api/ask/${EModelEndpoint.azureOpenAI}`, [EModelEndpoint.chatGPTBrowser]: `/api/ask/${EModelEndpoint.chatGPTBrowser}`, - [EModelEndpoint.azureAssistants]: '/api/assistants/v1/chat', + [EModelEndpoint.azureAssistants]: '/api/assistants/v2/chat', [EModelEndpoint.assistants]: '/api/assistants/v2/chat', };