Spaces:
Running
Running
Optimize RAG evaluation to unified single LLM call, increase timeouts, and handle 429 quota limits
1d7b287 | import { useState } from "react"; | |
| const RECURSIVE_SEPARATORS = ["\n\n", "\n", "(?<=[.!?])\\s+", " "]; | |
| const CHUNKER_DEFAULTS = { | |
| fixed_size: { type: "fixed_size", chunk_size: 512, overlap: 50 }, | |
| recursive: { | |
| type: "recursive", | |
| chunk_size: 512, | |
| overlap: 50, | |
| min_chunk_size: 100, | |
| separators: RECURSIVE_SEPARATORS, | |
| apply_overlap_recursively: true, | |
| }, | |
| semantic: { | |
| type: "semantic", | |
| max_chunk_size: 512, | |
| min_chunk_size: 100, | |
| similarity_threshold: 0.7, | |
| hard_split_threshold: 0.4, | |
| overlap_sentences: 1, | |
| }, | |
| chapter_based: { type: "chapter_based", max_chunk_size: 1024, overlap_lines: 1 }, | |
| sentence_window: { type: "sentence_window", window_size: 3, max_chunk_size: 150 }, | |
| regex: { type: "regex", pattern: "\\n\\n+", min_chunk_size: 100 }, | |
| }; | |
| const DEFAULTS = { | |
| chunker: CHUNKER_DEFAULTS.fixed_size, | |
| embedder: { provider: "nvidia", model: "nvidia/nv-embed-v1" }, | |
| vectorstore: { type: "chroma", collection_name: "my_collection" }, | |
| retriever: { type: "hybrid", retrieval_type: "hybrid", top_k: 5, similarity_threshold: 0.0, alpha: 0.7, lambda_mult: 0.5, reranker_enabled: false, reranker_provider: "huggingface_api", reranker_model: "BAAI/bge-reranker-base" }, | |
| llm: { provider: "gemini", model: "gemma-4-27b-it" }, | |
| memory: { type: "buffer", max_turns: 5, max_turns_before_summary: 5 }, | |
| }; | |
| const PRESETS = { | |
| fast: { ...DEFAULTS, chunker: { ...CHUNKER_DEFAULTS.fixed_size, chunk_size: 256, overlap: 20 }, retriever: { type: "hybrid", retrieval_type: "hybrid", top_k: 3, similarity_threshold: 0.0, alpha: 0.7, lambda_mult: 0.5, reranker_enabled: false, reranker_provider: "huggingface_api", reranker_model: "BAAI/bge-reranker-base" } }, | |
| balanced: { ...DEFAULTS }, | |
| accurate: { ...DEFAULTS, chunker: { ...CHUNKER_DEFAULTS.semantic, max_chunk_size: 1024, similarity_threshold: 0.7, overlap_sentences: 1 }, embedder: { provider: "nvidia", model: "nvidia/llama-3.2-nemoretriever-300m-embed-v1" }, retriever: { type: "hybrid", retrieval_type: "hybrid", top_k: 7, similarity_threshold: 0.0, alpha: 0.7, lambda_mult: 0.5, reranker_enabled: true, reranker_provider: "huggingface_api", reranker_model: "BAAI/bge-reranker-base" } }, | |
| recursive: { ...DEFAULTS, chunker: { ...CHUNKER_DEFAULTS.recursive }, retriever: { type: "hybrid", retrieval_type: "hybrid", top_k: 5, similarity_threshold: 0.0, alpha: 0.7, lambda_mult: 0.5, reranker_enabled: false, reranker_provider: "huggingface_api", reranker_model: "BAAI/bge-reranker-base" } }, | |
| chapter: { ...DEFAULTS, chunker: { ...CHUNKER_DEFAULTS.chapter_based }, retriever: { type: "hybrid", retrieval_type: "hybrid", top_k: 5, similarity_threshold: 0.0, alpha: 0.7, lambda_mult: 0.5, reranker_enabled: false, reranker_provider: "huggingface_api", reranker_model: "BAAI/bge-reranker-base" } }, | |
| sentence_window: { ...DEFAULTS, chunker: { ...CHUNKER_DEFAULTS.sentence_window }, retriever: { type: "dense", retrieval_type: "dense", top_k: 5, similarity_threshold: 0.0, alpha: 0.7, lambda_mult: 0.5, reranker_enabled: false, reranker_provider: "huggingface_api", reranker_model: "BAAI/bge-reranker-base" } }, | |
| }; | |
| export function useConfig() { | |
| const [config, setConfig] = useState(DEFAULTS); | |
| const [step, setStep] = useState(0); | |
| const TOTAL_STEPS = 4; // upload, chunking, embedding, retrieval, llm/memory | |
| const updateSection = (section) => (val) => | |
| setConfig((c) => ({ ...c, [section]: { ...c[section], ...val } })); | |
| return { | |
| config, | |
| step, | |
| TOTAL_STEPS, | |
| updateChunking: updateSection("chunker"), | |
| updateEmbedding: updateSection("embedder"), | |
| updateRetrieval: updateSection("retriever"), | |
| updateLLM: updateSection("llm"), | |
| updateMemory: updateSection("memory"), | |
| applyPreset: (name) => setConfig(PRESETS[name] ?? DEFAULTS), | |
| nextStep: () => setStep((s) => Math.min(s + 1, TOTAL_STEPS)), | |
| prevStep: () => setStep((s) => Math.max(s - 1, 0)), | |
| }; | |
| } | |