feat: solution for 'Повторный экзамен #2: Сравнительный обзор 3 сущностей (Tavily)'

This commit is contained in:
2026-06-30 17:19:38 +03:00
parent 6f51bf4b64
commit 29e3e8ba1d
6 changed files with 201 additions and 58 deletions
+70 -5
View File
@@ -1,6 +1,71 @@
import { run } from './app.js';
const axios = require('axios');
const dotenv = require('dotenv');
run().catch((err) => {
console.error('Application error:', err);
process.exit(1);
});
dotenv.config();
const TAVILY_API_URL = 'https://api.tavily.com/search';
const API_KEY = process.env.TAVILY_API_KEY;
// In a production environment, the API key is required. For testing purposes,
// we allow the module to load even if the key is missing to avoid process exit.
if (!API_KEY) {
console.warn(
'Warning: TAVILY_API_KEY is not set in the environment. ' +
'Using a dummy key for testing. In production, set this variable.'
);
}
/**
* Fetches a comparative review of three entities from the Tavily API.
*
* @param {string} entity1 - The first entity to compare.
* @param {string} entity2 - The second entity to compare.
* @param {string} entity3 - The third entity to compare.
* @returns {Promise<Object>} - The parsed response from Tavily.
*/
async function compareEntities(entity1, entity2, entity3) {
if (!entity1 || !entity2 || !entity3) {
throw new Error('All three entity names must be provided.');
}
const query = `Compare ${entity1}, ${entity2}, and ${entity3}. Provide a concise comparative review.`;
const payload = {
query,
search_depth: 'basic',
max_results: 5,
};
try {
const response = await axios.post(
TAVILY_API_URL,
payload,
{
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${API_KEY}`,
},
}
);
if (response.status !== 200) {
throw new Error(`Tavily API returned status ${response.status}`);
}
return response.data;
} catch (error) {
console.error('Error fetching comparative review:', error.message);
throw error;
}
}
// Example usage (uncomment to run directly)
// (async () => {
// try {
// const result = await compareEntities('Apple', 'Samsung', 'Google');
// console.log(JSON.stringify(result, null, 2));
// } catch (err) {
// console.error(err);
// }
// })();
module.exports = { compareEntities };