1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
|
- import { AzureOpenAiCompletionProvider } from '../src/providers/azureopenai';
- import { AzureOpenAiGenericProvider } from '../src/providers/azureopenai';
- import { maybeEmitAzureOpenAiWarning } from '../src/providers/azureopenaiUtil';
- import { HuggingfaceTextGenerationProvider } from '../src/providers/huggingface';
- import { OpenAiCompletionProvider } from '../src/providers/openai';
- import type { TestSuite, TestCase } from '../src/types';
- jest.mock('../src/logger');
- describe('maybeEmitAzureOpenAiWarning', () => {
- it('should not emit warning when no Azure providers are used', () => {
- const testSuite: TestSuite = {
- providers: [new OpenAiCompletionProvider('foo')],
- defaultTest: {},
- prompts: [],
- };
- const tests: TestCase[] = [
- {
- assert: [{ type: 'llm-rubric', value: 'foo bar' }],
- },
- ];
- const result = maybeEmitAzureOpenAiWarning(testSuite, tests);
- expect(result).toBe(false);
- });
- it('should not emit warning when Azure provider is used alone, but no model graded eval', () => {
- const testSuite: TestSuite = {
- providers: [new AzureOpenAiCompletionProvider('foo')],
- defaultTest: {},
- prompts: [],
- };
- const tests: TestCase[] = [
- {
- assert: [{ type: 'equals' }],
- },
- ];
- const result = maybeEmitAzureOpenAiWarning(testSuite, tests);
- expect(result).toBe(false);
- });
- it('should emit warning when Azure provider is used alone, but with model graded eval', () => {
- const testSuite: TestSuite = {
- providers: [new AzureOpenAiCompletionProvider('foo')],
- defaultTest: {},
- prompts: [],
- };
- const tests: TestCase[] = [
- {
- assert: [{ type: 'llm-rubric', value: 'foo bar' }],
- },
- ];
- const result = maybeEmitAzureOpenAiWarning(testSuite, tests);
- expect(result).toBe(true);
- });
- it('should emit warning when Azure provider used with non-OpenAI provider', () => {
- const testSuite: TestSuite = {
- providers: [
- new AzureOpenAiCompletionProvider('foo'),
- new HuggingfaceTextGenerationProvider('bar'),
- ],
- defaultTest: {},
- prompts: [],
- };
- const tests: TestCase[] = [
- {
- assert: [{ type: 'llm-rubric', value: 'foo bar' }],
- },
- ];
- const result = maybeEmitAzureOpenAiWarning(testSuite, tests);
- expect(result).toBe(true);
- });
- it('should not emit warning when Azure providers are used with a default provider set', () => {
- const testSuite: TestSuite = {
- providers: [new AzureOpenAiCompletionProvider('foo')],
- defaultTest: { options: { provider: 'azureopenai:....' } },
- prompts: [],
- };
- const tests: TestCase[] = [
- {
- assert: [{ type: 'llm-rubric', value: 'foo bar' }],
- },
- ];
- const result = maybeEmitAzureOpenAiWarning(testSuite, tests);
- expect(result).toBe(false);
- });
- it('should not emit warning when both Azure and OpenAI providers are used', () => {
- const testSuite: TestSuite = {
- providers: [new AzureOpenAiCompletionProvider('foo'), new OpenAiCompletionProvider('bar')],
- defaultTest: {},
- prompts: [],
- };
- const tests: TestCase[] = [
- {
- assert: [{ type: 'llm-rubric', value: 'foo bar' }],
- },
- ];
- const result = maybeEmitAzureOpenAiWarning(testSuite, tests);
- expect(result).toBe(false);
- });
- });
- describe('AzureOpenAiGenericProvider', () => {
- describe('getApiBaseUrl', () => {
- beforeEach(() => {
- delete process.env.AZURE_OPENAI_API_HOST;
- });
- it('should return apiBaseUrl if set', () => {
- const provider = new AzureOpenAiGenericProvider('test-deployment', {
- config: { apiBaseUrl: 'https://custom.azure.com' },
- });
- expect(provider.getApiBaseUrl()).toBe('https://custom.azure.com');
- });
- it('should return apiBaseUrl without trailing slash if set', () => {
- const provider = new AzureOpenAiGenericProvider('test-deployment', {
- config: { apiBaseUrl: 'https://custom.azure.com/' },
- });
- expect(provider.getApiBaseUrl()).toBe('https://custom.azure.com');
- });
- it('should construct URL from apiHost without protocol', () => {
- const provider = new AzureOpenAiGenericProvider('test-deployment', {
- config: { apiHost: 'api.azure.com' },
- });
- expect(provider.getApiBaseUrl()).toBe('https://api.azure.com');
- });
- it('should remove protocol from apiHost if present', () => {
- const provider = new AzureOpenAiGenericProvider('test-deployment', {
- config: { apiHost: 'https://api.azure.com' },
- });
- expect(provider.getApiBaseUrl()).toBe('https://api.azure.com');
- });
- it('should remove trailing slash from apiHost if present', () => {
- const provider = new AzureOpenAiGenericProvider('test-deployment', {
- config: { apiHost: 'api.azure.com/' },
- });
- expect(provider.getApiBaseUrl()).toBe('https://api.azure.com');
- });
- it('should return undefined if neither apiBaseUrl nor apiHost is set', () => {
- const provider = new AzureOpenAiGenericProvider('test-deployment', {});
- expect(provider.getApiBaseUrl()).toBeUndefined();
- });
- });
- });
|