mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-16 16:30:15 +01:00
* fix: regex issue extracting text with images in markdown * fix: update addImages function to include only the first observed image path in the response message * ci: tests for addImages function: correct image extraction * fix(GoogleClient): linting --------- Co-authored-by: Dongwoo Jeong <dongwoo.jeong@lge.com> Co-authored-by: Dongwoo Jeong <dongwoo@duck.com>
142 lines
5.8 KiB
JavaScript
142 lines
5.8 KiB
JavaScript
let addImages = require('./addImages');
|
|
|
|
describe('addImages', () => {
|
|
let intermediateSteps;
|
|
let responseMessage;
|
|
let options;
|
|
|
|
beforeEach(() => {
|
|
intermediateSteps = [];
|
|
responseMessage = { text: '' };
|
|
options = { debug: false };
|
|
this.options = options;
|
|
addImages = addImages.bind(this);
|
|
});
|
|
|
|
it('should handle null or undefined parameters', () => {
|
|
addImages(null, responseMessage);
|
|
expect(responseMessage.text).toBe('');
|
|
|
|
addImages(intermediateSteps, null);
|
|
expect(responseMessage.text).toBe('');
|
|
|
|
addImages(null, null);
|
|
expect(responseMessage.text).toBe('');
|
|
});
|
|
|
|
it('should append correct image markdown if not present in responseMessage', () => {
|
|
intermediateSteps.push({ observation: '' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('\n');
|
|
});
|
|
|
|
it('should not append image markdown if already present in responseMessage', () => {
|
|
responseMessage.text = '';
|
|
intermediateSteps.push({ observation: '' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('');
|
|
});
|
|
|
|
it('should correct and append image markdown with erroneous URL', () => {
|
|
responseMessage.text = '';
|
|
intermediateSteps.push({ observation: '' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('');
|
|
});
|
|
|
|
it('should correct multiple erroneous URLs in responseMessage', () => {
|
|
responseMessage.text =
|
|
' ';
|
|
intermediateSteps.push({ observation: '' });
|
|
intermediateSteps.push({ observation: '' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe(' ');
|
|
});
|
|
|
|
it('should not append non-image markdown observations', () => {
|
|
intermediateSteps.push({ observation: '[desc](/images/test.png)' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('');
|
|
});
|
|
|
|
it('should handle multiple observations', () => {
|
|
intermediateSteps.push({ observation: '' });
|
|
intermediateSteps.push({ observation: '' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('\n\n');
|
|
});
|
|
|
|
it('should not append if observation does not contain image markdown', () => {
|
|
intermediateSteps.push({ observation: 'This is a test observation without image markdown.' });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('');
|
|
});
|
|
|
|
it('should append correctly from a real scenario', () => {
|
|
responseMessage.text =
|
|
'Here is the generated image based on your request. It depicts a surreal landscape filled with floating musical notes. The style is impressionistic, with vibrant sunset hues dominating the scene. At the center, there\'s a silhouette of a grand piano, adding a dreamy emotion to the overall image. This could serve as a unique and creative music album cover. Would you like to make any changes or generate another image?';
|
|
const originalText = responseMessage.text;
|
|
const imageMarkdown = '';
|
|
intermediateSteps.push({ observation: imageMarkdown });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe(`${originalText}\n${imageMarkdown}`);
|
|
});
|
|
|
|
it('should extract only image markdowns when there is text between them', () => {
|
|
const markdownWithTextBetweenImages = `
|
|

|
|
Some text between images that should not be included.
|
|

|
|
More text that should be ignored.
|
|

|
|
`;
|
|
intermediateSteps.push({ observation: markdownWithTextBetweenImages });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('\n');
|
|
});
|
|
|
|
it('should only return the first image when multiple images are present', () => {
|
|
const markdownWithMultipleImages = `
|
|

|
|

|
|

|
|
`;
|
|
intermediateSteps.push({ observation: markdownWithMultipleImages });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('\n');
|
|
});
|
|
|
|
it('should not include any text or metadata surrounding the image markdown', () => {
|
|
const markdownWithMetadata = `
|
|
Title: Test Document
|
|
Author: John Doe
|
|

|
|
Some content after the image.
|
|
Vector values: [0.1, 0.2, 0.3]
|
|
`;
|
|
intermediateSteps.push({ observation: markdownWithMetadata });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('\n');
|
|
});
|
|
|
|
it('should handle complex markdown with multiple images and only return the first one', () => {
|
|
const complexMarkdown = `
|
|
# Document Title
|
|
|
|
## Section 1
|
|
Here's some text with an embedded image:
|
|

|
|
|
|
## Section 2
|
|
More text here...
|
|

|
|
|
|
### Subsection
|
|
Even more content
|
|

|
|
`;
|
|
intermediateSteps.push({ observation: complexMarkdown });
|
|
addImages(intermediateSteps, responseMessage);
|
|
expect(responseMessage.text).toBe('\n');
|
|
});
|
|
});
|