UNPKG

@lobehub/chat

Version:

Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.

152 lines (119 loc) 5.97 kB
import { describe, expect, it } from 'vitest'; import { parseSystemAgent } from './parseSystemAgent'; describe('parseSystemAgent', () => { it('should parse a valid environment variable string correctly', () => { const envValue = 'topic=openai/gpt-3.5-turbo,translation=anthropic/claude-1'; const expected = { topic: { provider: 'openai', model: 'gpt-3.5-turbo' }, translation: { provider: 'anthropic', model: 'claude-1' }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should handle empty environment variable string', () => { const envValue = ''; const expected = {}; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should ignore unknown keys in environment variable string', () => { const envValue = 'topic=openai/gpt-3.5-turbo,unknown=test/model'; const expected = { topic: { provider: 'openai', model: 'gpt-3.5-turbo' }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should throw an error for missing model or provider values', () => { const envValue1 = 'topic=openai,translation=/claude-1'; const envValue2 = 'topic=/gpt-3.5-turbo,translation=anthropic/'; expect(() => parseSystemAgent(envValue1)).toThrowError(/Missing model or provider/); expect(() => parseSystemAgent(envValue2)).toThrowError(/Missing model or provider/); }); it('should throw an error for invalid environment variable format', () => { const envValue = 'topic-openai/gpt-3.5-turbo'; expect(() => parseSystemAgent(envValue)).toThrowError(/Invalid environment variable format/); }); it('should handle provider or model names with special characters', () => { const envValue = 'topic=openrouter/mistralai/mistral-7b-instruct:free'; const expected = { topic: { provider: 'openrouter', model: 'mistralai/mistral-7b-instruct:free' }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should handle extra whitespace in environment variable string', () => { const envValue = ' topic = openai/gpt-3.5-turbo , translation = anthropic/claude-1 '; const expected = { topic: { provider: 'openai', model: 'gpt-3.5-turbo' }, translation: { provider: 'anthropic', model: 'claude-1' }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should handle full-width comma in environment variable string', () => { const envValue = 'topic=openai/gpt-3.5-turbo,translation=anthropic/claude-1'; const expected = { topic: { provider: 'openai', model: 'gpt-3.5-turbo' }, translation: { provider: 'anthropic', model: 'claude-1' }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should handle extra whitespace around provider and model names', () => { const envValue = 'topic= openai / gpt-3.5-turbo ,translation= anthropic / claude-1 '; const expected = { topic: { provider: 'openai', model: 'gpt-3.5-turbo' }, translation: { provider: 'anthropic', model: 'claude-1' }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should handle an excessively long environment variable string', () => { const longProviderName = 'a'.repeat(100); const longModelName = 'b'.repeat(100); const envValue = `topic=${longProviderName}/${longModelName}`; const expected = { topic: { provider: longProviderName, model: longModelName }, }; expect(parseSystemAgent(envValue)).toEqual(expected); }); it('should apply default setting to all system agents when default is specified', () => { const envValue = 'default=ollama/deepseek-v3'; const result = parseSystemAgent(envValue); expect(result.topic).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.translation).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.agentMeta).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.historyCompress).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.thread).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.queryRewrite).toEqual({ provider: 'ollama', model: 'deepseek-v3', enabled: true, }); }); it('should override default setting with specific settings', () => { const envValue = 'default=ollama/deepseek-v3,topic=openai/gpt-4'; const result = parseSystemAgent(envValue); expect(result.topic).toEqual({ provider: 'openai', model: 'gpt-4' }); expect(result.translation).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.agentMeta).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.historyCompress).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.thread).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.queryRewrite).toEqual({ provider: 'ollama', model: 'deepseek-v3', enabled: true, }); }); it('should properly handle priority when topic appears before default in the string', () => { // 即使 topic 在 default 之前出现,topic 的设置仍然应该优先 const envValue = 'topic=openai/gpt-4,default=ollama/deepseek-v3'; const result = parseSystemAgent(envValue); // topic 应该保持自己的设置而不被 default 覆盖 expect(result.topic).toEqual({ provider: 'openai', model: 'gpt-4' }); // 其他系统智能体应该使用默认配置 expect(result.translation).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.agentMeta).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.historyCompress).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.thread).toEqual({ provider: 'ollama', model: 'deepseek-v3' }); expect(result.queryRewrite).toEqual({ provider: 'ollama', model: 'deepseek-v3', enabled: true, }); }); });