Spaces:
Running
Running
File size: 3,938 Bytes
30b1aef ba37872 30b1aef 2d8f66d 085452e 30b1aef 1d7b287 30b1aef ba37872 30b1aef ba37872 30b1aef ba37872 30b1aef ba37872 085452e 30b1aef ba37872 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 | 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)),
};
}
|