152 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
		
		
			
		
	
	
			152 lines
		
	
	
		
			5.7 KiB
		
	
	
	
		
			TypeScript
		
	
	
	
	
	
| 
								 | 
							
								import { expect, tap } from '@push.rocks/tapbundle';
							 | 
						||
| 
								 | 
							
								import * as qenv from '@push.rocks/qenv';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								const testQenv = new qenv.Qenv('./', './.nogit/');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								import * as smartai from '../ts/index.js';
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								let anthropicProviderQuick: smartai.AnthropicProvider;
							 | 
						||
| 
								 | 
							
								let anthropicProviderNormal: smartai.AnthropicProvider;
							 | 
						||
| 
								 | 
							
								let anthropicProviderDeep: smartai.AnthropicProvider;
							 | 
						||
| 
								 | 
							
								let anthropicProviderOff: smartai.AnthropicProvider;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Test 'quick' mode
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should create Anthropic provider with quick mode', async () => {
							 | 
						||
| 
								 | 
							
								  anthropicProviderQuick = new smartai.AnthropicProvider({
							 | 
						||
| 
								 | 
							
								    anthropicToken: await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN'),
							 | 
						||
| 
								 | 
							
								    extendedThinking: 'quick',
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  await anthropicProviderQuick.start();
							 | 
						||
| 
								 | 
							
								  expect(anthropicProviderQuick).toBeInstanceOf(smartai.AnthropicProvider);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should chat with quick mode (2048 tokens)', async () => {
							 | 
						||
| 
								 | 
							
								  const userMessage = 'Explain quantum entanglement in simple terms.';
							 | 
						||
| 
								 | 
							
								  const response = await anthropicProviderQuick.chat({
							 | 
						||
| 
								 | 
							
								    systemMessage: 'You are a helpful physics teacher.',
							 | 
						||
| 
								 | 
							
								    userMessage: userMessage,
							 | 
						||
| 
								 | 
							
								    messageHistory: [],
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  console.log(`Quick Mode - User: ${userMessage}`);
							 | 
						||
| 
								 | 
							
								  console.log(`Quick Mode - Response length: ${response.message.length} chars`);
							 | 
						||
| 
								 | 
							
								  expect(response.role).toEqual('assistant');
							 | 
						||
| 
								 | 
							
								  expect(response.message).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(response.message.toLowerCase()).toInclude('quantum');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should stop quick mode provider', async () => {
							 | 
						||
| 
								 | 
							
								  await anthropicProviderQuick.stop();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Test 'normal' mode (default)
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should create Anthropic provider with normal mode (default)', async () => {
							 | 
						||
| 
								 | 
							
								  anthropicProviderNormal = new smartai.AnthropicProvider({
							 | 
						||
| 
								 | 
							
								    anthropicToken: await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN'),
							 | 
						||
| 
								 | 
							
								    // extendedThinking not specified, should default to 'normal'
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  await anthropicProviderNormal.start();
							 | 
						||
| 
								 | 
							
								  expect(anthropicProviderNormal).toBeInstanceOf(smartai.AnthropicProvider);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should chat with normal mode (8000 tokens default)', async () => {
							 | 
						||
| 
								 | 
							
								  const userMessage = 'What are the implications of the P vs NP problem?';
							 | 
						||
| 
								 | 
							
								  const response = await anthropicProviderNormal.chat({
							 | 
						||
| 
								 | 
							
								    systemMessage: 'You are a helpful computer science expert.',
							 | 
						||
| 
								 | 
							
								    userMessage: userMessage,
							 | 
						||
| 
								 | 
							
								    messageHistory: [],
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  console.log(`Normal Mode - User: ${userMessage}`);
							 | 
						||
| 
								 | 
							
								  console.log(`Normal Mode - Response length: ${response.message.length} chars`);
							 | 
						||
| 
								 | 
							
								  expect(response.role).toEqual('assistant');
							 | 
						||
| 
								 | 
							
								  expect(response.message).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(response.message.length).toBeGreaterThan(50);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should stop normal mode provider', async () => {
							 | 
						||
| 
								 | 
							
								  await anthropicProviderNormal.stop();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Test 'deep' mode
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should create Anthropic provider with deep mode', async () => {
							 | 
						||
| 
								 | 
							
								  anthropicProviderDeep = new smartai.AnthropicProvider({
							 | 
						||
| 
								 | 
							
								    anthropicToken: await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN'),
							 | 
						||
| 
								 | 
							
								    extendedThinking: 'deep',
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  await anthropicProviderDeep.start();
							 | 
						||
| 
								 | 
							
								  expect(anthropicProviderDeep).toBeInstanceOf(smartai.AnthropicProvider);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should chat with deep mode (16000 tokens)', async () => {
							 | 
						||
| 
								 | 
							
								  const userMessage = 'Analyze the philosophical implications of artificial consciousness.';
							 | 
						||
| 
								 | 
							
								  const response = await anthropicProviderDeep.chat({
							 | 
						||
| 
								 | 
							
								    systemMessage: 'You are a philosopher and cognitive scientist.',
							 | 
						||
| 
								 | 
							
								    userMessage: userMessage,
							 | 
						||
| 
								 | 
							
								    messageHistory: [],
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  console.log(`Deep Mode - User: ${userMessage}`);
							 | 
						||
| 
								 | 
							
								  console.log(`Deep Mode - Response length: ${response.message.length} chars`);
							 | 
						||
| 
								 | 
							
								  expect(response.role).toEqual('assistant');
							 | 
						||
| 
								 | 
							
								  expect(response.message).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(response.message.length).toBeGreaterThan(100);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should stop deep mode provider', async () => {
							 | 
						||
| 
								 | 
							
								  await anthropicProviderDeep.stop();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Test 'off' mode
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should create Anthropic provider with thinking disabled', async () => {
							 | 
						||
| 
								 | 
							
								  anthropicProviderOff = new smartai.AnthropicProvider({
							 | 
						||
| 
								 | 
							
								    anthropicToken: await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN'),
							 | 
						||
| 
								 | 
							
								    extendedThinking: 'off',
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  await anthropicProviderOff.start();
							 | 
						||
| 
								 | 
							
								  expect(anthropicProviderOff).toBeInstanceOf(smartai.AnthropicProvider);
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should chat with thinking disabled', async () => {
							 | 
						||
| 
								 | 
							
								  const userMessage = 'What is 2 + 2?';
							 | 
						||
| 
								 | 
							
								  const response = await anthropicProviderOff.chat({
							 | 
						||
| 
								 | 
							
								    systemMessage: 'You are a helpful assistant.',
							 | 
						||
| 
								 | 
							
								    userMessage: userMessage,
							 | 
						||
| 
								 | 
							
								    messageHistory: [],
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  console.log(`Thinking Off - User: ${userMessage}`);
							 | 
						||
| 
								 | 
							
								  console.log(`Thinking Off - Response: ${response.message}`);
							 | 
						||
| 
								 | 
							
								  expect(response.role).toEqual('assistant');
							 | 
						||
| 
								 | 
							
								  expect(response.message).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(response.message).toInclude('4');
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should stop off mode provider', async () => {
							 | 
						||
| 
								 | 
							
								  await anthropicProviderOff.stop();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// Test with vision method
							 | 
						||
| 
								 | 
							
								tap.test('Extended Thinking: should work with vision method', async () => {
							 | 
						||
| 
								 | 
							
								  const provider = new smartai.AnthropicProvider({
							 | 
						||
| 
								 | 
							
								    anthropicToken: await testQenv.getEnvVarOnDemand('ANTHROPIC_TOKEN'),
							 | 
						||
| 
								 | 
							
								    extendedThinking: 'normal',
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								  await provider.start();
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  // Create a simple test image (1x1 red pixel PNG)
							 | 
						||
| 
								 | 
							
								  const redPixelPng = Buffer.from(
							 | 
						||
| 
								 | 
							
								    'iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVR42mP8z8DwHwAFBQIAX8jx0gAAAABJRU5ErkJggg==',
							 | 
						||
| 
								 | 
							
								    'base64'
							 | 
						||
| 
								 | 
							
								  );
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  const response = await provider.vision({
							 | 
						||
| 
								 | 
							
								    image: redPixelPng,
							 | 
						||
| 
								 | 
							
								    prompt: 'What color is this image?',
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  console.log(`Vision with Thinking - Response: ${response}`);
							 | 
						||
| 
								 | 
							
								  expect(response).toBeTruthy();
							 | 
						||
| 
								 | 
							
								  expect(response.toLowerCase()).toInclude('red');
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								  await provider.stop();
							 | 
						||
| 
								 | 
							
								});
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								export default tap.start();
							 |