67 lines
2.3 KiB
TypeScript
67 lines
2.3 KiB
TypeScript
|
|
import { expect, tap } from '@git.zone/tstest/tapbundle';
|
||
|
|
import * as qenv from '@push.rocks/qenv';
|
||
|
|
|
||
|
|
const testQenv = new qenv.Qenv('./', './.nogit/');
|
||
|
|
|
||
|
|
import * as smartai from '../ts/index.js';
|
||
|
|
|
||
|
|
let mistralProvider: smartai.MistralProvider;
|
||
|
|
|
||
|
|
tap.test('Mistral Chat: should create and start Mistral provider', async () => {
|
||
|
|
mistralProvider = new smartai.MistralProvider({
|
||
|
|
mistralToken: await testQenv.getEnvVarOnDemand('MISTRAL_API_KEY'),
|
||
|
|
});
|
||
|
|
await mistralProvider.start();
|
||
|
|
expect(mistralProvider).toBeInstanceOf(smartai.MistralProvider);
|
||
|
|
});
|
||
|
|
|
||
|
|
tap.test('Mistral Chat: should create chat response', async () => {
|
||
|
|
const userMessage = 'What is the capital of France? Answer in one word.';
|
||
|
|
const response = await mistralProvider.chat({
|
||
|
|
systemMessage: 'You are a helpful assistant. Be concise.',
|
||
|
|
userMessage: userMessage,
|
||
|
|
messageHistory: [],
|
||
|
|
});
|
||
|
|
console.log(`Mistral Chat - User: ${userMessage}`);
|
||
|
|
console.log(`Mistral Chat - Response: ${response.message}`);
|
||
|
|
|
||
|
|
expect(response.role).toEqual('assistant');
|
||
|
|
expect(response.message).toBeTruthy();
|
||
|
|
expect(response.message.toLowerCase()).toInclude('paris');
|
||
|
|
});
|
||
|
|
|
||
|
|
tap.test('Mistral Chat: should handle message history', async () => {
|
||
|
|
const messageHistory: smartai.ChatMessage[] = [
|
||
|
|
{ role: 'user', content: 'My name is Claude Test' },
|
||
|
|
{ role: 'assistant', content: 'Nice to meet you, Claude Test!' }
|
||
|
|
];
|
||
|
|
|
||
|
|
const response = await mistralProvider.chat({
|
||
|
|
systemMessage: 'You are a helpful assistant with good memory.',
|
||
|
|
userMessage: 'What is my name?',
|
||
|
|
messageHistory: messageHistory,
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log(`Mistral Memory Test - Response: ${response.message}`);
|
||
|
|
expect(response.message.toLowerCase()).toInclude('claude test');
|
||
|
|
});
|
||
|
|
|
||
|
|
tap.test('Mistral Chat: should handle longer conversations', async () => {
|
||
|
|
const response = await mistralProvider.chat({
|
||
|
|
systemMessage: 'You are a helpful coding assistant.',
|
||
|
|
userMessage: 'Write a simple hello world function in TypeScript. Keep it brief.',
|
||
|
|
messageHistory: [],
|
||
|
|
});
|
||
|
|
|
||
|
|
console.log(`Mistral Coding Test - Response: ${response.message}`);
|
||
|
|
expect(response.message).toBeTruthy();
|
||
|
|
// Should contain some TypeScript/function code
|
||
|
|
expect(response.message).toInclude('function');
|
||
|
|
});
|
||
|
|
|
||
|
|
tap.test('Mistral Chat: should stop the provider', async () => {
|
||
|
|
await mistralProvider.stop();
|
||
|
|
});
|
||
|
|
|
||
|
|
export default tap.start();
|