diff --git a/api/app/clients/PluginsClient.js b/api/app/clients/PluginsClient.js index 6118c3547a1..ab04dd133eb 100644 --- a/api/app/clients/PluginsClient.js +++ b/api/app/clients/PluginsClient.js @@ -30,7 +30,7 @@ class PluginsClient extends OpenAIClient { super.setOptions(options); - if (this.functionsAgent && this.agentOptions.model && !this.useOpenRouter) { + if (this.functionsAgent && this.agentOptions.model && !this.useOpenRouter && !this.azure) { this.agentOptions.model = this.getFunctionModelName(this.agentOptions.model); } diff --git a/api/app/clients/specs/PluginsClient.test.js b/api/app/clients/specs/PluginsClient.test.js index b4e42b1fc51..9a4663934fc 100644 --- a/api/app/clients/specs/PluginsClient.test.js +++ b/api/app/clients/specs/PluginsClient.test.js @@ -2,8 +2,8 @@ const { HumanChatMessage, AIChatMessage } = require('langchain/schema'); const PluginsClient = require('../PluginsClient'); const crypto = require('crypto'); -jest.mock('../../../lib/db/connectDb'); -jest.mock('../../../models/Conversation', () => { +jest.mock('~/lib/db/connectDb'); +jest.mock('~/models/Conversation', () => { return function () { return { save: jest.fn(), @@ -12,6 +12,12 @@ jest.mock('../../../models/Conversation', () => { }; }); +const defaultAzureOptions = { + azureOpenAIApiInstanceName: 'your-instance-name', + azureOpenAIApiDeploymentName: 'your-deployment-name', + azureOpenAIApiVersion: '2020-07-01-preview', +}; + describe('PluginsClient', () => { let TestAgent; let options = { @@ -187,4 +193,30 @@ describe('PluginsClient', () => { expect(client.getFunctionModelName('')).toBe('gpt-3.5-turbo'); }); }); + describe('Azure OpenAI tests specific to Plugins', () => { + // TODO: add more tests for Azure OpenAI integration with Plugins + // let client; + // beforeEach(() => { + // client = new PluginsClient('dummy_api_key'); + // }); + + test('should not call getFunctionModelName when azure options are set', () => { + const spy = jest.spyOn(PluginsClient.prototype, 'getFunctionModelName'); + const model = 'gpt-4-turbo'; + + // note, without the azure change in PR #1766, `getFunctionModelName` is called twice + const testClient = new PluginsClient('dummy_api_key', { + agentOptions: { + model, + agent: 'functions', + }, + azure: defaultAzureOptions, + }); + + expect(spy).not.toHaveBeenCalled(); + expect(testClient.agentOptions.model).toBe(model); + + spy.mockRestore(); + }); + }); }); diff --git a/client/src/components/Chat/Messages/Content/Markdown.tsx b/client/src/components/Chat/Messages/Content/Markdown.tsx index e1d0268b5d7..8761e2f8c2d 100644 --- a/client/src/components/Chat/Messages/Content/Markdown.tsx +++ b/client/src/components/Chat/Messages/Content/Markdown.tsx @@ -72,7 +72,13 @@ const Markdown = memo(({ content, message, showCursor }: TContentProps) => { if (isInitializing) { rehypePlugins.pop(); - return ; + return ( +
+ +
+