vector-graph-rag 0.3.0__tar.gz → 0.4.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/.env.example +5 -3
- vector_graph_rag-0.4.0/.github/workflows/release.yml +69 -0
- vector_graph_rag-0.4.0/CHANGELOG.md +16 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/PKG-INFO +4 -4
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/README.md +1 -1
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/architecture/design-philosophy.md +3 -7
- vector_graph_rag-0.4.0/docs/assets/evaluation/quality-latency.png +0 -0
- vector_graph_rag-0.4.0/docs/assets/evaluation/quality-latency.svg +438 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/evaluation.md +14 -16
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/reranking.md +17 -11
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/index.md +2 -2
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/reference/python-api.md +4 -3
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/README.md +11 -9
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/evaluate.py +4 -4
- vector_graph_rag-0.4.0/evaluation/jev/README.md +15 -0
- vector_graph_rag-0.4.0/evaluation/jev/two-stage/README.md +91 -0
- vector_graph_rag-0.3.0/evaluation/jev/two-stage/plot-data.json → vector_graph_rag-0.4.0/evaluation/jev/two-stage/chart-data.json +26 -18
- vector_graph_rag-0.4.0/evaluation/jev/two-stage/comparison.csv +16 -0
- vector_graph_rag-0.4.0/evaluation/jev/two-stage/flash-summary.json +218 -0
- vector_graph_rag-0.4.0/evaluation/jev/two-stage/plot.py +34 -0
- vector_graph_rag-0.4.0/evaluation/jev/two-stage/results.json.gz +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/jev/two-stage/summarize.py +5 -1
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/jev/two-stage/summary.json +0 -20
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/pyproject.toml +3 -3
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/__init__.py +1 -1
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/config.py +4 -1
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/llm/cache.py +3 -3
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/llm/extractor.py +9 -7
- vector_graph_rag-0.4.0/src/vector_graph_rag/llm/generation.py +53 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/llm/reranker.py +23 -26
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/rag.py +1 -1
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/conftest.py +1 -1
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_api.py +1 -1
- vector_graph_rag-0.4.0/tests/test_generation_api.py +102 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_observability.py +7 -4
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/uv.lock +3 -3
- vector_graph_rag-0.3.0/.github/workflows/release.yml +0 -38
- vector_graph_rag-0.3.0/docs/assets/evaluation/api-cost-latency.png +0 -0
- vector_graph_rag-0.3.0/docs/assets/evaluation/api-cost-latency.svg +0 -537
- vector_graph_rag-0.3.0/docs/assets/evaluation/quality-latency.png +0 -0
- vector_graph_rag-0.3.0/docs/assets/evaluation/quality-latency.svg +0 -390
- vector_graph_rag-0.3.0/docs/assets/evaluation/retrieval-comparison.png +0 -0
- vector_graph_rag-0.3.0/docs/assets/evaluation/retrieval-comparison.svg +0 -689
- vector_graph_rag-0.3.0/evaluation/jev/README.md +0 -21
- vector_graph_rag-0.3.0/evaluation/jev/api-cost-latency-data.json +0 -77
- vector_graph_rag-0.3.0/evaluation/jev/api-cost-latency.md +0 -42
- vector_graph_rag-0.3.0/evaluation/jev/comparison-chart-data.json +0 -126
- vector_graph_rag-0.3.0/evaluation/jev/historical-500.md +0 -99
- vector_graph_rag-0.3.0/evaluation/jev/manifest.json +0 -6009
- vector_graph_rag-0.3.0/evaluation/jev/plot_api_comparison.py +0 -184
- vector_graph_rag-0.3.0/evaluation/jev/plot_retrieval.py +0 -157
- vector_graph_rag-0.3.0/evaluation/jev/results.json +0 -4002
- vector_graph_rag-0.3.0/evaluation/jev/summarize.py +0 -86
- vector_graph_rag-0.3.0/evaluation/jev/summary.json +0 -226
- vector_graph_rag-0.3.0/evaluation/jev/two-stage/README.md +0 -82
- vector_graph_rag-0.3.0/evaluation/jev/two-stage/plot.py +0 -164
- vector_graph_rag-0.3.0/evaluation/jev/two-stage/results.json.gz +0 -0
- vector_graph_rag-0.3.0/evaluation/jev/validation.json +0 -14
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/.dockerignore +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/.github/workflows/docs.yml +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/.gitignore +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/AGENTS.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/CLAUDE.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/Dockerfile +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/LICENSE +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/api/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/api/main.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/api/schemas.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/architecture/how-it-works.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/assets/logo.png +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/assets/logo.svg +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/faq.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/getting-started.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/document-import.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/embedding-providers.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/frontend.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/incremental-updates.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/index.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/multi-tenancy.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/guides/observability.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/reference/rest-api.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/stylesheets/custom.css +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/docs/use-cases.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/2wikimultihopqa.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/2wikimultihopqa_corpus.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/hotpotqa.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/hotpotqa_corpus.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/musique.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/musique_corpus.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/ner_cache/2wikimultihopqa_queries.named_entity_output.tsv +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/ner_cache/hotpotqa_queries.named_entity_output.tsv +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/ner_cache/hotpotqa_train_queries.named_entity_output.tsv +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/ner_cache/musique_queries.named_entity_output.tsv +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/ner_cache/sample_queries.named_entity_output.tsv +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/openie_2wikimultihopqa_results_ner_gpt-3.5-turbo-1106_6119.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/openie_hotpotqa_results_ner_gpt-3.5-turbo-1106_9221.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/openie_musique_results_ner_gpt-3.5-turbo-1106_11656.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/openie_test_sample_results_ner_gpt-3.5-turbo-1106_20.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/test_sample.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/data/test_sample_corpus.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/jev/two-stage/manifest.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/evaluation/jev/two-stage/validation.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/.gitignore +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/README.md +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/eslint.config.js +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/index.html +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/package-lock.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/package.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/public/vite.svg +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/App.css +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/App.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/api/client.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/api/queries.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/assets/react.svg +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/graph/EntityNode.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/graph/GraphCanvas.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/graph/GraphLegend.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/graph/RelationEdge.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/graph/index.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/CreateGraphDialog.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/FileUploader.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/GraphSelector.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/GraphStatsPreview.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/ImportDialog.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/ImportProgress.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/ImportSettings.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/import/UrlInput.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/panels/AnswerPanel.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/panels/NodeDetailPanel.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/panels/index.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/search/SearchInput.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/search/index.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/settings/SettingsDialog.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/timeline/ProcessTimeline.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/timeline/index.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/Header.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/button.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/dialog.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/input.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/label.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/progress.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/switch.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/components/ui/tabs.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/hooks/use-toast.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/index.css +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/main.tsx +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/stores/datasetStore.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/stores/graphStore.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/stores/searchStore.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/types/api.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/utils/cn.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/src/utils/graphLayout.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/tsconfig.app.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/tsconfig.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/tsconfig.node.json +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/frontend/vite.config.ts +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/mkdocs.yml +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/api/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/api/app.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/graph/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/graph/builder.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/graph/graph.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/graph/knowledge_graph.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/graph/retriever.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/llm/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/llm/jev.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/loaders/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/loaders/chunker.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/loaders/converter.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/loaders/docling.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/loaders/mineru.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/loaders/url_fetcher.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/models.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/observability.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/google.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/huggingface.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/jina.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/local.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/mistral.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/ollama.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/onnx.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/openai.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/utils.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embedding_providers/voyage.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/embeddings.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/src/vector_graph_rag/storage/milvus.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/__init__.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_api_settings.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_embedding_providers.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_evaluation_manifest.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_graph.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_jev_reranker.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_jev_two_stage.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_loaders.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_milvus_store.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_rag_incremental.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_rag_metadata_filter.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_rag_passage_order.py +0 -0
- {vector_graph_rag-0.3.0 → vector_graph_rag-0.4.0}/tests/test_task_models.py +0 -0
|
@@ -36,7 +36,9 @@ MILVUS_URI=./vector_graph_rag.db
|
|
|
36
36
|
# Model Configuration (Optional - uses VGRAG_ prefix)
|
|
37
37
|
# ============================================================================
|
|
38
38
|
# LLM model for triplet extraction and reranking
|
|
39
|
-
#
|
|
39
|
+
# GPT-6 uses Responses; other configured models use Chat Completions.
|
|
40
|
+
# VGRAG_LLM_MODEL=gpt-6-luna
|
|
41
|
+
# VGRAG_LLM_REASONING_EFFORT=medium
|
|
40
42
|
|
|
41
43
|
# Embedding model (HuggingFace model name or OpenAI model name)
|
|
42
44
|
# VGRAG_EMBEDDING_MODEL=facebook/contriever
|
|
@@ -101,9 +103,9 @@ MILVUS_URI=./vector_graph_rag.db
|
|
|
101
103
|
# VGRAG_PASSAGE_COLLECTION=vgrag_passages
|
|
102
104
|
|
|
103
105
|
# Task-specific models override the shared VGRAG_LLM_MODEL.
|
|
104
|
-
# VGRAG_EXTRACTOR_MODEL=gpt-
|
|
106
|
+
# VGRAG_EXTRACTOR_MODEL=gpt-6-luna
|
|
105
107
|
# VGRAG_RERANKER_MODEL=jev
|
|
106
|
-
# VGRAG_ANSWER_MODEL=gpt-
|
|
108
|
+
# VGRAG_ANSWER_MODEL=gpt-6-luna
|
|
107
109
|
# TYPESAFE_API_KEY=your-key
|
|
108
110
|
|
|
109
111
|
# VGRAG_JEV_MAX_CONCURRENCY=3
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
# Push a v-prefixed tag only after the release pull request passes validation.
|
|
2
|
+
name: Validate and Publish Python Package
|
|
3
|
+
|
|
4
|
+
on:
|
|
5
|
+
pull_request:
|
|
6
|
+
branches: [main]
|
|
7
|
+
push:
|
|
8
|
+
tags: ["v*"]
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
contents: read
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
validate:
|
|
15
|
+
name: Validate Python ${{ matrix.python-version }}
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
strategy:
|
|
18
|
+
fail-fast: false
|
|
19
|
+
matrix:
|
|
20
|
+
python-version: ["3.10", "3.12"]
|
|
21
|
+
steps:
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
- uses: astral-sh/setup-uv@v6
|
|
24
|
+
- name: Install test dependencies
|
|
25
|
+
run: uv sync --locked --python '${{ matrix.python-version }}' --extra dev --extra api
|
|
26
|
+
- name: Check package and tag versions
|
|
27
|
+
run: |
|
|
28
|
+
uv run --no-sync python - <<'PY'
|
|
29
|
+
import os
|
|
30
|
+
from importlib.metadata import version
|
|
31
|
+
from vector_graph_rag import __version__
|
|
32
|
+
|
|
33
|
+
package_version = version("vector-graph-rag")
|
|
34
|
+
assert package_version == __version__, (package_version, __version__)
|
|
35
|
+
if os.environ["GITHUB_REF_TYPE"] == "tag":
|
|
36
|
+
assert os.environ["GITHUB_REF_NAME"] == f"v{package_version}"
|
|
37
|
+
print(f"Validated version {package_version}")
|
|
38
|
+
PY
|
|
39
|
+
- name: Run tests
|
|
40
|
+
run: uv run --no-sync pytest tests -q
|
|
41
|
+
- name: Build distributions
|
|
42
|
+
run: uv build
|
|
43
|
+
- name: Verify wheel installation in isolation
|
|
44
|
+
run: |
|
|
45
|
+
uv run --isolated --no-project --python '${{ matrix.python-version }}' \
|
|
46
|
+
--with ./dist/vector_graph_rag-*.whl python -c \
|
|
47
|
+
'from importlib.metadata import version; from vector_graph_rag import Settings, VectorGraphRAG, __version__; assert version("vector-graph-rag") == __version__; print(__version__)'
|
|
48
|
+
- name: Save validated distributions
|
|
49
|
+
if: matrix.python-version == '3.12'
|
|
50
|
+
uses: actions/upload-artifact@v4
|
|
51
|
+
with:
|
|
52
|
+
name: distributions
|
|
53
|
+
path: dist/
|
|
54
|
+
|
|
55
|
+
publish:
|
|
56
|
+
name: Publish to PyPI
|
|
57
|
+
if: github.event_name == 'push' && startsWith(github.ref, 'refs/tags/v')
|
|
58
|
+
needs: validate
|
|
59
|
+
runs-on: ubuntu-latest
|
|
60
|
+
environment: pypi
|
|
61
|
+
permissions:
|
|
62
|
+
id-token: write
|
|
63
|
+
steps:
|
|
64
|
+
- uses: actions/download-artifact@v4
|
|
65
|
+
with:
|
|
66
|
+
name: distributions
|
|
67
|
+
path: dist/
|
|
68
|
+
- name: Publish validated distributions
|
|
69
|
+
uses: pypa/gh-action-pypi-publish@release/v1
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## 0.4.0
|
|
4
|
+
|
|
5
|
+
### What's changed
|
|
6
|
+
|
|
7
|
+
- Default generation tasks now use GPT-6 Luna through Responses with medium reasoning: triplet extraction, entity extraction, relationship reranking and answer generation.
|
|
8
|
+
- Cache keys distinguish the Responses interface and reasoning effort. Incomplete, refused or empty Responses outputs are rejected instead of cached as successful answers.
|
|
9
|
+
- Retrieval evaluation now compares Jev with GPT-6 Luna and official DeepSeek V4.1 Flash. The report retains the September/October 2026 evaluation timeline, reproducible Jev evidence and a link to superseded experiments.
|
|
10
|
+
- Publishing now requires passing tests on Python 3.10 and 3.12, matching package/tag versions, and an isolated wheel installation check.
|
|
11
|
+
|
|
12
|
+
### Upgrading
|
|
13
|
+
|
|
14
|
+
The default model changed from GPT-4o-mini to GPT-6 Luna. Custom OpenAI-compatible endpoints must support Responses when using GPT-6 models. Explicitly configured non-GPT-6 models retain Chat Completions; set `VGRAG_LLM_MODEL` explicitly to retain your chosen model. The OpenAI SDK minimum is now 1.66.0.
|
|
15
|
+
|
|
16
|
+
Reasoning defaults to `medium` and can be configured with `VGRAG_LLM_REASONING_EFFORT`. Existing cache files are preserved, but GPT-6 Responses requests use separate cache keys. DeepSeek is an evaluation baseline, not the runtime default. Frozen benchmark results are unchanged by the runtime migration.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: vector-graph-rag
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: A Graph RAG implementation using pure vector search with Milvus
|
|
5
5
|
Project-URL: Homepage, https://github.com/zilliztech/vector-graph-rag
|
|
6
6
|
Project-URL: Documentation, https://zilliztech.github.io/vector-graph-rag/
|
|
@@ -21,9 +21,9 @@ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
|
21
21
|
Requires-Python: >=3.10
|
|
22
22
|
Requires-Dist: httpx>=0.27
|
|
23
23
|
Requires-Dist: langchain-core>=0.3.0
|
|
24
|
-
Requires-Dist: milvus-lite
|
|
24
|
+
Requires-Dist: milvus-lite<3,>=2.4.0
|
|
25
25
|
Requires-Dist: numpy>=1.24.0
|
|
26
|
-
Requires-Dist: openai>=1.
|
|
26
|
+
Requires-Dist: openai>=1.66.0
|
|
27
27
|
Requires-Dist: pydantic-settings>=2.0.0
|
|
28
28
|
Requires-Dist: pydantic>=2.0.0
|
|
29
29
|
Requires-Dist: pymilvus<2.6.10,>=2.4.0
|
|
@@ -398,7 +398,7 @@ Before introducing Jev, we evaluated Vector Graph RAG on three multi-hop QA benc
|
|
|
398
398
|
|
|
399
399
|
**Two-stage Jev reaches the quality–latency Pareto frontier.**
|
|
400
400
|
|
|
401
|
-
**86.07% average Recall@5**, the highest among the compared methods, with **3.13 seconds of additional model-call latency**. On MuSiQue and 2Wiki (1,000 questions each), two-stage Jev reaches the Pareto frontier
|
|
401
|
+
**86.07% average Recall@5**, the highest among the compared methods, with **3.13 seconds of additional model-call latency**. On MuSiQue and 2Wiki (1,000 questions each), two-stage Jev reaches the Pareto frontier using the displayed timings. This two-dataset result is separate from the historical three-dataset average above.
|
|
402
402
|
|
|
403
403
|

