// ---- API Request types ---- export interface InitRequest { model_name: string; chunk_size: number; chunk_overlap: number; batch_size: number; } export interface DocumentRequest { doc_id: string; text: string; } export interface QueryRequest { text: string; top_k: number; } export interface CompareRequest { text_a: string; text_b: string; } export interface KeywordAnalysisRequest { keyword: string; top_k: number; cluster_threshold: number; } export interface KeywordMatchRequest { keyword: string; candidate_meanings: string[]; } export interface BatchAnalysisRequest { keywords: string[]; top_k: number; cluster_threshold: number; compare_across: boolean; } // ---- API Response types ---- export interface ChunkPreview { index: number; text: string; } export interface InitResponse { status: string; model: string; load_time_seconds: number; } export interface AddDocResponse { status: string; doc_id: string; num_chunks: number; chunks_preview: ChunkPreview[]; } export interface BuildIndexResponse { status: string; total_chunks: number; embedding_dim: number; build_time_seconds: number; } export interface QueryResultItem { rank: number; score: number; doc_id: string; chunk_index: number; text: string; } export interface QueryResponse { query: string; results: QueryResultItem[]; } export interface CompareResponse { text_a: string; text_b: string; similarity: number; } export interface ClusterContext { doc_id: string; chunk_index: number; text: string; highlight_positions: [number, number][]; } export interface SimilarPassage { rank: number; score: number; doc_id: string; text: string; } export interface MeaningCluster { cluster_id: number; size: number; representative_text: string; contexts: ClusterContext[]; similar_passages: SimilarPassage[]; } export interface KeywordAnalysisResponse { keyword: string; total_occurrences: number; meaning_clusters: MeaningCluster[]; cross_keyword_similarities: Record; } export interface MatchResult { doc_id: string; chunk_index: number; text: string; best_match: string; best_score: number; all_scores: Record; } export interface MatchResponse { keyword: string; candidate_meanings: string[]; matches: MatchResult[]; } export interface CorpusStats { total_chunks: number; total_documents: number; document_ids: string[]; index_built: boolean; embedding_dim: number; model_name: string; } export interface SimilarityDistribution { sample_size: number; mean: number; std: number; min: number; max: number; percentiles: Record; histogram: { bin_start: number; bin_end: number; count: number }[]; } export interface DisambiguationMetric { keyword: string; accuracy: number; weighted_f1: number; per_meaning_precision: Record; per_meaning_recall: Record; per_meaning_f1: Record; confusion_matrix: number[][]; total_samples: number; } export interface RetrievalMetric { query: string; mrr: number; precision_at_k: Record; recall_at_k: Record; ndcg_at_k: Record; avg_similarity: number; top_score: number; } // ---- Training types ---- export interface TrainResponse { strategy: string; model_path: string; training_pairs: number; epochs: number; seconds: number; keywords?: string[]; } export interface TrainEvalResponse { pairs: { text_a: string; text_b: string; expected: number; base_score: number; trained_score: number; base_error: number; trained_error: number; }[]; summary: { avg_base_error: number; avg_trained_error: number; error_reduction_pct: number; improved: number; degraded: number; total: number; }; } // ---- Word2Vec types ---- export interface W2VInitResponse { vocab_size: number; sentences: number; vector_size: number; seconds: number; } export interface W2VQueryResult { rank: number; score: number; doc_id: string; text: string; } export interface W2VSimilarWord { word: string; score: number; } // ---- Dataset types ---- export interface DatasetSourceInfo { dataset_id: string; url: string; description: string; columns?: string[]; size_mb?: number; model?: string; vector_dim?: number; } export interface DatasetInfo { raw_texts: DatasetSourceInfo; embeddings: DatasetSourceInfo; } export interface DatasetLoadRequest { source: "raw" | "embeddings"; max_docs: number; min_text_length: number; source_filter?: string; build_index: boolean; } export interface DatasetLoadResponse { documents_loaded?: number; documents_skipped?: number; documents_created?: number; total_chunks?: number; chunks_indexed?: number; chromadb_vectors?: number; index_built: boolean; seconds: number; source?: string; } export interface DatasetPreviewDoc { doc_id: string; filename: string; text_preview: string; text_length: number; } export interface DatasetPreviewResponse { count: number; documents: DatasetPreviewDoc[]; } // ---- Context Analysis types ---- export interface ContextAssociatedWord { word: string; score: number; } export interface ContextExample { doc_id: string; snippet: string; } export interface ContextMeaning { cluster_id: number; occurrences: number; confidence: number; associated_words: ContextAssociatedWord[]; example_contexts: ContextExample[]; } export interface ContextAnalysisResponse { keyword: string; total_occurrences: number; meanings: ContextMeaning[]; } // ---- UI State ---- export type EvalSection = "distribution" | "disambiguation" | "retrieval";