FreeLLMAPI / server /src /__tests__ /providers /cloudflare.test.ts
Nryn215's picture
Upload folder using huggingface_hub
077865a verified
Raw
History Blame Contribute Delete
3.31 kB
import { describe, it, expect, vi, beforeEach } from 'vitest';
import { CloudflareProvider } from '../../providers/cloudflare.js';
describe('CloudflareProvider', () => {
let provider: CloudflareProvider;
beforeEach(() => {
provider = new CloudflareProvider();
});
it('should have correct platform and name', () => {
expect(provider.platform).toBe('cloudflare');
expect(provider.name).toBe('Cloudflare Workers AI');
});
it('should parse account_id:token key format', async () => {
let capturedUrl = '';
let capturedHeaders: Record<string, string> = {};
let capturedBody: any = null;
vi.spyOn(global, 'fetch').mockImplementation(async (url, init) => {
capturedUrl = url as string;
capturedHeaders = (init as any).headers;
capturedBody = JSON.parse((init as any).body);
return {
ok: true,
json: () => Promise.resolve({
id: 'chatcmpl-cf',
object: 'chat.completion',
created: 123,
model: '@cf/meta/llama-3.1-70b-instruct',
choices: [{ index: 0, message: { role: 'assistant', content: 'Hello from CF!' }, finish_reason: 'stop' }],
usage: { prompt_tokens: 1, completion_tokens: 2, total_tokens: 3 },
}),
} as any;
});
const result = await provider.chatCompletion(
'abc123:my-token-here',
[{ role: 'user', content: 'Hi' }],
'@cf/meta/llama-3.1-70b-instruct',
);
expect(capturedUrl).toContain('abc123');
expect(capturedUrl).toContain('/ai/v1/chat/completions');
expect(capturedHeaders['Authorization']).toBe('Bearer my-token-here');
expect(capturedBody.model).toBe('@cf/meta/llama-3.1-70b-instruct');
expect(result.choices[0].message.content).toBe('Hello from CF!');
});
it('should throw if key format is wrong', async () => {
await expect(
provider.chatCompletion('no-colon-here', [{ role: 'user', content: 'Hi' }], 'model')
).rejects.toThrow(/account_id:api_token/);
});
it('should convert null assistant content to empty string (CF rejects null)', async () => {
let capturedBody: any = null;
vi.spyOn(global, 'fetch').mockImplementation(async (_url, init) => {
capturedBody = JSON.parse((init as any).body);
return {
ok: true,
json: () => Promise.resolve({
id: 'chatcmpl-cf',
object: 'chat.completion',
created: 123,
model: '@cf/meta/llama-3.1-70b-instruct',
choices: [{ index: 0, message: { role: 'assistant', content: 'ok' }, finish_reason: 'stop' }],
usage: { prompt_tokens: 1, completion_tokens: 1, total_tokens: 2 },
}),
} as any;
});
await provider.chatCompletion(
'abc123:token',
[
{ role: 'user', content: 'Weather?' },
{
role: 'assistant',
content: null,
tool_calls: [{
id: 'call_1',
type: 'function',
function: { name: 'get_weather', arguments: '{"city":"Karachi"}' },
}],
},
{ role: 'tool', tool_call_id: 'call_1', content: '{"temp":30}' },
],
'@cf/meta/llama-3.1-70b-instruct',
);
expect(capturedBody.messages[1].content).toBe('');
expect(capturedBody.messages[1].tool_calls).toHaveLength(1);
});
});