|
|
404
404
|
|
|
@@ -290,7 +290,7 @@ Before introducing Jev, we evaluated Vector Graph RAG on three multi-hop QA benc
|
|
|
290
290
|
|
|
291
291
|
**Two-stage Jev reaches the quality–latency Pareto frontier.**
|
|
292
292
|
|
|
293
|
-
**86.07% average Recall@5**, the highest among the compared methods, with **3.13 seconds of additional model-call latency**. On MuSiQue and 2Wiki (1,000 questions each), two-stage Jev reaches the Pareto frontier
|
|
293
|
+
**86.07% average Recall@5**, the highest among the compared methods, with **3.13 seconds of additional model-call latency**. On MuSiQue and 2Wiki (1,000 questions each), two-stage Jev reaches the Pareto frontier using the displayed timings. This two-dataset result is separate from the historical three-dataset average above.
|
|
294
294
|
|
|
295
295
|

|
|
296
296
|
|
|
@@ -119,15 +119,11 @@ The key insight is that **vector search combined with subgraph expansion already
|
|
|
119
119
|
|
|
120
120
|
With these three mechanisms working together, the candidate set is already rich and relevant. A single LLM reranking pass is sufficient to select the best relations from this high-quality pool.
|
|
121
121
|
|
|
122
|
-
###
|
|
122
|
+
### Model Calls and Cost
|
|
123
123
|
|
|
124
|
-
|
|
124
|
+
Avoiding an iterative retrieval loop reduces the number of dependent model calls. Actual latency and cost also depend on prompt size, output length, reasoning settings, provider queueing and request concurrency; call counts alone do not establish a speedup or cost reduction.
|
|
125
125
|
|
|
126
|
-
|
|
127
|
-
|--------|---------------------|----------------------|---------|
|
|
128
|
-
| **Latency** | ~5–15s | ~2–6s | 2–3x faster |
|
|
129
|
-
| **Cost** (GPT-4o-mini) | ~5x base | ~2x base | 60% cheaper |
|
|
130
|
-
| **Cost** (GPT-4o) | ~5x base | ~2x base | 60% cheaper |
|
|
126
|
+
See the [retrieval evaluation](../evaluation.md#jev-reranker-evaluation) for measured Jev, GPT-6 Luna and DeepSeek V4.1 Flash quality and model-call latency. Those retrieval measurements do not benchmark extraction or answer generation.
|
|
131
127
|
|
|
132
128
|
> [!TIP]
|
|
133
129
|
> For applications where latency and cost are secondary to accuracy on extremely complex queries (5+ hop chains, ambiguous entity resolution), iterative approaches may still be worth the overhead. See [When to Consider Alternatives](#7-when-to-consider-alternatives).
|
|
Binary file
|
|
@@ -0,0 +1,438 @@
|
|
|
1
|
+
<?xml version="1.0" encoding="utf-8" standalone="no"?>
|
|
2
|
+
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN"
|
|
3
|
+
"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
|
|
4
|
+
<svg xmlns:xlink="http://www.w3.org/1999/xlink" width="1080pt" height="612pt" viewBox="0 0 1080 612" xmlns="http://www.w3.org/2000/svg" version="1.1">
|
|
5
|
+
<metadata>
|
|
6
|
+
<rdf:RDF xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:cc="http://creativecommons.org/ns#" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
|
|
7
|
+
<cc:Work>
|
|
8
|
+
<dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/>
|
|
9
|
+
<dc:format>image/svg+xml</dc:format>
|
|
10
|
+
<dc:creator>
|
|
11
|
+
<cc:Agent>
|
|
12
|
+
<dc:title>Matplotlib v3.11.2, https://matplotlib.org/</dc:title>
|
|
13
|
+
</cc:Agent>
|
|
14
|
+
</dc:creator>
|
|
15
|
+
</cc:Work>
|
|
16
|
+
</rdf:RDF>
|
|
17
|
+
</metadata>
|
|
18
|
+
<defs>
|
|
19
|
+
<style type="text/css">*{stroke-linejoin: round; stroke-linecap: butt}</style>
|
|
20
|
+
</defs>
|
|
21
|
+
<g id="figure_1">
|
|
22
|
+
<g id="patch_1">
|
|
23
|
+
<path d="M 0 612
|
|
24
|
+
L 1080 612
|
|
25
|
+
L 1080 0
|
|
26
|
+
L 0 0
|
|
27
|
+
z
|
|
28
|
+
" style="fill: #ffffff"/>
|
|
29
|
+
</g>
|
|
30
|
+
<g id="axes_1">
|
|
31
|
+
<g id="patch_2">
|
|
32
|
+
<path d="M 97.2 495.72
|
|
33
|
+
L 1047.6 495.72
|
|
34
|
+
L 1047.6 110.16
|
|
35
|
+
L 97.2 110.16
|
|
36
|
+
z
|
|
37
|
+
" style="fill: #ffffff"/>
|
|
38
|
+
</g>
|
|
39
|
+
<g id="matplotlib.axis_1">
|
|
40
|
+
<g id="xtick_1">
|
|
41
|
+
<g id="line2d_1">
|
|
42
|
+
<defs>
|
|
43
|
+
<path id="m1e54ec5eb8" d="M 0 0
|
|
44
|
+
L 0 3.5
|
|
45
|
+
" style="stroke: #000000; stroke-width: 0.8"/>
|
|
46
|
+
</defs>
|
|
47
|
+
<g>
|
|
48
|
+
<use xlink:href="#m1e54ec5eb8" x="123.198784" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
49
|
+
</g>
|
|
50
|
+
</g>
|
|
51
|
+
<g id="text_1">
|
|
52
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="123.198784" y="511.837187" transform="rotate(-0 123.198784 511.837187)">0</text>
|
|
53
|
+
</g>
|
|
54
|
+
</g>
|
|
55
|
+
<g id="xtick_2">
|
|
56
|
+
<g id="line2d_2">
|
|
57
|
+
<g>
|
|
58
|
+
<use xlink:href="#m1e54ec5eb8" x="238.748936" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
59
|
+
</g>
|
|
60
|
+
</g>
|
|
61
|
+
<g id="text_2">
|
|
62
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="238.748936" y="511.837187" transform="rotate(-0 238.748936 511.837187)">2</text>
|
|
63
|
+
</g>
|
|
64
|
+
</g>
|
|
65
|
+
<g id="xtick_3">
|
|
66
|
+
<g id="line2d_3">
|
|
67
|
+
<g>
|
|
68
|
+
<use xlink:href="#m1e54ec5eb8" x="354.299088" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
69
|
+
</g>
|
|
70
|
+
</g>
|
|
71
|
+
<g id="text_3">
|
|
72
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="354.299088" y="511.837187" transform="rotate(-0 354.299088 511.837187)">4</text>
|
|
73
|
+
</g>
|
|
74
|
+
</g>
|
|
75
|
+
<g id="xtick_4">
|
|
76
|
+
<g id="line2d_4">
|
|
77
|
+
<g>
|
|
78
|
+
<use xlink:href="#m1e54ec5eb8" x="469.84924" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
79
|
+
</g>
|
|
80
|
+
</g>
|
|
81
|
+
<g id="text_4">
|
|
82
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="469.84924" y="511.837187" transform="rotate(-0 469.84924 511.837187)">6</text>
|
|
83
|
+
</g>
|
|
84
|
+
</g>
|
|
85
|
+
<g id="xtick_5">
|
|
86
|
+
<g id="line2d_5">
|
|
87
|
+
<g>
|
|
88
|
+
<use xlink:href="#m1e54ec5eb8" x="585.399392" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
89
|
+
</g>
|
|
90
|
+
</g>
|
|
91
|
+
<g id="text_5">
|
|
92
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="585.399392" y="511.837187" transform="rotate(-0 585.399392 511.837187)">8</text>
|
|
93
|
+
</g>
|
|
94
|
+
</g>
|
|
95
|
+
<g id="xtick_6">
|
|
96
|
+
<g id="line2d_6">
|
|
97
|
+
<g>
|
|
98
|
+
<use xlink:href="#m1e54ec5eb8" x="700.949544" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
99
|
+
</g>
|
|
100
|
+
</g>
|
|
101
|
+
<g id="text_6">
|
|
102
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="700.949544" y="511.837187" transform="rotate(-0 700.949544 511.837187)">10</text>
|
|
103
|
+
</g>
|
|
104
|
+
</g>
|
|
105
|
+
<g id="xtick_7">
|
|
106
|
+
<g id="line2d_7">
|
|
107
|
+
<g>
|
|
108
|
+
<use xlink:href="#m1e54ec5eb8" x="816.499696" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
109
|
+
</g>
|
|
110
|
+
</g>
|
|
111
|
+
<g id="text_7">
|
|
112
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="816.499696" y="511.837187" transform="rotate(-0 816.499696 511.837187)">12</text>
|
|
113
|
+
</g>
|
|
114
|
+
</g>
|
|
115
|
+
<g id="xtick_8">
|
|
116
|
+
<g id="line2d_8">
|
|
117
|
+
<g>
|
|
118
|
+
<use xlink:href="#m1e54ec5eb8" x="932.049848" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
119
|
+
</g>
|
|
120
|
+
</g>
|
|
121
|
+
<g id="text_8">
|
|
122
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="932.049848" y="511.837187" transform="rotate(-0 932.049848 511.837187)">14</text>
|
|
123
|
+
</g>
|
|
124
|
+
</g>
|
|
125
|
+
<g id="xtick_9">
|
|
126
|
+
<g id="line2d_9">
|
|
127
|
+
<g>
|
|
128
|
+
<use xlink:href="#m1e54ec5eb8" x="1047.6" y="495.72" style="stroke: #000000; stroke-width: 0.8"/>
|
|
129
|
+
</g>
|
|
130
|
+
</g>
|
|
131
|
+
<g id="text_9">
|
|
132
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="1047.6" y="511.837187" transform="rotate(-0 1047.6 511.837187)">16</text>
|
|
133
|
+
</g>
|
|
134
|
+
</g>
|
|
135
|
+
<g id="text_10">
|
|
136
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="572.4" y="527.838125" transform="rotate(-0 572.4 527.838125)">Additional model-call latency (s)</text>
|
|
137
|
+
</g>
|
|
138
|
+
</g>
|
|
139
|
+
<g id="matplotlib.axis_2">
|
|
140
|
+
<g id="ytick_1">
|
|
141
|
+
<g id="line2d_10">
|
|
142
|
+
<path d="M 97.2 445.429565
|
|
143
|
+
L 1047.6 445.429565
|
|
144
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
145
|
+
</g>
|
|
146
|
+
<g id="line2d_11">
|
|
147
|
+
<defs>
|
|
148
|
+
<path id="m7e8e1ccff5" d="M 0 0
|
|
149
|
+
L -3.5 0
|
|
150
|
+
" style="stroke: #000000; stroke-width: 0.8"/>
|
|
151
|
+
</defs>
|
|
152
|
+
<g>
|
|
153
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="445.429565" style="stroke: #000000; stroke-width: 0.8"/>
|
|
154
|
+
</g>
|
|
155
|
+
</g>
|
|
156
|
+
<g id="text_11">
|
|
157
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="449.988159" transform="rotate(-0 90.2 449.988159)">60</text>
|
|
158
|
+
</g>
|
|
159
|
+
</g>
|
|
160
|
+
<g id="ytick_2">
|
|
161
|
+
<g id="line2d_12">
|
|
162
|
+
<path d="M 97.2 389.551304
|
|
163
|
+
L 1047.6 389.551304
|
|
164
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
165
|
+
</g>
|
|
166
|
+
<g id="line2d_13">
|
|
167
|
+
<g>
|
|
168
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="389.551304" style="stroke: #000000; stroke-width: 0.8"/>
|
|
169
|
+
</g>
|
|
170
|
+
</g>
|
|
171
|
+
<g id="text_12">
|
|
172
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="394.109898" transform="rotate(-0 90.2 394.109898)">65</text>
|
|
173
|
+
</g>
|
|
174
|
+
</g>
|
|
175
|
+
<g id="ytick_3">
|
|
176
|
+
<g id="line2d_14">
|
|
177
|
+
<path d="M 97.2 333.673043
|
|
178
|
+
L 1047.6 333.673043
|
|
179
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
180
|
+
</g>
|
|
181
|
+
<g id="line2d_15">
|
|
182
|
+
<g>
|
|
183
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="333.673043" style="stroke: #000000; stroke-width: 0.8"/>
|
|
184
|
+
</g>
|
|
185
|
+
</g>
|
|
186
|
+
<g id="text_13">
|
|
187
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="338.231637" transform="rotate(-0 90.2 338.231637)">70</text>
|
|
188
|
+
</g>
|
|
189
|
+
</g>
|
|
190
|
+
<g id="ytick_4">
|
|
191
|
+
<g id="line2d_16">
|
|
192
|
+
<path d="M 97.2 277.794783
|
|
193
|
+
L 1047.6 277.794783
|
|
194
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
195
|
+
</g>
|
|
196
|
+
<g id="line2d_17">
|
|
197
|
+
<g>
|
|
198
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="277.794783" style="stroke: #000000; stroke-width: 0.8"/>
|
|
199
|
+
</g>
|
|
200
|
+
</g>
|
|
201
|
+
<g id="text_14">
|
|
202
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="282.353376" transform="rotate(-0 90.2 282.353376)">75</text>
|
|
203
|
+
</g>
|
|
204
|
+
</g>
|
|
205
|
+
<g id="ytick_5">
|
|
206
|
+
<g id="line2d_18">
|
|
207
|
+
<path d="M 97.2 221.916522
|
|
208
|
+
L 1047.6 221.916522
|
|
209
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
210
|
+
</g>
|
|
211
|
+
<g id="line2d_19">
|
|
212
|
+
<g>
|
|
213
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="221.916522" style="stroke: #000000; stroke-width: 0.8"/>
|
|
214
|
+
</g>
|
|
215
|
+
</g>
|
|
216
|
+
<g id="text_15">
|
|
217
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="226.475115" transform="rotate(-0 90.2 226.475115)">80</text>
|
|
218
|
+
</g>
|
|
219
|
+
</g>
|
|
220
|
+
<g id="ytick_6">
|
|
221
|
+
<g id="line2d_20">
|
|
222
|
+
<path d="M 97.2 166.038261
|
|
223
|
+
L 1047.6 166.038261
|
|
224
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
225
|
+
</g>
|
|
226
|
+
<g id="line2d_21">
|
|
227
|
+
<g>
|
|
228
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="166.038261" style="stroke: #000000; stroke-width: 0.8"/>
|
|
229
|
+
</g>
|
|
230
|
+
</g>
|
|
231
|
+
<g id="text_16">
|
|
232
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="170.596855" transform="rotate(-0 90.2 170.596855)">85</text>
|
|
233
|
+
</g>
|
|
234
|
+
</g>
|
|
235
|
+
<g id="ytick_7">
|
|
236
|
+
<g id="line2d_22">
|
|
237
|
+
<path d="M 97.2 110.16
|
|
238
|
+
L 1047.6 110.16
|
|
239
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke: #e7ebef; stroke-width: 0.8; stroke-linecap: square"/>
|
|
240
|
+
</g>
|
|
241
|
+
<g id="line2d_23">
|
|
242
|
+
<g>
|
|
243
|
+
<use xlink:href="#m7e8e1ccff5" x="97.2" y="110.16" style="stroke: #000000; stroke-width: 0.8"/>
|
|
244
|
+
</g>
|
|
245
|
+
</g>
|
|
246
|
+
<g id="text_17">
|
|
247
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: end" x="90.2" y="114.718594" transform="rotate(-0 90.2 114.718594)">90</text>
|
|
248
|
+
</g>
|
|
249
|
+
</g>
|
|
250
|
+
<g id="text_18">
|
|
251
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: middle" x="68.047188" y="302.94" transform="rotate(-90 68.047188 302.94)">Average Recall@5 (%)</text>
|
|
252
|
+
</g>
|
|
253
|
+
</g>
|
|
254
|
+
<g id="line2d_24">
|
|
255
|
+
<path d="M 123.198784 299.028522
|
|
256
|
+
L 255.174996 221.497435
|
|
257
|
+
L 304.195667 154.117565
|
|
258
|
+
" clip-path="url(#pfb3f67a1a0)" style="fill: none; stroke-dasharray: 4.81,2.08; stroke-dashoffset: 0; stroke: #168568; stroke-opacity: 0.7; stroke-width: 1.3"/>
|
|
259
|
+
</g>
|
|
260
|
+
<g id="patch_3">
|
|
261
|
+
<path d="M 97.2 495.72
|
|
262
|
+
L 97.2 110.16
|
|
263
|
+
" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
|
264
|
+
</g>
|
|
265
|
+
<g id="patch_4">
|
|
266
|
+
<path d="M 97.2 495.72
|
|
267
|
+
L 1047.6 495.72
|
|
268
|
+
" style="fill: none; stroke: #000000; stroke-width: 0.8; stroke-linejoin: miter; stroke-linecap: square"/>
|
|
269
|
+
</g>
|
|
270
|
+
<g id="text_19">
|
|
271
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #777f8b" transform="translate(609.843161 216.153921)">HippoRAG 2</text>
|
|
272
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #777f8b" transform="translate(609.843161 232.522437)">82.55% · ≈8.25 s</text>
|
|
273
|
+
</g>
|
|
274
|
+
<g id="text_20">
|
|
275
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #168568" transform="translate(265.174996 244.232747)">Jev · relations only</text>
|
|
276
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #168568" transform="translate(265.174996 260.601263)">80.04% · 2.28 s</text>
|
|
277
|
+
</g>
|
|
278
|
+
<g id="text_21">
|
|
279
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #168568" transform="translate(314.195667 123.883581)">Jev · two-stage</text>
|
|
280
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #168568" transform="translate(314.195667 140.421393)">86.07% · 3.13 s</text>
|
|
281
|
+
</g>
|
|
282
|
+
<g id="text_22">
|
|
283
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #a16826" transform="translate(442.363178 215.399524)">GPT-6 Luna</text>
|
|
284
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #a16826" transform="translate(442.363178 230.799524)">82.70% · 5.35 s</text>
|
|
285
|
+
</g>
|
|
286
|
+
<g id="text_23">
|
|
287
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #2674bd" transform="translate(766.993357 154.553095)">DeepSeek V4.1 Flash</text>
|
|
288
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; fill: #2674bd" transform="translate(766.993357 170.921611)">83.34% · 10.97 s</text>
|
|
289
|
+
</g>
|
|
290
|
+
<g id="text_24">
|
|
291
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #777f8b" x="135.198784" y="303.028522" transform="rotate(-0 135.198784 303.028522)">Naive RAG · NV-Embed-v2 (73.10%)</text>
|
|
292
|
+
</g>
|
|
293
|
+
<g id="text_25">
|
|
294
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #777f8b" x="135.198784" y="389.31387" transform="rotate(-0 135.198784 389.31387)">Naive RAG · BGE-large-en-v1.5 (65.38%)</text>
|
|
295
|
+
</g>
|
|
296
|
+
<g id="text_26">
|
|
297
|
+
<text style="font-size: 11px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #777f8b" x="135.198784" y="463.957913" transform="rotate(-0 135.198784 463.957913)">Naive RAG · ColBERTv2 (58.70%)</text>
|
|
298
|
+
</g>
|
|
299
|
+
<g id="PathCollection_1">
|
|
300
|
+
<defs>
|
|
301
|
+
<path id="m767e650826" d="M -4.472136 4.472136
|
|
302
|
+
L 4.472136 4.472136
|
|
303
|
+
L 4.472136 -4.472136
|
|
304
|
+
L -4.472136 -4.472136
|
|
305
|
+
z
|
|
306
|
+
" style="stroke: #ffffff; stroke-width: 0.9"/>
|
|
307
|
+
</defs>
|
|
308
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
309
|
+
<use xlink:href="#m767e650826" x="599.843161" y="193.418609" style="fill: #777f8b; stroke: #ffffff; stroke-width: 0.9"/>
|
|
310
|
+
</g>
|
|
311
|
+
</g>
|
|
312
|
+
<g id="PathCollection_2">
|
|
313
|
+
<defs>
|
|
314
|
+
<path id="mdcc981d774" d="M 0 4.472136
|
|
315
|
+
C 1.186024 4.472136 2.323632 4.000923 3.162278 3.162278
|
|
316
|
+
C 4.000923 2.323632 4.472136 1.186024 4.472136 0
|
|
317
|
+
C 4.472136 -1.186024 4.000923 -2.323632 3.162278 -3.162278
|
|
318
|
+
C 2.323632 -4.000923 1.186024 -4.472136 0 -4.472136
|
|
319
|
+
C -1.186024 -4.472136 -2.323632 -4.000923 -3.162278 -3.162278
|
|
320
|
+
C -4.000923 -2.323632 -4.472136 -1.186024 -4.472136 0
|
|
321
|
+
C -4.472136 1.186024 -4.000923 2.323632 -3.162278 3.162278
|
|
322
|
+
C -2.323632 4.000923 -1.186024 4.472136 0 4.472136
|
|
323
|
+
z
|
|
324
|
+
" style="stroke: #ffffff; stroke-width: 0.9"/>
|
|
325
|
+
</defs>
|
|
326
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
327
|
+
<use xlink:href="#mdcc981d774" x="255.174996" y="221.497435" style="fill: #168568; stroke: #ffffff; stroke-width: 0.9"/>
|
|
328
|
+
</g>
|
|
329
|
+
</g>
|
|
330
|
+
<g id="PathCollection_3">
|
|
331
|
+
<defs>
|
|
332
|
+
<path id="mfa49a455e4" d="M 0 -6.892024
|
|
333
|
+
L -1.547356 -2.129753
|
|
334
|
+
L -6.554705 -2.129753
|
|
335
|
+
L -2.503674 0.813493
|
|
336
|
+
L -4.05103 5.575765
|
|
337
|
+
L -0 2.632519
|
|
338
|
+
L 4.05103 5.575765
|
|
339
|
+
L 2.503674 0.813493
|
|
340
|
+
L 6.554705 -2.129753
|
|
341
|
+
L 1.547356 -2.129753
|
|
342
|
+
z
|
|
343
|
+
" style="stroke: #ffffff; stroke-width: 0.9"/>
|
|
344
|
+
</defs>
|
|
345
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
346
|
+
<use xlink:href="#mfa49a455e4" x="304.195667" y="154.117565" style="fill: #168568; stroke: #ffffff; stroke-width: 0.9"/>
|
|
347
|
+
</g>
|
|
348
|
+
</g>
|
|
349
|
+
<g id="PathCollection_4">
|
|
350
|
+
<defs>
|
|
351
|
+
<path id="m23881a4830" d="M 0 4.472136
|
|
352
|
+
C 1.186024 4.472136 2.323632 4.000923 3.162278 3.162278
|
|
353
|
+
C 4.000923 2.323632 4.472136 1.186024 4.472136 0
|
|
354
|
+
C 4.472136 -1.186024 4.000923 -2.323632 3.162278 -3.162278
|
|
355
|
+
C 2.323632 -4.000923 1.186024 -4.472136 0 -4.472136
|
|
356
|
+
C -1.186024 -4.472136 -2.323632 -4.000923 -3.162278 -3.162278
|
|
357
|
+
C -4.000923 -2.323632 -4.472136 -1.186024 -4.472136 0
|
|
358
|
+
C -4.472136 1.186024 -4.000923 2.323632 -3.162278 3.162278
|
|
359
|
+
C -2.323632 4.000923 -1.186024 4.472136 0 4.472136
|
|
360
|
+
z
|
|
361
|
+
" style="stroke: #ffffff; stroke-width: 0.9"/>
|
|
362
|
+
</defs>
|
|
363
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
364
|
+
<use xlink:href="#m23881a4830" x="432.363178" y="191.695696" style="fill: #a16826; stroke: #ffffff; stroke-width: 0.9"/>
|
|
365
|
+
</g>
|
|
366
|
+
</g>
|
|
367
|
+
<g id="PathCollection_5">
|
|
368
|
+
<defs>
|
|
369
|
+
<path id="m4d7c55c37c" d="M 0 4.472136
|
|
370
|
+
C 1.186024 4.472136 2.323632 4.000923 3.162278 3.162278
|
|
371
|
+
C 4.000923 2.323632 4.472136 1.186024 4.472136 0
|
|
372
|
+
C 4.472136 -1.186024 4.000923 -2.323632 3.162278 -3.162278
|
|
373
|
+
C 2.323632 -4.000923 1.186024 -4.472136 0 -4.472136
|
|
374
|
+
C -1.186024 -4.472136 -2.323632 -4.000923 -3.162278 -3.162278
|
|
375
|
+
C -4.000923 -2.323632 -4.472136 -1.186024 -4.472136 0
|
|
376
|
+
C -4.472136 1.186024 -4.000923 2.323632 -3.162278 3.162278
|
|
377
|
+
C -2.323632 4.000923 -1.186024 4.472136 0 4.472136
|
|
378
|
+
z
|
|
379
|
+
" style="stroke: #ffffff; stroke-width: 0.9"/>
|
|
380
|
+
</defs>
|
|
381
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
382
|
+
<use xlink:href="#m4d7c55c37c" x="756.993357" y="184.617783" style="fill: #2674bd; stroke: #ffffff; stroke-width: 0.9"/>
|
|
383
|
+
</g>
|
|
384
|
+
</g>
|
|
385
|
+
<g id="PathCollection_6">
|
|
386
|
+
<defs>
|
|
387
|
+
<path id="m077a5d3511" d="M -3.708099 3.708099
|
|
388
|
+
L 3.708099 3.708099
|
|
389
|
+
L 3.708099 -3.708099
|
|
390
|
+
L -3.708099 -3.708099
|
|
391
|
+
z
|
|
392
|
+
" style="stroke: #777f8b"/>
|
|
393
|
+
</defs>
|
|
394
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
395
|
+
<use xlink:href="#m077a5d3511" x="123.198784" y="299.028522" style="fill: #ffffff; stroke: #777f8b"/>
|
|
396
|
+
</g>
|
|
397
|
+
</g>
|
|
398
|
+
<g id="PathCollection_7">
|
|
399
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
400
|
+
<use xlink:href="#m077a5d3511" x="123.198784" y="385.31387" style="fill: #ffffff; stroke: #777f8b"/>
|
|
401
|
+
</g>
|
|
402
|
+
</g>
|
|
403
|
+
<g id="PathCollection_8">
|
|
404
|
+
<g clip-path="url(#pfb3f67a1a0)">
|
|
405
|
+
<use xlink:href="#m077a5d3511" x="123.198784" y="459.957913" style="fill: #ffffff; stroke: #777f8b"/>
|
|
406
|
+
</g>
|
|
407
|
+
</g>
|
|
408
|
+
<g id="legend_1">
|
|
409
|
+
<g id="line2d_25">
|
|
410
|
+
<path d="M 855.489375 477.837187
|
|
411
|
+
L 867.489375 477.837187
|
|
412
|
+
L 879.489375 477.837187
|
|
413
|
+
" style="fill: none; stroke-dasharray: 4.81,2.08; stroke-dashoffset: 0; stroke: #168568; stroke-opacity: 0.7; stroke-width: 1.3"/>
|
|
414
|
+
</g>
|
|
415
|
+
<g id="text_27">
|
|
416
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: start" x="889.089375" y="482.037187" transform="rotate(-0 889.089375 482.037187)">Observed Pareto frontier</text>
|
|
417
|
+
</g>
|
|
418
|
+
</g>
|
|
419
|
+
</g>
|
|
420
|
+
<g id="text_28">
|
|
421
|
+
<text style="font-weight: 700; font-size: 22px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #253143" x="97.2" y="36.72" transform="rotate(-0 97.2 36.72)">Retrieval quality–latency trade-off</text>
|
|
422
|
+
</g>
|
|
423
|
+
<g id="text_29">
|
|
424
|
+
<text style="font-size: 12px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #657181" x="97.2" y="70.38" transform="rotate(-0 97.2 70.38)">MuSiQue + 2Wiki · Equal-weight Recall@5 · 1,000 queries per dataset</text>
|
|
425
|
+
</g>
|
|
426
|
+
<g id="text_30">
|
|
427
|
+
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #657181" x="97.2" y="556.92" transform="rotate(-0 97.2 556.92)">Jev, Luna and Flash: measured API means. HippoRAG 2: reference estimate (≈); separate evaluation setup.</text>
|
|
428
|
+
</g>
|
|
429
|
+
<g id="text_31">
|
|
430
|
+
<text style="font-size: 10px; font-family: 'DejaVu Sans'; text-anchor: start; fill: #657181" x="97.2" y="578.34" transform="rotate(-0 97.2 578.34)">0 s excludes embedding, retrieval and answer generation. API means include network and provider queueing; runs differ in time/concurrency.</text>
|
|
431
|
+
</g>
|
|
432
|
+
</g>
|
|
433
|
+
<defs>
|
|
434
|
+
<clipPath id="pfb3f67a1a0">
|
|
435
|
+
<rect x="97.2" y="110.16" width="950.4" height="385.56"/>
|
|
436
|
+
</clipPath>
|
|
437
|
+
</defs>
|
|
438
|
+
</svg>
|