mirror of
https://github.com/danny-avila/LibreChat.git
synced 2025-12-17 00:40:14 +01:00
🖼️ refactor: Enhance Env Extraction & Agent Image Handling (#6131)
* refactor: use new image output format for agents using DALL-E tools * refactor: Enhance image fetching with proxy support and adjust logging placement in DALL-E 3 integration * refactor: Enhance StableDiffusionAPI to support agent-specific return values and display message for generated images * refactor: Add unit test execution for librechat-mcp in backend review workflow * refactor: Update environment variable extraction logic, export from serpate module to avoid circular refs, and remove deprecated tests * refactor: Add unit tests for environment variable extraction and enhance StdioOptionsSchema to process env variables
This commit is contained in:
parent
2293cd667e
commit
7f6b32ff04
14 changed files with 321 additions and 99 deletions
129
packages/data-provider/specs/utils.spec.ts
Normal file
129
packages/data-provider/specs/utils.spec.ts
Normal file
|
|
@ -0,0 +1,129 @@
|
|||
import { extractEnvVariable } from '../src/utils';
|
||||
|
||||
describe('Environment Variable Extraction', () => {
|
||||
const originalEnv = process.env;
|
||||
|
||||
beforeEach(() => {
|
||||
process.env = {
|
||||
...originalEnv,
|
||||
TEST_API_KEY: 'test-api-key-value',
|
||||
ANOTHER_SECRET: 'another-secret-value',
|
||||
};
|
||||
});
|
||||
|
||||
afterEach(() => {
|
||||
process.env = originalEnv;
|
||||
});
|
||||
|
||||
describe('extractEnvVariable (original tests)', () => {
|
||||
test('should return the value of the environment variable', () => {
|
||||
process.env.TEST_VAR = 'test_value';
|
||||
expect(extractEnvVariable('${TEST_VAR}')).toBe('test_value');
|
||||
});
|
||||
|
||||
test('should return the original string if the envrionment variable is not defined correctly', () => {
|
||||
process.env.TEST_VAR = 'test_value';
|
||||
expect(extractEnvVariable('${ TEST_VAR }')).toBe('${ TEST_VAR }');
|
||||
});
|
||||
|
||||
test('should return the original string if environment variable is not set', () => {
|
||||
expect(extractEnvVariable('${NON_EXISTENT_VAR}')).toBe('${NON_EXISTENT_VAR}');
|
||||
});
|
||||
|
||||
test('should return the original string if it does not contain an environment variable', () => {
|
||||
expect(extractEnvVariable('some_string')).toBe('some_string');
|
||||
});
|
||||
|
||||
test('should handle empty strings', () => {
|
||||
expect(extractEnvVariable('')).toBe('');
|
||||
});
|
||||
|
||||
test('should handle strings without variable format', () => {
|
||||
expect(extractEnvVariable('no_var_here')).toBe('no_var_here');
|
||||
});
|
||||
|
||||
/** No longer the expected behavior; keeping for reference */
|
||||
test.skip('should not process multiple variable formats', () => {
|
||||
process.env.FIRST_VAR = 'first';
|
||||
process.env.SECOND_VAR = 'second';
|
||||
expect(extractEnvVariable('${FIRST_VAR} and ${SECOND_VAR}')).toBe(
|
||||
'${FIRST_VAR} and ${SECOND_VAR}',
|
||||
);
|
||||
});
|
||||
});
|
||||
|
||||
describe('extractEnvVariable function', () => {
|
||||
it('should extract environment variables from exact matches', () => {
|
||||
expect(extractEnvVariable('${TEST_API_KEY}')).toBe('test-api-key-value');
|
||||
expect(extractEnvVariable('${ANOTHER_SECRET}')).toBe('another-secret-value');
|
||||
});
|
||||
|
||||
it('should extract environment variables from strings with prefixes', () => {
|
||||
expect(extractEnvVariable('prefix-${TEST_API_KEY}')).toBe('prefix-test-api-key-value');
|
||||
});
|
||||
|
||||
it('should extract environment variables from strings with suffixes', () => {
|
||||
expect(extractEnvVariable('${TEST_API_KEY}-suffix')).toBe('test-api-key-value-suffix');
|
||||
});
|
||||
|
||||
it('should extract environment variables from strings with both prefixes and suffixes', () => {
|
||||
expect(extractEnvVariable('prefix-${TEST_API_KEY}-suffix')).toBe(
|
||||
'prefix-test-api-key-value-suffix',
|
||||
);
|
||||
});
|
||||
|
||||
it('should not match invalid patterns', () => {
|
||||
expect(extractEnvVariable('$TEST_API_KEY')).toBe('$TEST_API_KEY');
|
||||
expect(extractEnvVariable('{TEST_API_KEY}')).toBe('{TEST_API_KEY}');
|
||||
expect(extractEnvVariable('TEST_API_KEY')).toBe('TEST_API_KEY');
|
||||
});
|
||||
});
|
||||
|
||||
describe('extractEnvVariable', () => {
|
||||
it('should extract environment variable values', () => {
|
||||
expect(extractEnvVariable('${TEST_API_KEY}')).toBe('test-api-key-value');
|
||||
expect(extractEnvVariable('${ANOTHER_SECRET}')).toBe('another-secret-value');
|
||||
});
|
||||
|
||||
it('should return the original string if environment variable is not found', () => {
|
||||
expect(extractEnvVariable('${NON_EXISTENT_VAR}')).toBe('${NON_EXISTENT_VAR}');
|
||||
});
|
||||
|
||||
it('should return the original string if no environment variable pattern is found', () => {
|
||||
expect(extractEnvVariable('plain-string')).toBe('plain-string');
|
||||
});
|
||||
});
|
||||
|
||||
describe('extractEnvVariable space trimming', () => {
|
||||
beforeEach(() => {
|
||||
process.env.HELLO = 'world';
|
||||
process.env.USER = 'testuser';
|
||||
});
|
||||
|
||||
it('should extract the value when string contains only an environment variable with surrounding whitespace', () => {
|
||||
expect(extractEnvVariable(' ${HELLO} ')).toBe('world');
|
||||
expect(extractEnvVariable(' ${HELLO} ')).toBe('world');
|
||||
expect(extractEnvVariable('\t${HELLO}\n')).toBe('world');
|
||||
});
|
||||
|
||||
it('should preserve content when variable is part of a larger string', () => {
|
||||
expect(extractEnvVariable('Hello ${USER}!')).toBe('Hello testuser!');
|
||||
expect(extractEnvVariable(' Hello ${USER}! ')).toBe('Hello testuser!');
|
||||
});
|
||||
|
||||
it('should not handle multiple variables', () => {
|
||||
expect(extractEnvVariable('${HELLO} ${USER}')).toBe('${HELLO} ${USER}');
|
||||
expect(extractEnvVariable(' ${HELLO} ${USER} ')).toBe('${HELLO} ${USER}');
|
||||
});
|
||||
|
||||
it('should handle undefined variables', () => {
|
||||
expect(extractEnvVariable(' ${UNDEFINED_VAR} ')).toBe('${UNDEFINED_VAR}');
|
||||
});
|
||||
|
||||
it('should handle mixed content correctly', () => {
|
||||
expect(extractEnvVariable('Welcome, ${USER}!\nYour message: ${HELLO}')).toBe(
|
||||
'Welcome, testuser!\nYour message: world',
|
||||
);
|
||||
});
|
||||
});
|
||||
});
|
||||
Loading…
Add table
Add a link
Reference in a new issue