Files
ruvnet--RuView/vendor/sublinear-time-solver/npx/goalie/tests/test-search-api.js
T
rUv 407b46b206 feat: vendor midstream and sublinear-time-solver libraries (#109)
Add ruvnet/midstream (AIMDS real-time inference) and
ruvnet/sublinear-time-solver (sublinear optimization algorithms)
as vendored dependencies under vendor/.
2026-03-02 23:34:05 -05:00

154 lines
5.2 KiB
JavaScript

#!/usr/bin/env node
import { readFileSync } from 'fs';
import { fileURLToPath } from 'url';
import { dirname, join } from 'path';
const __filename = fileURLToPath(import.meta.url);
const __dirname = dirname(__filename);
// Load environment variables manually
const envPath = join(__dirname, '.env');
const envContent = readFileSync(envPath, 'utf-8');
const envVars = {};
envContent.split('\n').forEach(line => {
if (line && !line.startsWith('#')) {
const [key, value] = line.split('=');
if (key && value) {
envVars[key.trim()] = value.trim();
}
}
});
async function testPerplexitySearchAPI() {
const apiKey = envVars.PERPLEXITY_API_KEY;
if (!apiKey) {
console.error('❌ PERPLEXITY_API_KEY not found in .env file');
process.exit(1);
}
console.log('🔑 API Key found:', apiKey.substring(0, 10) + '...' + apiKey.substring(apiKey.length - 4));
console.log('\n📡 Testing Perplexity Search API...\n');
// Test 1: Basic search with Sonar model
console.log('1️⃣ Testing basic search with Sonar model...');
try {
const response = await fetch('https://api.perplexity.ai/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'sonar',
messages: [
{
role: 'user',
content: 'What are the latest developments in AI reasoning models in 2024?'
}
],
search_domain_filter: ["openai.com", "anthropic.com", "deepmind.com"],
search_recency_filter: "month",
return_citations: true
})
});
const data = await response.json();
if (response.ok) {
console.log('✅ Basic search successful!');
console.log(' Response length:', data.choices[0].message.content.length, 'chars');
console.log(' Citations:', data.citations?.length || 0, 'sources\n');
} else {
console.error('❌ Basic search failed:', data.error);
}
} catch (error) {
console.error('❌ Error:', error.message);
}
// Test 2: Multi-turn conversation
console.log('2️⃣ Testing multi-turn conversation...');
try {
const response = await fetch('https://api.perplexity.ai/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'sonar',
messages: [
{
role: 'user',
content: 'What is GOAP planning?'
},
{
role: 'assistant',
content: 'GOAP (Goal-Oriented Action Planning) is an AI planning technique used primarily in game development...'
},
{
role: 'user',
content: 'How does it compare to behavior trees?'
}
]
})
});
const data = await response.json();
if (response.ok) {
console.log('✅ Multi-turn conversation successful!');
console.log(' Response preview:', data.choices[0].message.content.substring(0, 100) + '...\n');
} else {
console.error('❌ Multi-turn failed:', data.error);
}
} catch (error) {
console.error('❌ Error:', error.message);
}
// Test 3: Academic search mode (if available)
console.log('3️⃣ Testing with different parameters...');
try {
const response = await fetch('https://api.perplexity.ai/chat/completions', {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'sonar',
messages: [
{
role: 'system',
content: 'You are a helpful research assistant. Be concise.'
},
{
role: 'user',
content: 'Explain transformer architecture in one paragraph'
}
],
temperature: 0.1,
max_tokens: 300
})
});
const data = await response.json();
if (response.ok) {
console.log('✅ Custom parameters test successful!');
console.log(' Model used:', data.model);
console.log(' Token usage:', JSON.stringify(data.usage || {}), '\n');
} else {
console.error('❌ Custom params failed:', data.error);
}
} catch (error) {
console.error('❌ Error:', error.message);
}
console.log('🎉 All tests completed!');
}
// Run the tests
testPerplexitySearchAPI();