0% found this document useful (0 votes)
5 views5 pages

Análise de Questões UniCesumar AI

keys

Uploaded by

wadoda3463
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
5 views5 pages

Análise de Questões UniCesumar AI

keys

Uploaded by

wadoda3463
Copyright
© All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd

// Função principal que extrai questões e processa

async function analyzeQuestions() {


try {
// Extrai questões da página UniCesumar
const questions = extractQuestions();

if ([Link] === 0) {
showStatus('❌ Nenhuma questão encontrada');
return;
}

showStatus(`🔍 Encontradas ${[Link]} questões. Processando...`);

// Processa cada questão


for (let i = 0; i < [Link]; i++) {
const question = questions[i];
showStatus(`🤖 Analisando questão ${i + 1}/${[Link]}...`);

const answer = await getAIAnswer(question);


if (answer) {
highlightCorrectAnswer(question, answer);
}

// Delay entre questões para não sobrecarregar a API


await new Promise(resolve => setTimeout(resolve, 1000));
}

showStatus('✅ Análise concluída!');

} catch (error) {
[Link]('Erro:', error);
showStatus('❌ Erro na análise: ' + [Link]);
}
}

// Extrai questões e alternativas da página


function extractQuestions() {
const questions = [];

// Seletores específicos para UniCesumar (mais genéricos)


const possibleQuestionSelectors = [
'.questao',
'.question',
'.pergunta',
'[class*="questao"]',
'[class*="question"]',
'div:has(input[type="radio"])',
'fieldset'
];

let questionElements = [];

// Tenta diferentes seletores


for (const selector of possibleQuestionSelectors) {
try {
questionElements = [Link](selector);
if ([Link] > 0) {
[Link](`Encontradas questões com seletor: ${selector}`);
break;
}
} catch (e) {
continue;
}
}

// Se não encontrou, procura por grupos de radio buttons


if ([Link] === 0) {
const radioGroups = {};
const radios = [Link]('input[type="radio"]');

[Link](radio => {
const name = [Link];
if (!radioGroups[name]) {
radioGroups[name] = [];
}
radioGroups[name].push(radio);
});

[Link](radioGroups).forEach((groupName, index) => {


const radios = radioGroups[groupName];

// Busca o texto da questão próximo aos radios


let questionText = '';
const firstRadio = radios[0];
let parent = [Link]('div, fieldset, section');

if (parent) {
// Procura por texto da questão
const textNodes = [Link]('p, div, span, h1, h2, h3, h4,
h5, h6');
for (const node of textNodes) {
if ([Link]().length > 20) {
questionText = [Link]();
break;
}
}
}

// Coleta alternativas
const alternatives = [];
[Link](radio => {
let altText = '';

const label = [Link](`label[for="${[Link]}"]`) ||


[Link]('label');
if (label) {
altText = [Link]();
} else if ([Link]) {
altText = [Link]?.trim() || '';
}

if (altText) {
[Link]({
element: radio,
text: altText,
value: [Link]
});
}
});

if (questionText && [Link] > 0) {


[Link]({
index: index,
text: questionText,
alternatives: alternatives,
element: parent
});
}
});
}

[Link](`Total de questões encontradas: ${[Link]}`);


return questions;
}

// Envia questão para a IA Perplexity (CORRIGIDO)


async function getAIAnswer(question) {
try {
// Busca a API key
const result = await [Link](['perplexityApiKey']);
const apiKey = [Link];

if (!apiKey) {
showStatus('❌ Configure a API Key da Perplexity primeiro');
return null;
}

// Formata a pergunta
const prompt = `Questão: ${[Link]}

Alternativas:
${[Link]((alt, i) =>
`${[Link](65 + i)}. ${[Link]}`
).join('\n')}

Responda apenas com a letra da alternativa correta (A, B, C, D ou E):`;

[Link]('Enviando prompt:', prompt);

// Chama a API da Perplexity (FORMATO CORRETO)


const response = await fetch('[Link] {
method: 'POST',
headers: {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
},
body: [Link]({
model: 'llama-3.1-sonar-small-128k-online', // Modelo correto
messages: [
{
role: 'user',
content: prompt
}
],
max_tokens: 10,
temperature: 0.1
})
});

[Link]('Status da resposta:', [Link]);

if (![Link]) {
const errorText = await [Link]();
[Link]('Erro da API:', errorText);
throw new Error(`API Error: ${[Link]} - ${errorText}`);
}

const data = await [Link]();


[Link]('Resposta da API:', data);

const answer = [Link][0].[Link]().toUpperCase();

// Extrai apenas a letra (A, B, C, D, E)


const match = [Link](/[A-E]/);
const finalAnswer = match ? match : null;

[Link]('Resposta processada:', finalAnswer);


return finalAnswer;

} catch (error) {
[Link]('Erro na API:', error);
showStatus(`❌ Erro na API: ${[Link]}`);
return null;
}
}

// Destaca a resposta correta


function highlightCorrectAnswer(question, answerLetter) {
const answerIndex = [Link](0) - 65; // A=0, B=1, etc.

if (answerIndex >= 0 && answerIndex < [Link]) {


const correctAlternative = [Link][answerIndex];

// Adiciona destaque visual


[Link] = `
background: #4CAF50 !important;
transform: scale(1.05) !important;
box-shadow: 0 0 15px #4CAF50 !important;
border: 3px solid #2E7D32 !important;
border-radius: 8px !important;
`;

// Adiciona ícone de sugestão


const suggestion = [Link]('span');
[Link] = ' 🤖✨ SUGERIDO';
[Link] = `
color: #4CAF50 !important;
font-weight: bold !important;
font-size: 14px !important;
margin-left: 10px !important;
`;

const label = [Link]('label') ||


[Link](`label[for="$
{[Link]}"]`);
if (label && ![Link]('.ai-suggestion')) {
[Link] = 'ai-suggestion';
[Link](suggestion);
}

[Link](`Destacada alternativa ${answerLetter} para questão $


{[Link] + 1}`);
}
}

// Mostra status na página


function showStatus(message) {
let statusDiv = [Link]('ai-helper-status');

if (!statusDiv) {
statusDiv = [Link]('div');
[Link] = 'ai-helper-status';
[Link] = `
position: fixed !important;
top: 20px !important;
right: 20px !important;
background: #333 !important;
color: white !important;
padding: 15px 20px !important;
border-radius: 8px !important;
z-index: 999999 !important;
font-family: Arial, sans-serif !important;
font-size: 14px !important;
box-shadow: 0 4px 12px rgba(0,0,0,0.5) !important;
max-width: 300px !important;
word-wrap: break-word !important;
`;
[Link](statusDiv);
}

[Link] = message;
[Link]('Status:', message);

// Remove depois de 5 segundos se for mensagem de sucesso/erro


if ([Link]('✅') || [Link]('❌')) {
setTimeout(() => {
if ([Link]) {
[Link](statusDiv);
}
}, 5000);
}
}

// Escuta mensagens do popup


[Link](function(request, sender, sendResponse) {
if ([Link] === "analyzeQuestions") {
analyzeQuestions();
sendResponse({status: "Iniciando análise..."});
}
});

[Link]('UniCesumar AI Helper carregado!');

You might also like