Spaces:
Runtime error
Runtime error
File size: 2,159 Bytes
077865a | 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 | import { describe, it, expect, vi, beforeEach } from 'vitest';
import { CohereProvider } from '../../providers/cohere.js';
describe('CohereProvider', () => {
let provider: CohereProvider;
beforeEach(() => {
provider = new CohereProvider();
});
it('should have correct platform and name', () => {
expect(provider.platform).toBe('cohere');
expect(provider.name).toBe('Cohere');
});
it('should call compatibility API and return OpenAI response', async () => {
let capturedUrl = '';
let capturedBody: any = null;
vi.spyOn(global, 'fetch').mockImplementationOnce(async (url, init) => {
capturedUrl = String(url);
capturedBody = JSON.parse((init as any).body);
return {
ok: true,
json: () => Promise.resolve({
id: 'cohere-123',
object: 'chat.completion',
created: 123,
model: 'command-a-03-2025',
choices: [{ index: 0, message: { role: 'assistant', content: 'Hello from Cohere!' }, finish_reason: 'stop' }],
usage: { prompt_tokens: 10, completion_tokens: 5, total_tokens: 15 },
}),
} as any;
});
const result = await provider.chatCompletion(
'test-key',
[{ role: 'user', content: 'Hi' }],
'command-r-plus-08-2024',
{
tools: [{
type: 'function',
function: {
name: 'get_weather',
parameters: {
type: 'object',
properties: { city: { type: 'string' } },
},
},
}],
},
);
expect(capturedUrl).toContain('/compatibility/v1/chat/completions');
expect(capturedBody.tools).toHaveLength(1);
expect(result.object).toBe('chat.completion');
expect(result.choices[0].message.content).toBe('Hello from Cohere!');
expect(result.usage.prompt_tokens).toBe(10);
expect(result.usage.completion_tokens).toBe(5);
expect(result._routed_via?.platform).toBe('cohere');
});
it('should validate key', async () => {
vi.spyOn(global, 'fetch').mockResolvedValueOnce({ ok: true } as any);
expect(await provider.validateKey('valid')).toBe(true);
});
});
|