feat: solution for 'Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)'
This commit is contained in:
@@ -0,0 +1,99 @@
|
||||
import fetch from 'node-fetch';
|
||||
|
||||
const API_KEY = process.env.TAVILY_API_KEY;
|
||||
if (!API_KEY) {
|
||||
console.error('Error: TAVILY_API_KEY environment variable is not set.');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const API_URL = 'https://api.tavily.com/search';
|
||||
|
||||
const ENTITIES = [
|
||||
'Apple Inc.',
|
||||
'Microsoft Corporation',
|
||||
'Google LLC'
|
||||
];
|
||||
|
||||
const ATTRIBUTES = ['Title', 'URL', 'Snippet', 'Score'];
|
||||
|
||||
async function fetchEntityData(entity) {
|
||||
try {
|
||||
const response = await fetch(API_URL, {
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Authorization': `Bearer ${API_KEY}`
|
||||
},
|
||||
body: JSON.stringify({
|
||||
query: entity,
|
||||
search_depth: 'basic',
|
||||
include_raw_content: false,
|
||||
top_k: 1
|
||||
})
|
||||
});
|
||||
|
||||
if (!response.ok) {
|
||||
console.error(`Failed to fetch data for "${entity}". Status: ${response.status}`);
|
||||
return null;
|
||||
}
|
||||
|
||||
const data = await response.json();
|
||||
|
||||
if (!data.results || data.results.length === 0) {
|
||||
console.warn(`No results found for "${entity}".`);
|
||||
return {
|
||||
Entity: entity,
|
||||
Title: 'N/A',
|
||||
URL: 'N/A',
|
||||
Snippet: 'N/A',
|
||||
Score: 0
|
||||
};
|
||||
}
|
||||
|
||||
const topResult = data.results[0];
|
||||
return {
|
||||
Entity: entity,
|
||||
Title: topResult.title || 'N/A',
|
||||
URL: topResult.url || 'N/A',
|
||||
Snippet: topResult.snippet || 'N/A',
|
||||
Score: topResult.score || 0
|
||||
};
|
||||
} catch (error) {
|
||||
console.error(`Error fetching data for "${entity}":`, error);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
async function main() {
|
||||
const results = [];
|
||||
for (const entity of ENTITIES) {
|
||||
const data = await fetchEntityData(entity);
|
||||
if (data) {
|
||||
results.push(data);
|
||||
}
|
||||
}
|
||||
|
||||
if (results.length === 0) {
|
||||
console.error('No data to display.');
|
||||
return;
|
||||
}
|
||||
|
||||
// Determine the highest score for verdict
|
||||
const maxScore = Math.max(...results.map(r => r.Score));
|
||||
|
||||
// Add verdict column
|
||||
const tableData = results.map(r => ({
|
||||
Entity: r.Entity,
|
||||
Title: r.Title,
|
||||
URL: r.URL,
|
||||
Snippet: r.Snippet,
|
||||
Score: r.Score,
|
||||
Verdict: r.Score === maxScore ? 'Best' : ''
|
||||
}));
|
||||
|
||||
// Print table
|
||||
console.log('\nComparison Table (3xN with Verdict):\n');
|
||||
console.table(tableData);
|
||||
}
|
||||
|
||||
main();
|
||||
Reference in New Issue
Block a user