import React, { useState, useEffect } from 'react'; import { Box, Button, TextField, Typography, Alert, CircularProgress, Card, CardContent, CardActions, Grid, Chip, Divider } from '@mui/material'; import { getApiKeys } from '../../api/onboarding'; import { processResearchTopic, processResearchResults, validateResearchRequest, getResearchProvidersInfo, generateResearchReport, ResearchTopicRequest } from '../../api/componentLogic'; const ResearchTestStep: React.FC<{ onContinue: () => void }> = ({ onContinue }) => { const [topic, setTopic] = useState(''); const [loading, setLoading] = useState(false); const [error, setError] = useState(null); const [success, setSuccess] = useState(null); const [researchResults, setResearchResults] = useState(null); const [providersInfo, setProvidersInfo] = useState(null); const [apiKeys, setApiKeys] = useState>({}); useEffect(() => { async function loadData() { try { // Load API keys const keys = await getApiKeys(); setApiKeys(keys); // Load providers info const providers = await getResearchProvidersInfo(); setProvidersInfo(providers.providers_info); } catch (e) { console.error('Failed to load research data:', e); } } loadData(); }, []); const handleResearch = async () => { if (!topic.trim()) { setError('Please enter a research topic.'); return; } setLoading(true); setError(null); setSuccess(null); setResearchResults(null); try { // Validate research request const validation = await validateResearchRequest(topic, apiKeys); if (!validation.valid) { setError(`Research validation failed: ${validation.errors.join(', ')}`); if (validation.warnings.length > 0) { console.warn('Research warnings:', validation.warnings); } setLoading(false); return; } // Process research topic const request: ResearchTopicRequest = { topic: topic.trim(), api_keys: apiKeys }; const results = await processResearchTopic(request); if (!results.success) { setError(`Research failed: ${results.error}`); setLoading(false); return; } // Process research results const processedResults = await processResearchResults(results); if (processedResults.success) { setResearchResults(processedResults.processed_results); setSuccess('Research completed successfully!'); } else { setError('Failed to process research results.'); } } catch (e) { setError('Research failed. Please try again.'); console.error('Research error:', e); } finally { setLoading(false); } }; const handleGenerateReport = async () => { if (!researchResults) { setError('No research results available to generate report.'); return; } setLoading(true); try { const report = await generateResearchReport({ processed_results: researchResults }); if (report.success) { setSuccess('Research report generated successfully!'); console.log('Generated report:', report.report); } else { setError('Failed to generate research report.'); } } catch (e) { setError('Failed to generate research report.'); console.error('Report generation error:', e); } finally { setLoading(false); } }; const availableProviders = providersInfo ? Object.keys(providersInfo.providers).filter( provider => apiKeys[providersInfo.providers[provider].api_key_name] ) : []; return ( Test Research Functionality Test the AI research capabilities with your configured settings and API keys. {/* Research Input */} Research Topic setTopic(e.target.value)} fullWidth multiline rows={2} placeholder="e.g., 'Latest trends in artificial intelligence'" disabled={loading} /> {availableProviders.length > 0 && ( Available providers: {availableProviders.map(provider => ( ))} )} {/* Research Results */} {researchResults && ( Research Results Topic: {researchResults.topic} Summary: {researchResults.summary} {researchResults.key_insights && researchResults.key_insights.length > 0 && ( Key Insights: {researchResults.key_insights.map((insight: string, index: number) => ( ))} )} {researchResults.trends && researchResults.trends.length > 0 && ( Trends: {researchResults.trends.map((trend: string, index: number) => ( ))} )} {researchResults.metadata && ( Research Details: Confidence: {Math.round((researchResults.metadata.confidence_score || 0) * 100)}% | Depth: {researchResults.metadata.research_depth} | Providers: {researchResults.metadata.providers_used?.join(', ')} )} )} {error && {error}} {success && {success}} ); }; export default ResearchTestStep;