Files
ALwrity/frontend/src/services/researchEngineApi.ts

73 lines
2.3 KiB
TypeScript

import { apiClient } from '../api/client';
import { ResearchConfig, ResearchResponse } from './researchApi';
export interface ResearchEngineRequest {
query: string;
keywords: string[];
goal?: string; // factual | trending | competitive | educational | technical | inspirational
depth?: string; // quick | standard | comprehensive | expert
provider?: string; // auto | exa | tavily | google
content_type?: string; // blog | podcast | video | social | email | newsletter | whitepaper | general
industry?: string;
target_audience?: string;
tone?: string;
max_sources?: number;
recency?: string; // day | week | month | year
include_domains?: string[];
exclude_domains?: string[];
advanced_mode?: boolean;
// Raw provider params (optional)
exa_category?: string;
exa_search_type?: string;
tavily_topic?: string;
tavily_search_depth?: string;
tavily_include_answer?: boolean | string;
tavily_include_raw_content?: boolean | string;
tavily_time_range?: string;
tavily_country?: string;
config?: ResearchConfig;
}
export interface ResearchEngineResponse extends ResearchResponse {
provider_used?: string;
}
export interface ResearchTaskResponse {
task_id: string;
}
export interface ResearchTaskStatusResponse {
status: string;
progress_messages?: Array<{ timestamp: string; message: string }>;
result?: ResearchEngineResponse | null;
error?: string;
error_status?: number;
error_data?: any;
}
export const researchEngineApi = {
async execute(request: ResearchEngineRequest): Promise<ResearchEngineResponse> {
const { data } = await apiClient.post('/api/research/execute', request);
return data;
},
async start(request: ResearchEngineRequest): Promise<ResearchTaskResponse> {
const { data } = await apiClient.post('/api/research/start', request);
return data;
},
async pollStatus(taskId: string): Promise<ResearchTaskStatusResponse> {
const { data } = await apiClient.get(`/api/research/status/${taskId}`);
// Normalize shape to match usePolling expectations
return {
status: data.status || 'pending',
progress_messages: data.progress_messages || [],
result: data.result || null,
error: data.error,
error_status: data.error_status,
error_data: data.error_data,
};
},
};