@codeguide/core 0.0.23 → 0.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +176 -292
- package/__tests__/services/codespace/codespace-models.test.ts +458 -0
- package/__tests__/services/security-keys.test.ts +587 -0
- package/codeguide.ts +3 -1
- package/dist/codeguide.d.ts +2 -1
- package/dist/codeguide.js +1 -0
- package/dist/services/codespace/codespace-service.d.ts +54 -1
- package/dist/services/codespace/codespace-service.js +136 -0
- package/dist/services/codespace/codespace-types.d.ts +60 -0
- package/dist/services/codespace/index.d.ts +1 -1
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +4 -1
- package/dist/services/security-keys/index.d.ts +3 -0
- package/dist/services/security-keys/index.js +21 -0
- package/dist/services/security-keys/security-keys-service.d.ts +111 -0
- package/dist/services/security-keys/security-keys-service.js +190 -0
- package/dist/services/security-keys/security-keys-types.d.ts +105 -0
- package/dist/services/security-keys/security-keys-types.js +8 -0
- package/package.json +1 -1
- package/services/codespace/codespace-service.ts +162 -0
- package/services/codespace/codespace-types.ts +82 -1
- package/services/codespace/index.ts +14 -1
- package/services/index.ts +2 -0
- package/services/security-keys/index.ts +25 -0
- package/services/security-keys/security-keys-service.ts +229 -0
- package/services/security-keys/security-keys-types.ts +187 -0
|
@@ -0,0 +1,458 @@
|
|
|
1
|
+
import { CodespaceService } from '../../../services/codespace/codespace-service'
|
|
2
|
+
import { APIServiceConfig } from '../../../types'
|
|
3
|
+
import axios from 'axios'
|
|
4
|
+
import axiosMockAdapter from 'axios-mock-adapter'
|
|
5
|
+
|
|
6
|
+
describe('CodespaceService - Models Endpoints', () => {
|
|
7
|
+
let service: CodespaceService
|
|
8
|
+
let mock: axiosMockAdapter
|
|
9
|
+
|
|
10
|
+
beforeEach(() => {
|
|
11
|
+
const config: APIServiceConfig = {
|
|
12
|
+
apiKey: 'test-api-key',
|
|
13
|
+
baseUrl: 'https://api.test.com',
|
|
14
|
+
timeout: 10000,
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
service = new CodespaceService(config)
|
|
18
|
+
mock = new axiosMockAdapter(axios)
|
|
19
|
+
})
|
|
20
|
+
|
|
21
|
+
afterEach(() => {
|
|
22
|
+
mock.reset()
|
|
23
|
+
})
|
|
24
|
+
|
|
25
|
+
// ============================================================================
|
|
26
|
+
// Get All Codespace Models Tests
|
|
27
|
+
// ============================================================================
|
|
28
|
+
|
|
29
|
+
describe('getCodespaceModels', () => {
|
|
30
|
+
it('should get all codespace models without filters', async () => {
|
|
31
|
+
const expectedResponse = [
|
|
32
|
+
{
|
|
33
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
34
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
35
|
+
key: 'gpt-4',
|
|
36
|
+
name: 'GPT-4',
|
|
37
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
38
|
+
base_url: 'https://api.openai.com/v1',
|
|
39
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
40
|
+
execution_mode: 'opencode',
|
|
41
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
42
|
+
provider: {
|
|
43
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
44
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
45
|
+
name: 'OpenAI',
|
|
46
|
+
key: 'openai',
|
|
47
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
id: '123e4567-e89b-12d3-a456-426614174002',
|
|
52
|
+
created_at: '2024-01-15T11:00:00.000Z',
|
|
53
|
+
key: 'claude-3-opus',
|
|
54
|
+
name: 'Claude 3 Opus',
|
|
55
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174001',
|
|
56
|
+
base_url: 'https://api.anthropic.com',
|
|
57
|
+
completion_base_url: null,
|
|
58
|
+
execution_mode: 'claude-code',
|
|
59
|
+
logo_src: 'https://example.com/logos/claude3.png',
|
|
60
|
+
provider: {
|
|
61
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
62
|
+
created_at: '2024-01-10T09:30:00.000Z',
|
|
63
|
+
name: 'Anthropic',
|
|
64
|
+
key: 'anthropic',
|
|
65
|
+
logo_src: 'https://example.com/logos/anthropic.png'
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
|
|
70
|
+
mock.onGet('/api/codespace-models/models').reply(200, expectedResponse)
|
|
71
|
+
|
|
72
|
+
const result = await service.getCodespaceModels()
|
|
73
|
+
|
|
74
|
+
expect(result).toEqual(expectedResponse)
|
|
75
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models')
|
|
76
|
+
})
|
|
77
|
+
|
|
78
|
+
it('should get codespace models filtered by provider_id', async () => {
|
|
79
|
+
const query = {
|
|
80
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000'
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const expectedResponse = [
|
|
84
|
+
{
|
|
85
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
86
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
87
|
+
key: 'gpt-4',
|
|
88
|
+
name: 'GPT-4',
|
|
89
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
90
|
+
base_url: 'https://api.openai.com/v1',
|
|
91
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
92
|
+
execution_mode: 'opencode',
|
|
93
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
94
|
+
provider: {
|
|
95
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
96
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
97
|
+
name: 'OpenAI',
|
|
98
|
+
key: 'openai',
|
|
99
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
]
|
|
103
|
+
|
|
104
|
+
mock.onGet('/api/codespace-models/models?provider_id=123e4567-e89b-12d3-a456-426614174000').reply(200, expectedResponse)
|
|
105
|
+
|
|
106
|
+
const result = await service.getCodespaceModels(query)
|
|
107
|
+
|
|
108
|
+
expect(result).toEqual(expectedResponse)
|
|
109
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models?provider_id=123e4567-e89b-12d3-a456-426614174000')
|
|
110
|
+
})
|
|
111
|
+
|
|
112
|
+
it('should get codespace models filtered by execution_mode', async () => {
|
|
113
|
+
const query = {
|
|
114
|
+
execution_mode: 'opencode'
|
|
115
|
+
}
|
|
116
|
+
|
|
117
|
+
const expectedResponse = [
|
|
118
|
+
{
|
|
119
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
120
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
121
|
+
key: 'gpt-4',
|
|
122
|
+
name: 'GPT-4',
|
|
123
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
124
|
+
base_url: 'https://api.openai.com/v1',
|
|
125
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
126
|
+
execution_mode: 'opencode',
|
|
127
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
128
|
+
provider: {
|
|
129
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
130
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
131
|
+
name: 'OpenAI',
|
|
132
|
+
key: 'openai',
|
|
133
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
]
|
|
137
|
+
|
|
138
|
+
mock.onGet('/api/codespace-models/models?execution_mode=opencode').reply(200, expectedResponse)
|
|
139
|
+
|
|
140
|
+
const result = await service.getCodespaceModels(query)
|
|
141
|
+
|
|
142
|
+
expect(result).toEqual(expectedResponse)
|
|
143
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models?execution_mode=opencode')
|
|
144
|
+
})
|
|
145
|
+
|
|
146
|
+
it('should handle authentication error', async () => {
|
|
147
|
+
const errorResponse = {
|
|
148
|
+
detail: 'Authentication required'
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
mock.onGet('/api/codespace-models/models').reply(401, errorResponse)
|
|
152
|
+
|
|
153
|
+
await expect(service.getCodespaceModels()).rejects.toThrow()
|
|
154
|
+
})
|
|
155
|
+
|
|
156
|
+
it('should handle server error', async () => {
|
|
157
|
+
const errorResponse = {
|
|
158
|
+
detail: 'Failed to fetch codespace models'
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
mock.onGet('/api/codespace-models/models').reply(500, errorResponse)
|
|
162
|
+
|
|
163
|
+
await expect(service.getCodespaceModels()).rejects.toThrow()
|
|
164
|
+
})
|
|
165
|
+
})
|
|
166
|
+
|
|
167
|
+
// ============================================================================
|
|
168
|
+
// Get Specific Codespace Model Tests
|
|
169
|
+
// ============================================================================
|
|
170
|
+
|
|
171
|
+
describe('getCodespaceModel', () => {
|
|
172
|
+
it('should get a specific codespace model by ID', async () => {
|
|
173
|
+
const modelId = '123e4567-e89b-12d3-a456-426614174001'
|
|
174
|
+
const expectedResponse = {
|
|
175
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
176
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
177
|
+
key: 'gpt-4',
|
|
178
|
+
name: 'GPT-4',
|
|
179
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
180
|
+
base_url: 'https://api.openai.com/v1',
|
|
181
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
182
|
+
execution_mode: 'opencode',
|
|
183
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
184
|
+
provider: {
|
|
185
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
186
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
187
|
+
name: 'OpenAI',
|
|
188
|
+
key: 'openai',
|
|
189
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
mock.onGet(`/api/codespace-models/models/${modelId}`).reply(200, expectedResponse)
|
|
194
|
+
|
|
195
|
+
const result = await service.getCodespaceModel(modelId)
|
|
196
|
+
|
|
197
|
+
expect(result).toEqual(expectedResponse)
|
|
198
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models/123e4567-e89b-12d3-a456-426614174001')
|
|
199
|
+
})
|
|
200
|
+
|
|
201
|
+
it('should handle model not found error', async () => {
|
|
202
|
+
const modelId = '123e4567-e89b-12d3-a456-426614174999'
|
|
203
|
+
const errorResponse = {
|
|
204
|
+
detail: 'Codespace model with ID 123e4567-e89b-12d3-a456-426614174999 not found'
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
mock.onGet(`/api/codespace-models/models/${modelId}`).reply(404, errorResponse)
|
|
208
|
+
|
|
209
|
+
await expect(service.getCodespaceModel(modelId)).rejects.toThrow()
|
|
210
|
+
})
|
|
211
|
+
|
|
212
|
+
it('should throw error when model_id is missing', async () => {
|
|
213
|
+
await expect(service.getCodespaceModel('')).rejects.toThrow('model_id is required')
|
|
214
|
+
})
|
|
215
|
+
})
|
|
216
|
+
|
|
217
|
+
// ============================================================================
|
|
218
|
+
// Get All LLM Model Providers Tests
|
|
219
|
+
// ============================================================================
|
|
220
|
+
|
|
221
|
+
describe('getLLMModelProviders', () => {
|
|
222
|
+
it('should get all LLM model providers', async () => {
|
|
223
|
+
const expectedResponse = [
|
|
224
|
+
{
|
|
225
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
226
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
227
|
+
name: 'OpenAI',
|
|
228
|
+
key: 'openai',
|
|
229
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
230
|
+
},
|
|
231
|
+
{
|
|
232
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
233
|
+
created_at: '2024-01-10T09:30:00.000Z',
|
|
234
|
+
name: 'Anthropic',
|
|
235
|
+
key: 'anthropic',
|
|
236
|
+
logo_src: 'https://example.com/logos/anthropic.png'
|
|
237
|
+
},
|
|
238
|
+
{
|
|
239
|
+
id: '123e4567-e89b-12d3-a456-426614174002',
|
|
240
|
+
created_at: '2024-01-10T10:00:00.000Z',
|
|
241
|
+
name: 'Google',
|
|
242
|
+
key: 'google',
|
|
243
|
+
logo_src: 'https://example.com/logos/google.png'
|
|
244
|
+
}
|
|
245
|
+
]
|
|
246
|
+
|
|
247
|
+
mock.onGet('/api/codespace-models/providers').reply(200, expectedResponse)
|
|
248
|
+
|
|
249
|
+
const result = await service.getLLMModelProviders()
|
|
250
|
+
|
|
251
|
+
expect(result).toEqual(expectedResponse)
|
|
252
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/providers')
|
|
253
|
+
})
|
|
254
|
+
|
|
255
|
+
it('should handle empty providers list', async () => {
|
|
256
|
+
const expectedResponse = []
|
|
257
|
+
|
|
258
|
+
mock.onGet('/api/codespace-models/providers').reply(200, expectedResponse)
|
|
259
|
+
|
|
260
|
+
const result = await service.getLLMModelProviders()
|
|
261
|
+
|
|
262
|
+
expect(result).toEqual(expectedResponse)
|
|
263
|
+
expect(result).toHaveLength(0)
|
|
264
|
+
})
|
|
265
|
+
})
|
|
266
|
+
|
|
267
|
+
// ============================================================================
|
|
268
|
+
// Get Specific LLM Model Provider Tests
|
|
269
|
+
// ============================================================================
|
|
270
|
+
|
|
271
|
+
describe('getLLMModelProvider', () => {
|
|
272
|
+
it('should get a specific LLM model provider by ID', async () => {
|
|
273
|
+
const providerId = '123e4567-e89b-12d3-a456-426614174000'
|
|
274
|
+
const expectedResponse = {
|
|
275
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
276
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
277
|
+
name: 'OpenAI',
|
|
278
|
+
key: 'openai',
|
|
279
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
280
|
+
}
|
|
281
|
+
|
|
282
|
+
mock.onGet(`/api/codespace-models/providers/${providerId}`).reply(200, expectedResponse)
|
|
283
|
+
|
|
284
|
+
const result = await service.getLLMModelProvider(providerId)
|
|
285
|
+
|
|
286
|
+
expect(result).toEqual(expectedResponse)
|
|
287
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/providers/123e4567-e89b-12d3-a456-426614174000')
|
|
288
|
+
})
|
|
289
|
+
|
|
290
|
+
it('should throw error when provider_id is missing', async () => {
|
|
291
|
+
await expect(service.getLLMModelProvider('')).rejects.toThrow('provider_id is required')
|
|
292
|
+
})
|
|
293
|
+
})
|
|
294
|
+
|
|
295
|
+
// ============================================================================
|
|
296
|
+
// Get Models by Provider Tests
|
|
297
|
+
// ============================================================================
|
|
298
|
+
|
|
299
|
+
describe('getModelsByProvider', () => {
|
|
300
|
+
it('should get models by provider', async () => {
|
|
301
|
+
const providerId = '123e4567-e89b-12d3-a456-426614174000'
|
|
302
|
+
const expectedResponse = [
|
|
303
|
+
{
|
|
304
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
305
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
306
|
+
key: 'gpt-4',
|
|
307
|
+
name: 'GPT-4',
|
|
308
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
309
|
+
base_url: 'https://api.openai.com/v1',
|
|
310
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
311
|
+
execution_mode: 'opencode',
|
|
312
|
+
logo_src: 'https://example.com/logos/gpt4.png'
|
|
313
|
+
},
|
|
314
|
+
{
|
|
315
|
+
id: '123e4567-e89b-12d3-a456-426614174003',
|
|
316
|
+
created_at: '2024-01-16T14:20:00.000Z',
|
|
317
|
+
key: 'gpt-3.5-turbo',
|
|
318
|
+
name: 'GPT-3.5 Turbo',
|
|
319
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
320
|
+
base_url: 'https://api.openai.com/v1',
|
|
321
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
322
|
+
execution_mode: 'opencode',
|
|
323
|
+
logo_src: 'https://example.com/logos/gpt35.png'
|
|
324
|
+
}
|
|
325
|
+
]
|
|
326
|
+
|
|
327
|
+
mock.onGet(`/api/codespace-models/providers/${providerId}/models`).reply(200, expectedResponse)
|
|
328
|
+
|
|
329
|
+
const result = await service.getModelsByProvider(providerId)
|
|
330
|
+
|
|
331
|
+
expect(result).toEqual(expectedResponse)
|
|
332
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/providers/123e4567-e89b-12d3-a456-426614174000/models')
|
|
333
|
+
})
|
|
334
|
+
|
|
335
|
+
it('should handle empty models list for provider', async () => {
|
|
336
|
+
const providerId = '123e4567-e89b-12d3-a456-426614174999'
|
|
337
|
+
const expectedResponse = []
|
|
338
|
+
|
|
339
|
+
mock.onGet(`/api/codespace-models/providers/${providerId}/models`).reply(200, expectedResponse)
|
|
340
|
+
|
|
341
|
+
const result = await service.getModelsByProvider(providerId)
|
|
342
|
+
|
|
343
|
+
expect(result).toEqual(expectedResponse)
|
|
344
|
+
expect(result).toHaveLength(0)
|
|
345
|
+
})
|
|
346
|
+
|
|
347
|
+
it('should throw error when provider_id is missing', async () => {
|
|
348
|
+
await expect(service.getModelsByProvider('')).rejects.toThrow('provider_id is required')
|
|
349
|
+
})
|
|
350
|
+
})
|
|
351
|
+
|
|
352
|
+
// ============================================================================
|
|
353
|
+
// Utility Method Tests
|
|
354
|
+
// ============================================================================
|
|
355
|
+
|
|
356
|
+
describe('buildQueryParams', () => {
|
|
357
|
+
it('should build query parameters correctly', async () => {
|
|
358
|
+
const query = {
|
|
359
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
360
|
+
execution_mode: 'opencode'
|
|
361
|
+
}
|
|
362
|
+
|
|
363
|
+
const expectedResponse = [
|
|
364
|
+
{
|
|
365
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
366
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
367
|
+
key: 'gpt-4',
|
|
368
|
+
name: 'GPT-4',
|
|
369
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
370
|
+
base_url: 'https://api.openai.com/v1',
|
|
371
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
372
|
+
execution_mode: 'opencode',
|
|
373
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
374
|
+
provider: {
|
|
375
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
376
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
377
|
+
name: 'OpenAI',
|
|
378
|
+
key: 'openai',
|
|
379
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
]
|
|
383
|
+
|
|
384
|
+
mock.onGet('/api/codespace-models/models?provider_id=123e4567-e89b-12d3-a456-426614174000&execution_mode=opencode').reply(200, expectedResponse)
|
|
385
|
+
|
|
386
|
+
const result = await service.getCodespaceModels(query)
|
|
387
|
+
|
|
388
|
+
expect(result).toEqual(expectedResponse)
|
|
389
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models?provider_id=123e4567-e89b-12d3-a456-426614174000&execution_mode=opencode')
|
|
390
|
+
})
|
|
391
|
+
|
|
392
|
+
it('should handle undefined and null values', async () => {
|
|
393
|
+
const query = {
|
|
394
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
395
|
+
execution_mode: undefined,
|
|
396
|
+
invalid_param: null
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
const expectedResponse = [
|
|
400
|
+
{
|
|
401
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
402
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
403
|
+
key: 'gpt-4',
|
|
404
|
+
name: 'GPT-4',
|
|
405
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
406
|
+
base_url: 'https://api.openai.com/v1',
|
|
407
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
408
|
+
execution_mode: 'opencode',
|
|
409
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
410
|
+
provider: {
|
|
411
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
412
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
413
|
+
name: 'OpenAI',
|
|
414
|
+
key: 'openai',
|
|
415
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
416
|
+
}
|
|
417
|
+
}
|
|
418
|
+
]
|
|
419
|
+
|
|
420
|
+
mock.onGet('/api/codespace-models/models?provider_id=123e4567-e89b-12d3-a456-426614174000').reply(200, expectedResponse)
|
|
421
|
+
|
|
422
|
+
const result = await service.getCodespaceModels(query)
|
|
423
|
+
|
|
424
|
+
expect(result).toEqual(expectedResponse)
|
|
425
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models?provider_id=123e4567-e89b-12d3-a456-426614174000')
|
|
426
|
+
})
|
|
427
|
+
|
|
428
|
+
it('should return empty string for no params', async () => {
|
|
429
|
+
const expectedResponse = [
|
|
430
|
+
{
|
|
431
|
+
id: '123e4567-e89b-12d3-a456-426614174001',
|
|
432
|
+
created_at: '2024-01-15T10:30:00.000Z',
|
|
433
|
+
key: 'gpt-4',
|
|
434
|
+
name: 'GPT-4',
|
|
435
|
+
provider_id: '123e4567-e89b-12d3-a456-426614174000',
|
|
436
|
+
base_url: 'https://api.openai.com/v1',
|
|
437
|
+
completion_base_url: 'https://api.openai.com/v1/completions',
|
|
438
|
+
execution_mode: 'opencode',
|
|
439
|
+
logo_src: 'https://example.com/logos/gpt4.png',
|
|
440
|
+
provider: {
|
|
441
|
+
id: '123e4567-e89b-12d3-a456-426614174000',
|
|
442
|
+
created_at: '2024-01-10T09:00:00.000Z',
|
|
443
|
+
name: 'OpenAI',
|
|
444
|
+
key: 'openai',
|
|
445
|
+
logo_src: 'https://example.com/logos/openai.png'
|
|
446
|
+
}
|
|
447
|
+
}
|
|
448
|
+
]
|
|
449
|
+
|
|
450
|
+
mock.onGet('/api/codespace-models/models').reply(200, expectedResponse)
|
|
451
|
+
|
|
452
|
+
const result = await service.getCodespaceModels()
|
|
453
|
+
|
|
454
|
+
expect(result).toEqual(expectedResponse)
|
|
455
|
+
expect(mock.history.get[0].url).toBe('/api/codespace-models/models')
|
|
456
|
+
})
|
|
457
|
+
})
|
|
458
|
+
})
|