CINXE.COM
GitHub - HKUDS/LightRAG: "LightRAG: Simple and Fast Retrieval-Augmented Generation"
<!DOCTYPE html> <html lang="en" data-color-mode="auto" data-light-theme="light" data-dark-theme="dark" data-a11y-animated-images="system" data-a11y-link-underlines="true" > <head> <meta charset="utf-8"> <link rel="dns-prefetch" href="https://github.githubassets.com"> <link rel="dns-prefetch" href="https://avatars.githubusercontent.com"> <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com"> <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/"> <link rel="preconnect" href="https://github.githubassets.com" crossorigin> <link rel="preconnect" href="https://avatars.githubusercontent.com"> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-605318cbe3a1.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-bd1cb5575fff.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-52a2075571c3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-bf3988586de0.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-27a437876a92.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-97f0dc959f8f.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-708e3a93215a.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-9217138a8d5b.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-4397d91bdb49.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-225433424a87.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-aaa714e5674d.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-7d4d2344e7ab.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-43ae85d4871b.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-4fce88777fa8.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-0210be90f4d3.css" /> <script type="application/json" id="client-env">{"locale":"en","featureFlags":["a11y_quote_reply_fix","contentful_lp_hero_video_cover_image","contentful_lp_optimize_image","copilot_immersive_issue_preview","copilot_new_references_ui","copilot_chat_ambient_error_banner","copilot_chat_repo_custom_instructions_preview","copilot_chat_immersive_subthreading","copilot_no_floating_button","copilot_topics_as_references","copilot_read_shared_conversation","copilot_duplicate_thread","copilot_buffered_streaming","dotcom_chat_client_side_skills","experimentation_azure_variant_endpoint","failbot_handle_non_errors","fgpat_form_ui_updates","geojson_azure_maps","ghost_pilot_confidence_truncation_25","ghost_pilot_confidence_truncation_40","github_models_o3_mini_streaming","hovercard_accessibility","insert_before_patch","issues_react_remove_placeholders","issues_react_blur_item_picker_on_close","marketing_pages_search_explore_provider","primer_react_css_modules_ga","react_data_router_pull_requests","remove_child_patch","sample_network_conn_type","swp_enterprise_contact_form","site_proxima_australia_update","viewscreen_sandbox","issues_react_create_milestone","issues_react_cache_fix_workaround","lifecycle_label_name_updates","copilot_task_oriented_assistive_prompts","issue_types_prevent_private_type_creation"]}</script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/wp-runtime-6b54347fcdc0.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover_js-9da652f58479.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_arianotify-polyfill_ariaNotify-polyfill_js-node_modules_github_mi-3abb8f-46b9f4874d95.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_failbot_failbot_ts-857611aed7fe.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/environment-f04cb2a9fc8c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_primer_behaviors_dist_esm_index_mjs-0dbb79f97f8f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_selector-observer_dist_index_esm_js-f690fd9ae3d5.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_relative-time-element_dist_index_js-62d275b7ddd9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_text-expander-element_dist_index_js-78748950cb0c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_auto-complete-element_dist_index_js-node_modules_github_catalyst_-8e9f78-a90ac05d2469.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-b5f1d7-a1760ffda83d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_markdown-toolbar-element_dist_index_js-ceef33f593fa.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_primer_view-co-c44a69-8c52cf4cd0d3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/github-elements-394f8eb34f19.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/element-registry-0bebfa1427c4.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_braintree_browser-detection_dist_browser-detection_js-node_modules_githu-bb80ec-72267f4e3ff9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_lit-html_lit-html_js-be8cb88f481b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_morphdom_dist_morphdom-e-7c534c-a4a1922eb55f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_turbo_dist_turbo_es2017-esm_js-a03ee12d659a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-893f9f-b6294cf703b7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_color-convert_index_js-e3180fe3bcb3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_quote-selection_dist_index_js-node_modules_github_session-resume_-69cfcc-b9c76c3f220a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_updatable-content_updatable-content_ts-2a55124d5c52.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_task-list_ts-app_assets_modules_github_sso_ts-ui_packages-900dde-768abe60b1f8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_sticky-scroll-into-view_ts-3e000c5d31a9.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_ajax-error_ts-app_assets_modules_github_behaviors_include-87a4ae-c8be3927cda8.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_behaviors_commenting_edit_ts-app_assets_modules_github_behaviors_ht-83c235-e429cff6ceb1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/behaviors-5bd6b8d4247b.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_delegated-events_dist_index_js-node_modules_github_catalyst_lib_index_js-f6223d90c7ba.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-global-01e85cd1be94.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_virtualized-list_es_index_js-node_modules_github_template-parts_lib_index_js-94dc7a2157c1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-70450e-4b93df70b903.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/app_assets_modules_github_ref-selector_ts-3e9d848bab5f.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/codespaces-c3bcacfe317c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_filter-input-element_dist_index_js-node_modules_github_remote-inp-3eebbd-0763620ad7bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_decorators_js-node_modules_delegated-events_di-e161aa-9d41fb1b6c9e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_file-attachment-element_dist_index_js-node_modules_github_remote--3c9c82-b71ef90fbdc7.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repositories-7a0dbaa42c57.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_github_catalyst_lib_inde-dbbea9-26cce2010167.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/code-menu-1c0aedc134b1.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/primer-react-e05a7c4c5398.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-core-8d75451d837a.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/react-lib-f1bca44e0926.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/octicons-react-611691cca2f6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_emotion_is-prop-valid_dist_emotion-is-prop-valid_esm_js-node_modules_emo-62da9f-2df2f32ec596.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_mini-throttle_dist_index_js-node_modules_stacktrace-parser_dist_s-e7dcdd-9a233856b02c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_oddbird_popover-polyfill_dist_popover-fn_js-55fea94174bf.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-58a0c58bfee4.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.50398dad705ce9fff192.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.50398dad705ce9fff192.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.1bcff9205c241e99cff2.module.css" /> <title>GitHub - HKUDS/LightRAG: "LightRAG: Simple and Fast Retrieval-Augmented Generation"</title> <meta name="route-pattern" content="/:user_id/:repository" data-turbo-transient> <meta name="route-controller" content="files" data-turbo-transient> <meta name="route-action" content="disambiguate" data-turbo-transient> <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb"> <meta name="request-id" content="E1BC:272CFB:36FB10:439DED:67DB7E91" data-pjax-transient="true"/><meta name="html-safe-nonce" content="fab8fc2e0176b90753d3a53d3ecf92ce2c4dbc055f42d529939b94792bfc9cb8" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJFMUJDOjI3MkNGQjozNkZCMTA6NDM5REVEOjY3REI3RTkxIiwidmlzaXRvcl9pZCI6IjUwNTU4MDAzODMxOTg5NTMxMDUiLCJyZWdpb25fZWRnZSI6InNvdXRoZWFzdGFzaWEiLCJyZWdpb25fcmVuZGVyIjoic291dGhlYXN0YXNpYSJ9" data-pjax-transient="true"/><meta name="visitor-hmac" content="722d2041412a849915bc6f2e61d621e8d268e900e0905b883dd0b366c451129f" data-pjax-transient="true"/> <meta name="hovercard-subject-tag" content="repository:866513204" data-turbo-transient> <meta name="github-keyboard-shortcuts" content="repository,copilot" data-turbo-transient="true" /> <meta name="selected-link" value="repo_source" data-turbo-transient> <link rel="assets" href="https://github.githubassets.com/"> <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I"> <meta name="octolytics-url" content="https://collector.github.com/github/collect" /> <meta name="analytics-location" content="/<user-name>/<repo-name>" data-turbo-transient="true" /> <meta name="user-login" content=""> <meta name="viewport" content="width=device-width"> <meta name="description" content=""LightRAG: Simple and Fast Retrieval-Augmented Generation" - HKUDS/LightRAG"> <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub"> <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub"> <meta property="fb:app_id" content="1401488693436528"> <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/HKUDS/LightRAG" /> <meta name="twitter:image" content="https://opengraph.githubassets.com/d1d3bf09ba64afe428e7aa164832b28996b73e41dc2ba7ce11317ea1b413a450/HKUDS/LightRAG" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="GitHub - HKUDS/LightRAG: "LightRAG: Simple and Fast Retrieval-Augmented Generation"" /><meta name="twitter:description" content=""LightRAG: Simple and Fast Retrieval-Augmented Generation" - HKUDS/LightRAG" /> <meta property="og:image" content="https://opengraph.githubassets.com/d1d3bf09ba64afe428e7aa164832b28996b73e41dc2ba7ce11317ea1b413a450/HKUDS/LightRAG" /><meta property="og:image:alt" content=""LightRAG: Simple and Fast Retrieval-Augmented Generation" - HKUDS/LightRAG" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="GitHub - HKUDS/LightRAG: "LightRAG: Simple and Fast Retrieval-Augmented Generation"" /><meta property="og:url" content="https://github.com/HKUDS/LightRAG" /><meta property="og:description" content=""LightRAG: Simple and Fast Retrieval-Augmented Generation" - HKUDS/LightRAG" /> <meta name="hostname" content="github.com"> <meta name="expected-hostname" content="github.com"> <meta http-equiv="x-pjax-version" content="9ebd2410fda0476995b36eef14cb90cc2bf9c283e329da88640dedfbe0ef0df9" data-turbo-track="reload"> <meta http-equiv="x-pjax-csp-version" content="77190eb53eb47fc30bd2fcc17a7eefa2dfd8505869fee9299ba911be3a40a9eb" data-turbo-track="reload"> <meta http-equiv="x-pjax-css-version" content="3c046d4b918199cbb4d255cca63226853d0617dbae6529663229394aa9b0742a" data-turbo-track="reload"> <meta http-equiv="x-pjax-js-version" content="ed0451b419c181a05c5cb7273c65a3e0ceb9fa3bebeb8a80154a99e514f369e8" data-turbo-track="reload"> <meta name="turbo-cache-control" content="no-preview" data-turbo-transient=""> <meta data-hydrostats="publish"> <meta name="go-import" content="github.com/HKUDS/LightRAG git https://github.com/HKUDS/LightRAG.git"> <meta name="octolytics-dimension-user_id" content="118165258" /><meta name="octolytics-dimension-user_login" content="HKUDS" /><meta name="octolytics-dimension-repository_id" content="866513204" /><meta name="octolytics-dimension-repository_nwo" content="HKUDS/LightRAG" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="false" /><meta name="octolytics-dimension-repository_network_root_id" content="866513204" /><meta name="octolytics-dimension-repository_network_root_nwo" content="HKUDS/LightRAG" /> <link rel="canonical" href="https://github.com/HKUDS/LightRAG" data-turbo-transient> <meta name="turbo-body-classes" content="logged-out env-production page-responsive"> <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats"> <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors"> <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000"> <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png"> <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon"> <meta name="theme-color" content="#1e2327"> <meta name="color-scheme" content="light dark" /> <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials"> </head> <body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;"> <div class="position-relative header-wrapper js-header-wrapper "> <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a> <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full"> <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span> </span> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ui-commands_ui-commands_ts-46ae788e9cbd.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-33dfb803e078.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.50398dad705ce9fff192.module.css" /> <react-partial partial-name="keyboard-shortcuts-dialog" data-ssr="false" data-attempted-ssr="false" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script> <div data-target="react-partial.reactRoot"></div> </react-partial> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_github_remote-form_dist_index_js-node_modules_delegated-events_dist_inde-94fd67-596d0b3466e2.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/sessions-730dca81d0a2.js"></script> <header class="HeaderMktg header-logged-out js-details-container js-header Details f4 py-3" role="banner" data-is-top="true" data-color-mode=light data-light-theme=light data-dark-theme=dark> <h2 class="sr-only">Navigation Menu</h2> <button type="button" class="HeaderMktg-backdrop d-lg-none border-0 position-fixed top-0 left-0 width-full height-full js-details-target" aria-label="Toggle navigation"> <span class="d-none">Toggle navigation</span> </button> <div class="d-flex flex-column flex-lg-row flex-items-center px-3 px-md-4 px-lg-5 height-full position-relative z-1"> <div class="d-flex flex-justify-between flex-items-center width-full width-lg-auto"> <div class="flex-1"> <button aria-label="Toggle navigation" aria-expanded="false" type="button" data-view-component="true" class="js-details-target js-nav-padding-recalculate js-header-menu-toggle Button--link Button--medium Button d-lg-none color-fg-inherit p-1"> <span class="Button-content"> <span class="Button-label"><div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div> <div class="HeaderMenu-toggle-bar rounded my-1"></div></span> </span> </button> </div> <a class="mr-lg-3 color-fg-inherit flex-order-2 js-prevent-focus-on-mobile-nav" href="/" aria-label="Homepage" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Logomark;ref_loc:Header"}"> <svg height="32" aria-hidden="true" viewBox="0 0 24 24" version="1.1" width="32" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <div class="flex-1 flex-order-2 text-right"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2FHKUDS%2FLightRAG" class="HeaderMenu-link HeaderMenu-button d-inline-flex d-lg-none flex-order-1 f5 no-underline border color-border-default rounded-2 px-2 py-1 color-fg-inherit js-prevent-focus-on-mobile-nav" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="02aeaa07086e5f1d1a68c4697830ce101a0e3e9a2d29ab9c0ddf7a4c2f25737e" data-analytics-event="{"category":"Marketing nav","action":"click to Sign in","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> </div> <div class="HeaderMenu js-header-menu height-fit position-lg-relative d-lg-flex flex-column flex-auto top-0"> <div class="HeaderMenu-wrapper d-flex flex-column flex-self-start flex-lg-row flex-auto rounded rounded-lg-0"> <nav class="HeaderMenu-nav" aria-label="Global"> <ul class="d-lg-flex list-style-none"> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Product <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"github_copilot","context":"product","tag":"link","label":"github_copilot_link_product_navbar"}" href="https://github.com/features/copilot"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">GitHub Copilot</div> Write better code with AI </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"security","context":"product","tag":"link","label":"security_link_product_navbar"}" href="https://github.com/features/security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Security</div> Find and fix vulnerabilities </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"actions","context":"product","tag":"link","label":"actions_link_product_navbar"}" href="https://github.com/features/actions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-workflow color-fg-subtle mr-3"> <path d="M1 3a2 2 0 0 1 2-2h6.5a2 2 0 0 1 2 2v6.5a2 2 0 0 1-2 2H7v4.063C7 16.355 7.644 17 8.438 17H12.5v-2.5a2 2 0 0 1 2-2H21a2 2 0 0 1 2 2V21a2 2 0 0 1-2 2h-6.5a2 2 0 0 1-2-2v-2.5H8.437A2.939 2.939 0 0 1 5.5 15.562V11.5H3a2 2 0 0 1-2-2Zm2-.5a.5.5 0 0 0-.5.5v6.5a.5.5 0 0 0 .5.5h6.5a.5.5 0 0 0 .5-.5V3a.5.5 0 0 0-.5-.5ZM14.5 14a.5.5 0 0 0-.5.5V21a.5.5 0 0 0 .5.5H21a.5.5 0 0 0 .5-.5v-6.5a.5.5 0 0 0-.5-.5Z"></path> </svg> <div> <div class="color-fg-default h4">Actions</div> Automate any workflow </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"codespaces","context":"product","tag":"link","label":"codespaces_link_product_navbar"}" href="https://github.com/features/codespaces"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-codespaces color-fg-subtle mr-3"> <path d="M3.5 3.75C3.5 2.784 4.284 2 5.25 2h13.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 18.75 13H5.25a1.75 1.75 0 0 1-1.75-1.75Zm-2 12c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v4a1.75 1.75 0 0 1-1.75 1.75H3.25a1.75 1.75 0 0 1-1.75-1.75ZM5.25 3.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h13.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Zm-2 12a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h17.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25Z"></path><path d="M10 17.75a.75.75 0 0 1 .75-.75h6.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> <div> <div class="color-fg-default h4">Codespaces</div> Instant dev environments </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"issues","context":"product","tag":"link","label":"issues_link_product_navbar"}" href="https://github.com/features/issues"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-issue-opened color-fg-subtle mr-3"> <path d="M12 1c6.075 0 11 4.925 11 11s-4.925 11-11 11S1 18.075 1 12 5.925 1 12 1ZM2.5 12a9.5 9.5 0 0 0 9.5 9.5 9.5 9.5 0 0 0 9.5-9.5A9.5 9.5 0 0 0 12 2.5 9.5 9.5 0 0 0 2.5 12Zm9.5 2a2 2 0 1 1-.001-3.999A2 2 0 0 1 12 14Z"></path> </svg> <div> <div class="color-fg-default h4">Issues</div> Plan and track work </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"code_review","context":"product","tag":"link","label":"code_review_link_product_navbar"}" href="https://github.com/features/code-review"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-review color-fg-subtle mr-3"> <path d="M10.3 6.74a.75.75 0 0 1-.04 1.06l-2.908 2.7 2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M1.5 4.25c0-.966.784-1.75 1.75-1.75h17.5c.966 0 1.75.784 1.75 1.75v12.5a1.75 1.75 0 0 1-1.75 1.75h-9.69l-3.573 3.573A1.458 1.458 0 0 1 5 21.043V18.5H3.25a1.75 1.75 0 0 1-1.75-1.75ZM3.25 4a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h2.5a.75.75 0 0 1 .75.75v3.19l3.72-3.72a.749.749 0 0 1 .53-.22h10a.25.25 0 0 0 .25-.25V4.25a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Review</div> Manage code changes </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"discussions","context":"product","tag":"link","label":"discussions_link_product_navbar"}" href="https://github.com/features/discussions"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Discussions</div> Collaborate outside of code </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"code_search","context":"product","tag":"link","label":"code_search_link_product_navbar"}" href="https://github.com/features/code-search"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-code-square color-fg-subtle mr-3"> <path d="M10.3 8.24a.75.75 0 0 1-.04 1.06L7.352 12l2.908 2.7a.75.75 0 1 1-1.02 1.1l-3.5-3.25a.75.75 0 0 1 0-1.1l3.5-3.25a.75.75 0 0 1 1.06.04Zm3.44 1.06a.75.75 0 1 1 1.02-1.1l3.5 3.25a.75.75 0 0 1 0 1.1l-3.5 3.25a.75.75 0 1 1-1.02-1.1l2.908-2.7-2.908-2.7Z"></path><path d="M2 3.75C2 2.784 2.784 2 3.75 2h16.5c.966 0 1.75.784 1.75 1.75v16.5A1.75 1.75 0 0 1 20.25 22H3.75A1.75 1.75 0 0 1 2 20.25Zm1.75-.25a.25.25 0 0 0-.25.25v16.5c0 .138.112.25.25.25h16.5a.25.25 0 0 0 .25-.25V3.75a.25.25 0 0 0-.25-.25Z"></path> </svg> <div> <div class="color-fg-default h4">Code Search</div> Find more, search less </div> </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="product-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="product-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"all_features","context":"product","tag":"link","label":"all_features_link_product_navbar"}" href="https://github.com/features"> All features </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"documentation","context":"product","tag":"link","label":"documentation_link_product_navbar"}" href="https://docs.github.com"> Documentation <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"github_skills","context":"product","tag":"link","label":"github_skills_link_product_navbar"}" href="https://skills.github.com"> GitHub Skills <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"blog","context":"product","tag":"link","label":"blog_link_product_navbar"}" href="https://github.blog"> Blog <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Solutions <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 pb-lg-3 mb-3 mb-lg-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-company-size-heading">By company size</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-company-size-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"enterprises","context":"solutions","tag":"link","label":"enterprises_link_solutions_navbar"}" href="https://github.com/enterprise"> Enterprises </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"small_and_medium_teams","context":"solutions","tag":"link","label":"small_and_medium_teams_link_solutions_navbar"}" href="https://github.com/team"> Small and medium teams </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"startups","context":"solutions","tag":"link","label":"startups_link_solutions_navbar"}" href="https://github.com/enterprise/startups"> Startups </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"nonprofits","context":"solutions","tag":"link","label":"nonprofits_link_solutions_navbar"}" href="/solutions/industry/nonprofits"> Nonprofits </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-use-case-heading">By use case</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-use-case-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devsecops","context":"solutions","tag":"link","label":"devsecops_link_solutions_navbar"}" href="/solutions/use-case/devsecops"> DevSecOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"solutions","tag":"link","label":"devops_link_solutions_navbar"}" href="/solutions/use-case/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ci_cd","context":"solutions","tag":"link","label":"ci_cd_link_solutions_navbar"}" href="/solutions/use-case/ci-cd"> CI/CD </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_use_cases","context":"solutions","tag":"link","label":"view_all_use_cases_link_solutions_navbar"}" href="/solutions/use-case"> View all use cases </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="solutions-by-industry-heading">By industry</span> <ul class="list-style-none f5" aria-labelledby="solutions-by-industry-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"healthcare","context":"solutions","tag":"link","label":"healthcare_link_solutions_navbar"}" href="/solutions/industry/healthcare"> Healthcare </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"financial_services","context":"solutions","tag":"link","label":"financial_services_link_solutions_navbar"}" href="/solutions/industry/financial-services"> Financial services </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"manufacturing","context":"solutions","tag":"link","label":"manufacturing_link_solutions_navbar"}" href="/solutions/industry/manufacturing"> Manufacturing </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"government","context":"solutions","tag":"link","label":"government_link_solutions_navbar"}" href="/solutions/industry/government"> Government </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all_industries","context":"solutions","tag":"link","label":"view_all_industries_link_solutions_navbar"}" href="/solutions/industry"> View all industries </a></li> </ul> </div> </div> <div class="HeaderMenu-trailing-link rounded-bottom-2 flex-shrink-0 mt-lg-4 px-lg-4 py-4 py-lg-3 f5 text-semibold"> <a href="/solutions"> View all solutions <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-right HeaderMenu-trailing-link-icon"> <path d="M6.22 3.22a.75.75 0 0 1 1.06 0l4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L9.94 8 6.22 4.28a.75.75 0 0 1 0-1.06Z"></path> </svg> </a> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Resources <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 d-lg-flex flex-wrap dropdown-menu-wide"> <div class="HeaderMenu-column px-lg-4 border-lg-right mb-4 mb-lg-0 pr-lg-7"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-topics-heading">Topics</span> <ul class="list-style-none f5" aria-labelledby="resources-topics-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ai","context":"resources","tag":"link","label":"ai_link_resources_navbar"}" href="/resources/articles/ai"> AI </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"devops","context":"resources","tag":"link","label":"devops_link_resources_navbar"}" href="/resources/articles/devops"> DevOps </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"security","context":"resources","tag":"link","label":"security_link_resources_navbar"}" href="/resources/articles/security"> Security </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"software_development","context":"resources","tag":"link","label":"software_development_link_resources_navbar"}" href="/resources/articles/software-development"> Software Development </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"view_all","context":"resources","tag":"link","label":"view_all_link_resources_navbar"}" href="/resources/articles"> View all </a></li> </ul> </div> </div> <div class="HeaderMenu-column px-lg-4"> <div class="border-bottom pb-3 pb-lg-0 border-lg-bottom-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="resources-explore-heading">Explore</span> <ul class="list-style-none f5" aria-labelledby="resources-explore-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"learning_pathways","context":"resources","tag":"link","label":"learning_pathways_link_resources_navbar"}" href="https://resources.github.com/learn/pathways"> Learning Pathways <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"events_amp_webinars","context":"resources","tag":"link","label":"events_amp_webinars_link_resources_navbar"}" href="https://resources.github.com"> Events & Webinars <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"ebooks_amp_whitepapers","context":"resources","tag":"link","label":"ebooks_amp_whitepapers_link_resources_navbar"}" href="https://github.com/resources/whitepapers"> Ebooks & Whitepapers </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"customer_stories","context":"resources","tag":"link","label":"customer_stories_link_resources_navbar"}" href="https://github.com/customer-stories"> Customer Stories </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary Link--external" target="_blank" data-analytics-event="{"location":"navbar","action":"partners","context":"resources","tag":"link","label":"partners_link_resources_navbar"}" href="https://partner.github.com"> Partners <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link-external HeaderMenu-external-icon color-fg-subtle"> <path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path> </svg> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"executive_insights","context":"resources","tag":"link","label":"executive_insights_link_resources_navbar"}" href="https://github.com/solutions/executive-insights"> Executive Insights </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Open Source <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"github_sponsors","context":"open_source","tag":"link","label":"github_sponsors_link_open_source_navbar"}" href="/sponsors"> <div> <div class="color-fg-default h4">GitHub Sponsors</div> Fund open source developers </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"the_readme_project","context":"open_source","tag":"link","label":"the_readme_project_link_open_source_navbar"}" href="https://github.com/readme"> <div> <div class="color-fg-default h4">The ReadME Project</div> GitHub community articles </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="open-source-repositories-heading">Repositories</span> <ul class="list-style-none f5" aria-labelledby="open-source-repositories-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"topics","context":"open_source","tag":"link","label":"topics_link_open_source_navbar"}" href="https://github.com/topics"> Topics </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"trending","context":"open_source","tag":"link","label":"trending_link_open_source_navbar"}" href="https://github.com/trending"> Trending </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary" data-analytics-event="{"location":"navbar","action":"collections","context":"open_source","tag":"link","label":"collections_link_open_source_navbar"}" href="https://github.com/collections"> Collections </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <button type="button" class="HeaderMenu-link border-0 width-full width-lg-auto px-0 px-lg-2 py-lg-2 no-wrap d-flex flex-items-center flex-justify-between js-details-target" aria-expanded="false"> Enterprise <svg opacity="0.5" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-chevron-down HeaderMenu-icon ml-1"> <path d="M12.78 5.22a.749.749 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.06 0L3.22 6.28a.749.749 0 1 1 1.06-1.06L8 8.939l3.72-3.719a.749.749 0 0 1 1.06 0Z"></path> </svg> </button> <div class="HeaderMenu-dropdown dropdown-menu rounded m-0 p-0 pt-2 pt-lg-4 position-relative position-lg-absolute left-0 left-lg-n3 pb-2 pb-lg-4 px-lg-4"> <div class="HeaderMenu-column"> <div class="border-bottom pb-3 pb-lg-0 pb-lg-3 mb-3 mb-lg-0 mb-lg-3"> <ul class="list-style-none f5" > <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"enterprise_platform","context":"enterprise","tag":"link","label":"enterprise_platform_link_enterprise_navbar"}" href="/enterprise"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-stack color-fg-subtle mr-3"> <path d="M11.063 1.456a1.749 1.749 0 0 1 1.874 0l8.383 5.316a1.751 1.751 0 0 1 0 2.956l-8.383 5.316a1.749 1.749 0 0 1-1.874 0L2.68 9.728a1.751 1.751 0 0 1 0-2.956Zm1.071 1.267a.25.25 0 0 0-.268 0L3.483 8.039a.25.25 0 0 0 0 .422l8.383 5.316a.25.25 0 0 0 .268 0l8.383-5.316a.25.25 0 0 0 0-.422Z"></path><path d="M1.867 12.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path><path d="M1.867 16.324a.75.75 0 0 1 1.035-.232l8.964 5.685a.25.25 0 0 0 .268 0l8.964-5.685a.75.75 0 0 1 .804 1.267l-8.965 5.685a1.749 1.749 0 0 1-1.874 0l-8.965-5.685a.75.75 0 0 1-.231-1.035Z"></path> </svg> <div> <div class="color-fg-default h4">Enterprise platform</div> AI-powered developer platform </div> </a></li> </ul> </div> <div class="border-bottom pb-3 pb-lg-0 border-bottom-0"> <span class="d-block h4 color-fg-default my-1" id="enterprise-available-add-ons-heading">Available add-ons</span> <ul class="list-style-none f5" aria-labelledby="enterprise-available-add-ons-heading"> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"advanced_security","context":"enterprise","tag":"link","label":"advanced_security_link_enterprise_navbar"}" href="https://github.com/enterprise/advanced-security"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-shield-check color-fg-subtle mr-3"> <path d="M16.53 9.78a.75.75 0 0 0-1.06-1.06L11 13.19l-1.97-1.97a.75.75 0 0 0-1.06 1.06l2.5 2.5a.75.75 0 0 0 1.06 0l5-5Z"></path><path d="m12.54.637 8.25 2.675A1.75 1.75 0 0 1 22 4.976V10c0 6.19-3.771 10.704-9.401 12.83a1.704 1.704 0 0 1-1.198 0C5.77 20.705 2 16.19 2 10V4.976c0-.758.489-1.43 1.21-1.664L11.46.637a1.748 1.748 0 0 1 1.08 0Zm-.617 1.426-8.25 2.676a.249.249 0 0 0-.173.237V10c0 5.46 3.28 9.483 8.43 11.426a.199.199 0 0 0 .14 0C17.22 19.483 20.5 15.461 20.5 10V4.976a.25.25 0 0 0-.173-.237l-8.25-2.676a.253.253 0 0 0-.154 0Z"></path> </svg> <div> <div class="color-fg-default h4">Advanced Security</div> Enterprise-grade security features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description pb-lg-3" data-analytics-event="{"location":"navbar","action":"copilot_for_business","context":"enterprise","tag":"link","label":"copilot_for_business_link_enterprise_navbar"}" href="/features/copilot/copilot-business"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-copilot color-fg-subtle mr-3"> <path d="M23.922 16.992c-.861 1.495-5.859 5.023-11.922 5.023-6.063 0-11.061-3.528-11.922-5.023A.641.641 0 0 1 0 16.736v-2.869a.841.841 0 0 1 .053-.22c.372-.935 1.347-2.292 2.605-2.656.167-.429.414-1.055.644-1.517a10.195 10.195 0 0 1-.052-1.086c0-1.331.282-2.499 1.132-3.368.397-.406.89-.717 1.474-.952 1.399-1.136 3.392-2.093 6.122-2.093 2.731 0 4.767.957 6.166 2.093.584.235 1.077.546 1.474.952.85.869 1.132 2.037 1.132 3.368 0 .368-.014.733-.052 1.086.23.462.477 1.088.644 1.517 1.258.364 2.233 1.721 2.605 2.656a.832.832 0 0 1 .053.22v2.869a.641.641 0 0 1-.078.256ZM12.172 11h-.344a4.323 4.323 0 0 1-.355.508C10.703 12.455 9.555 13 7.965 13c-1.725 0-2.989-.359-3.782-1.259a2.005 2.005 0 0 1-.085-.104L4 11.741v6.585c1.435.779 4.514 2.179 8 2.179 3.486 0 6.565-1.4 8-2.179v-6.585l-.098-.104s-.033.045-.085.104c-.793.9-2.057 1.259-3.782 1.259-1.59 0-2.738-.545-3.508-1.492a4.323 4.323 0 0 1-.355-.508h-.016.016Zm.641-2.935c.136 1.057.403 1.913.878 2.497.442.544 1.134.938 2.344.938 1.573 0 2.292-.337 2.657-.751.384-.435.558-1.15.558-2.361 0-1.14-.243-1.847-.705-2.319-.477-.488-1.319-.862-2.824-1.025-1.487-.161-2.192.138-2.533.529-.269.307-.437.808-.438 1.578v.021c0 .265.021.562.063.893Zm-1.626 0c.042-.331.063-.628.063-.894v-.02c-.001-.77-.169-1.271-.438-1.578-.341-.391-1.046-.69-2.533-.529-1.505.163-2.347.537-2.824 1.025-.462.472-.705 1.179-.705 2.319 0 1.211.175 1.926.558 2.361.365.414 1.084.751 2.657.751 1.21 0 1.902-.394 2.344-.938.475-.584.742-1.44.878-2.497Z"></path><path d="M14.5 14.25a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Zm-5 0a1 1 0 0 1 1 1v2a1 1 0 0 1-2 0v-2a1 1 0 0 1 1-1Z"></path> </svg> <div> <div class="color-fg-default h4">Copilot for business</div> Enterprise-grade AI features </div> </a></li> <li> <a class="HeaderMenu-dropdown-link d-block no-underline position-relative py-2 Link--secondary d-flex flex-items-center Link--has-description" data-analytics-event="{"location":"navbar","action":"premium_support","context":"enterprise","tag":"link","label":"premium_support_link_enterprise_navbar"}" href="/premium-support"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-comment-discussion color-fg-subtle mr-3"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 14.25 14H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 15.543V14H1.75A1.75 1.75 0 0 1 0 12.25v-9.5C0 1.784.784 1 1.75 1ZM1.5 2.75v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Z"></path><path d="M22.5 8.75a.25.25 0 0 0-.25-.25h-3.5a.75.75 0 0 1 0-1.5h3.5c.966 0 1.75.784 1.75 1.75v9.5A1.75 1.75 0 0 1 22.25 20H21v1.543a1.457 1.457 0 0 1-2.487 1.03L15.939 20H10.75A1.75 1.75 0 0 1 9 18.25v-1.465a.75.75 0 0 1 1.5 0v1.465c0 .138.112.25.25.25h5.5a.75.75 0 0 1 .53.22l2.72 2.72v-2.19a.75.75 0 0 1 .75-.75h2a.25.25 0 0 0 .25-.25v-9.5Z"></path> </svg> <div> <div class="color-fg-default h4">Premium Support</div> Enterprise-grade 24/7 support </div> </a></li> </ul> </div> </div> </div> </li> <li class="HeaderMenu-item position-relative flex-wrap flex-justify-between flex-items-center d-block d-lg-flex flex-lg-nowrap flex-lg-items-center js-details-container js-header-menu-item"> <a class="HeaderMenu-link no-underline px-0 px-lg-2 py-3 py-lg-2 d-block d-lg-inline-block" data-analytics-event="{"location":"navbar","action":"pricing","context":"global","tag":"link","label":"pricing_link_global_navbar"}" href="https://github.com/pricing">Pricing</a> </li> </ul> </nav> <div class="d-flex flex-column flex-lg-row width-full flex-justify-end flex-lg-items-center text-center mt-3 mt-lg-0 text-lg-left ml-lg-3"> <qbsearch-input class="search-input" data-scope="repo:HKUDS/LightRAG" data-custom-scopes-path="/search/custom_scopes" data-delete-custom-scopes-csrf="mR44jSgC8jLVRggt3VLRaxHpnxJMLdTIUzYxXzuA4w6s2nJGekuMVm9SXn33z1FtY1WRsIBDiXopT4FHp-Bddg" data-max-custom-scopes="10" data-header-redesign-enabled="false" data-initial-value="" data-blackbird-suggestions-path="/search/suggestions" data-jump-to-suggestions-path="/_graphql/GetSuggestedNavigationDestinations" data-current-repository="HKUDS/LightRAG" data-current-org="" data-current-owner="HKUDS" data-logged-in="false" data-copilot-chat-enabled="false" data-nl-search-enabled="false" data-retain-scroll-position="true"> <div class="search-input-container search-with-dialog position-relative d-flex flex-row flex-items-center mr-4 rounded" data-action="click:qbsearch-input#searchInputContainerClicked" > <button type="button" class="header-search-button placeholder input-button form-control d-flex flex-1 flex-self-stretch flex-items-center no-wrap width-full py-0 pl-2 pr-0 text-left border-0 box-shadow-none" data-target="qbsearch-input.inputButton" aria-label="Search or jump to…" aria-haspopup="dialog" placeholder="Search or jump to..." data-hotkey=s,/ autocapitalize="off" data-analytics-event="{"location":"navbar","action":"searchbar","context":"global","tag":"input","label":"searchbar_input_global_navbar"}" data-action="click:qbsearch-input#handleExpand" > <div class="mr-2 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </div> <span class="flex-1" data-target="qbsearch-input.inputButtonText">Search or jump to...</span> <div class="d-flex" data-target="qbsearch-input.hotkeyIndicator"> <svg xmlns="http://www.w3.org/2000/svg" width="22" height="20" aria-hidden="true" class="mr-1"><path fill="none" stroke="#979A9C" opacity=".4" d="M3.5.5h12c1.7 0 3 1.3 3 3v13c0 1.7-1.3 3-3 3h-12c-1.7 0-3-1.3-3-3v-13c0-1.7 1.3-3 3-3z"></path><path fill="#979A9C" d="M11.8 6L8 15.1h-.9L10.8 6h1z"></path></svg> </div> </button> <input type="hidden" name="type" class="js-site-search-type-field"> <div class="Overlay--hidden " data-modal-dialog-overlay> <modal-dialog data-action="close:qbsearch-input#handleClose cancel:qbsearch-input#handleClose" data-target="qbsearch-input.searchSuggestionsDialog" role="dialog" id="search-suggestions-dialog" aria-modal="true" aria-labelledby="search-suggestions-dialog-header" data-view-component="true" class="Overlay Overlay--width-large Overlay--height-auto"> <h1 id="search-suggestions-dialog-header" class="sr-only">Search code, repositories, users, issues, pull requests...</h1> <div class="Overlay-body Overlay-body--paddingNone"> <div data-view-component="true"> <div class="search-suggestions position-fixed width-full color-shadow-large border color-fg-default color-bg-default overflow-hidden d-flex flex-column query-builder-container" style="border-radius: 12px;" data-target="qbsearch-input.queryBuilderContainer" hidden > <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="query-builder-test-form" action="" accept-charset="UTF-8" method="get"> <query-builder data-target="qbsearch-input.queryBuilder" id="query-builder-query-builder-test" data-filter-key=":" data-view-component="true" class="QueryBuilder search-query-builder"> <div class="FormControl FormControl--fullWidth"> <label id="query-builder-test-label" for="query-builder-test" class="FormControl-label sr-only"> Search </label> <div class="QueryBuilder-StyledInput width-fit " data-target="query-builder.styledInput" > <span id="query-builder-test-leadingvisual-wrap" class="FormControl-input-leadingVisualWrap QueryBuilder-leadingVisualWrap"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search FormControl-input-leadingVisual"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </span> <div data-target="query-builder.styledInputContainer" class="QueryBuilder-StyledInputContainer"> <div aria-hidden="true" class="QueryBuilder-StyledInputContent" data-target="query-builder.styledInputContent" ></div> <div class="QueryBuilder-InputWrapper"> <div aria-hidden="true" class="QueryBuilder-Sizer" data-target="query-builder.sizer"></div> <input id="query-builder-test" name="query-builder-test" value="" autocomplete="off" type="text" role="combobox" spellcheck="false" aria-expanded="false" aria-describedby="validation-7b0f9cea-4b9e-4e39-9363-34f10d7ba989" data-target="query-builder.input" data-action=" input:query-builder#inputChange blur:query-builder#inputBlur keydown:query-builder#inputKeydown focus:query-builder#inputFocus " data-view-component="true" class="FormControl-input QueryBuilder-Input FormControl-medium" /> </div> </div> <span class="sr-only" id="query-builder-test-clear">Clear</span> <button role="button" id="query-builder-test-clear-button" aria-labelledby="query-builder-test-clear query-builder-test-label" data-target="query-builder.clearButton" data-action=" click:query-builder#clear focus:query-builder#clearButtonFocus blur:query-builder#clearButtonBlur " variant="small" hidden="hidden" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium mr-1 px-2 py-0 d-flex flex-items-center rounded-1 color-fg-muted"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x-circle-fill Button-visual"> <path d="M2.343 13.657A8 8 0 1 1 13.658 2.343 8 8 0 0 1 2.343 13.657ZM6.03 4.97a.751.751 0 0 0-1.042.018.751.751 0 0 0-.018 1.042L6.94 8 4.97 9.97a.749.749 0 0 0 .326 1.275.749.749 0 0 0 .734-.215L8 9.06l1.97 1.97a.749.749 0 0 0 1.275-.326.749.749 0 0 0-.215-.734L9.06 8l1.97-1.97a.749.749 0 0 0-.326-1.275.749.749 0 0 0-.734.215L8 6.94Z"></path> </svg> </button> </div> <template id="search-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-search"> <path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path> </svg> </template> <template id="code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="file-code-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-file-code"> <path d="M4 1.75C4 .784 4.784 0 5.75 0h5.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v8.586A1.75 1.75 0 0 1 14.25 15h-9a.75.75 0 0 1 0-1.5h9a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 10 4.25V1.5H5.75a.25.25 0 0 0-.25.25v2.5a.75.75 0 0 1-1.5 0Zm1.72 4.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734l1.47-1.47-1.47-1.47a.75.75 0 0 1 0-1.06ZM3.28 7.78 1.81 9.25l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Zm8.22-6.218V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path> </svg> </template> <template id="history-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-history"> <path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path> </svg> </template> <template id="repo-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> </template> <template id="bookmark-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bookmark"> <path d="M3 2.75C3 1.784 3.784 1 4.75 1h6.5c.966 0 1.75.784 1.75 1.75v11.5a.75.75 0 0 1-1.227.579L8 11.722l-3.773 3.107A.751.751 0 0 1 3 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.91l3.023-2.489a.75.75 0 0 1 .954 0l3.023 2.49V2.75a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="plus-circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-plus-circle"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm7.25-3.25v2.5h2.5a.75.75 0 0 1 0 1.5h-2.5v2.5a.75.75 0 0 1-1.5 0v-2.5h-2.5a.75.75 0 0 1 0-1.5h2.5v-2.5a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="circle-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> </template> <template id="trash-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-trash"> <path d="M11 1.75V3h2.25a.75.75 0 0 1 0 1.5H2.75a.75.75 0 0 1 0-1.5H5V1.75C5 .784 5.784 0 6.75 0h2.5C10.216 0 11 .784 11 1.75ZM4.496 6.675l.66 6.6a.25.25 0 0 0 .249.225h5.19a.25.25 0 0 0 .249-.225l.66-6.6a.75.75 0 0 1 1.492.149l-.66 6.6A1.748 1.748 0 0 1 10.595 15h-5.19a1.75 1.75 0 0 1-1.741-1.575l-.66-6.6a.75.75 0 1 1 1.492-.15ZM6.5 1.75V3h3V1.75a.25.25 0 0 0-.25-.25h-2.5a.25.25 0 0 0-.25.25Z"></path> </svg> </template> <template id="team-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-people"> <path d="M2 5.5a3.5 3.5 0 1 1 5.898 2.549 5.508 5.508 0 0 1 3.034 4.084.75.75 0 1 1-1.482.235 4 4 0 0 0-7.9 0 .75.75 0 0 1-1.482-.236A5.507 5.507 0 0 1 3.102 8.05 3.493 3.493 0 0 1 2 5.5ZM11 4a3.001 3.001 0 0 1 2.22 5.018 5.01 5.01 0 0 1 2.56 3.012.749.749 0 0 1-.885.954.752.752 0 0 1-.549-.514 3.507 3.507 0 0 0-2.522-2.372.75.75 0 0 1-.574-.73v-.352a.75.75 0 0 1 .416-.672A1.5 1.5 0 0 0 11 5.5.75.75 0 0 1 11 4Zm-5.5-.5a2 2 0 1 0-.001 3.999A2 2 0 0 0 5.5 3.5Z"></path> </svg> </template> <template id="project-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-project"> <path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25ZM11.75 3a.75.75 0 0 1 .75.75v7.5a.75.75 0 0 1-1.5 0v-7.5a.75.75 0 0 1 .75-.75Zm-8.25.75a.75.75 0 0 1 1.5 0v5.5a.75.75 0 0 1-1.5 0ZM8 3a.75.75 0 0 1 .75.75v3.5a.75.75 0 0 1-1.5 0v-3.5A.75.75 0 0 1 8 3Z"></path> </svg> </template> <template id="pencil-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pencil"> <path d="M11.013 1.427a1.75 1.75 0 0 1 2.474 0l1.086 1.086a1.75 1.75 0 0 1 0 2.474l-8.61 8.61c-.21.21-.47.364-.756.445l-3.251.93a.75.75 0 0 1-.927-.928l.929-3.25c.081-.286.235-.547.445-.758l8.61-8.61Zm.176 4.823L9.75 4.81l-6.286 6.287a.253.253 0 0 0-.064.108l-.558 1.953 1.953-.558a.253.253 0 0 0 .108-.064Zm1.238-3.763a.25.25 0 0 0-.354 0L10.811 3.75l1.439 1.44 1.263-1.263a.25.25 0 0 0 0-.354Z"></path> </svg> </template> <template id="copilot-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot"> <path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path> </svg> </template> <template id="copilot-error-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copilot-error"> <path d="M16 11.24c0 .112-.072.274-.21.467L13 9.688V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-.198 0-.388-.009-.571-.029L6.833 5.226a4.01 4.01 0 0 0 .17-.782c.117-.935-.037-1.395-.241-1.614-.193-.206-.637-.413-1.682-.297-.683.076-1.115.231-1.395.415l-1.257-.91c.579-.564 1.413-.877 2.485-.996 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095Zm-5.083-8.707c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Zm2.511 11.074c-1.393.776-3.272 1.428-5.43 1.428-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.18-.455-.241-.963-.252-1.475L.31 4.107A.747.747 0 0 1 0 3.509V3.49a.748.748 0 0 1 .625-.73c.156-.026.306.047.435.139l14.667 10.578a.592.592 0 0 1 .227.264.752.752 0 0 1 .046.249v.022a.75.75 0 0 1-1.19.596Zm-1.367-.991L5.635 7.964a5.128 5.128 0 0 1-.889.073c-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433 1.539 0 3.089-.505 4.063-.934Z"></path> </svg> </template> <template id="workflow-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-workflow"> <path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="book-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> </template> <template id="code-review-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-review"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 13H8.061l-2.574 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25v-8.5C0 1.784.784 1 1.75 1ZM1.5 2.75v8.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-8.5a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm5.28 1.72a.75.75 0 0 1 0 1.06L5.31 7l1.47 1.47a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018l-2-2a.75.75 0 0 1 0-1.06l2-2a.75.75 0 0 1 1.06 0Zm2.44 0a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L10.69 7 9.22 5.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </template> <template id="codespaces-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-codespaces"> <path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path> </svg> </template> <template id="comment-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment"> <path d="M1 2.75C1 1.784 1.784 1 2.75 1h10.5c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 13.25 12H9.06l-2.573 2.573A1.458 1.458 0 0 1 4 13.543V12H2.75A1.75 1.75 0 0 1 1 10.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h4.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> </template> <template id="comment-discussion-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </template> <template id="organization-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-organization"> <path d="M1.75 16A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0h8.5C11.216 0 12 .784 12 1.75v12.5c0 .085-.006.168-.018.25h2.268a.25.25 0 0 0 .25-.25V8.285a.25.25 0 0 0-.111-.208l-1.055-.703a.749.749 0 1 1 .832-1.248l1.055.703c.487.325.779.871.779 1.456v5.965A1.75 1.75 0 0 1 14.25 16h-3.5a.766.766 0 0 1-.197-.026c-.099.017-.2.026-.303.026h-3a.75.75 0 0 1-.75-.75V14h-1v1.25a.75.75 0 0 1-.75.75Zm-.25-1.75c0 .138.112.25.25.25H4v-1.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 .75.75v1.25h2.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM3.75 6h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 3.75A.75.75 0 0 1 3.75 3h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 3.75Zm4 3A.75.75 0 0 1 7.75 6h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 7 6.75ZM7.75 3h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5ZM3 9.75A.75.75 0 0 1 3.75 9h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 9.75ZM7.75 9h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="rocket-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-rocket"> <path d="M14.064 0h.186C15.216 0 16 .784 16 1.75v.186a8.752 8.752 0 0 1-2.564 6.186l-.458.459c-.314.314-.641.616-.979.904v3.207c0 .608-.315 1.172-.833 1.49l-2.774 1.707a.749.749 0 0 1-1.11-.418l-.954-3.102a1.214 1.214 0 0 1-.145-.125L3.754 9.816a1.218 1.218 0 0 1-.124-.145L.528 8.717a.749.749 0 0 1-.418-1.11l1.71-2.774A1.748 1.748 0 0 1 3.31 4h3.204c.288-.338.59-.665.904-.979l.459-.458A8.749 8.749 0 0 1 14.064 0ZM8.938 3.623h-.002l-.458.458c-.76.76-1.437 1.598-2.02 2.5l-1.5 2.317 2.143 2.143 2.317-1.5c.902-.583 1.74-1.26 2.499-2.02l.459-.458a7.25 7.25 0 0 0 2.123-5.127V1.75a.25.25 0 0 0-.25-.25h-.186a7.249 7.249 0 0 0-5.125 2.123ZM3.56 14.56c-.732.732-2.334 1.045-3.005 1.148a.234.234 0 0 1-.201-.064.234.234 0 0 1-.064-.201c.103-.671.416-2.273 1.15-3.003a1.502 1.502 0 1 1 2.12 2.12Zm6.94-3.935c-.088.06-.177.118-.266.175l-2.35 1.521.548 1.783 1.949-1.2a.25.25 0 0 0 .119-.213ZM3.678 8.116 5.2 5.766c.058-.09.117-.178.176-.266H3.309a.25.25 0 0 0-.213.119l-1.2 1.95ZM12 5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </template> <template id="shield-check-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield-check"> <path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="heart-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-heart"> <path d="m8 14.25.345.666a.75.75 0 0 1-.69 0l-.008-.004-.018-.01a7.152 7.152 0 0 1-.31-.17 22.055 22.055 0 0 1-3.434-2.414C2.045 10.731 0 8.35 0 5.5 0 2.836 2.086 1 4.25 1 5.797 1 7.153 1.802 8 3.02 8.847 1.802 10.203 1 11.75 1 13.914 1 16 2.836 16 5.5c0 2.85-2.045 5.231-3.885 6.818a22.066 22.066 0 0 1-3.744 2.584l-.018.01-.006.003h-.002ZM4.25 2.5c-1.336 0-2.75 1.164-2.75 3 0 2.15 1.58 4.144 3.365 5.682A20.58 20.58 0 0 0 8 13.393a20.58 20.58 0 0 0 3.135-2.211C12.92 9.644 14.5 7.65 14.5 5.5c0-1.836-1.414-3-2.75-3-1.373 0-2.609.986-3.029 2.456a.749.749 0 0 1-1.442 0C6.859 3.486 5.623 2.5 4.25 2.5Z"></path> </svg> </template> <template id="server-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-server"> <path d="M1.75 1h12.5c.966 0 1.75.784 1.75 1.75v4c0 .372-.116.717-.314 1 .198.283.314.628.314 1v4a1.75 1.75 0 0 1-1.75 1.75H1.75A1.75 1.75 0 0 1 0 12.75v-4c0-.358.109-.707.314-1a1.739 1.739 0 0 1-.314-1v-4C0 1.784.784 1 1.75 1ZM1.5 2.75v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25Zm.25 5.75a.25.25 0 0 0-.25.25v4c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-4a.25.25 0 0 0-.25-.25ZM7 4.75A.75.75 0 0 1 7.75 4h4.5a.75.75 0 0 1 0 1.5h-4.5A.75.75 0 0 1 7 4.75ZM7.75 10h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM3 4.75A.75.75 0 0 1 3.75 4h.5a.75.75 0 0 1 0 1.5h-.5A.75.75 0 0 1 3 4.75ZM3.75 10h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1 0-1.5Z"></path> </svg> </template> <template id="globe-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-globe"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM5.78 8.75a9.64 9.64 0 0 0 1.363 4.177c.255.426.542.832.857 1.215.245-.296.551-.705.857-1.215A9.64 9.64 0 0 0 10.22 8.75Zm4.44-1.5a9.64 9.64 0 0 0-1.363-4.177c-.307-.51-.612-.919-.857-1.215a9.927 9.927 0 0 0-.857 1.215A9.64 9.64 0 0 0 5.78 7.25Zm-5.944 1.5H1.543a6.507 6.507 0 0 0 4.666 5.5c-.123-.181-.24-.365-.352-.552-.715-1.192-1.437-2.874-1.581-4.948Zm-2.733-1.5h2.733c.144-2.074.866-3.756 1.58-4.948.12-.197.237-.381.353-.552a6.507 6.507 0 0 0-4.666 5.5Zm10.181 1.5c-.144 2.074-.866 3.756-1.58 4.948-.12.197-.237.381-.353.552a6.507 6.507 0 0 0 4.666-5.5Zm2.733-1.5a6.507 6.507 0 0 0-4.666-5.5c.123.181.24.365.353.552.714 1.192 1.436 2.874 1.58 4.948Z"></path> </svg> </template> <template id="issue-opened-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </template> <template id="device-mobile-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-mobile"> <path d="M3.75 0h8.5C13.216 0 14 .784 14 1.75v12.5A1.75 1.75 0 0 1 12.25 16h-8.5A1.75 1.75 0 0 1 2 14.25V1.75C2 .784 2.784 0 3.75 0ZM3.5 1.75v12.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25ZM8 13a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path> </svg> </template> <template id="package-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-package"> <path d="m8.878.392 5.25 3.045c.54.314.872.89.872 1.514v6.098a1.75 1.75 0 0 1-.872 1.514l-5.25 3.045a1.75 1.75 0 0 1-1.756 0l-5.25-3.045A1.75 1.75 0 0 1 1 11.049V4.951c0-.624.332-1.201.872-1.514L7.122.392a1.75 1.75 0 0 1 1.756 0ZM7.875 1.69l-4.63 2.685L8 7.133l4.755-2.758-4.63-2.685a.248.248 0 0 0-.25 0ZM2.5 5.677v5.372c0 .09.047.171.125.216l4.625 2.683V8.432Zm6.25 8.271 4.625-2.683a.25.25 0 0 0 .125-.216V5.677L8.75 8.432Z"></path> </svg> </template> <template id="credit-card-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-credit-card"> <path d="M10.75 9a.75.75 0 0 0 0 1.5h1.5a.75.75 0 0 0 0-1.5h-1.5Z"></path><path d="M0 3.75C0 2.784.784 2 1.75 2h12.5c.966 0 1.75.784 1.75 1.75v8.5A1.75 1.75 0 0 1 14.25 14H1.75A1.75 1.75 0 0 1 0 12.25ZM14.5 6.5h-13v5.75c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25Zm0-2.75a.25.25 0 0 0-.25-.25H1.75a.25.25 0 0 0-.25.25V5h13Z"></path> </svg> </template> <template id="play-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </template> <template id="gift-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-gift"> <path d="M2 2.75A2.75 2.75 0 0 1 4.75 0c.983 0 1.873.42 2.57 1.232.268.318.497.668.68 1.042.183-.375.411-.725.68-1.044C9.376.42 10.266 0 11.25 0a2.75 2.75 0 0 1 2.45 4h.55c.966 0 1.75.784 1.75 1.75v2c0 .698-.409 1.301-1 1.582v4.918A1.75 1.75 0 0 1 13.25 16H2.75A1.75 1.75 0 0 1 1 14.25V9.332C.409 9.05 0 8.448 0 7.75v-2C0 4.784.784 4 1.75 4h.55c-.192-.375-.3-.8-.3-1.25ZM7.25 9.5H2.5v4.75c0 .138.112.25.25.25h4.5Zm1.5 0v5h4.5a.25.25 0 0 0 .25-.25V9.5Zm0-4V8h5.5a.25.25 0 0 0 .25-.25v-2a.25.25 0 0 0-.25-.25Zm-7 0a.25.25 0 0 0-.25.25v2c0 .138.112.25.25.25h5.5V5.5h-5.5Zm3-4a1.25 1.25 0 0 0 0 2.5h2.309c-.233-.818-.542-1.401-.878-1.793-.43-.502-.915-.707-1.431-.707ZM8.941 4h2.309a1.25 1.25 0 0 0 0-2.5c-.516 0-1 .205-1.43.707-.337.392-.646.975-.879 1.793Z"></path> </svg> </template> <template id="code-square-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code-square"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </template> <template id="device-desktop-icon"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-device-desktop"> <path d="M14.25 1c.966 0 1.75.784 1.75 1.75v7.5A1.75 1.75 0 0 1 14.25 12h-3.727c.099 1.041.52 1.872 1.292 2.757A.752.752 0 0 1 11.25 16h-6.5a.75.75 0 0 1-.565-1.243c.772-.885 1.192-1.716 1.292-2.757H1.75A1.75 1.75 0 0 1 0 10.25v-7.5C0 1.784.784 1 1.75 1ZM1.75 2.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25ZM9.018 12H6.982a5.72 5.72 0 0 1-.765 2.5h3.566a5.72 5.72 0 0 1-.765-2.5Z"></path> </svg> </template> <div class="position-relative"> <ul role="listbox" class="ActionListWrap QueryBuilder-ListWrap" aria-label="Suggestions" data-action=" combobox-commit:query-builder#comboboxCommit mousedown:query-builder#resultsMousedown " data-target="query-builder.resultsList" data-persist-list=false id="query-builder-test-results" ></ul> </div> <div class="FormControl-inlineValidation" id="validation-7b0f9cea-4b9e-4e39-9363-34f10d7ba989" hidden="hidden"> <span class="FormControl-inlineValidation--visual"> <svg aria-hidden="true" height="12" viewBox="0 0 12 12" version="1.1" width="12" data-view-component="true" class="octicon octicon-alert-fill"> <path d="M4.855.708c.5-.896 1.79-.896 2.29 0l4.675 8.351a1.312 1.312 0 0 1-1.146 1.954H1.33A1.313 1.313 0 0 1 .183 9.058ZM7 7V3H5v4Zm-1 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2Z"></path> </svg> </span> <span></span> </div> </div> <div data-target="query-builder.screenReaderFeedback" aria-live="polite" aria-atomic="true" class="sr-only"></div> </query-builder></form> <div class="d-flex flex-row color-fg-muted px-3 text-small color-bg-default search-feedback-prompt"> <a target="_blank" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax" data-view-component="true" class="Link color-fg-accent text-normal ml-2">Search syntax tips</a> <div class="d-flex flex-1"></div> </div> </div> </div> </div> </modal-dialog></div> </div> <div data-action="click:qbsearch-input#retract" class="dark-backdrop position-fixed" hidden data-target="qbsearch-input.darkBackdrop"></div> <div class="color-fg-default"> <dialog-helper> <dialog data-target="qbsearch-input.feedbackDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="feedback-dialog" aria-modal="true" aria-labelledby="feedback-dialog-title" aria-describedby="feedback-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="feedback-dialog-title"> Provide feedback </h1> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="feedback-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="feedback-dialog-title"> <div data-view-component="true" class="Overlay-body"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="code-search-feedback-form" data-turbo="false" action="/search/feedback" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="aE03vEMB21ebMByq/Waq52KPg3urqNnN4qxPXixBIIoimmvFfcZpQ2cUZrEWm92A2m1m6G9PNMUUhXEceWIKlg==" /> <p>We read every piece of feedback, and take your input very seriously.</p> <textarea name="feedback" class="form-control width-full mb-2" style="height: 120px" id="feedback"></textarea> <input name="include_email" id="include_email" aria-label="Include my email address so I can be contacted" class="form-control mr-2" type="checkbox"> <label for="include_email" style="font-weight: normal">Include my email address so I can be contacted</label> </form></div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd"> <button data-close-dialog-id="feedback-dialog" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="code-search-feedback-form" data-action="click:qbsearch-input#submitFeedback" type="submit" data-view-component="true" class="btn-primary btn"> Submit feedback </button> </div> </dialog></dialog-helper> <custom-scopes data-target="qbsearch-input.customScopesManager"> <dialog-helper> <dialog data-target="custom-scopes.customScopesModalDialog" data-action="close:qbsearch-input#handleDialogClose cancel:qbsearch-input#handleDialogClose" id="custom-scopes-dialog" aria-modal="true" aria-labelledby="custom-scopes-dialog-title" aria-describedby="custom-scopes-dialog-description" data-view-component="true" class="Overlay Overlay-whenNarrow Overlay--size-medium Overlay--motion-scaleFade Overlay--disableScroll"> <div data-view-component="true" class="Overlay-header Overlay-header--divided"> <div class="Overlay-headerContentWrap"> <div class="Overlay-titleWrap"> <h1 class="Overlay-title " id="custom-scopes-dialog-title"> Saved searches </h1> <h2 id="custom-scopes-dialog-description" class="Overlay-description">Use saved searches to filter your results more quickly</h2> </div> <div class="Overlay-actionWrap"> <button data-close-dialog-id="custom-scopes-dialog" aria-label="Close" type="button" data-view-component="true" class="close-button Overlay-closeButton"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg></button> </div> </div> </div> <scrollable-region data-labelled-by="custom-scopes-dialog-title"> <div data-view-component="true" class="Overlay-body"> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <div hidden class="create-custom-scope-form" data-target="custom-scopes.createCustomScopeForm"> <!-- '"` --><!-- </textarea></xmp> --></option></form><form id="custom-scopes-dialog-form" data-turbo="false" action="/search/custom_scopes" accept-charset="UTF-8" method="post"><input type="hidden" data-csrf="true" name="authenticity_token" value="tG8bzX5zEu2VtcNZveqrdH/XEct2RH7uhJcfDd0FgxaodrhpUubAhabvlpKmmaRhBJ/X12hsmOlxcA2SuE9SYg==" /> <div data-target="custom-scopes.customScopesModalDialogFlash"></div> <input type="hidden" id="custom_scope_id" name="custom_scope_id" data-target="custom-scopes.customScopesIdField"> <div class="form-group"> <label for="custom_scope_name">Name</label> <auto-check src="/search/custom_scopes/check_name" required only-validate-on-blur="false"> <input type="text" name="custom_scope_name" id="custom_scope_name" data-target="custom-scopes.customScopesNameField" class="form-control" autocomplete="off" placeholder="github-ruby" required maxlength="50"> <input type="hidden" data-csrf="true" value="dtEzsXDV2bi+ifcW7/WsuGfh04MgO3KoxKJQS30yqA/i3H1HioXofKQ/lp3K1E59YecoG/TJInsPKq6pF8SUSQ==" /> </auto-check> </div> <div class="form-group"> <label for="custom_scope_query">Query</label> <input type="text" name="custom_scope_query" id="custom_scope_query" data-target="custom-scopes.customScopesQueryField" class="form-control" autocomplete="off" placeholder="(repo:mona/a OR repo:mona/b) AND lang:python" required maxlength="500"> </div> <p class="text-small color-fg-muted"> To see all available qualifiers, see our <a class="Link--inTextBlock" href="https://docs.github.com/search-github/github-code-search/understanding-github-code-search-syntax">documentation</a>. </p> </form> </div> <div data-target="custom-scopes.manageCustomScopesForm"> <div data-target="custom-scopes.list"></div> </div> </div> </scrollable-region> <div data-view-component="true" class="Overlay-footer Overlay-footer--alignEnd Overlay-footer--divided"> <button data-action="click:custom-scopes#customScopesCancel" type="button" data-view-component="true" class="btn"> Cancel </button> <button form="custom-scopes-dialog-form" data-action="click:custom-scopes#customScopesSubmit" data-target="custom-scopes.customScopesSubmitButton" type="submit" data-view-component="true" class="btn-primary btn"> Create saved search </button> </div> </dialog></dialog-helper> </custom-scopes> </div> </qbsearch-input> <div class="position-relative HeaderMenu-link-wrap d-lg-inline-block"> <a href="/login?return_to=https%3A%2F%2Fgithub.com%2FHKUDS%2FLightRAG" class="HeaderMenu-link HeaderMenu-link--sign-in HeaderMenu-button flex-shrink-0 no-underline d-none d-lg-inline-flex border border-lg-0 rounded rounded-lg-0 px-2 py-1" style="margin-left: 12px;" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="02aeaa07086e5f1d1a68c4697830ce101a0e3e9a2d29ab9c0ddf7a4c2f25737e" data-analytics-event="{"category":"Marketing nav","action":"click to go to homepage","label":"ref_page:Marketing;ref_cta:Sign in;ref_loc:Header"}" > Sign in </a> </div> <a href="/signup?ref_cta=Sign+up&ref_loc=header+logged+out&ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E&source=header-repo&source_repo=HKUDS%2FLightRAG" class="HeaderMenu-link HeaderMenu-link--sign-up HeaderMenu-button flex-shrink-0 d-flex d-lg-inline-flex no-underline border color-border-default rounded px-2 py-1" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"site header menu","repository_id":null,"auth_type":"SIGN_UP","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="02aeaa07086e5f1d1a68c4697830ce101a0e3e9a2d29ab9c0ddf7a4c2f25737e" data-analytics-event="{"category":"Sign up","action":"click to sign up for account","label":"ref_page:/<user-name>/<repo-name>;ref_cta:Sign up;ref_loc:header logged out"}" > Sign up </a> <button type="button" class="sr-only js-header-menu-focus-trap d-block d-lg-none">Reseting focus</button> </div> </div> </div> </div> </header> <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span> <button id="icon-button-b0ae9383-a61e-4bbd-b7f4-77788e558c48" aria-labelledby="tooltip-809d01ea-2f1a-40ef-9986-c785c6db32fc" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button><tool-tip id="tooltip-809d01ea-2f1a-40ef-9986-c785c6db32fc" for="icon-button-b0ae9383-a61e-4bbd-b7f4-77788e558c48" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip> </div> </div> <div id="start-of-content" class="show-on-focus"></div> <div id="js-flash-container" class="flash-container" data-turbo-replace> <template class="js-flash-template"> <div class="flash flash-full {{ className }}"> <div > <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div aria-atomic="true" role="alert" class="js-flash-alert"> <div>{{ message }}</div> </div> </div> </div> </template> </div> <div class="application-main " data-commit-hovercards-enabled data-discussion-hovercards-enabled data-issue-and-pr-hovercards-enabled data-project-hovercards-enabled > <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class=""> <main id="js-repo-pjax-container" > <div id="repository-container-header" class="pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace> <div class="d-flex flex-nowrap flex-justify-end mb-3 px-3 px-lg-5" style="gap: 1rem;"> <div class="flex-auto min-width-0 width-fit"> <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo color-fg-muted mr-2"> <path d="M2 2.5A2.5 2.5 0 0 1 4.5 0h8.75a.75.75 0 0 1 .75.75v12.5a.75.75 0 0 1-.75.75h-2.5a.75.75 0 0 1 0-1.5h1.75v-2h-8a1 1 0 0 0-.714 1.7.75.75 0 1 1-1.072 1.05A2.495 2.495 0 0 1 2 11.5Zm10.5-1h-8a1 1 0 0 0-1 1v6.708A2.486 2.486 0 0 1 4.5 9h8ZM5 12.25a.25.25 0 0 1 .25-.25h3.5a.25.25 0 0 1 .25.25v3.25a.25.25 0 0 1-.4.2l-1.45-1.087a.249.249 0 0 0-.3 0L5.4 15.7a.25.25 0 0 1-.4-.2Z"></path> </svg> <span class="author flex-self-stretch" itemprop="author"> <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/HKUDS/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/HKUDS"> HKUDS </a> </span> <span class="mx-1 flex-self-stretch color-fg-muted">/</span> <strong itemprop="name" class="mr-2 flex-self-stretch"> <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/HKUDS/LightRAG">LightRAG</a> </strong> <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span> </div> </div> <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;"> <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;"> <li> <a href="/login?return_to=%2FHKUDS%2FLightRAG" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="00d091da509c12c0da169a782eb15225da0115e8c051a59f64449235b7f601c7" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-ac8f55fb-c8d1-4177-9b84-a75a90ce9c4b" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </li> <li> <a icon="repo-forked" id="fork-button" href="/login?return_to=%2FHKUDS%2FLightRAG" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"repo details fork button","repository_id":866513204,"auth_type":"LOG_IN","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="bde5372bb189ed963af9198ae5005e20c9f8a08b2109349fc3d109b83e4377f5" data-view-component="true" class="btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg>Fork <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="1,832" data-view-component="true" class="Counter">1.8k</span> </a> </li> <li> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2FHKUDS%2FLightRAG" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":866513204,"auth_type":"LOG_IN","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="bb190a89b262ea347ff5c150191d27a31feae5668a5f4f2cf42f97c003171e2b" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> <span id="repo-stars-counter-star" aria-label="12939 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="12,939" data-view-component="true" class="Counter js-social-count">12.9k</span> </a></div> </li> </ul> </div> </div> <div id="responsive-meta-container" data-turbo-replace> <div class="d-block d-md-none mb-2 px-3 px-md-4 px-lg-5"> <p class="f4 mb-3 "> "LightRAG: Simple and Fast Retrieval-Augmented Generation" </p> <div class="mb-2 d-flex flex-items-center Link--secondary"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="https://arxiv.org/abs/2410.05779" role="link" target="_blank" class="text-bold" rel="noopener noreferrer" href="https://arxiv.org/abs/2410.05779">arxiv.org/abs/2410.05779</a> </span> </div> <h3 class="sr-only">License</h3> <div class="mb-2"> <a href="/HKUDS/LightRAG/blob/main/LICENSE" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:license"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <div class="mb-3"> <a class="Link--secondary no-underline mr-3" href="/HKUDS/LightRAG/stargazers"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-1"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <span class="text-bold">12.9k</span> stars </a> <a class="Link--secondary no-underline mr-3" href="/HKUDS/LightRAG/forks"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-1"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <span class="text-bold">1.8k</span> forks </a> <a class="Link--secondary no-underline mr-3 d-inline-block" href="/HKUDS/LightRAG/branches"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-branch mr-1"> <path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path> </svg> <span>Branches</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/HKUDS/LightRAG/tags"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag mr-1"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <span>Tags</span> </a> <a class="Link--secondary no-underline d-inline-block" href="/HKUDS/LightRAG/activity"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-1"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span>Activity</span> </a> </div> <div class="d-flex flex-wrap gap-2"> <div class="flex-1"> <div data-view-component="true" class="BtnGroup d-flex"> <a href="/login?return_to=%2FHKUDS%2FLightRAG" rel="nofollow" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"star button","repository_id":866513204,"auth_type":"LOG_IN","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="bb190a89b262ea347ff5c150191d27a31feae5668a5f4f2cf42f97c003171e2b" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg><span data-view-component="true" class="d-inline"> Star </span> </a></div> </div> <div class="flex-1"> <a href="/login?return_to=%2FHKUDS%2FLightRAG" rel="nofollow" id="files-overview-watch-button" data-hydro-click="{"event_type":"authentication.click","payload":{"location_in_page":"notification subscription menu watch","repository_id":null,"auth_type":"LOG_IN","originating_url":"https://github.com/HKUDS/LightRAG","user_id":null}}" data-hydro-click-hmac="00d091da509c12c0da169a782eb15225da0115e8c051a59f64449235b7f601c7" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn btn-block"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2"> <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path> </svg>Notifications </a> <tool-tip id="tooltip-38630919-5adf-47e9-879a-36d8677d941c" for="files-overview-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip> </div> <span> </span> </div> </div> </div> <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 px-md-4 px-lg-5"> <ul data-view-component="true" class="UnderlineNav-body list-style-none"> <li data-view-component="true" class="d-inline-flex"> <a id="code-tab" href="/HKUDS/LightRAG" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /HKUDS/LightRAG" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Code","target":"UNDERLINE_NAV.TAB"}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> <span data-content="Code">Code</span> <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="issues-tab" href="/HKUDS/LightRAG/issues" data-tab-item="i1issues-tab" data-selected-links="repo_issues repo_labels repo_milestones /HKUDS/LightRAG/issues" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g i" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Issues","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> <span data-content="Issues">Issues</span> <span id="issues-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="132" data-view-component="true" class="Counter">132</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="pull-requests-tab" href="/HKUDS/LightRAG/pulls" data-tab-item="i2pull-requests-tab" data-selected-links="repo_pulls checks /HKUDS/LightRAG/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Pull requests","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> <span data-content="Pull requests">Pull requests</span> <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="7" data-view-component="true" class="Counter">7</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="discussions-tab" href="/HKUDS/LightRAG/discussions" data-tab-item="i3discussions-tab" data-selected-links="repo_discussions /HKUDS/LightRAG/discussions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g g" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Discussions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> <span data-content="Discussions">Discussions</span> <span id="discussions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="actions-tab" href="/HKUDS/LightRAG/actions" data-tab-item="i4actions-tab" data-selected-links="repo_actions /HKUDS/LightRAG/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Actions","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> <span data-content="Actions">Actions</span> <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="projects-tab" href="/HKUDS/LightRAG/projects" data-tab-item="i5projects-tab" data-selected-links="repo_projects new_repo_project repo_project /HKUDS/LightRAG/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Projects","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> <span data-content="Projects">Projects</span> <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="security-tab" href="/HKUDS/LightRAG/security" data-tab-item="i6security-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /HKUDS/LightRAG/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Security","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <span data-content="Security">Security</span> <include-fragment src="/HKUDS/LightRAG/security/overall-count" accept="text/fragment+html"></include-fragment> </a></li> <li data-view-component="true" class="d-inline-flex"> <a id="insights-tab" href="/HKUDS/LightRAG/pulse" data-tab-item="i7insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /HKUDS/LightRAG/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-analytics-event="{"category":"Underline navbar","action":"Click tab","label":"Insights","target":"UNDERLINE_NAV.TAB"}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> <span data-content="Insights">Insights</span> <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span> </a></li> </ul> <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 pr-md-4 pr-lg-5 right-0"> <action-menu data-select-variant="none" data-view-component="true"> <focus-group direction="vertical" mnemonics retain> <button id="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-button" popovertarget="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-overlay" aria-controls="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-list" aria-haspopup="true" aria-labelledby="tooltip-79f1e42a-d7c3-4758-a645-11401ac03cfe" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual"> <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path> </svg> </button><tool-tip id="tooltip-79f1e42a-d7c3-4758-a645-11401ac03cfe" for="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip> <anchored-position data-target="action-menu.overlay" id="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-overlay" anchor="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true"> <div data-view-component="true" class="Overlay Overlay--size-auto"> <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone"> <action-list> <div data-view-component="true"> <ul aria-labelledby="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-button" id="action-menu-9e0e5d31-ea9f-4d8d-a8a5-985ebb418005-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap"> <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-c786cdbb-213e-4d5e-b182-5b433b879151" href="/HKUDS/LightRAG" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code"> <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Code </span> </a> </li> <li hidden="hidden" data-menu-item="i1issues-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-d8c706d5-0d21-4614-b699-96cd95101b41" href="/HKUDS/LightRAG/issues" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-issue-opened"> <path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Issues </span> </a> </li> <li hidden="hidden" data-menu-item="i2pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-7ee898be-8c85-4792-8380-691bd9f73ee5" href="/HKUDS/LightRAG/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request"> <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Pull requests </span> </a> </li> <li hidden="hidden" data-menu-item="i3discussions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-5e2f86f1-d18e-4644-a2e7-bffedc4d39d7" href="/HKUDS/LightRAG/discussions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-comment-discussion"> <path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Discussions </span> </a> </li> <li hidden="hidden" data-menu-item="i4actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-eec84950-90cd-4c5e-99b4-a6cb0736d218" href="/HKUDS/LightRAG/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play"> <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Actions </span> </a> </li> <li hidden="hidden" data-menu-item="i5projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-fe963f09-68c1-45ab-bbea-20513dbce74e" href="/HKUDS/LightRAG/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table"> <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Projects </span> </a> </li> <li hidden="hidden" data-menu-item="i6security-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-d5862f93-4155-463e-b5af-db0d139c785e" href="/HKUDS/LightRAG/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield"> <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Security </span> </a> </li> <li hidden="hidden" data-menu-item="i7insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem"> <a tabindex="-1" id="item-fa633aa9-265c-447e-9069-d8f9c5040b21" href="/HKUDS/LightRAG/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16"> <span class="ActionListItem-visual ActionListItem-visual--leading"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph"> <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path> </svg> </span> <span data-view-component="true" class="ActionListItem-label"> Insights </span> </a> </li> </ul> </div></action-list> </div> </div></anchored-position> </focus-group> </action-menu></div> </nav> </div> <turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class=""> <div id="repo-content-pjax-container" class="repository-content " > <h1 class='sr-only'>HKUDS/LightRAG</h1> <div class="clearfix container-xl px-md-4 px-lg-5 px-3"> <div> <div style="max-width: 100%" data-view-component="true" class="Layout Layout--flowRow-until-md react-repos-overview-margin Layout--sidebarPosition-end Layout--sidebarPosition-flowRow-end"> <div data-view-component="true" class="Layout-main"> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_dompurify_dist_purify_es_mjs-dd1d3ea6a436.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/vendors-node_modules_tanstack_query-core_build_modern_queryObserver_js-node_modules_tanstack_-defd52-843b41414e0e.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_aria-live_aria-live_ts-ui_packages_promise-with-resolvers-polyfill_promise-with-r-17c672-34345cb18aac.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_paths_index_ts-9300589383c3.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_ref-selector_RefSelector_tsx-7496afc3784d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_commit-attribution_index_ts-ui_packages_commit-checks-status_index_ts-ui_packages-7094d4-15017f02e61c.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_shortcuts_ts-ui_packages_code-view-shared_utilities_styles-0dc246-f8753c5db08d.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/ui_packages_code-view-shared_hooks_use-canonical-object_ts-ui_packages_code-view-shared_hooks-a83ec0-4a432c84c5c6.js"></script> <script crossorigin="anonymous" defer="defer" type="application/javascript" src="https://github.githubassets.com/assets/repos-overview-f24c9aa997a8.js"></script> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react.50398dad705ce9fff192.module.css" /> <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repos-overview.0ee7cac3ab511a65d9f9.module.css" /> <react-partial partial-name="repos-overview" data-ssr="true" data-attempted-ssr="true" > <script type="application/json" data-target="react-partial.embeddedData">{"props":{"initialPayload":{"allShortcutsEnabled":false,"path":"/","repo":{"id":866513204,"defaultBranch":"main","name":"LightRAG","ownerLogin":"HKUDS","currentUserCanPush":false,"isFork":false,"isEmpty":false,"createdAt":"2024-10-02T11:57:54.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/118165258?v=4","public":true,"private":false,"isOrgOwned":false},"currentUser":null,"refInfo":{"name":"main","listCacheKey":"v0:1742289321.0","canEdit":false,"refType":"branch","currentOid":"5aa6265c48b18999fb71be9ee6a0286c5bcb5ee0"},"tree":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"assets","path":"assets","contentType":"directory"},{"name":"docs","path":"docs","contentType":"directory"},{"name":"examples","path":"examples","contentType":"directory"},{"name":"lightrag","path":"lightrag","contentType":"directory"},{"name":"lightrag_webui","path":"lightrag_webui","contentType":"directory"},{"name":"reproduce","path":"reproduce","contentType":"directory"},{"name":"tests","path":"tests","contentType":"directory"},{"name":".dockerignore","path":".dockerignore","contentType":"file"},{"name":".gitattributes","path":".gitattributes","contentType":"file"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":".pre-commit-config.yaml","path":".pre-commit-config.yaml","contentType":"file"},{"name":"Dockerfile","path":"Dockerfile","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"MANIFEST.in","path":"MANIFEST.in","contentType":"file"},{"name":"README-zh.md","path":"README-zh.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"config.ini.example","path":"config.ini.example","contentType":"file"},{"name":"docker-compose.yml","path":"docker-compose.yml","contentType":"file"},{"name":"env.example","path":"env.example","contentType":"file"},{"name":"lightrag-api","path":"lightrag-api","contentType":"file"},{"name":"lightrag.service.example","path":"lightrag.service.example","contentType":"file"},{"name":"requirements.txt","path":"requirements.txt","contentType":"file"},{"name":"setup.py","path":"setup.py","contentType":"file"}],"templateDirectorySuggestionUrl":null,"readme":null,"totalCount":24,"showBranchInfobar":false},"fileTree":null,"fileTreeProcessingTime":null,"foldersToFetch":[],"treeExpanded":false,"symbolsExpanded":false,"isOverview":true,"overview":{"banners":{"shouldRecommendReadme":false,"isPersonalRepo":false,"showUseActionBanner":false,"actionSlug":null,"actionId":null,"showProtectBranchBanner":false,"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_repo","releasePath":"/HKUDS/LightRAG/releases/new?marketplace=true","showPublishActionBanner":false},"interactionLimitBanner":null,"showInvitationBanner":false,"inviterName":null,"actionsMigrationBannerInfo":{"releaseTags":[],"showImmutableActionsMigrationBanner":false,"initialMigrationStatus":null}},"codeButton":{"contactPath":"/contact","isEnterprise":false,"local":{"protocolInfo":{"httpAvailable":true,"sshAvailable":null,"httpUrl":"https://github.com/HKUDS/LightRAG.git","showCloneWarning":null,"sshUrl":null,"sshCertificatesRequired":null,"sshCertificatesAvailable":null,"ghCliUrl":"gh repo clone HKUDS/LightRAG","defaultProtocol":"http","newSshKeyUrl":"/settings/ssh/new","setProtocolPath":"/users/set_protocol"},"platformInfo":{"cloneUrl":"https://desktop.github.com","showVisualStudioCloneButton":false,"visualStudioCloneUrl":"https://windows.github.com","showXcodeCloneButton":false,"xcodeCloneUrl":"xcode://clone?repo=https%3A%2F%2Fgithub.com%2FHKUDS%2FLightRAG","zipballUrl":"/HKUDS/LightRAG/archive/refs/heads/main.zip"}},"newCodespacePath":"/codespaces/new?hide_repo_select=true\u0026repo=866513204"},"popovers":{"rename":null,"renamedParentRepo":null},"commitCount":"2,655","overviewFiles":[{"displayName":"README.md","repoName":"LightRAG","refName":"main","path":"README.md","preferredFileType":"readme","tabName":"README","richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation\u003c/h2\u003e\u003ca id=\"user-content--lightrag-simple-and-fast-retrieval-augmented-generation\" class=\"anchor\" aria-label=\"Permalink: 🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation\" href=\"#-lightrag-simple-and-fast-retrieval-augmented-generation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv align=\"center\" dir=\"auto\"\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable border=\"0\" width=\"100%\"\u003e\n\u003ctbody\u003e\u003ctr\u003e\n\u003ctd width=\"100\" align=\"center\"\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/HKUDS/LightRAG/blob/main/assets/logo.png\"\u003e\u003cimg src=\"/HKUDS/LightRAG/raw/main/assets/logo.png\" width=\"80\" height=\"80\" alt=\"lightrag\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003c/td\u003e\n\u003ctd\u003e\n\u003cdiv dir=\"auto\"\u003e\n \u003cp dir=\"auto\"\u003e\n \u003ca href=\"https://lightrag.github.io\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/bf3933961c03cc78ffde90f26e4a3376b69d4efd5b7c54936d89419b6085c055/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f50726f6a6563742d506167652d477265656e\" data-canonical-src=\"https://img.shields.io/badge/Project-Page-Green\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca href=\"https://youtu.be/oageL-1I0GE\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9c0743f0b8d19de24e97aea157e76b9b4d48a5e7cd96a2378fcd8c0dd9e0a820/68747470733a2f2f6261646765732e616c65656e34322e636f6d2f7372632f796f75747562652e737667\" data-canonical-src=\"https://badges.aleen42.com/src/youtube.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca href=\"https://arxiv.org/abs/2410.05779\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/75124114ae539f960521098bc31b590246873173eef5b4329622b55ceda6788b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f61725869762d323431302e30353737392d623331623162\" data-canonical-src=\"https://img.shields.io/badge/arXiv-2410.05779-b31b1b\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca href=\"https://learnopencv.com/lightrag\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/5271c193c9d3c73535c61967f3d5cf5a1a06dfb74d64ba68899c72c4430dffb7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6561726e4f70656e43562d626c7565\" data-canonical-src=\"https://img.shields.io/badge/LearnOpenCV-blue\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003c/p\u003e\n \u003cp dir=\"auto\"\u003e\n \u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/abd492053c71c0ae6bd17e96559e53590c59850bb28609652eb4f8ac240b9a22/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f686b7564732f6c696768747261673f636f6c6f723d677265656e267374796c653d736f6369616c\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/abd492053c71c0ae6bd17e96559e53590c59850bb28609652eb4f8ac240b9a22/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f686b7564732f6c696768747261673f636f6c6f723d677265656e267374796c653d736f6369616c\" data-canonical-src=\"https://img.shields.io/github/stars/hkuds/lightrag?color=green\u0026amp;style=social\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/1285b1059a69a51878dfb49eb0fbac318730acd72b2f04f6b6e807e5f40be74d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31302d626c7565\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/1285b1059a69a51878dfb49eb0fbac318730acd72b2f04f6b6e807e5f40be74d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31302d626c7565\" data-canonical-src=\"https://img.shields.io/badge/python-3.10-blue\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca href=\"https://pypi.org/project/lightrag-hku/\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/4094352f409b6b46f908f41ec227ff914ae1068c8ee9ab4149b82a67987f3bfa/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f6c696768747261672d686b752e737667\" data-canonical-src=\"https://img.shields.io/pypi/v/lightrag-hku.svg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca href=\"https://pepy.tech/project/lightrag-hku\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9070137fb166fcab2fe65a568b0a54744a67128e485b60b810c93ca11eb8300f/68747470733a2f2f7374617469632e706570792e746563682f62616467652f6c696768747261672d686b752f6d6f6e7468\" data-canonical-src=\"https://static.pepy.tech/badge/lightrag-hku/month\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003c/p\u003e\n \u003cp dir=\"auto\"\u003e\n \u003ca href=\"https://discord.gg/yF2MmDJyGJ\" rel=\"nofollow\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/9a5dd24429c18847a68aea872315cdcbec0eae9481e42df36fa407ce2bdfd8f7/68747470733a2f2f646973636f72646170702e636f6d2f6170692f6775696c64732f313239363334383039383030333733343632392f7769646765742e706e673f7374796c653d736869656c64\" data-canonical-src=\"https://discordapp.com/api/guilds/1296348098003734629/widget.png?style=shield\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003ca href=\"https://github.com/HKUDS/LightRAG/issues/285\" data-hovercard-type=\"issue\" data-hovercard-url=\"/HKUDS/LightRAG/issues/285/hovercard\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/609a2c89a6c6be9dea60f008e7b9301bd7b0b74493a70bd1f27aad4cbd5ff529/68747470733a2f2f696d672e736869656c64732e696f2f62616467652fe7bea4e8818a2d7765636861742d677265656e\" data-canonical-src=\"https://img.shields.io/badge/群聊-wechat-green\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n \u003c/p\u003e\n\u003c/div\u003e\n\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv align=\"center\" dir=\"auto\"\u003e\nThis repository hosts the code of LightRAG. The structure of this code is based on \u003ca href=\"https://github.com/gusye1234/nano-graphrag\"\u003enano-graphrag\u003c/a\u003e.\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/054a656498dc5e6890e4ec2ec7e0444fa754051d652642e1bf8ad529762c7012/68747470733a2f2f692d626c6f672e6373646e696d672e636e2f6469726563742f62326161663633343135316234373036383932363933666662343364393039332e706e67\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/054a656498dc5e6890e4ec2ec7e0444fa754051d652642e1bf8ad529762c7012/68747470733a2f2f692d626c6f672e6373646e696d672e636e2f6469726563742f62326161663633343135316234373036383932363933666662343364393039332e706e67\" width=\"800\" alt=\"LightRAG Diagram\" data-canonical-src=\"https://i-blog.csdnimg.cn/direct/b2aaf634151b4706892693ffb43d9093.png\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003c/div\u003e\n\u003c/div\u003e\n\u003cbr\u003e\n\u003cdetails\u003e\n \u003csummary\u003e\n 🎉 News\n \u003c/summary\u003e\n\u003cul class=\"contains-task-list\"\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2025.03.18]🎯📢LightRAG now supports citation functionality.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2025.02.05]🎯📢Our team has released \u003ca href=\"https://github.com/HKUDS/VideoRAG\"\u003eVideoRAG\u003c/a\u003e understanding extremely long-context videos.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2025.01.13]🎯📢Our team has released \u003ca href=\"https://github.com/HKUDS/MiniRAG\"\u003eMiniRAG\u003c/a\u003e making RAG simpler with small models.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2025.01.06]🎯📢You can now \u003ca href=\"#using-postgresql-for-storage\"\u003euse PostgreSQL for Storage\u003c/a\u003e.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.12.31]🎯📢LightRAG now supports \u003ca href=\"https://github.com/HKUDS/LightRAG?tab=readme-ov-file#delete\"\u003edeletion by document ID\u003c/a\u003e.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.11.25]🎯📢LightRAG now supports seamless integration of \u003ca href=\"https://github.com/HKUDS/LightRAG?tab=readme-ov-file#insert-custom-kg\"\u003ecustom knowledge graphs\u003c/a\u003e, empowering users to enhance the system with their own domain expertise.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.11.19]🎯📢A comprehensive guide to LightRAG is now available on \u003ca href=\"https://learnopencv.com/lightrag\" rel=\"nofollow\"\u003eLearnOpenCV\u003c/a\u003e. Many thanks to the blog author.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.11.12]🎯📢LightRAG now supports \u003ca href=\"https://github.com/HKUDS/LightRAG/blob/main/examples/lightrag_oracle_demo.py\"\u003eOracle Database 23ai for all storage types (KV, vector, and graph)\u003c/a\u003e.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.11.11]🎯📢LightRAG now supports \u003ca href=\"https://github.com/HKUDS/LightRAG?tab=readme-ov-file#delete\"\u003edeleting entities by their names\u003c/a\u003e.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.11.09]🎯📢Introducing the \u003ca href=\"https://lightrag-gui.streamlit.app\" rel=\"nofollow\"\u003eLightRAG Gui\u003c/a\u003e, which allows you to insert, query, visualize, and download LightRAG knowledge.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.11.04]🎯📢You can now \u003ca href=\"https://github.com/HKUDS/LightRAG?tab=readme-ov-file#using-neo4j-for-storage\"\u003euse Neo4J for Storage\u003c/a\u003e.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.10.29]🎯📢LightRAG now supports multiple file types, including PDF, DOC, PPT, and CSV via \u003ccode\u003etextract\u003c/code\u003e.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.10.20]🎯📢We've added a new feature to LightRAG: Graph Visualization.\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.10.18]🎯📢We've added a link to a \u003ca href=\"https://youtu.be/oageL-1I0GE\" rel=\"nofollow\"\u003eLightRAG Introduction Video\u003c/a\u003e. Thanks to the author!\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.10.17]🎯📢We have created a \u003ca href=\"https://discord.gg/yF2MmDJyGJ\" rel=\"nofollow\"\u003eDiscord channel\u003c/a\u003e! Welcome to join for sharing and discussions! 🎉🎉\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.10.16]🎯📢LightRAG now supports \u003ca href=\"https://github.com/HKUDS/LightRAG?tab=readme-ov-file#quick-start\"\u003eOllama models\u003c/a\u003e!\u003c/li\u003e\n\u003cli class=\"task-list-item\"\u003e\u003cinput type=\"checkbox\" id=\"\" disabled=\"\" class=\"task-list-item-checkbox\" checked=\"\"\u003e [2024.10.15]🎯📢LightRAG now supports \u003ca href=\"https://github.com/HKUDS/LightRAG?tab=readme-ov-file#quick-start\"\u003eHugging Face models\u003c/a\u003e!\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n \u003csummary\u003e\n Algorithm Flowchart\n \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/fa79bd2d317163583e8acdeb7c28b16d10652cfcd92c4bab85cc00954ffb1888/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d566563746f7244422d4a736f6e2d4b562d53746f72652d496e646578696e672d466c6f7763686172742d7363616c65642e6a7067\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/fa79bd2d317163583e8acdeb7c28b16d10652cfcd92c4bab85cc00954ffb1888/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d566563746f7244422d4a736f6e2d4b562d53746f72652d496e646578696e672d466c6f7763686172742d7363616c65642e6a7067\" alt=\"LightRAG Indexing Flowchart\" data-canonical-src=\"https://learnopencv.com/wp-content/uploads/2024/11/LightRAG-VectorDB-Json-KV-Store-Indexing-Flowchart-scaled.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003cem\u003eFigure 1: LightRAG Indexing Flowchart - Img Caption : \u003ca href=\"https://learnopencv.com/lightrag/\" rel=\"nofollow\"\u003eSource\u003c/a\u003e\u003c/em\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://camo.githubusercontent.com/32d67fdd28040d24756373fc674cae593b9961c2ef84fb8a0a8104f33735ab2a/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d5175657279696e672d466c6f7763686172742d4475616c2d4c6576656c2d52657472696576616c2d47656e65726174696f6e2d4b6e6f776c656467652d4772617068732d7363616c65642e6a7067\"\u003e\u003cimg src=\"https://camo.githubusercontent.com/32d67fdd28040d24756373fc674cae593b9961c2ef84fb8a0a8104f33735ab2a/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d5175657279696e672d466c6f7763686172742d4475616c2d4c6576656c2d52657472696576616c2d47656e65726174696f6e2d4b6e6f776c656467652d4772617068732d7363616c65642e6a7067\" alt=\"LightRAG Retrieval and Querying Flowchart\" data-canonical-src=\"https://learnopencv.com/wp-content/uploads/2024/11/LightRAG-Querying-Flowchart-Dual-Level-Retrieval-Generation-Knowledge-Graphs-scaled.jpg\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n\u003cem\u003eFigure 2: LightRAG Retrieval and Querying Flowchart - Img Caption : \u003ca href=\"https://learnopencv.com/lightrag/\" rel=\"nofollow\"\u003eSource\u003c/a\u003e\u003c/em\u003e\u003c/p\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eInstall\u003c/h2\u003e\u003ca id=\"user-content-install\" class=\"anchor\" aria-label=\"Permalink: Install\" href=\"#install\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eInstall from source (Recommend)\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"cd LightRAG\npip install -e .\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003ecd\u003c/span\u003e LightRAG\npip install -e \u003cspan class=\"pl-c1\"\u003e.\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eInstall from PyPI\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"pip install lightrag-hku\"\u003e\u003cpre\u003epip install lightrag-hku\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eQuick Start\u003c/h2\u003e\u003ca id=\"user-content-quick-start\" class=\"anchor\" aria-label=\"Permalink: Quick Start\" href=\"#quick-start\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"https://www.youtube.com/watch?v=g21royNJ4fw\" rel=\"nofollow\"\u003eVideo demo\u003c/a\u003e of running LightRAG locally.\u003c/li\u003e\n\u003cli\u003eAll the code can be found in the \u003ccode\u003eexamples\u003c/code\u003e.\u003c/li\u003e\n\u003cli\u003eSet OpenAI API key in environment if using OpenAI models: \u003ccode\u003eexport OPENAI_API_KEY=\"sk-...\".\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003eDownload the demo text \"A Christmas Carol by Charles Dickens\":\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt \u0026gt; ./book.txt\"\u003e\u003cpre\u003ecurl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt \u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e ./book.txt\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eQuery\u003c/h2\u003e\u003ca id=\"user-content-query\" class=\"anchor\" aria-label=\"Permalink: Query\" href=\"#query\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eUse the below Python snippet (in a script) to initialize LightRAG and perform queries:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import os\nimport asyncio\nfrom lightrag import LightRAG, QueryParam\nfrom lightrag.llm.openai import gpt_4o_mini_complete, gpt_4o_complete, openai_embed\nfrom lightrag.kg.shared_storage import initialize_pipeline_status\nfrom lightrag.utils import setup_logger\n\nsetup_logger(\u0026quot;lightrag\u0026quot;, level=\u0026quot;INFO\u0026quot;)\n\nasync def initialize_rag():\n rag = LightRAG(\n working_dir=\u0026quot;your/path\u0026quot;,\n embedding_func=openai_embed,\n llm_model_func=gpt_4o_mini_complete\n )\n\n await rag.initialize_storages()\n await initialize_pipeline_status()\n\n return rag\n\ndef main():\n # Initialize RAG instance\n rag = asyncio.run(initialize_rag())\n # Insert text\n rag.insert(\u0026quot;Your text\u0026quot;)\n\n # Perform naive search\n mode=\u0026quot;naive\u0026quot;\n # Perform local search\n mode=\u0026quot;local\u0026quot;\n # Perform global search\n mode=\u0026quot;global\u0026quot;\n # Perform hybrid search\n mode=\u0026quot;hybrid\u0026quot;\n # Mix mode Integrates knowledge graph and vector retrieval.\n mode=\u0026quot;mix\u0026quot;\n\n rag.query(\n \u0026quot;What are the top themes in this story?\u0026quot;,\n param=QueryParam(mode=mode)\n )\n\nif __name__ == \u0026quot;__main__\u0026quot;:\n main()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eLightRAG\u003c/span\u003e, \u003cspan class=\"pl-v\"\u003eQueryParam\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ellm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eopenai\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003egpt_4o_mini_complete\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003egpt_4o_complete\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eopenai_embed\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ekg\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eshared_storage\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einitialize_pipeline_status\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eutils\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esetup_logger\u003c/span\u003e\n\n\u003cspan class=\"pl-en\"\u003esetup_logger\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"lightrag\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003elevel\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"INFO\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_rag\u003c/span\u003e():\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"your/path\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eopenai_embed\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003egpt_4o_mini_complete\u003c/span\u003e\n )\n\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einitialize_storages\u003c/span\u003e()\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_pipeline_status\u003c/span\u003e()\n\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e():\n \u003cspan class=\"pl-c\"\u003e# Initialize RAG instance\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erun\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003einitialize_rag\u003c/span\u003e())\n \u003cspan class=\"pl-c\"\u003e# Insert text\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Your text\"\u003c/span\u003e)\n\n \u003cspan class=\"pl-c\"\u003e# Perform naive search\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"naive\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Perform local search\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"local\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Perform global search\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"global\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Perform hybrid search\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"hybrid\"\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Mix mode Integrates knowledge graph and vector retrieval.\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"mix\"\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\n \u003cspan class=\"pl-s\"\u003e\"What are the top themes in this story?\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e)\n )\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"__main__\"\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eQuery Param\u003c/h3\u003e\u003ca id=\"user-content-query-param\" class=\"anchor\" aria-label=\"Permalink: Query Param\" href=\"#query-param\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"class QueryParam:\n mode: Literal[\u0026quot;local\u0026quot;, \u0026quot;global\u0026quot;, \u0026quot;hybrid\u0026quot;, \u0026quot;naive\u0026quot;, \u0026quot;mix\u0026quot;] = \u0026quot;global\u0026quot;\n \u0026quot;\u0026quot;\u0026quot;Specifies the retrieval mode:\n - \u0026quot;local\u0026quot;: Focuses on context-dependent information.\n - \u0026quot;global\u0026quot;: Utilizes global knowledge.\n - \u0026quot;hybrid\u0026quot;: Combines local and global retrieval methods.\n - \u0026quot;naive\u0026quot;: Performs a basic search without advanced techniques.\n - \u0026quot;mix\u0026quot;: Integrates knowledge graph and vector retrieval. Mix mode combines knowledge graph and vector search:\n - Uses both structured (KG) and unstructured (vector) information\n - Provides comprehensive answers by analyzing relationships and context\n - Supports image content through HTML img tags\n - Allows control over retrieval depth via top_k parameter\n \u0026quot;\u0026quot;\u0026quot;\n only_need_context: bool = False\n \u0026quot;\u0026quot;\u0026quot;If True, only returns the retrieved context without generating a response.\u0026quot;\u0026quot;\u0026quot;\n response_type: str = \u0026quot;Multiple Paragraphs\u0026quot;\n \u0026quot;\u0026quot;\u0026quot;Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'.\u0026quot;\u0026quot;\u0026quot;\n top_k: int = 60\n \u0026quot;\u0026quot;\u0026quot;Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode.\u0026quot;\u0026quot;\u0026quot;\n max_token_for_text_unit: int = 4000\n \u0026quot;\u0026quot;\u0026quot;Maximum number of tokens allowed for each retrieved text chunk.\u0026quot;\u0026quot;\u0026quot;\n max_token_for_global_context: int = 4000\n \u0026quot;\u0026quot;\u0026quot;Maximum number of tokens allocated for relationship descriptions in global retrieval.\u0026quot;\u0026quot;\u0026quot;\n max_token_for_local_context: int = 4000\n \u0026quot;\u0026quot;\u0026quot;Maximum number of tokens allocated for entity descriptions in local retrieval.\u0026quot;\u0026quot;\u0026quot;\n ids: list[str] | None = None # ONLY SUPPORTED FOR PG VECTOR DBs\n \u0026quot;\u0026quot;\u0026quot;List of ids to filter the RAG.\u0026quot;\u0026quot;\u0026quot;\n ...\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eQueryParam\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e: \u003cspan class=\"pl-v\"\u003eLiteral\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"local\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"global\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"hybrid\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"naive\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"mix\"\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"global\"\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"Specifies the retrieval mode:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - \"local\": Focuses on context-dependent information.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - \"global\": Utilizes global knowledge.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - \"hybrid\": Combines local and global retrieval methods.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - \"naive\": Performs a basic search without advanced techniques.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - \"mix\": Integrates knowledge graph and vector retrieval. Mix mode combines knowledge graph and vector search:\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - Uses both structured (KG) and unstructured (vector) information\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - Provides comprehensive answers by analyzing relationships and context\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - Supports image content through HTML img tags\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e - Allows control over retrieval depth via top_k parameter\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eonly_need_context\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003ebool\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"If True, only returns the retrieved context without generating a response.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eresponse_type\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003estr\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"Multiple Paragraphs\"\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003etop_k\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e60\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emax_token_for_text_unit\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4000\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"Maximum number of tokens allowed for each retrieved text chunk.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emax_token_for_global_context\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4000\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"Maximum number of tokens allocated for relationship descriptions in global retrieval.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emax_token_for_local_context\u003c/span\u003e: \u003cspan class=\"pl-smi\"\u003eint\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4000\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"Maximum number of tokens allocated for entity descriptions in local retrieval.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eids\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003elist\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003estr\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e|\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# ONLY SUPPORTED FOR PG VECTOR DBs\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"\"\"List of ids to filter the RAG.\"\"\"\u003c/span\u003e\n ...\u003c/pre\u003e\u003c/div\u003e\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003edefault value of Top_k can be change by environment variables TOP_K.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eUsing Open AI-like APIs\u003c/b\u003e \u003c/summary\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eLightRAG also supports Open AI-like chat/embeddings APIs:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"async def llm_model_func(\n prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs\n) -\u0026gt; str:\n return await openai_complete_if_cache(\n \u0026quot;solar-mini\u0026quot;,\n prompt,\n system_prompt=system_prompt,\n history_messages=history_messages,\n api_key=os.getenv(\u0026quot;UPSTAGE_API_KEY\u0026quot;),\n base_url=\u0026quot;https://api.upstage.ai/v1/solar\u0026quot;,\n **kwargs\n )\n\nasync def embedding_func(texts: list[str]) -\u0026gt; np.ndarray:\n return await openai_embed(\n texts,\n model=\u0026quot;solar-embedding-1-large-query\u0026quot;,\n api_key=os.getenv(\u0026quot;UPSTAGE_API_KEY\u0026quot;),\n base_url=\u0026quot;https://api.upstage.ai/v1/solar\u0026quot;\n )\n\nasync def initialize_rag():\n rag = LightRAG(\n working_dir=WORKING_DIR,\n llm_model_func=llm_model_func,\n embedding_func=EmbeddingFunc(\n embedding_dim=4096,\n max_token_size=8192,\n func=embedding_func\n )\n )\n\n await rag.initialize_storages()\n await initialize_pipeline_status()\n\n return rag\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003ellm_model_func\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eprompt\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003esystem_prompt\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ehistory_messages\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[], \u003cspan class=\"pl-s1\"\u003ekeyword_extraction\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekwargs\u003c/span\u003e\n) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003estr\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopenai_complete_if_cache\u003c/span\u003e(\n \u003cspan class=\"pl-s\"\u003e\"solar-mini\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eprompt\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003esystem_prompt\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003esystem_prompt\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ehistory_messages\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehistory_messages\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eapi_key\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003egetenv\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"UPSTAGE_API_KEY\"\u003c/span\u003e),\n \u003cspan class=\"pl-s1\"\u003ebase_url\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"https://api.upstage.ai/v1/solar\"\u003c/span\u003e,\n \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ekwargs\u003c/span\u003e\n )\n\n\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eembedding_func\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003elist\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003estr\u003c/span\u003e]) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enp\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003endarray\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopenai_embed\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emodel\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"solar-embedding-1-large-query\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eapi_key\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003egetenv\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"UPSTAGE_API_KEY\"\u003c/span\u003e),\n \u003cspan class=\"pl-s1\"\u003ebase_url\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"https://api.upstage.ai/v1/solar\"\u003c/span\u003e\n )\n\n\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_rag\u003c/span\u003e():\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEmbeddingFunc\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eembedding_dim\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4096\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emax_token_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e8192\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\n )\n )\n\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einitialize_storages\u003c/span\u003e()\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_pipeline_status\u003c/span\u003e()\n\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eUsing Hugging Face Models\u003c/b\u003e \u003c/summary\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eIf you want to use Hugging Face models, you only need to set LightRAG as follows:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eSee \u003ccode\u003elightrag_hf_demo.py\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Initialize LightRAG with Hugging Face model\nrag = LightRAG(\n working_dir=WORKING_DIR,\n llm_model_func=hf_model_complete, # Use Hugging Face model for text generation\n llm_model_name='meta-llama/Llama-3.1-8B-Instruct', # Model name from Hugging Face\n # Use Hugging Face embedding function\n embedding_func=EmbeddingFunc(\n embedding_dim=384,\n max_token_size=5000,\n func=lambda texts: hf_embed(\n texts,\n tokenizer=AutoTokenizer.from_pretrained(\u0026quot;sentence-transformers/all-MiniLM-L6-v2\u0026quot;),\n embed_model=AutoModel.from_pretrained(\u0026quot;sentence-transformers/all-MiniLM-L6-v2\u0026quot;)\n )\n ),\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Initialize LightRAG with Hugging Face model\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ehf_model_complete\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Use Hugging Face model for text generation\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ellm_model_name\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'meta-llama/Llama-3.1-8B-Instruct'\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Model name from Hugging Face\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Use Hugging Face embedding function\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEmbeddingFunc\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eembedding_dim\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e384\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emax_token_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e5000\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elambda\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003ehf_embed\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003etokenizer\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eAutoTokenizer\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efrom_pretrained\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"sentence-transformers/all-MiniLM-L6-v2\"\u003c/span\u003e),\n \u003cspan class=\"pl-s1\"\u003eembed_model\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eAutoModel\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efrom_pretrained\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"sentence-transformers/all-MiniLM-L6-v2\"\u003c/span\u003e)\n )\n ),\n)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eUsing Ollama Models\u003c/b\u003e \u003c/summary\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOverview\u003c/h3\u003e\u003ca id=\"user-content-overview\" class=\"anchor\" aria-label=\"Permalink: Overview\" href=\"#overview\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIf you want to use Ollama models, you need to pull model you plan to use and embedding model, for example \u003ccode\u003enomic-embed-text\u003c/code\u003e.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThen you only need to set LightRAG as follows:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Initialize LightRAG with Ollama model\nrag = LightRAG(\n working_dir=WORKING_DIR,\n llm_model_func=ollama_model_complete, # Use Ollama model for text generation\n llm_model_name='your_model_name', # Your model name\n # Use Ollama embedding function\n embedding_func=EmbeddingFunc(\n embedding_dim=768,\n max_token_size=8192,\n func=lambda texts: ollama_embed(\n texts,\n embed_model=\u0026quot;nomic-embed-text\u0026quot;\n )\n ),\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Initialize LightRAG with Ollama model\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eollama_model_complete\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Use Ollama model for text generation\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ellm_model_name\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'your_model_name'\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Your model name\u003c/span\u003e\n \u003cspan class=\"pl-c\"\u003e# Use Ollama embedding function\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEmbeddingFunc\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eembedding_dim\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e768\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emax_token_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e8192\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elambda\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eollama_embed\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eembed_model\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"nomic-embed-text\"\u003c/span\u003e\n )\n ),\n)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIncreasing context size\u003c/h3\u003e\u003ca id=\"user-content-increasing-context-size\" class=\"anchor\" aria-label=\"Permalink: Increasing context size\" href=\"#increasing-context-size\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn order for LightRAG to work context should be at least 32k tokens. By default Ollama models have context size of 8k. You can achieve this using one of two ways:\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eIncreasing the \u003ccode\u003enum_ctx\u003c/code\u003e parameter in Modelfile.\u003c/h4\u003e\u003ca id=\"user-content-increasing-the-num_ctx-parameter-in-modelfile\" class=\"anchor\" aria-label=\"Permalink: Increasing the num_ctx parameter in Modelfile.\" href=\"#increasing-the-num_ctx-parameter-in-modelfile\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003ePull the model:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"ollama pull qwen2\"\u003e\u003cpre\u003eollama pull qwen2\u003c/pre\u003e\u003c/div\u003e\n\u003col start=\"2\" dir=\"auto\"\u003e\n\u003cli\u003eDisplay the model file:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"ollama show --modelfile qwen2 \u0026gt; Modelfile\"\u003e\u003cpre\u003eollama show --modelfile qwen2 \u003cspan class=\"pl-k\"\u003e\u0026gt;\u003c/span\u003e Modelfile\u003c/pre\u003e\u003c/div\u003e\n\u003col start=\"3\" dir=\"auto\"\u003e\n\u003cli\u003eEdit the Modelfile by adding the following line:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"PARAMETER num_ctx 32768\"\u003e\u003cpre\u003ePARAMETER num_ctx 32768\u003c/pre\u003e\u003c/div\u003e\n\u003col start=\"4\" dir=\"auto\"\u003e\n\u003cli\u003eCreate the modified model:\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"highlight highlight-source-shell notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"ollama create -f Modelfile qwen2m\"\u003e\u003cpre\u003eollama create -f Modelfile qwen2m\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eSetup \u003ccode\u003enum_ctx\u003c/code\u003e via Ollama API.\u003c/h4\u003e\u003ca id=\"user-content-setup-num_ctx-via-ollama-api\" class=\"anchor\" aria-label=\"Permalink: Setup num_ctx via Ollama API.\" href=\"#setup-num_ctx-via-ollama-api\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTiy can use \u003ccode\u003ellm_model_kwargs\u003c/code\u003e param to configure ollama:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"rag = LightRAG(\n working_dir=WORKING_DIR,\n llm_model_func=ollama_model_complete, # Use Ollama model for text generation\n llm_model_name='your_model_name', # Your model name\n llm_model_kwargs={\u0026quot;options\u0026quot;: {\u0026quot;num_ctx\u0026quot;: 32768}},\n # Use Ollama embedding function\n embedding_func=EmbeddingFunc(\n embedding_dim=768,\n max_token_size=8192,\n func=lambda texts: ollama_embedding(\n texts,\n embed_model=\u0026quot;nomic-embed-text\u0026quot;\n )\n ),\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eollama_model_complete\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Use Ollama model for text generation\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ellm_model_name\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'your_model_name'\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Your model name\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ellm_model_kwargs\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-s\"\u003e\"options\"\u003c/span\u003e: {\u003cspan class=\"pl-s\"\u003e\"num_ctx\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e32768\u003c/span\u003e}},\n \u003cspan class=\"pl-c\"\u003e# Use Ollama embedding function\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEmbeddingFunc\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eembedding_dim\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e768\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emax_token_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e8192\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elambda\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003eollama_embedding\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eembed_model\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"nomic-embed-text\"\u003c/span\u003e\n )\n ),\n)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLow RAM GPUs\u003c/h4\u003e\u003ca id=\"user-content-low-ram-gpus\" class=\"anchor\" aria-label=\"Permalink: Low RAM GPUs\" href=\"#low-ram-gpus\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eIn order to run this experiment on low RAM GPU you should select small model and tune context window (increasing context increase memory consumption). For example, running this ollama example on repurposed mining GPU with 6Gb of RAM required to set context size to 26k while using \u003ccode\u003egemma2:2b\u003c/code\u003e. It was able to find 197 entities and 19 relations on \u003ccode\u003ebook.txt\u003c/code\u003e.\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eLlamaIndex\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eLightRAG supports integration with LlamaIndex.\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003eLlamaIndex\u003c/strong\u003e (\u003ccode\u003ellm/llama_index_impl.py\u003c/code\u003e):\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eIntegrates with OpenAI and other providers through LlamaIndex\u003c/li\u003e\n\u003cli\u003eSee \u003ca href=\"/HKUDS/LightRAG/blob/main/lightrag/llm/Readme.md\"\u003eLlamaIndex Documentation\u003c/a\u003e for detailed setup and examples\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003c/ol\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExample Usage\u003c/h3\u003e\u003ca id=\"user-content-example-usage\" class=\"anchor\" aria-label=\"Permalink: Example Usage\" href=\"#example-usage\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Using LlamaIndex with direct OpenAI access\nimport asyncio\nfrom lightrag import LightRAG\nfrom lightrag.llm.llama_index_impl import llama_index_complete_if_cache, llama_index_embed\nfrom llama_index.embeddings.openai import OpenAIEmbedding\nfrom llama_index.llms.openai import OpenAI\nfrom lightrag.kg.shared_storage import initialize_pipeline_status\nfrom lightrag.utils import setup_logger\n\n# Setup log handler for LightRAG\nsetup_logger(\u0026quot;lightrag\u0026quot;, level=\u0026quot;INFO\u0026quot;)\n\nasync def initialize_rag():\n rag = LightRAG(\n working_dir=\u0026quot;your/path\u0026quot;,\n llm_model_func=llama_index_complete_if_cache, # LlamaIndex-compatible completion function\n embedding_func=EmbeddingFunc( # LlamaIndex-compatible embedding function\n embedding_dim=1536,\n max_token_size=8192,\n func=lambda texts: llama_index_embed(texts, embed_model=embed_model)\n ),\n )\n\n await rag.initialize_storages()\n await initialize_pipeline_status()\n\n return rag\n\ndef main():\n # Initialize RAG instance\n rag = asyncio.run(initialize_rag())\n\n with open(\u0026quot;./book.txt\u0026quot;, \u0026quot;r\u0026quot;, encoding=\u0026quot;utf-8\u0026quot;) as f:\n rag.insert(f.read())\n\n # Perform naive search\n print(\n rag.query(\u0026quot;What are the top themes in this story?\u0026quot;, param=QueryParam(mode=\u0026quot;naive\u0026quot;))\n )\n\n # Perform local search\n print(\n rag.query(\u0026quot;What are the top themes in this story?\u0026quot;, param=QueryParam(mode=\u0026quot;local\u0026quot;))\n )\n\n # Perform global search\n print(\n rag.query(\u0026quot;What are the top themes in this story?\u0026quot;, param=QueryParam(mode=\u0026quot;global\u0026quot;))\n )\n\n # Perform hybrid search\n print(\n rag.query(\u0026quot;What are the top themes in this story?\u0026quot;, param=QueryParam(mode=\u0026quot;hybrid\u0026quot;))\n )\n\nif __name__ == \u0026quot;__main__\u0026quot;:\n main()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Using LlamaIndex with direct OpenAI access\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eLightRAG\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ellm\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ellama_index_impl\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ellama_index_complete_if_cache\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ellama_index_embed\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ellama_index\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eembeddings\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eopenai\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eOpenAIEmbedding\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ellama_index\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ellms\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eopenai\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eOpenAI\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ekg\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eshared_storage\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einitialize_pipeline_status\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eutils\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esetup_logger\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Setup log handler for LightRAG\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003esetup_logger\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"lightrag\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003elevel\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"INFO\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_rag\u003c/span\u003e():\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"your/path\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ellama_index_complete_if_cache\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# LlamaIndex-compatible completion function\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEmbeddingFunc\u003c/span\u003e( \u003cspan class=\"pl-c\"\u003e# LlamaIndex-compatible embedding function\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eembedding_dim\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1536\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emax_token_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e8192\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-k\"\u003elambda\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e: \u003cspan class=\"pl-en\"\u003ellama_index_embed\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eembed_model\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eembed_model\u003c/span\u003e)\n ),\n )\n\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einitialize_storages\u003c/span\u003e()\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_pipeline_status\u003c/span\u003e()\n\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e():\n \u003cspan class=\"pl-c\"\u003e# Initialize RAG instance\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003easyncio\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erun\u003c/span\u003e(\u003cspan class=\"pl-en\"\u003einitialize_rag\u003c/span\u003e())\n\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"./book.txt\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"r\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eencoding\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"utf-8\"\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eread\u003c/span\u003e())\n\n \u003cspan class=\"pl-c\"\u003e# Perform naive search\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"What are the top themes in this story?\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"naive\"\u003c/span\u003e))\n )\n\n \u003cspan class=\"pl-c\"\u003e# Perform local search\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"What are the top themes in this story?\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"local\"\u003c/span\u003e))\n )\n\n \u003cspan class=\"pl-c\"\u003e# Perform global search\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"What are the top themes in this story?\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"global\"\u003c/span\u003e))\n )\n\n \u003cspan class=\"pl-c\"\u003e# Perform hybrid search\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"What are the top themes in this story?\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"hybrid\"\u003c/span\u003e))\n )\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"__main__\"\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eFor detailed documentation and examples, see:\u003c/h4\u003e\u003ca id=\"user-content-for-detailed-documentation-and-examples-see\" class=\"anchor\" aria-label=\"Permalink: For detailed documentation and examples, see:\" href=\"#for-detailed-documentation-and-examples-see\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ca href=\"/HKUDS/LightRAG/blob/main/lightrag/llm/Readme.md\"\u003eLlamaIndex Documentation\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/HKUDS/LightRAG/blob/main/examples/lightrag_llamaindex_direct_demo.py\"\u003eDirect OpenAI Example\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e\u003ca href=\"/HKUDS/LightRAG/blob/main/examples/lightrag_llamaindex_litellm_demo.py\"\u003eLiteLLM Proxy Example\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eConversation History Support\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eLightRAG now supports multi-turn dialogue through the conversation history feature. Here's how to use it:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Create conversation history\nconversation_history = [\n {\u0026quot;role\u0026quot;: \u0026quot;user\u0026quot;, \u0026quot;content\u0026quot;: \u0026quot;What is the main character's attitude towards Christmas?\u0026quot;},\n {\u0026quot;role\u0026quot;: \u0026quot;assistant\u0026quot;, \u0026quot;content\u0026quot;: \u0026quot;At the beginning of the story, Ebenezer Scrooge has a very negative attitude towards Christmas...\u0026quot;},\n {\u0026quot;role\u0026quot;: \u0026quot;user\u0026quot;, \u0026quot;content\u0026quot;: \u0026quot;How does his attitude change?\u0026quot;}\n]\n\n# Create query parameters with conversation history\nquery_param = QueryParam(\n mode=\u0026quot;mix\u0026quot;, # or any other mode: \u0026quot;local\u0026quot;, \u0026quot;global\u0026quot;, \u0026quot;hybrid\u0026quot;\n conversation_history=conversation_history, # Add the conversation history\n history_turns=3 # Number of recent conversation turns to consider\n)\n\n# Make a query that takes into account the conversation history\nresponse = rag.query(\n \u0026quot;What causes this change in his character?\u0026quot;,\n param=query_param\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Create conversation history\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003econversation_history\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\n {\u003cspan class=\"pl-s\"\u003e\"role\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"user\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"What is the main character's attitude towards Christmas?\"\u003c/span\u003e},\n {\u003cspan class=\"pl-s\"\u003e\"role\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"assistant\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"At the beginning of the story, Ebenezer Scrooge has a very negative attitude towards Christmas...\"\u003c/span\u003e},\n {\u003cspan class=\"pl-s\"\u003e\"role\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"user\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"How does his attitude change?\"\u003c/span\u003e}\n]\n\n\u003cspan class=\"pl-c\"\u003e# Create query parameters with conversation history\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003equery_param\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"mix\"\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# or any other mode: \"local\", \"global\", \"hybrid\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003econversation_history\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003econversation_history\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Add the conversation history\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ehistory_turns\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# Number of recent conversation turns to consider\u003c/span\u003e\n)\n\n\u003cspan class=\"pl-c\"\u003e# Make a query that takes into account the conversation history\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eresponse\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\n \u003cspan class=\"pl-s\"\u003e\"What causes this change in his character?\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003equery_param\u003c/span\u003e\n)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eCustom Prompt Support\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eLightRAG now supports custom prompts for fine-tuned control over the system's behavior. Here's how to use it:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Create query parameters\nquery_param = QueryParam(\n mode=\u0026quot;hybrid\u0026quot;, # or other mode: \u0026quot;local\u0026quot;, \u0026quot;global\u0026quot;, \u0026quot;hybrid\u0026quot;, \u0026quot;mix\u0026quot; and \u0026quot;naive\u0026quot;\n)\n\n# Example 1: Using the default system prompt\nresponse_default = rag.query(\n \u0026quot;What are the primary benefits of renewable energy?\u0026quot;,\n param=query_param\n)\nprint(response_default)\n\n# Example 2: Using a custom prompt\ncustom_prompt = \u0026quot;\u0026quot;\u0026quot;\nYou are an expert assistant in environmental science. Provide detailed and structured answers with examples.\n---Conversation History---\n{history}\n\n---Knowledge Base---\n{context_data}\n\n---Response Rules---\n\n- Target format and length: {response_type}\n\u0026quot;\u0026quot;\u0026quot;\nresponse_custom = rag.query(\n \u0026quot;What are the primary benefits of renewable energy?\u0026quot;,\n param=query_param,\n system_prompt=custom_prompt # Pass the custom prompt\n)\nprint(response_custom)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Create query parameters\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003equery_param\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"hybrid\"\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# or other mode: \"local\", \"global\", \"hybrid\", \"mix\" and \"naive\"\u003c/span\u003e\n)\n\n\u003cspan class=\"pl-c\"\u003e# Example 1: Using the default system prompt\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eresponse_default\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\n \u003cspan class=\"pl-s\"\u003e\"What are the primary benefits of renewable energy?\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003equery_param\u003c/span\u003e\n)\n\u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eresponse_default\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Example 2: Using a custom prompt\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003ecustom_prompt\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003eYou are an expert assistant in environmental science. Provide detailed and structured answers with examples.\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e---Conversation History---\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e{history}\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e---Knowledge Base---\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e{context_data}\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e---Response Rules---\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e- Target format and length: {response_type}\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eresponse_custom\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery\u003c/span\u003e(\n \u003cspan class=\"pl-s\"\u003e\"What are the primary benefits of renewable energy?\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003equery_param\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003esystem_prompt\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ecustom_prompt\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# Pass the custom prompt\u003c/span\u003e\n)\n\u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eresponse_custom\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eSeparate Keyword Extraction\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eWe've introduced a new function \u003ccode\u003equery_with_separate_keyword_extraction\u003c/code\u003e to enhance the keyword extraction capabilities. This function separates the keyword extraction process from the user's prompt, focusing solely on the query to improve the relevance of extracted keywords.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eHow It Works?\u003c/h5\u003e\u003ca id=\"user-content-how-it-works\" class=\"anchor\" aria-label=\"Permalink: How It Works?\" href=\"#how-it-works\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe function operates by dividing the input into two parts:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003eUser Query\u003c/code\u003e\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003ePrompt\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eIt then performs keyword extraction exclusively on the \u003ccode\u003euser query\u003c/code\u003e. This separation ensures that the extraction process is focused and relevant, unaffected by any additional language in the \u003ccode\u003eprompt\u003c/code\u003e. It also allows the \u003ccode\u003eprompt\u003c/code\u003e to serve purely for response formatting, maintaining the intent and clarity of the user's original question.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eUsage Example\u003c/h5\u003e\u003ca id=\"user-content-usage-example\" class=\"anchor\" aria-label=\"Permalink: Usage Example\" href=\"#usage-example\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThis \u003ccode\u003eexample\u003c/code\u003e shows how to tailor the function for educational content, focusing on detailed explanations for older students.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"rag.query_with_separate_keyword_extraction(\n query=\u0026quot;Explain the law of gravity\u0026quot;,\n prompt=\u0026quot;Provide a detailed explanation suitable for high school students studying physics.\u0026quot;,\n param=QueryParam(mode=\u0026quot;hybrid\u0026quot;)\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003equery_with_separate_keyword_extraction\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003equery\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Explain the law of gravity\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eprompt\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Provide a detailed explanation suitable for high school students studying physics.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eparam\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eQueryParam\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"hybrid\"\u003c/span\u003e)\n)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eInsert Custom KG\u003c/b\u003e \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"custom_kg = {\n \u0026quot;chunks\u0026quot;: [\n {\n \u0026quot;content\u0026quot;: \u0026quot;Alice and Bob are collaborating on quantum computing research.\u0026quot;,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n }\n ],\n \u0026quot;entities\u0026quot;: [\n {\n \u0026quot;entity_name\u0026quot;: \u0026quot;Alice\u0026quot;,\n \u0026quot;entity_type\u0026quot;: \u0026quot;person\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Alice is a researcher specializing in quantum physics.\u0026quot;,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n },\n {\n \u0026quot;entity_name\u0026quot;: \u0026quot;Bob\u0026quot;,\n \u0026quot;entity_type\u0026quot;: \u0026quot;person\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Bob is a mathematician.\u0026quot;,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n },\n {\n \u0026quot;entity_name\u0026quot;: \u0026quot;Quantum Computing\u0026quot;,\n \u0026quot;entity_type\u0026quot;: \u0026quot;technology\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Quantum computing utilizes quantum mechanical phenomena for computation.\u0026quot;,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n }\n ],\n \u0026quot;relationships\u0026quot;: [\n {\n \u0026quot;src_id\u0026quot;: \u0026quot;Alice\u0026quot;,\n \u0026quot;tgt_id\u0026quot;: \u0026quot;Bob\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Alice and Bob are research partners.\u0026quot;,\n \u0026quot;keywords\u0026quot;: \u0026quot;collaboration research\u0026quot;,\n \u0026quot;weight\u0026quot;: 1.0,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n },\n {\n \u0026quot;src_id\u0026quot;: \u0026quot;Alice\u0026quot;,\n \u0026quot;tgt_id\u0026quot;: \u0026quot;Quantum Computing\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Alice conducts research on quantum computing.\u0026quot;,\n \u0026quot;keywords\u0026quot;: \u0026quot;research expertise\u0026quot;,\n \u0026quot;weight\u0026quot;: 1.0,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n },\n {\n \u0026quot;src_id\u0026quot;: \u0026quot;Bob\u0026quot;,\n \u0026quot;tgt_id\u0026quot;: \u0026quot;Quantum Computing\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Bob researches quantum computing.\u0026quot;,\n \u0026quot;keywords\u0026quot;: \u0026quot;research application\u0026quot;,\n \u0026quot;weight\u0026quot;: 1.0,\n \u0026quot;source_id\u0026quot;: \u0026quot;doc-1\u0026quot;\n }\n ]\n}\n\nrag.insert_custom_kg(custom_kg)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003ecustom_kg\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e {\n \u003cspan class=\"pl-s\"\u003e\"chunks\"\u003c/span\u003e: [\n {\n \u003cspan class=\"pl-s\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice and Bob are collaborating on quantum computing research.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n }\n ],\n \u003cspan class=\"pl-s\"\u003e\"entities\"\u003c/span\u003e: [\n {\n \u003cspan class=\"pl-s\"\u003e\"entity_name\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"person\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice is a researcher specializing in quantum physics.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n },\n {\n \u003cspan class=\"pl-s\"\u003e\"entity_name\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Bob\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"person\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Bob is a mathematician.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n },\n {\n \u003cspan class=\"pl-s\"\u003e\"entity_name\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Quantum Computing\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"technology\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Quantum computing utilizes quantum mechanical phenomena for computation.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n }\n ],\n \u003cspan class=\"pl-s\"\u003e\"relationships\"\u003c/span\u003e: [\n {\n \u003cspan class=\"pl-s\"\u003e\"src_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"tgt_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Bob\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice and Bob are research partners.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"keywords\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"collaboration research\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"weight\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1.0\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n },\n {\n \u003cspan class=\"pl-s\"\u003e\"src_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"tgt_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Quantum Computing\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Alice conducts research on quantum computing.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"keywords\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"research expertise\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"weight\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1.0\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n },\n {\n \u003cspan class=\"pl-s\"\u003e\"src_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Bob\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"tgt_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Quantum Computing\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Bob researches quantum computing.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"keywords\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"research application\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"weight\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1.0\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"doc-1\"\u003c/span\u003e\n }\n ]\n}\n\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert_custom_kg\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ecustom_kg\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eInsert\u003c/h2\u003e\u003ca id=\"user-content-insert\" class=\"anchor\" aria-label=\"Permalink: Insert\" href=\"#insert\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBasic Insert\u003c/h4\u003e\u003ca id=\"user-content-basic-insert\" class=\"anchor\" aria-label=\"Permalink: Basic Insert\" href=\"#basic-insert\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Basic Insert\nrag.insert(\u0026quot;Text\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Basic Insert\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Text\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdetails\u003e\n \u003csummary\u003e \u003cb\u003e Batch Insert \u003c/b\u003e\u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Basic Batch Insert: Insert multiple texts at once\nrag.insert([\u0026quot;TEXT1\u0026quot;, \u0026quot;TEXT2\u0026quot;,...])\n\n# Batch Insert with custom batch size configuration\nrag = LightRAG(\n working_dir=WORKING_DIR,\n addon_params={\n \u0026quot;insert_batch_size\u0026quot;: 20 # Process 20 documents per batch\n }\n)\n\nrag.insert([\u0026quot;TEXT1\u0026quot;, \u0026quot;TEXT2\u0026quot;, \u0026quot;TEXT3\u0026quot;, ...]) # Documents will be processed in batches of 20\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Basic Batch Insert: Insert multiple texts at once\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e([\u003cspan class=\"pl-s\"\u003e\"TEXT1\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"TEXT2\"\u003c/span\u003e,...])\n\n\u003cspan class=\"pl-c\"\u003e# Batch Insert with custom batch size configuration\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eaddon_params\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\n \u003cspan class=\"pl-s\"\u003e\"insert_batch_size\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# Process 20 documents per batch\u003c/span\u003e\n }\n)\n\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e([\u003cspan class=\"pl-s\"\u003e\"TEXT1\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"TEXT2\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"TEXT3\"\u003c/span\u003e, ...]) \u003cspan class=\"pl-c\"\u003e# Documents will be processed in batches of 20\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003einsert_batch_size\u003c/code\u003e parameter in \u003ccode\u003eaddon_params\u003c/code\u003e controls how many documents are processed in each batch during insertion. This is useful for:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eManaging memory usage with large document collections\u003c/li\u003e\n\u003cli\u003eOptimizing processing speed\u003c/li\u003e\n\u003cli\u003eProviding better progress tracking\u003c/li\u003e\n\u003cli\u003eDefault value is 10 if not specified\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n \u003csummary\u003e \u003cb\u003e Insert with ID \u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eIf you want to provide your own IDs for your documents, number of documents and number of IDs must be the same.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Insert single text, and provide ID for it\nrag.insert(\u0026quot;TEXT1\u0026quot;, ids=[\u0026quot;ID_FOR_TEXT1\u0026quot;])\n\n# Insert multiple texts, and provide IDs for them\nrag.insert([\u0026quot;TEXT1\u0026quot;, \u0026quot;TEXT2\u0026quot;,...], ids=[\u0026quot;ID_FOR_TEXT1\u0026quot;, \u0026quot;ID_FOR_TEXT2\u0026quot;])\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Insert single text, and provide ID for it\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"TEXT1\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eids\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"ID_FOR_TEXT1\"\u003c/span\u003e])\n\n\u003cspan class=\"pl-c\"\u003e# Insert multiple texts, and provide IDs for them\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e([\u003cspan class=\"pl-s\"\u003e\"TEXT1\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"TEXT2\"\u003c/span\u003e,...], \u003cspan class=\"pl-s1\"\u003eids\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"ID_FOR_TEXT1\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"ID_FOR_TEXT2\"\u003c/span\u003e])\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n \u003csummary\u003e\u003cb\u003eInsert using Pipeline\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003eapipeline_enqueue_documents\u003c/code\u003e and \u003ccode\u003eapipeline_process_enqueue_documents\u003c/code\u003e functions allow you to perform incremental insertion of documents into the graph.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eThis is useful for scenarios where you want to process documents in the background while still allowing the main thread to continue executing.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eAnd using a routine to process news documents.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"rag = LightRAG(..)\n\nawait rag.apipeline_enqueue_documents(input)\n# Your routine in loop\nawait rag.apipeline_process_enqueue_documents(input)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(..)\n\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eapipeline_enqueue_documents\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einput\u003c/span\u003e)\n\u003cspan class=\"pl-c\"\u003e# Your routine in loop\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eapipeline_process_enqueue_documents\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einput\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n \u003csummary\u003e\u003cb\u003eInsert Multi-file Type Support\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eThe \u003ccode\u003etextract\u003c/code\u003e supports reading file types such as TXT, DOCX, PPTX, CSV, and PDF.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import textract\n\nfile_path = 'TEXT.pdf'\ntext_content = textract.process(file_path)\n\nrag.insert(text_content.decode('utf-8'))\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etextract\u003c/span\u003e\n\n\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e'TEXT.pdf'\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003etext_content\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etextract\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eprocess\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e)\n\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etext_content\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edecode\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'utf-8'\u003c/span\u003e))\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n \u003csummary\u003e\u003cb\u003eCitation Functionality\u003c/b\u003e\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eBy providing file paths, the system ensures that sources can be traced back to their original documents.\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Define documents and their file paths\ndocuments = [\u0026quot;Document content 1\u0026quot;, \u0026quot;Document content 2\u0026quot;]\nfile_paths = [\u0026quot;path/to/doc1.txt\u0026quot;, \u0026quot;path/to/doc2.txt\u0026quot;]\n\n# Insert documents with file paths\nrag.insert(documents, file_paths=file_paths)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Define documents and their file paths\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003edocuments\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-s\"\u003e\"Document content 1\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Document content 2\"\u003c/span\u003e]\n\u003cspan class=\"pl-s1\"\u003efile_paths\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e [\u003cspan class=\"pl-s\"\u003e\"path/to/doc1.txt\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"path/to/doc2.txt\"\u003c/span\u003e]\n\n\u003cspan class=\"pl-c\"\u003e# Insert documents with file paths\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edocuments\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_paths\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efile_paths\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStorage\u003c/h2\u003e\u003ca id=\"user-content-storage\" class=\"anchor\" aria-label=\"Permalink: Storage\" href=\"#storage\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eUsing Neo4J for Storage\u003c/b\u003e \u003c/summary\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFor production level scenarios you will most likely want to leverage an enterprise solution\u003c/li\u003e\n\u003cli\u003efor KG storage. Running Neo4J in Docker is recommended for seamless local testing.\u003c/li\u003e\n\u003cli\u003eSee: \u003ca href=\"https://hub.docker.com/_/neo4j\" rel=\"nofollow\"\u003ehttps://hub.docker.com/_/neo4j\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"export NEO4J_URI=\u0026quot;neo4j://localhost:7687\u0026quot;\nexport NEO4J_USERNAME=\u0026quot;neo4j\u0026quot;\nexport NEO4J_PASSWORD=\u0026quot;password\u0026quot;\n\n# Setup logger for LightRAG\nsetup_logger(\u0026quot;lightrag\u0026quot;, level=\u0026quot;INFO\u0026quot;)\n\n# When you launch the project be sure to override the default KG: NetworkX\n# by specifying kg=\u0026quot;Neo4JStorage\u0026quot;.\n\n# Note: Default settings use NetworkX\n# Initialize LightRAG with Neo4J implementation.\nasync def initialize_rag():\n rag = LightRAG(\n working_dir=WORKING_DIR,\n llm_model_func=gpt_4o_mini_complete, # Use gpt_4o_mini_complete LLM model\n graph_storage=\u0026quot;Neo4JStorage\u0026quot;, #\u0026lt;-----------override KG default\n )\n\n # Initialize database connections\n await rag.initialize_storages()\n # Initialize pipeline status for document processing\n await initialize_pipeline_status()\n\n return rag\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003eexport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eNEO4J_URI\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"neo4j://localhost:7687\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eexport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eNEO4J_USERNAME\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"neo4j\"\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eexport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eNEO4J_PASSWORD\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"password\"\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Setup logger for LightRAG\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003esetup_logger\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"lightrag\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003elevel\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"INFO\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# When you launch the project be sure to override the default KG: NetworkX\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# by specifying kg=\"Neo4JStorage\".\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Note: Default settings use NetworkX\u003c/span\u003e\n\u003cspan class=\"pl-c\"\u003e# Initialize LightRAG with Neo4J implementation.\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_rag\u003c/span\u003e():\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003egpt_4o_mini_complete\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Use gpt_4o_mini_complete LLM model\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003egraph_storage\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Neo4JStorage\"\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e#\u0026lt;-----------override KG default\u003c/span\u003e\n )\n\n \u003cspan class=\"pl-c\"\u003e# Initialize database connections\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einitialize_storages\u003c/span\u003e()\n \u003cspan class=\"pl-c\"\u003e# Initialize pipeline status for document processing\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einitialize_pipeline_status\u003c/span\u003e()\n\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003esee test_neo4j.py for a working example.\u003c/p\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eUsing PostgreSQL for Storage\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eFor production level scenarios you will most likely want to leverage an enterprise solution. PostgreSQL can provide a one-stop solution for you as KV store, VectorDB (pgvector) and GraphDB (apache AGE).\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003ePostgreSQL is lightweight,the whole binary distribution including all necessary plugins can be zipped to 40MB: Ref to \u003ca href=\"https://github.com/ShanGor/apache-age-windows/releases/tag/PG17%2Fv1.5.0-rc0\"\u003eWindows Release\u003c/a\u003e as it is easy to install for Linux/Mac.\u003c/li\u003e\n\u003cli\u003eIf you prefer docker, please start with this image if you are a beginner to avoid hiccups (DO read the overview): \u003ca href=\"https://hub.docker.com/r/shangor/postgres-for-rag\" rel=\"nofollow\"\u003ehttps://hub.docker.com/r/shangor/postgres-for-rag\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eHow to start? Ref to: \u003ca href=\"https://github.com/HKUDS/LightRAG/blob/main/examples/lightrag_zhipu_postgres_demo.py\"\u003eexamples/lightrag_zhipu_postgres_demo.py\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003eCreate index for AGE example: (Change below \u003ccode\u003edickens\u003c/code\u003e to your graph name if necessary)\n\u003cdiv class=\"highlight highlight-source-sql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"load 'age';\nSET search_path = ag_catalog, \u0026quot;$user\u0026quot;, public;\nCREATE INDEX CONCURRENTLY entity_p_idx ON dickens.\u0026quot;Entity\u0026quot; (id);\nCREATE INDEX CONCURRENTLY vertex_p_idx ON dickens.\u0026quot;_ag_label_vertex\u0026quot; (id);\nCREATE INDEX CONCURRENTLY directed_p_idx ON dickens.\u0026quot;DIRECTED\u0026quot; (id);\nCREATE INDEX CONCURRENTLY directed_eid_idx ON dickens.\u0026quot;DIRECTED\u0026quot; (end_id);\nCREATE INDEX CONCURRENTLY directed_sid_idx ON dickens.\u0026quot;DIRECTED\u0026quot; (start_id);\nCREATE INDEX CONCURRENTLY directed_seid_idx ON dickens.\u0026quot;DIRECTED\u0026quot; (start_id,end_id);\nCREATE INDEX CONCURRENTLY edge_p_idx ON dickens.\u0026quot;_ag_label_edge\u0026quot; (id);\nCREATE INDEX CONCURRENTLY edge_sid_idx ON dickens.\u0026quot;_ag_label_edge\u0026quot; (start_id);\nCREATE INDEX CONCURRENTLY edge_eid_idx ON dickens.\u0026quot;_ag_label_edge\u0026quot; (end_id);\nCREATE INDEX CONCURRENTLY edge_seid_idx ON dickens.\u0026quot;_ag_label_edge\u0026quot; (start_id,end_id);\ncreate INDEX CONCURRENTLY vertex_idx_node_id ON dickens.\u0026quot;_ag_label_vertex\u0026quot; (ag_catalog.agtype_access_operator(properties, '\u0026quot;node_id\u0026quot;'::agtype));\ncreate INDEX CONCURRENTLY entity_idx_node_id ON dickens.\u0026quot;Entity\u0026quot; (ag_catalog.agtype_access_operator(properties, '\u0026quot;node_id\u0026quot;'::agtype));\nCREATE INDEX CONCURRENTLY entity_node_id_gin_idx ON dickens.\u0026quot;Entity\u0026quot; using gin(properties);\nALTER TABLE dickens.\u0026quot;DIRECTED\u0026quot; CLUSTER ON directed_sid_idx;\n\n-- drop if necessary\ndrop INDEX entity_p_idx;\ndrop INDEX vertex_p_idx;\ndrop INDEX directed_p_idx;\ndrop INDEX directed_eid_idx;\ndrop INDEX directed_sid_idx;\ndrop INDEX directed_seid_idx;\ndrop INDEX edge_p_idx;\ndrop INDEX edge_sid_idx;\ndrop INDEX edge_eid_idx;\ndrop INDEX edge_seid_idx;\ndrop INDEX vertex_idx_node_id;\ndrop INDEX entity_idx_node_id;\ndrop INDEX entity_node_id_gin_idx;\"\u003e\u003cpre\u003eload \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003eage\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e;\n\u003cspan class=\"pl-k\"\u003eSET\u003c/span\u003e search_path \u003cspan class=\"pl-k\"\u003e=\u003c/span\u003e ag_catalog, \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e$user\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e, public;\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e entity_p_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eEntity\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e vertex_p_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e_ag_label_vertex\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e directed_p_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eDIRECTED\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e directed_eid_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eDIRECTED\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (end_id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e directed_sid_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eDIRECTED\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (start_id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e directed_seid_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eDIRECTED\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (start_id,end_id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e edge_p_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e_ag_label_edge\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e edge_sid_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e_ag_label_edge\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (start_id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e edge_eid_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e_ag_label_edge\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (end_id);\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e edge_seid_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e_ag_label_edge\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (start_id,end_id);\n\u003cspan class=\"pl-k\"\u003ecreate\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e vertex_idx_node_id \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e_ag_label_vertex\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (\u003cspan class=\"pl-c1\"\u003eag_catalog\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eagtype_access_operator\u003c/span\u003e(properties, \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\"node_id\"\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e::agtype));\n\u003cspan class=\"pl-k\"\u003ecreate\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e entity_idx_node_id \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eEntity\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e (\u003cspan class=\"pl-c1\"\u003eag_catalog\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eagtype_access_operator\u003c/span\u003e(properties, \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\"node_id\"\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e::agtype));\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eCONCURRENTLY\u003c/span\u003e entity_node_id_gin_idx \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eEntity\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e using gin(properties);\n\u003cspan class=\"pl-k\"\u003eALTER\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eTABLE\u003c/span\u003e dickens.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eDIRECTED\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e CLUSTER \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e directed_sid_idx;\n\n\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e--\u003c/span\u003e drop if necessary\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e entity_p_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e vertex_p_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e directed_p_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e directed_eid_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e directed_sid_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e directed_seid_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e edge_p_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e edge_sid_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e edge_eid_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e edge_seid_idx;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e vertex_idx_node_id;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e entity_idx_node_id;\n\u003cspan class=\"pl-k\"\u003edrop\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eINDEX\u003c/span\u003e entity_node_id_gin_idx;\u003c/pre\u003e\u003c/div\u003e\n\u003c/li\u003e\n\u003cli\u003eKnown issue of the Apache AGE: The released versions got below issue:\n\u003cblockquote\u003e\n\u003cp dir=\"auto\"\u003eYou might find that the properties of the nodes/edges are empty.\nIt is a known issue of the release version: \u003ca class=\"issue-link js-issue-link\" data-error-text=\"Failed to load title\" data-id=\"2226727319\" data-permission-text=\"Title is private\" data-url=\"https://github.com/apache/age/issues/1721\" data-hovercard-type=\"pull_request\" data-hovercard-url=\"/apache/age/pull/1721/hovercard\" href=\"https://github.com/apache/age/pull/1721\"\u003eapache/age#1721\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eYou can Compile the AGE from source code and fix it.\u003c/p\u003e\n\u003c/blockquote\u003e\n\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eUsing Faiss for Storage\u003c/b\u003e \u003c/summary\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eInstall the required dependencies:\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"pip install faiss-cpu\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003epip install faiss-cpu\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eYou can also install \u003ccode\u003efaiss-gpu\u003c/code\u003e if you have GPU support.\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eHere we are using \u003ccode\u003esentence-transformers\u003c/code\u003e but you can also use \u003ccode\u003eOpenAIEmbedding\u003c/code\u003e model with \u003ccode\u003e3072\u003c/code\u003e dimensions.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"async def embedding_func(texts: list[str]) -\u0026gt; np.ndarray:\n model = SentenceTransformer('all-MiniLM-L6-v2')\n embeddings = model.encode(texts, convert_to_numpy=True)\n return embeddings\n\n# Initialize LightRAG with the LLM model function and embedding function\nrag = LightRAG(\n working_dir=WORKING_DIR,\n llm_model_func=llm_model_func,\n embedding_func=EmbeddingFunc(\n embedding_dim=384,\n max_token_size=8192,\n func=embedding_func,\n ),\n vector_storage=\u0026quot;FaissVectorDBStorage\u0026quot;,\n vector_db_storage_cls_kwargs={\n \u0026quot;cosine_better_than_threshold\u0026quot;: 0.3 # Your desired threshold\n }\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003easync\u003c/span\u003e \u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eembedding_func\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003elist\u003c/span\u003e[\u003cspan class=\"pl-smi\"\u003estr\u003c/span\u003e]) \u003cspan class=\"pl-c1\"\u003e-\u0026gt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enp\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003endarray\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003emodel\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eSentenceTransformer\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'all-MiniLM-L6-v2'\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003eembeddings\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emodel\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eencode\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etexts\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003econvert_to_numpy\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eembeddings\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Initialize LightRAG with the LLM model function and embedding function\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eLightRAG\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eworking_dir\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ellm_model_func\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-en\"\u003eEmbeddingFunc\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003eembedding_dim\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e384\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emax_token_size\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e8192\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003efunc\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eembedding_func\u003c/span\u003e,\n ),\n \u003cspan class=\"pl-s1\"\u003evector_storage\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"FaissVectorDBStorage\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003evector_db_storage_cls_kwargs\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\n \u003cspan class=\"pl-s\"\u003e\"cosine_better_than_threshold\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e0.3\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# Your desired threshold\u003c/span\u003e\n }\n)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDelete\u003c/h2\u003e\u003ca id=\"user-content-delete\" class=\"anchor\" aria-label=\"Permalink: Delete\" href=\"#delete\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Delete Entity: Deleting entities by their names\nrag.delete_by_entity(\u0026quot;Project Gutenberg\u0026quot;)\n\n# Delete Document: Deleting entities and relationships associated with the document by doc id\nrag.delete_by_doc_id(\u0026quot;doc_id\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Delete Entity: Deleting entities by their names\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edelete_by_entity\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Project Gutenberg\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Delete Document: Deleting entities and relationships associated with the document by doc id\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edelete_by_doc_id\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"doc_id\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEdit Entities and Relations\u003c/h2\u003e\u003ca id=\"user-content-edit-entities-and-relations\" class=\"anchor\" aria-label=\"Permalink: Edit Entities and Relations\" href=\"#edit-entities-and-relations\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eLightRAG now supports comprehensive knowledge graph management capabilities, allowing you to create, edit, and delete entities and relationships within your knowledge graph.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eCreate Entities and Relations\u003c/b\u003e \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Create new entity\nentity = rag.create_entity(\u0026quot;Google\u0026quot;, {\n \u0026quot;description\u0026quot;: \u0026quot;Google is a multinational technology company specializing in internet-related services and products.\u0026quot;,\n \u0026quot;entity_type\u0026quot;: \u0026quot;company\u0026quot;\n})\n\n# Create another entity\nproduct = rag.create_entity(\u0026quot;Gmail\u0026quot;, {\n \u0026quot;description\u0026quot;: \u0026quot;Gmail is an email service developed by Google.\u0026quot;,\n \u0026quot;entity_type\u0026quot;: \u0026quot;product\u0026quot;\n})\n\n# Create relation between entities\nrelation = rag.create_relation(\u0026quot;Google\u0026quot;, \u0026quot;Gmail\u0026quot;, {\n \u0026quot;description\u0026quot;: \u0026quot;Google develops and operates Gmail.\u0026quot;,\n \u0026quot;keywords\u0026quot;: \u0026quot;develops operates service\u0026quot;,\n \u0026quot;weight\u0026quot;: 2.0\n})\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Create new entity\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eentity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecreate_entity\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Google\"\u003c/span\u003e, {\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Google is a multinational technology company specializing in internet-related services and products.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"company\"\u003c/span\u003e\n})\n\n\u003cspan class=\"pl-c\"\u003e# Create another entity\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eproduct\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecreate_entity\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Gmail\"\u003c/span\u003e, {\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Gmail is an email service developed by Google.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"product\"\u003c/span\u003e\n})\n\n\u003cspan class=\"pl-c\"\u003e# Create relation between entities\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erelation\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ecreate_relation\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Google\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Gmail\"\u003c/span\u003e, {\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Google develops and operates Gmail.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"keywords\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"develops operates service\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"weight\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e2.0\u003c/span\u003e\n})\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eEdit Entities and Relations\u003c/b\u003e \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Edit an existing entity\nupdated_entity = rag.edit_entity(\u0026quot;Google\u0026quot;, {\n \u0026quot;description\u0026quot;: \u0026quot;Google is a subsidiary of Alphabet Inc., founded in 1998.\u0026quot;,\n \u0026quot;entity_type\u0026quot;: \u0026quot;tech_company\u0026quot;\n})\n\n# Rename an entity (with all its relationships properly migrated)\nrenamed_entity = rag.edit_entity(\u0026quot;Gmail\u0026quot;, {\n \u0026quot;entity_name\u0026quot;: \u0026quot;Google Mail\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;Google Mail (formerly Gmail) is an email service.\u0026quot;\n})\n\n# Edit a relation between entities\nupdated_relation = rag.edit_relation(\u0026quot;Google\u0026quot;, \u0026quot;Google Mail\u0026quot;, {\n \u0026quot;description\u0026quot;: \u0026quot;Google created and maintains Google Mail service.\u0026quot;,\n \u0026quot;keywords\u0026quot;: \u0026quot;creates maintains email service\u0026quot;,\n \u0026quot;weight\u0026quot;: 3.0\n})\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Edit an existing entity\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eupdated_entity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eedit_entity\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Google\"\u003c/span\u003e, {\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Google is a subsidiary of Alphabet Inc., founded in 1998.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"tech_company\"\u003c/span\u003e\n})\n\n\u003cspan class=\"pl-c\"\u003e# Rename an entity (with all its relationships properly migrated)\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erenamed_entity\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eedit_entity\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Gmail\"\u003c/span\u003e, {\n \u003cspan class=\"pl-s\"\u003e\"entity_name\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Google Mail\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Google Mail (formerly Gmail) is an email service.\"\u003c/span\u003e\n})\n\n\u003cspan class=\"pl-c\"\u003e# Edit a relation between entities\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003eupdated_relation\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eedit_relation\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Google\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Google Mail\"\u003c/span\u003e, {\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"Google created and maintains Google Mail service.\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"keywords\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"creates maintains email service\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"weight\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e3.0\u003c/span\u003e\n})\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cp dir=\"auto\"\u003eAll operations are available in both synchronous and asynchronous versions. The asynchronous versions have the prefix \"a\" (e.g., \u003ccode\u003eacreate_entity\u003c/code\u003e, \u003ccode\u003eaedit_relation\u003c/code\u003e).\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEntity Operations\u003c/h4\u003e\u003ca id=\"user-content-entity-operations\" class=\"anchor\" aria-label=\"Permalink: Entity Operations\" href=\"#entity-operations\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003ecreate_entity\u003c/strong\u003e: Creates a new entity with specified attributes\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eedit_entity\u003c/strong\u003e: Updates an existing entity's attributes or renames it\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eRelation Operations\u003c/h4\u003e\u003ca id=\"user-content-relation-operations\" class=\"anchor\" aria-label=\"Permalink: Relation Operations\" href=\"#relation-operations\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003cstrong\u003ecreate_relation\u003c/strong\u003e: Creates a new relation between existing entities\u003c/li\u003e\n\u003cli\u003e\u003cstrong\u003eedit_relation\u003c/strong\u003e: Updates an existing relation's attributes\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003eThese operations maintain data consistency across both the graph database and vector database components, ensuring your knowledge graph remains coherent.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eData Export Functions\u003c/h2\u003e\u003ca id=\"user-content-data-export-functions\" class=\"anchor\" aria-label=\"Permalink: Data Export Functions\" href=\"#data-export-functions\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOverview\u003c/h2\u003e\u003ca id=\"user-content-overview-1\" class=\"anchor\" aria-label=\"Permalink: Overview\" href=\"#overview-1\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eLightRAG allows you to export your knowledge graph data in various formats for analysis, sharing, and backup purposes. The system supports exporting entities, relations, and relationship data.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eExport Functions\u003c/h2\u003e\u003ca id=\"user-content-export-functions\" class=\"anchor\" aria-label=\"Permalink: Export Functions\" href=\"#export-functions\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBasic Usage\u003c/h3\u003e\u003ca id=\"user-content-basic-usage\" class=\"anchor\" aria-label=\"Permalink: Basic Usage\" href=\"#basic-usage\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Basic CSV export (default format)\nrag.export_data(\u0026quot;knowledge_graph.csv\u0026quot;)\n\n# Specify any format\nrag.export_data(\u0026quot;output.xlsx\u0026quot;, file_format=\u0026quot;excel\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Basic CSV export (default format)\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"knowledge_graph.csv\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Specify any format\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"output.xlsx\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"excel\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDifferent File Formats supported\u003c/h3\u003e\u003ca id=\"user-content-different-file-formats-supported\" class=\"anchor\" aria-label=\"Permalink: Different File Formats supported\" href=\"#different-file-formats-supported\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"#Export data in CSV format\nrag.export_data(\u0026quot;graph_data.csv\u0026quot;, file_format=\u0026quot;csv\u0026quot;)\n\n# Export data in Excel sheet\nrag.export_data(\u0026quot;graph_data.xlsx\u0026quot;, file_format=\u0026quot;excel\u0026quot;)\n\n# Export data in markdown format\nrag.export_data(\u0026quot;graph_data.md\u0026quot;, file_format=\u0026quot;md\u0026quot;)\n\n# Export data in Text\nrag.export_data(\u0026quot;graph_data.txt\u0026quot;, file_format=\u0026quot;txt\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e#Export data in CSV format\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"graph_data.csv\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"csv\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Export data in Excel sheet\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"graph_data.xlsx\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"excel\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Export data in markdown format\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"graph_data.md\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"md\"\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Export data in Text\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"graph_data.txt\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_format\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"txt\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAdditional Options\u003c/h2\u003e\u003ca id=\"user-content-additional-options\" class=\"anchor\" aria-label=\"Permalink: Additional Options\" href=\"#additional-options\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eInclude vector embeddings in the export (optional):\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"rag.export_data(\u0026quot;complete_data.csv\u0026quot;, include_vector_data=True)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexport_data\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"complete_data.csv\"\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003einclude_vector_data\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eData Included in Export\u003c/h2\u003e\u003ca id=\"user-content-data-included-in-export\" class=\"anchor\" aria-label=\"Permalink: Data Included in Export\" href=\"#data-included-in-export\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAll exports include:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eEntity information (names, IDs, metadata)\u003c/li\u003e\n\u003cli\u003eRelation data (connections between entities)\u003c/li\u003e\n\u003cli\u003eRelationship information from vector database\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEntity Merging\u003c/h2\u003e\u003ca id=\"user-content-entity-merging\" class=\"anchor\" aria-label=\"Permalink: Entity Merging\" href=\"#entity-merging\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eMerge Entities and Their Relationships\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eLightRAG now supports merging multiple entities into a single entity, automatically handling all relationships:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Basic entity merging\nrag.merge_entities(\n source_entities=[\u0026quot;Artificial Intelligence\u0026quot;, \u0026quot;AI\u0026quot;, \u0026quot;Machine Intelligence\u0026quot;],\n target_entity=\u0026quot;AI Technology\u0026quot;\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Basic entity merging\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emerge_entities\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003esource_entities\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"Artificial Intelligence\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"AI\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Machine Intelligence\"\u003c/span\u003e],\n \u003cspan class=\"pl-s1\"\u003etarget_entity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"AI Technology\"\u003c/span\u003e\n)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWith custom merge strategy:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Define custom merge strategy for different fields\nrag.merge_entities(\n source_entities=[\u0026quot;John Smith\u0026quot;, \u0026quot;Dr. Smith\u0026quot;, \u0026quot;J. Smith\u0026quot;],\n target_entity=\u0026quot;John Smith\u0026quot;,\n merge_strategy={\n \u0026quot;description\u0026quot;: \u0026quot;concatenate\u0026quot;, # Combine all descriptions\n \u0026quot;entity_type\u0026quot;: \u0026quot;keep_first\u0026quot;, # Keep the entity type from the first entity\n \u0026quot;source_id\u0026quot;: \u0026quot;join_unique\u0026quot; # Combine all unique source IDs\n }\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Define custom merge strategy for different fields\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emerge_entities\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003esource_entities\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"John Smith\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Dr. Smith\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"J. Smith\"\u003c/span\u003e],\n \u003cspan class=\"pl-s1\"\u003etarget_entity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"John Smith\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emerge_strategy\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"concatenate\"\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Combine all descriptions\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"keep_first\"\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Keep the entity type from the first entity\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"join_unique\"\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# Combine all unique source IDs\u003c/span\u003e\n }\n)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWith custom target entity data:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Specify exact values for the merged entity\nrag.merge_entities(\n source_entities=[\u0026quot;New York\u0026quot;, \u0026quot;NYC\u0026quot;, \u0026quot;Big Apple\u0026quot;],\n target_entity=\u0026quot;New York City\u0026quot;,\n target_entity_data={\n \u0026quot;entity_type\u0026quot;: \u0026quot;LOCATION\u0026quot;,\n \u0026quot;description\u0026quot;: \u0026quot;New York City is the most populous city in the United States.\u0026quot;,\n }\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Specify exact values for the merged entity\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emerge_entities\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003esource_entities\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"New York\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"NYC\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Big Apple\"\u003c/span\u003e],\n \u003cspan class=\"pl-s1\"\u003etarget_entity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"New York City\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003etarget_entity_data\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"LOCATION\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"New York City is the most populous city in the United States.\"\u003c/span\u003e,\n }\n)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAdvanced usage combining both approaches:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Merge company entities with both strategy and custom data\nrag.merge_entities(\n source_entities=[\u0026quot;Microsoft Corp\u0026quot;, \u0026quot;Microsoft Corporation\u0026quot;, \u0026quot;MSFT\u0026quot;],\n target_entity=\u0026quot;Microsoft\u0026quot;,\n merge_strategy={\n \u0026quot;description\u0026quot;: \u0026quot;concatenate\u0026quot;, # Combine all descriptions\n \u0026quot;source_id\u0026quot;: \u0026quot;join_unique\u0026quot; # Combine source IDs\n },\n target_entity_data={\n \u0026quot;entity_type\u0026quot;: \u0026quot;ORGANIZATION\u0026quot;,\n }\n)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Merge company entities with both strategy and custom data\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emerge_entities\u003c/span\u003e(\n \u003cspan class=\"pl-s1\"\u003esource_entities\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"Microsoft Corp\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"Microsoft Corporation\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"MSFT\"\u003c/span\u003e],\n \u003cspan class=\"pl-s1\"\u003etarget_entity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e\"Microsoft\"\u003c/span\u003e,\n \u003cspan class=\"pl-s1\"\u003emerge_strategy\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\n \u003cspan class=\"pl-s\"\u003e\"description\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"concatenate\"\u003c/span\u003e, \u003cspan class=\"pl-c\"\u003e# Combine all descriptions\u003c/span\u003e\n \u003cspan class=\"pl-s\"\u003e\"source_id\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"join_unique\"\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e# Combine source IDs\u003c/span\u003e\n },\n \u003cspan class=\"pl-s1\"\u003etarget_entity_data\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\n \u003cspan class=\"pl-s\"\u003e\"entity_type\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"ORGANIZATION\"\u003c/span\u003e,\n }\n)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWhen merging entities:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eAll relationships from source entities are redirected to the target entity\u003c/li\u003e\n\u003cli\u003eDuplicate relationships are intelligently merged\u003c/li\u003e\n\u003cli\u003eSelf-relationships (loops) are prevented\u003c/li\u003e\n\u003cli\u003eSource entities are removed after merging\u003c/li\u003e\n\u003cli\u003eRelationship weights and attributes are preserved\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eCache\u003c/h2\u003e\u003ca id=\"user-content-cache\" class=\"anchor\" aria-label=\"Permalink: Cache\" href=\"#cache\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdetails\u003e\n \u003csummary\u003e \u003cb\u003eClear Cache\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eYou can clear the LLM response cache with different modes:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"# Clear all cache\nawait rag.aclear_cache()\n\n# Clear local mode cache\nawait rag.aclear_cache(modes=[\u0026quot;local\u0026quot;])\n\n# Clear extraction cache\nawait rag.aclear_cache(modes=[\u0026quot;default\u0026quot;])\n\n# Clear multiple modes\nawait rag.aclear_cache(modes=[\u0026quot;local\u0026quot;, \u0026quot;global\u0026quot;, \u0026quot;hybrid\u0026quot;])\n\n# Synchronous version\nrag.clear_cache(modes=[\u0026quot;local\u0026quot;])\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e# Clear all cache\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eaclear_cache\u003c/span\u003e()\n\n\u003cspan class=\"pl-c\"\u003e# Clear local mode cache\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eaclear_cache\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emodes\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"local\"\u003c/span\u003e])\n\n\u003cspan class=\"pl-c\"\u003e# Clear extraction cache\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eaclear_cache\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emodes\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"default\"\u003c/span\u003e])\n\n\u003cspan class=\"pl-c\"\u003e# Clear multiple modes\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eawait\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eaclear_cache\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emodes\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"local\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"global\"\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e\"hybrid\"\u003c/span\u003e])\n\n\u003cspan class=\"pl-c\"\u003e# Synchronous version\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eclear_cache\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003emodes\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e[\u003cspan class=\"pl-s\"\u003e\"local\"\u003c/span\u003e])\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eValid modes are:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e\u003ccode\u003e\"default\"\u003c/code\u003e: Extraction cache\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\"naive\"\u003c/code\u003e: Naive search cache\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\"local\"\u003c/code\u003e: Local search cache\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\"global\"\u003c/code\u003e: Global search cache\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\"hybrid\"\u003c/code\u003e: Hybrid search cache\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003e\"mix\"\u003c/code\u003e: Mix search cache\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eLightRAG init parameters\u003c/h2\u003e\u003ca id=\"user-content-lightrag-init-parameters\" class=\"anchor\" aria-label=\"Permalink: LightRAG init parameters\" href=\"#lightrag-init-parameters\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Parameters \u003c/summary\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003cstrong\u003eParameter\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eType\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eExplanation\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eDefault\u003c/strong\u003e\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eworking_dir\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eDirectory where the cache will be stored\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003elightrag_cache+timestamp\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ekv_storage\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStorage type for documents and text chunks. Supported types:\u003ccode\u003eJsonKVStorage\u003c/code\u003e, \u003ccode\u003eOracleKVStorage\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eJsonKVStorage\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003evector_storage\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStorage type for embedding vectors. Supported types:\u003ccode\u003eNanoVectorDBStorage\u003c/code\u003e, \u003ccode\u003eOracleVectorDBStorage\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eNanoVectorDBStorage\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003egraph_storage\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eStorage type for graph edges and nodes. Supported types:\u003ccode\u003eNetworkXStorage\u003c/code\u003e, \u003ccode\u003eNeo4JStorage\u003c/code\u003e, \u003ccode\u003eOracleGraphStorage\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eNetworkXStorage\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003echunk_token_size\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum token size per chunk when splitting documents\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e1200\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003echunk_overlap_token_size\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eOverlap token size between two chunks when splitting documents\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e100\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003etiktoken_model_name\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eModel name for the Tiktoken encoder used to calculate token numbers\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egpt-4o-mini\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eentity_extract_max_gleaning\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNumber of loops in the entity extraction process, appending history messages\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e1\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eentity_summary_to_max_tokens\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum token size for each entity summary\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e500\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003enode_embedding_algorithm\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAlgorithm for node embedding (currently not used)\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003enode2vec\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003enode2vec_params\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eParameters for node embedding\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e{\"dimensions\": 1536,\"num_walks\": 10,\"walk_length\": 40,\"window_size\": 2,\"iterations\": 3,\"random_seed\": 3,}\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eembedding_func\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eEmbeddingFunc\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFunction to generate embedding vectors from text\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eopenai_embed\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eembedding_batch_num\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum batch size for embedding processes (multiple texts sent per batch)\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e32\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eembedding_func_max_async\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum number of concurrent asynchronous embedding processes\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e16\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ellm_model_func\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ecallable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eFunction for LLM generation\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003egpt_4o_mini_complete\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ellm_model_name\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003estr\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eLLM model name for generation\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003emeta-llama/Llama-3.2-1B-Instruct\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ellm_model_max_token_size\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum token size for LLM generation (affects entity relation summaries)\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e32768\u003c/code\u003e(default value changed by env var MAX_TOKENS)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ellm_model_max_async\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eint\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eMaximum number of concurrent asynchronous LLM processes\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003e4\u003c/code\u003e(default value changed by env var MAX_ASYNC)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003ellm_model_kwargs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAdditional parameters for LLM generation\u003c/td\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003evector_db_storage_cls_kwargs\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAdditional parameters for vector database, like setting the threshold for nodes and relations retrieval.\u003c/td\u003e\n\u003ctd\u003ecosine_better_than_threshold: 0.2(default value changed by env var COSINE_THRESHOLD)\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eenable_llm_cache\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ebool\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIf \u003ccode\u003eTRUE\u003c/code\u003e, stores LLM results in cache; repeated prompts return cached responses\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eTRUE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eenable_llm_cache_for_entity_extract\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ebool\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eIf \u003ccode\u003eTRUE\u003c/code\u003e, stores LLM results in cache for entity extraction; Good for beginners to debug your application\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eTRUE\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eaddon_params\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eAdditional parameters, e.g.,\u003ccode\u003e{\"example_number\": 1, \"language\": \"Simplified Chinese\", \"entity_types\": [\"organization\", \"person\", \"geo\", \"event\"], \"insert_batch_size\": 10}\u003c/code\u003e: sets example limit, output language, and batch size for document processing\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003eexample_number: all examples, language: English, insert_batch_size: 10\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003econvert_response_to_json_func\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003ecallable\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eNot used\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003econvert_response_to_json\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eembedding_cache_config\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003ccode\u003edict\u003c/code\u003e\u003c/td\u003e\n\u003ctd\u003eConfiguration for question-answer caching. Contains three parameters:\u003ccode\u003e\u0026lt;br\u0026gt;\u003c/code\u003e- \u003ccode\u003eenabled\u003c/code\u003e: Boolean value to enable/disable cache lookup functionality. When enabled, the system will check cached responses before generating new answers.\u003ccode\u003e\u0026lt;br\u0026gt;\u003c/code\u003e- \u003ccode\u003esimilarity_threshold\u003c/code\u003e: Float value (0-1), similarity threshold. When a new question's similarity with a cached question exceeds this threshold, the cached answer will be returned directly without calling the LLM.\u003ccode\u003e\u0026lt;br\u0026gt;\u003c/code\u003e- \u003ccode\u003euse_llm_check\u003c/code\u003e: Boolean value to enable/disable LLM similarity verification. When enabled, LLM will be used as a secondary check to verify the similarity between questions before returning cached answers.\u003c/td\u003e\n\u003ctd\u003eDefault:\u003ccode\u003e{\"enabled\": False, \"similarity_threshold\": 0.95, \"use_llm_check\": False}\u003c/code\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eError Handling\u003c/h2\u003e\u003ca id=\"user-content-error-handling\" class=\"anchor\" aria-label=\"Permalink: Error Handling\" href=\"#error-handling\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdetails\u003e\n\u003csummary\u003eClick to view error handling details\u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eThe API includes comprehensive error handling:\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eFile not found errors (404)\u003c/li\u003e\n\u003cli\u003eProcessing errors (500)\u003c/li\u003e\n\u003cli\u003eSupports multiple file encodings (UTF-8 and GBK)\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAPI\u003c/h2\u003e\u003ca id=\"user-content-api\" class=\"anchor\" aria-label=\"Permalink: API\" href=\"#api\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eLightRag can be installed with API support to serve a Fast api interface to perform data upload and indexing/Rag operations/Rescan of the input folder etc..\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"/HKUDS/LightRAG/blob/main/lightrag/api/README.md\"\u003eLightRag API\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eGraph Visualization\u003c/h2\u003e\u003ca id=\"user-content-graph-visualization\" class=\"anchor\" aria-label=\"Permalink: Graph Visualization\" href=\"#graph-visualization\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eGraph visualization with html\u003c/b\u003e \u003c/summary\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eThe following code can be found in \u003ccode\u003eexamples/graph_visual_with_html.py\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import networkx as nx\nfrom pyvis.network import Network\n\n# Load the GraphML file\nG = nx.read_graphml('./dickens/graph_chunk_entity_relation.graphml')\n\n# Create a Pyvis network\nnet = Network(notebook=True)\n\n# Convert NetworkX graph to Pyvis network\nnet.from_nx(G)\n\n# Save and display the network\nnet.show('knowledge_graph.html')\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enetworkx\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enx\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epyvis\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003enetwork\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eNetwork\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Load the GraphML file\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003eG\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003enx\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eread_graphml\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'./dickens/graph_chunk_entity_relation.graphml'\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Create a Pyvis network\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enet\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eNetwork\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003enotebook\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Convert NetworkX graph to Pyvis network\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enet\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efrom_nx\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003eG\u003c/span\u003e)\n\n\u003cspan class=\"pl-c\"\u003e# Save and display the network\u003c/span\u003e\n\u003cspan class=\"pl-s1\"\u003enet\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eshow\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'knowledge_graph.html'\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eGraph visualization with Neo4\u003c/b\u003e \u003c/summary\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003eThe following code can be found in \u003ccode\u003eexamples/graph_visual_with_neo4j.py\u003c/code\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"import os\nimport json\nfrom lightrag.utils import xml_to_json\nfrom neo4j import GraphDatabase\n\n# Constants\nWORKING_DIR = \u0026quot;./dickens\u0026quot;\nBATCH_SIZE_NODES = 500\nBATCH_SIZE_EDGES = 100\n\n# Neo4j connection credentials\nNEO4J_URI = \u0026quot;bolt://localhost:7687\u0026quot;\nNEO4J_USERNAME = \u0026quot;neo4j\u0026quot;\nNEO4J_PASSWORD = \u0026quot;your_password\u0026quot;\n\ndef convert_xml_to_json(xml_path, output_path):\n \u0026quot;\u0026quot;\u0026quot;Converts XML file to JSON and saves the output.\u0026quot;\u0026quot;\u0026quot;\n if not os.path.exists(xml_path):\n print(f\u0026quot;Error: File not found - {xml_path}\u0026quot;)\n return None\n\n json_data = xml_to_json(xml_path)\n if json_data:\n with open(output_path, 'w', encoding='utf-8') as f:\n json.dump(json_data, f, ensure_ascii=False, indent=2)\n print(f\u0026quot;JSON file created: {output_path}\u0026quot;)\n return json_data\n else:\n print(\u0026quot;Failed to create JSON data\u0026quot;)\n return None\n\ndef process_in_batches(tx, query, data, batch_size):\n \u0026quot;\u0026quot;\u0026quot;Process data in batches and execute the given query.\u0026quot;\u0026quot;\u0026quot;\n for i in range(0, len(data), batch_size):\n batch = data[i:i + batch_size]\n tx.run(query, {\u0026quot;nodes\u0026quot;: batch} if \u0026quot;nodes\u0026quot; in query else {\u0026quot;edges\u0026quot;: batch})\n\ndef main():\n # Paths\n xml_file = os.path.join(WORKING_DIR, 'graph_chunk_entity_relation.graphml')\n json_file = os.path.join(WORKING_DIR, 'graph_data.json')\n\n # Convert XML to JSON\n json_data = convert_xml_to_json(xml_file, json_file)\n if json_data is None:\n return\n\n # Load nodes and edges\n nodes = json_data.get('nodes', [])\n edges = json_data.get('edges', [])\n\n # Neo4j queries\n create_nodes_query = \u0026quot;\u0026quot;\u0026quot;\n UNWIND $nodes AS node\n MERGE (e:Entity {id: node.id})\n SET e.entity_type = node.entity_type,\n e.description = node.description,\n e.source_id = node.source_id,\n e.displayName = node.id\n REMOVE e:Entity\n WITH e, node\n CALL apoc.create.addLabels(e, [node.entity_type]) YIELD node AS labeledNode\n RETURN count(*)\n \u0026quot;\u0026quot;\u0026quot;\n\n create_edges_query = \u0026quot;\u0026quot;\u0026quot;\n UNWIND $edges AS edge\n MATCH (source {id: edge.source})\n MATCH (target {id: edge.target})\n WITH source, target, edge,\n CASE\n WHEN edge.keywords CONTAINS 'lead' THEN 'lead'\n WHEN edge.keywords CONTAINS 'participate' THEN 'participate'\n WHEN edge.keywords CONTAINS 'uses' THEN 'uses'\n WHEN edge.keywords CONTAINS 'located' THEN 'located'\n WHEN edge.keywords CONTAINS 'occurs' THEN 'occurs'\n ELSE REPLACE(SPLIT(edge.keywords, ',')[0], '\\\u0026quot;', '')\n END AS relType\n CALL apoc.create.relationship(source, relType, {\n weight: edge.weight,\n description: edge.description,\n keywords: edge.keywords,\n source_id: edge.source_id\n }, target) YIELD rel\n RETURN count(*)\n \u0026quot;\u0026quot;\u0026quot;\n\n set_displayname_and_labels_query = \u0026quot;\u0026quot;\u0026quot;\n MATCH (n)\n SET n.displayName = n.id\n WITH n\n CALL apoc.create.setLabels(n, [n.entity_type]) YIELD node\n RETURN count(*)\n \u0026quot;\u0026quot;\u0026quot;\n\n # Create a Neo4j driver\n driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USERNAME, NEO4J_PASSWORD))\n\n try:\n # Execute queries in batches\n with driver.session() as session:\n # Insert nodes in batches\n session.execute_write(process_in_batches, create_nodes_query, nodes, BATCH_SIZE_NODES)\n\n # Insert edges in batches\n session.execute_write(process_in_batches, create_edges_query, edges, BATCH_SIZE_EDGES)\n\n # Set displayName and labels\n session.run(set_displayname_and_labels_query)\n\n except Exception as e:\n print(f\u0026quot;Error occurred: {e}\u0026quot;)\n\n finally:\n driver.close()\n\nif __name__ == \u0026quot;__main__\u0026quot;:\n main()\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elightrag\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eutils\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003exml_to_json\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003efrom\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eneo4j\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eGraphDatabase\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Constants\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"./dickens\"\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003eBATCH_SIZE_NODES\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e500\u003c/span\u003e\n\u003cspan class=\"pl-c1\"\u003eBATCH_SIZE_EDGES\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e100\u003c/span\u003e\n\n\u003cspan class=\"pl-c\"\u003e# Neo4j connection credentials\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eNEO4J_URI\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"bolt://localhost:7687\"\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eNEO4J_USERNAME\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"neo4j\"\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eNEO4J_PASSWORD\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"your_password\"\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003econvert_xml_to_json\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exml_path\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eoutput_path\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Converts XML file to JSON and saves the output.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexists\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exml_path\u003c/span\u003e):\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"Error: File not found - \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003exml_path\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003exml_to_json\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exml_path\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eoutput_path\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'w'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eencoding\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'utf-8'\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003ejson\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edump\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eensure_ascii\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eindent\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e)\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"JSON file created: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eoutput_path\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Failed to create JSON data\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eprocess_in_batches\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003etx\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003equery\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ebatch_size\u003c/span\u003e):\n \u003cspan class=\"pl-s\"\u003e\"\"\"Process data in batches and execute the given query.\"\"\"\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003erange\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e, \u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e), \u003cspan class=\"pl-s1\"\u003ebatch_size\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003ebatch\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e:\u003cspan class=\"pl-s1\"\u003ei\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebatch_size\u003c/span\u003e]\n \u003cspan class=\"pl-s1\"\u003etx\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erun\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003equery\u003c/span\u003e, {\u003cspan class=\"pl-s\"\u003e\"nodes\"\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003ebatch\u003c/span\u003e} \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"nodes\"\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equery\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eelse\u003c/span\u003e {\u003cspan class=\"pl-s\"\u003e\"edges\"\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003ebatch\u003c/span\u003e})\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e():\n \u003cspan class=\"pl-c\"\u003e# Paths\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003exml_file\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ejoin\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'graph_chunk_entity_relation.graphml'\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003ejson_file\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ejoin\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003eWORKING_DIR\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'graph_data.json'\u003c/span\u003e)\n\n \u003cspan class=\"pl-c\"\u003e# Convert XML to JSON\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003econvert_xml_to_json\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003exml_file\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ejson_file\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eis\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e\n\n \u003cspan class=\"pl-c\"\u003e# Load nodes and edges\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003enodes\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eget\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'nodes'\u003c/span\u003e, [])\n \u003cspan class=\"pl-s1\"\u003eedges\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson_data\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eget\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'edges'\u003c/span\u003e, [])\n\n \u003cspan class=\"pl-c\"\u003e# Neo4j queries\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003ecreate_nodes_query\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e UNWIND $nodes AS node\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e MERGE (e:Entity {id: node.id})\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e SET e.entity_type = node.entity_type,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e e.description = node.description,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e e.source_id = node.source_id,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e e.displayName = node.id\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e REMOVE e:Entity\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WITH e, node\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CALL apoc.create.addLabels(e, [node.entity_type]) YIELD node AS labeledNode\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e RETURN count(*)\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003ecreate_edges_query\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e UNWIND $edges AS edge\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e MATCH (source {id: edge.source})\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e MATCH (target {id: edge.target})\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WITH source, target, edge,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CASE\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WHEN edge.keywords CONTAINS 'lead' THEN 'lead'\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WHEN edge.keywords CONTAINS 'participate' THEN 'participate'\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WHEN edge.keywords CONTAINS 'uses' THEN 'uses'\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WHEN edge.keywords CONTAINS 'located' THEN 'located'\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WHEN edge.keywords CONTAINS 'occurs' THEN 'occurs'\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e ELSE REPLACE(SPLIT(edge.keywords, ',')[0], '\u003cspan class=\"pl-cce\"\u003e\\\"\u003c/span\u003e', '')\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e END AS relType\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CALL apoc.create.relationship(source, relType, {\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e weight: edge.weight,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e description: edge.description,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e keywords: edge.keywords,\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e source_id: edge.source_id\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e }, target) YIELD rel\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e RETURN count(*)\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003eset_displayname_and_labels_query\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"\"\"\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e MATCH (n)\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e SET n.displayName = n.id\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e WITH n\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e CALL apoc.create.setLabels(n, [n.entity_type]) YIELD node\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e RETURN count(*)\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e \"\"\"\u003c/span\u003e\n\n \u003cspan class=\"pl-c\"\u003e# Create a Neo4j driver\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003edriver\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eGraphDatabase\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edriver\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eNEO4J_URI\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eauth\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e(\u003cspan class=\"pl-v\"\u003eNEO4J_USERNAME\u003c/span\u003e, \u003cspan class=\"pl-v\"\u003eNEO4J_PASSWORD\u003c/span\u003e))\n\n \u003cspan class=\"pl-k\"\u003etry\u003c/span\u003e:\n \u003cspan class=\"pl-c\"\u003e# Execute queries in batches\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edriver\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esession\u003c/span\u003e() \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esession\u003c/span\u003e:\n \u003cspan class=\"pl-c\"\u003e# Insert nodes in batches\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esession\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexecute_write\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eprocess_in_batches\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ecreate_nodes_query\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003enodes\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003eBATCH_SIZE_NODES\u003c/span\u003e)\n\n \u003cspan class=\"pl-c\"\u003e# Insert edges in batches\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esession\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eexecute_write\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eprocess_in_batches\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003ecreate_edges_query\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eedges\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003eBATCH_SIZE_EDGES\u003c/span\u003e)\n\n \u003cspan class=\"pl-c\"\u003e# Set displayName and labels\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esession\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003erun\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eset_displayname_and_labels_query\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eException\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"Error occurred: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003efinally\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003edriver\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eclose\u003c/span\u003e()\n\n\u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003e__name__\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"__main__\"\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003emain\u003c/span\u003e()\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdetails\u003e\n\u003csummary\u003e \u003cb\u003eGraphml 3d visualizer\u003c/b\u003e \u003c/summary\u003e\n\u003cp dir=\"auto\"\u003eLightRag can be installed with Tools support to add extra tools like the graphml 3d visualizer.\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"/HKUDS/LightRAG/blob/main/lightrag/tools/lightrag_visualizer/README.md\"\u003eLightRag Visualizer\u003c/a\u003e\u003c/p\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eEvaluation\u003c/h2\u003e\u003ca id=\"user-content-evaluation\" class=\"anchor\" aria-label=\"Permalink: Evaluation\" href=\"#evaluation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eDataset\u003c/h3\u003e\u003ca id=\"user-content-dataset\" class=\"anchor\" aria-label=\"Permalink: Dataset\" href=\"#dataset\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThe dataset used in LightRAG can be downloaded from \u003ca href=\"https://huggingface.co/datasets/TommyChien/UltraDomain\" rel=\"nofollow\"\u003eTommyChien/UltraDomain\u003c/a\u003e.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eGenerate Query\u003c/h3\u003e\u003ca id=\"user-content-generate-query\" class=\"anchor\" aria-label=\"Permalink: Generate Query\" href=\"#generate-query\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eLightRAG uses the following prompt to generate high-level queries, with the corresponding code in \u003ccode\u003eexample/generate_query.py\u003c/code\u003e.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Prompt \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"Given the following description of a dataset:\n\n{description}\n\nPlease identify 5 potential users who would engage with this dataset. For each user, list 5 tasks they would perform with this dataset. Then, for each (user, task) combination, generate 5 questions that require a high-level understanding of the entire dataset.\n\nOutput the results in the following structure:\n- User 1: [user description]\n - Task 1: [task description]\n - Question 1:\n - Question 2:\n - Question 3:\n - Question 4:\n - Question 5:\n - Task 2: [task description]\n ...\n - Task 5: [task description]\n- User 2: [user description]\n ...\n- User 5: [user description]\n ...\"\u003e\u003cpre\u003e\u003cspan class=\"pl-v\"\u003eGiven\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efollowing\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eof\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edataset\u003c/span\u003e:\n\n{\u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e}\n\n\u003cspan class=\"pl-v\"\u003ePlease\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eidentify\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003epotential\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eusers\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewho\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewould\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eengage\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edataset\u003c/span\u003e. \u003cspan class=\"pl-c1\"\u003eFor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003euser\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003elist\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etasks\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethey\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewould\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eperform\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edataset\u003c/span\u003e. \u003cspan class=\"pl-c1\"\u003eThen\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eeach\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003euser\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etask\u003c/span\u003e) \u003cspan class=\"pl-s1\"\u003ecombination\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003egenerate\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equestions\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethat\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erequire\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ea\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehigh\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003elevel\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eunderstanding\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eof\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eentire\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edataset\u003c/span\u003e.\n\n\u003cspan class=\"pl-c1\"\u003eOutput\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eresults\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efollowing\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estructure\u003c/span\u003e:\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eUser\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e: [\u003cspan class=\"pl-s1\"\u003euser\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e]\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTask\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e: [\u003cspan class=\"pl-s1\"\u003etask\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e]\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eQuestion\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e:\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eQuestion\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e:\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eQuestion\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e:\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eQuestion\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e:\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eQuestion\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e:\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTask\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e: [\u003cspan class=\"pl-s1\"\u003etask\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e]\n ...\n \u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTask\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e: [\u003cspan class=\"pl-s1\"\u003etask\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e]\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eUser\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e: [\u003cspan class=\"pl-s1\"\u003euser\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e]\n ...\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eUser\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e: [\u003cspan class=\"pl-s1\"\u003euser\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edescription\u003c/span\u003e]\n ...\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eBatch Eval\u003c/h3\u003e\u003ca id=\"user-content-batch-eval\" class=\"anchor\" aria-label=\"Permalink: Batch Eval\" href=\"#batch-eval\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eTo evaluate the performance of two RAG systems on high-level queries, LightRAG uses the following prompt, with the specific code available in \u003ccode\u003eexample/batch_eval.py\u003c/code\u003e.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Prompt \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"---Role---\nYou are an expert tasked with evaluating two answers to the same question based on three criteria: **Comprehensiveness**, **Diversity**, and **Empowerment**.\n---Goal---\nYou will evaluate two answers to the same question based on three criteria: **Comprehensiveness**, **Diversity**, and **Empowerment**.\n\n- **Comprehensiveness**: How much detail does the answer provide to cover all aspects and details of the question?\n- **Diversity**: How varied and rich is the answer in providing different perspectives and insights on the question?\n- **Empowerment**: How well does the answer help the reader understand and make informed judgments about the topic?\n\nFor each criterion, choose the better answer (either Answer 1 or Answer 2) and explain why. Then, select an overall winner based on these three categories.\n\nHere is the question:\n{query}\n\nHere are the two answers:\n\n**Answer 1:**\n{answer1}\n\n**Answer 2:**\n{answer2}\n\nEvaluate both answers using the three criteria listed above and provide detailed explanations for each criterion.\n\nOutput your evaluation in the following JSON format:\n\n{{\n \u0026quot;Comprehensiveness\u0026quot;: {{\n \u0026quot;Winner\u0026quot;: \u0026quot;[Answer 1 or Answer 2]\u0026quot;,\n \u0026quot;Explanation\u0026quot;: \u0026quot;[Provide explanation here]\u0026quot;\n }},\n \u0026quot;Empowerment\u0026quot;: {{\n \u0026quot;Winner\u0026quot;: \u0026quot;[Answer 1 or Answer 2]\u0026quot;,\n \u0026quot;Explanation\u0026quot;: \u0026quot;[Provide explanation here]\u0026quot;\n }},\n \u0026quot;Overall Winner\u0026quot;: {{\n \u0026quot;Winner\u0026quot;: \u0026quot;[Answer 1 or Answer 2]\u0026quot;,\n \u0026quot;Explanation\u0026quot;: \u0026quot;[Summarize why this answer is the overall winner based on the three criteria]\u0026quot;\n }}\n}}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eRole\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eYou\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eare\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ean\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexpert\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etasked\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eevaluating\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etwo\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswers\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eto\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esame\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equestion\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebased\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eon\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethree\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecriteria\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eComprehensiveness\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eDiversity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eEmpowerment\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e.\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eGoal\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\n\u003cspan class=\"pl-v\"\u003eYou\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewill\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eevaluate\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etwo\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswers\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eto\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esame\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equestion\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebased\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eon\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethree\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecriteria\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eComprehensiveness\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e, \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eDiversity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eEmpowerment\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e.\n\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eComprehensiveness\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e: \u003cspan class=\"pl-v\"\u003eHow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emuch\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edetail\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edoes\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswer\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprovide\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eto\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecover\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eall\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003easpects\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edetails\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eof\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equestion\u003c/span\u003e?\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eDiversity\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e: \u003cspan class=\"pl-v\"\u003eHow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003evaried\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003erich\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eproviding\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edifferent\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eperspectives\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einsights\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eon\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equestion\u003c/span\u003e?\n\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e*\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eEmpowerment\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e: \u003cspan class=\"pl-v\"\u003eHow\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewell\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edoes\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswer\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehelp\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ereader\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eunderstand\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emake\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einformed\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejudgments\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eabout\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etopic\u003c/span\u003e?\n\n\u003cspan class=\"pl-v\"\u003eFor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecriterion\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003echoose\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebetter\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eanswer\u003c/span\u003e (\u003cspan class=\"pl-s1\"\u003eeither\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eAnswer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eor\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eAnswer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e) \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexplain\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewhy\u003c/span\u003e. \u003cspan class=\"pl-c1\"\u003eThen\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eselect\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ean\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoverall\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ewinner\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ebased\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eon\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethese\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethree\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecategories\u003c/span\u003e.\n\n\u003cspan class=\"pl-v\"\u003eHere\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eis\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equestion\u003c/span\u003e:\n{\u003cspan class=\"pl-s1\"\u003equery\u003c/span\u003e}\n\n\u003cspan class=\"pl-v\"\u003eHere\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eare\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etwo\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswers\u003c/span\u003e:\n\n\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eAnswer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\n{\u003cspan class=\"pl-s1\"\u003eanswer1\u003c/span\u003e}\n\n\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eAnswer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e**\u003c/span\u003e\n{\u003cspan class=\"pl-s1\"\u003eanswer2\u003c/span\u003e}\n\n\u003cspan class=\"pl-v\"\u003eEvaluate\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eboth\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eanswers\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eusing\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethree\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecriteria\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003elisted\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eabove\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eprovide\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edetailed\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eexplanations\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eeach\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ecriterion\u003c/span\u003e.\n\n\u003cspan class=\"pl-c1\"\u003eOutput\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eyour\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eevaluation\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ethe\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efollowing\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eJSON\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eformat\u003c/span\u003e:\n\n{{\n \u003cspan class=\"pl-s\"\u003e\"Comprehensiveness\"\u003c/span\u003e: {{\n \u003cspan class=\"pl-s\"\u003e\"Winner\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"[Answer 1 or Answer 2]\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"Explanation\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"[Provide explanation here]\"\u003c/span\u003e\n }},\n \u003cspan class=\"pl-s\"\u003e\"Empowerment\"\u003c/span\u003e: {{\n \u003cspan class=\"pl-s\"\u003e\"Winner\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"[Answer 1 or Answer 2]\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"Explanation\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"[Provide explanation here]\"\u003c/span\u003e\n }},\n \u003cspan class=\"pl-s\"\u003e\"Overall Winner\"\u003c/span\u003e: {{\n \u003cspan class=\"pl-s\"\u003e\"Winner\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"[Answer 1 or Answer 2]\"\u003c/span\u003e,\n \u003cspan class=\"pl-s\"\u003e\"Explanation\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"[Summarize why this answer is the overall winner based on the three criteria]\"\u003c/span\u003e\n }}\n}}\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eOverall Performance Table\u003c/h3\u003e\u003ca id=\"user-content-overall-performance-table\" class=\"anchor\" aria-label=\"Permalink: Overall Performance Table\" href=\"#overall-performance-table\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eAgriculture\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eCS\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eLegal\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003cth\u003e\u003cstrong\u003eMix\u003c/strong\u003e\u003c/th\u003e\n\u003cth\u003e\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003eNaiveRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eNaiveRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eNaiveRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eNaiveRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eComprehensiveness\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e32.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e67.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e61.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e16.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e83.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e61.2%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDiversity\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e23.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e76.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e62.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e13.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e86.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e32.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e67.6%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEmpowerment\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e32.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e67.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e61.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e16.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e83.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e42.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e57.2%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOverall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e32.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e67.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e61.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e15.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e84.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e40.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e60.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003eRQ-RAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eRQ-RAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eRQ-RAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eRQ-RAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eComprehensiveness\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e31.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e68.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e61.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e15.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e84.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e39.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e60.8%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDiversity\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e29.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e70.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e39.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e60.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e11.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e88.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e30.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e69.2%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEmpowerment\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e31.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e68.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e36.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e63.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e15.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e84.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e42.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e57.6%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOverall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e32.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e67.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e62.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e14.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e85.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e40.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e60.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003eHyDE\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eHyDE\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eHyDE\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eHyDE\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eComprehensiveness\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e26.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e74.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e41.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e58.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e26.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e73.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e40.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e59.6%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDiversity\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e24.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e76.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e38.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e61.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e20.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e80.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e32.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e67.6%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEmpowerment\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e25.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e74.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e40.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e59.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e26.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e74.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e46.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e54.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOverall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e24.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e75.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e41.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e58.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e26.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e73.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e42.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e57.6%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003c/td\u003e\n\u003ctd\u003eGraphRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eGraphRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eGraphRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003eGraphRAG\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003eLightRAG\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eComprehensiveness\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e45.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e54.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e48.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e51.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e48.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e51.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e49.6%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eDiversity\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e22.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e77.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e40.8%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e59.2%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e26.4%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e73.6%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e36.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e64.0%\u003c/strong\u003e\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eEmpowerment\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e41.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e58.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e45.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e54.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e43.6%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e56.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e49.2%\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e\u003cstrong\u003eOverall\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e45.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e54.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e48.0%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e52.0%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e47.2%\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e52.8%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e\u003cstrong\u003e50.4%\u003c/strong\u003e\u003c/td\u003e\n\u003ctd\u003e49.6%\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eReproduce\u003c/h2\u003e\u003ca id=\"user-content-reproduce\" class=\"anchor\" aria-label=\"Permalink: Reproduce\" href=\"#reproduce\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAll the code can be found in the \u003ccode\u003e./reproduce\u003c/code\u003e directory.\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep-0 Extract Unique Contexts\u003c/h3\u003e\u003ca id=\"user-content-step-0-extract-unique-contexts\" class=\"anchor\" aria-label=\"Permalink: Step-0 Extract Unique Contexts\" href=\"#step-0-extract-unique-contexts\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFirst, we need to extract unique contexts in the datasets.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Code \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def extract_unique_contexts(input_directory, output_directory):\n\n os.makedirs(output_directory, exist_ok=True)\n\n jsonl_files = glob.glob(os.path.join(input_directory, '*.jsonl'))\n print(f\u0026quot;Found {len(jsonl_files)} JSONL files.\u0026quot;)\n\n for file_path in jsonl_files:\n filename = os.path.basename(file_path)\n name, ext = os.path.splitext(filename)\n output_filename = f\u0026quot;{name}_unique_contexts.json\u0026quot;\n output_path = os.path.join(output_directory, output_filename)\n\n unique_contexts_dict = {}\n\n print(f\u0026quot;Processing file: {filename}\u0026quot;)\n\n try:\n with open(file_path, 'r', encoding='utf-8') as infile:\n for line_number, line in enumerate(infile, start=1):\n line = line.strip()\n if not line:\n continue\n try:\n json_obj = json.loads(line)\n context = json_obj.get('context')\n if context and context not in unique_contexts_dict:\n unique_contexts_dict[context] = None\n except json.JSONDecodeError as e:\n print(f\u0026quot;JSON decoding error in file {filename} at line {line_number}: {e}\u0026quot;)\n except FileNotFoundError:\n print(f\u0026quot;File not found: {filename}\u0026quot;)\n continue\n except Exception as e:\n print(f\u0026quot;An error occurred while processing file {filename}: {e}\u0026quot;)\n continue\n\n unique_contexts_list = list(unique_contexts_dict.keys())\n print(f\u0026quot;There are {len(unique_contexts_list)} unique `context` entries in the file {filename}.\u0026quot;)\n\n try:\n with open(output_path, 'w', encoding='utf-8') as outfile:\n json.dump(unique_contexts_list, outfile, ensure_ascii=False, indent=4)\n print(f\u0026quot;Unique `context` entries have been saved to: {output_filename}\u0026quot;)\n except Exception as e:\n print(f\u0026quot;An error occurred while saving to the file {output_filename}: {e}\u0026quot;)\n\n print(\u0026quot;All files have been processed.\u0026quot;)\n\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eextract_unique_contexts\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einput_directory\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eoutput_directory\u003c/span\u003e):\n\n \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003emakedirs\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eoutput_directory\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eexist_ok\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eTrue\u003c/span\u003e)\n\n \u003cspan class=\"pl-s1\"\u003ejsonl_files\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eglob\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eglob\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ejoin\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einput_directory\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'*.jsonl'\u003c/span\u003e))\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"Found \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ejsonl_files\u003c/span\u003e)\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e JSONL files.\"\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejsonl_files\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ebasename\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esplitext\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003eoutput_filename\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s\"\u003ef\"\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e_unique_contexts.json\"\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003eoutput_path\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eos\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003epath\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ejoin\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eoutput_directory\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eoutput_filename\u003c/span\u003e)\n\n \u003cspan class=\"pl-s1\"\u003eunique_contexts_dict\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e {}\n\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"Processing file: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003etry\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'r'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eencoding\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'utf-8'\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003einfile\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003efor\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eline_number\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eline\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eenumerate\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003einfile\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003estart\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003eline\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eline\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003estrip\u003c/span\u003e()\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eline\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003econtinue\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003etry\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003ejson_obj\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eloads\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eline\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003econtext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson_obj\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eget\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'context'\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econtext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003econtext\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u003cspan class=\"pl-c1\"\u003enot\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003ein\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eunique_contexts_dict\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003eunique_contexts_dict\u003c/span\u003e[\u003cspan class=\"pl-s1\"\u003econtext\u003c/span\u003e] \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eNone\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eJSONDecodeError\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"JSON decoding error in file \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e at line \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eline_number\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eFileNotFoundError\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"File not found: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003econtinue\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eException\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"An error occurred while processing file \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003econtinue\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003eunique_contexts_list\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-en\"\u003elist\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eunique_contexts_dict\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ekeys\u003c/span\u003e())\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"There are \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-en\"\u003elen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eunique_contexts_list\u003c/span\u003e)\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e unique `context` entries in the file \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003efilename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e.\"\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003etry\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eoutput_path\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'w'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eencoding\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'utf-8'\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eoutfile\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003ejson\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003edump\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eunique_contexts_list\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eoutfile\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eensure_ascii\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eFalse\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003eindent\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e4\u003c/span\u003e)\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"Unique `context` entries have been saved to: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eoutput_filename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eException\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"An error occurred while saving to the file \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eoutput_filename\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"All files have been processed.\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep-1 Insert Contexts\u003c/h3\u003e\u003ca id=\"user-content-step-1-insert-contexts\" class=\"anchor\" aria-label=\"Permalink: Step-1 Insert Contexts\" href=\"#step-1-insert-contexts\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor the extracted contexts, we insert them into the LightRAG system.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Code \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def insert_text(rag, file_path):\n with open(file_path, mode='r') as f:\n unique_contexts = json.load(f)\n\n retries = 0\n max_retries = 3\n while retries \u0026lt; max_retries:\n try:\n rag.insert(unique_contexts)\n break\n except Exception as e:\n retries += 1\n print(f\u0026quot;Insertion failed, retrying ({retries}/{max_retries}), error: {e}\u0026quot;)\n time.sleep(10)\n if retries == max_retries:\n print(\u0026quot;Insertion failed after exceeding the maximum number of retries\u0026quot;)\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003einsert_text\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003emode\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-s\"\u003e'r'\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003eunique_contexts\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ejson\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eload\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e)\n\n \u003cspan class=\"pl-s1\"\u003eretries\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003emax_retries\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e3\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003ewhile\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eretries\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e\u0026lt;\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emax_retries\u003c/span\u003e:\n \u003cspan class=\"pl-k\"\u003etry\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003erag\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003einsert\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eunique_contexts\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003ebreak\u003c/span\u003e\n \u003cspan class=\"pl-k\"\u003eexcept\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eException\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003eretries\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003ef\"Insertion failed, retrying (\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003eretries\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e/\u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003emax_retries\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e), error: \u003cspan class=\"pl-s1\"\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\u003cspan class=\"pl-s1\"\u003ee\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/span\u003e\"\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003etime\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003esleep\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e)\n \u003cspan class=\"pl-k\"\u003eif\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eretries\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e==\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003emax_retries\u003c/span\u003e:\n \u003cspan class=\"pl-en\"\u003eprint\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e\"Insertion failed after exceeding the maximum number of retries\"\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep-2 Generate Queries\u003c/h3\u003e\u003ca id=\"user-content-step-2-generate-queries\" class=\"anchor\" aria-label=\"Permalink: Step-2 Generate Queries\" href=\"#step-2-generate-queries\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eWe extract tokens from the first and the second half of each context in the dataset, then combine them as dataset descriptions to generate queries.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Code \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"tokenizer = GPT2Tokenizer.from_pretrained('gpt2')\n\ndef get_summary(context, tot_tokens=2000):\n tokens = tokenizer.tokenize(context)\n half_tokens = tot_tokens // 2\n\n start_tokens = tokens[1000:1000 + half_tokens]\n end_tokens = tokens[-(1000 + half_tokens):1000]\n\n summary_tokens = start_tokens + end_tokens\n summary = tokenizer.convert_tokens_to_string(summary_tokens)\n\n return summary\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003etokenizer\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eGPT2Tokenizer\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efrom_pretrained\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'gpt2'\u003c/span\u003e)\n\n\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eget_summary\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003econtext\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003etot_tokens\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e2000\u003c/span\u003e):\n \u003cspan class=\"pl-s1\"\u003etokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etokenizer\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003etokenize\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003econtext\u003c/span\u003e)\n \u003cspan class=\"pl-s1\"\u003ehalf_tokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etot_tokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e//\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n\n \u003cspan class=\"pl-s1\"\u003estart_tokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etokens\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e1000\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e1000\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehalf_tokens\u003c/span\u003e]\n \u003cspan class=\"pl-s1\"\u003eend_tokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etokens\u003c/span\u003e[\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e1000\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ehalf_tokens\u003c/span\u003e):\u003cspan class=\"pl-c1\"\u003e1000\u003c/span\u003e]\n\n \u003cspan class=\"pl-s1\"\u003esummary_tokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003estart_tokens\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e+\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eend_tokens\u003c/span\u003e\n \u003cspan class=\"pl-s1\"\u003esummary\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003etokenizer\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003econvert_tokens_to_string\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003esummary_tokens\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003esummary\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStep-3 Query\u003c/h3\u003e\u003ca id=\"user-content-step-3-query\" class=\"anchor\" aria-label=\"Permalink: Step-3 Query\" href=\"#step-3-query\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eFor the queries generated in Step-2, we will extract them and query LightRAG.\u003c/p\u003e\n\u003cdetails\u003e\n\u003csummary\u003e Code \u003c/summary\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"def extract_queries(file_path):\n with open(file_path, 'r') as f:\n data = f.read()\n\n data = data.replace('**', '')\n\n queries = re.findall(r'- Question \\d+: (.+)', data)\n\n return queries\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003edef\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eextract_queries\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e):\n \u003cspan class=\"pl-k\"\u003ewith\u003c/span\u003e \u003cspan class=\"pl-en\"\u003eopen\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003efile_path\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e'r'\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eas\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e:\n \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ef\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eread\u003c/span\u003e()\n\n \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003ereplace\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003e'**'\u003c/span\u003e, \u003cspan class=\"pl-s\"\u003e''\u003c/span\u003e)\n\n \u003cspan class=\"pl-s1\"\u003equeries\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ere\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003efindall\u003c/span\u003e(\u003cspan class=\"pl-s\"\u003er'- Question \\d+: (.+)'\u003c/span\u003e, \u003cspan class=\"pl-s1\"\u003edata\u003c/span\u003e)\n\n \u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003equeries\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003c/details\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eStar History\u003c/h2\u003e\u003ca id=\"user-content-star-history\" class=\"anchor\" aria-label=\"Permalink: Star History\" href=\"#star-history\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003ca href=\"https://star-history.com/#HKUDS/LightRAG\u0026amp;Date\" rel=\"nofollow\"\u003e\n \u003cthemed-picture data-catalyst-inline=\"true\"\u003e\u003cpicture\u003e\n \u003csource media=\"(prefers-color-scheme: dark)\" srcset=\"https://camo.githubusercontent.com/b6ed87f8202bd1ea192a0959cae29b291d27fefb1ee807d2997d987fb3027fd0/68747470733a2f2f6170692e737461722d686973746f72792e636f6d2f7376673f7265706f733d484b5544532f4c6967687452414726747970653d44617465267468656d653d6461726b\" data-canonical-src=\"https://api.star-history.com/svg?repos=HKUDS/LightRAG\u0026amp;type=Date\u0026amp;theme=dark\"\u003e\n \u003csource media=\"(prefers-color-scheme: light)\" srcset=\"https://camo.githubusercontent.com/a9fcbb38fe225c78351d5079194ad1c44d4336716eac78098aeb323afcd0be19/68747470733a2f2f6170692e737461722d686973746f72792e636f6d2f7376673f7265706f733d484b5544532f4c6967687452414726747970653d44617465\" data-canonical-src=\"https://api.star-history.com/svg?repos=HKUDS/LightRAG\u0026amp;type=Date\"\u003e\n \u003cimg alt=\"Star History Chart\" src=\"https://camo.githubusercontent.com/a9fcbb38fe225c78351d5079194ad1c44d4336716eac78098aeb323afcd0be19/68747470733a2f2f6170692e737461722d686973746f72792e636f6d2f7376673f7265706f733d484b5544532f4c6967687452414726747970653d44617465\" data-canonical-src=\"https://api.star-history.com/svg?repos=HKUDS/LightRAG\u0026amp;type=Date\"\u003e\n \u003c/picture\u003e\u003c/themed-picture\u003e\n\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eContribution\u003c/h2\u003e\u003ca id=\"user-content-contribution\" class=\"anchor\" aria-label=\"Permalink: Contribution\" href=\"#contribution\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eThank you to all our contributors!\u003c/p\u003e\n\u003ca href=\"https://github.com/HKUDS/LightRAG/graphs/contributors\"\u003e\n \u003cimg src=\"https://camo.githubusercontent.com/f6c0e619299f3b63fedc077c40d43ed35c6fa654914ec82a9369d36b40ef6349/68747470733a2f2f636f6e747269622e726f636b732f696d6167653f7265706f3d484b5544532f4c69676874524147\" data-canonical-src=\"https://contrib.rocks/image?repo=HKUDS/LightRAG\" style=\"max-width: 100%;\"\u003e\n\u003c/a\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e🌟Citation\u003c/h2\u003e\u003ca id=\"user-content-citation\" class=\"anchor\" aria-label=\"Permalink: 🌟Citation\" href=\"#citation\"\u003e\u003csvg class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-python notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"@article{guo2024lightrag,\ntitle={LightRAG: Simple and Fast Retrieval-Augmented Generation},\nauthor={Zirui Guo and Lianghao Xia and Yanhua Yu and Tu Ao and Chao Huang},\nyear={2024},\neprint={2410.05779},\narchivePrefix={arXiv},\nprimaryClass={cs.IR}\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-en\"\u003e@\u003cspan class=\"pl-s1\"\u003earticle\u003c/span\u003e{\u003cspan class=\"pl-s1\"\u003eguo2024lightrag\u003c/span\u003e,\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e\u003cspan class=\"pl-s1\"\u003etitle\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-v\"\u003eLightRAG\u003c/span\u003e: \u003cspan class=\"pl-v\"\u003eSimple\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eFast\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eRetrieval\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e-\u003c/span\u003e\u003cspan class=\"pl-v\"\u003eAugmented\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eGeneration\u003c/span\u003e},\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e\u003cspan class=\"pl-s1\"\u003eauthor\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-v\"\u003eZirui\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eGuo\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eLianghao\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eXia\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eYanhua\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eYu\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eTu\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eAo\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eand\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eChao\u003c/span\u003e \u003cspan class=\"pl-v\"\u003eHuang\u003c/span\u003e},\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e\u003cspan class=\"pl-s1\"\u003eyear\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-c1\"\u003e2024\u003c/span\u003e},\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e\u003cspan class=\"pl-s1\"\u003eeprint\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-c1\"\u003e2410.05779\u003c/span\u003e},\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e\u003cspan class=\"pl-s1\"\u003earchivePrefix\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-s1\"\u003earXiv\u003c/span\u003e},\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e\u003cspan class=\"pl-s1\"\u003eprimaryClass\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003e=\u003c/span\u003e{\u003cspan class=\"pl-s1\"\u003ecs\u003c/span\u003e.\u003cspan class=\"pl-c1\"\u003eIR\u003c/span\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-en\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cstrong\u003eThank you for your interest in our work!\u003c/strong\u003e\u003c/p\u003e\n\u003c/article\u003e","loaded":true,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":[{"level":2,"text":"🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation","anchor":"-lightrag-simple-and-fast-retrieval-augmented-generation","htmlText":"🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation"},{"level":2,"text":"Install","anchor":"install","htmlText":"Install"},{"level":2,"text":"Quick Start","anchor":"quick-start","htmlText":"Quick Start"},{"level":2,"text":"Query","anchor":"query","htmlText":"Query"},{"level":3,"text":"Query Param","anchor":"query-param","htmlText":"Query Param"},{"level":3,"text":"Overview","anchor":"overview","htmlText":"Overview"},{"level":3,"text":"Increasing context size","anchor":"increasing-context-size","htmlText":"Increasing context size"},{"level":4,"text":"Increasing the num_ctx parameter in Modelfile.","anchor":"increasing-the-num_ctx-parameter-in-modelfile","htmlText":"Increasing the num_ctx parameter in Modelfile."},{"level":4,"text":"Setup num_ctx via Ollama API.","anchor":"setup-num_ctx-via-ollama-api","htmlText":"Setup num_ctx via Ollama API."},{"level":4,"text":"Low RAM GPUs","anchor":"low-ram-gpus","htmlText":"Low RAM GPUs"},{"level":3,"text":"Example Usage","anchor":"example-usage","htmlText":"Example Usage"},{"level":4,"text":"For detailed documentation and examples, see:","anchor":"for-detailed-documentation-and-examples-see","htmlText":"For detailed documentation and examples, see:"},{"level":5,"text":"How It Works?","anchor":"how-it-works","htmlText":"How It Works?"},{"level":5,"text":"Usage Example","anchor":"usage-example","htmlText":"Usage Example"},{"level":2,"text":"Insert","anchor":"insert","htmlText":"Insert"},{"level":4,"text":"Basic Insert","anchor":"basic-insert","htmlText":"Basic Insert"},{"level":2,"text":"Storage","anchor":"storage","htmlText":"Storage"},{"level":2,"text":"Delete","anchor":"delete","htmlText":"Delete"},{"level":2,"text":"Edit Entities and Relations","anchor":"edit-entities-and-relations","htmlText":"Edit Entities and Relations"},{"level":4,"text":"Entity Operations","anchor":"entity-operations","htmlText":"Entity Operations"},{"level":4,"text":"Relation Operations","anchor":"relation-operations","htmlText":"Relation Operations"},{"level":2,"text":"Data Export Functions","anchor":"data-export-functions","htmlText":"Data Export Functions"},{"level":2,"text":"Overview","anchor":"overview-1","htmlText":"Overview"},{"level":2,"text":"Export Functions","anchor":"export-functions","htmlText":"Export Functions"},{"level":3,"text":"Basic Usage","anchor":"basic-usage","htmlText":"Basic Usage"},{"level":3,"text":"Different File Formats supported","anchor":"different-file-formats-supported","htmlText":"Different File Formats supported"},{"level":2,"text":"Additional Options","anchor":"additional-options","htmlText":"Additional Options"},{"level":2,"text":"Data Included in Export","anchor":"data-included-in-export","htmlText":"Data Included in Export"},{"level":2,"text":"Entity Merging","anchor":"entity-merging","htmlText":"Entity Merging"},{"level":2,"text":"Cache","anchor":"cache","htmlText":"Cache"},{"level":2,"text":"LightRAG init parameters","anchor":"lightrag-init-parameters","htmlText":"LightRAG init parameters"},{"level":2,"text":"Error Handling","anchor":"error-handling","htmlText":"Error Handling"},{"level":2,"text":"API","anchor":"api","htmlText":"API"},{"level":2,"text":"Graph Visualization","anchor":"graph-visualization","htmlText":"Graph Visualization"},{"level":2,"text":"Evaluation","anchor":"evaluation","htmlText":"Evaluation"},{"level":3,"text":"Dataset","anchor":"dataset","htmlText":"Dataset"},{"level":3,"text":"Generate Query","anchor":"generate-query","htmlText":"Generate Query"},{"level":3,"text":"Batch Eval","anchor":"batch-eval","htmlText":"Batch Eval"},{"level":3,"text":"Overall Performance Table","anchor":"overall-performance-table","htmlText":"Overall Performance Table"},{"level":2,"text":"Reproduce","anchor":"reproduce","htmlText":"Reproduce"},{"level":3,"text":"Step-0 Extract Unique Contexts","anchor":"step-0-extract-unique-contexts","htmlText":"Step-0 Extract Unique Contexts"},{"level":3,"text":"Step-1 Insert Contexts","anchor":"step-1-insert-contexts","htmlText":"Step-1 Insert Contexts"},{"level":3,"text":"Step-2 Generate Queries","anchor":"step-2-generate-queries","htmlText":"Step-2 Generate Queries"},{"level":3,"text":"Step-3 Query","anchor":"step-3-query","htmlText":"Step-3 Query"},{"level":2,"text":"Star History","anchor":"star-history","htmlText":"Star History"},{"level":2,"text":"Contribution","anchor":"contribution","htmlText":"Contribution"},{"level":2,"text":"🌟Citation","anchor":"citation","htmlText":"🌟Citation"}],"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FHKUDS%2FLightRAG"}},{"displayName":"LICENSE","repoName":"LightRAG","refName":"main","path":"LICENSE","preferredFileType":"license","tabName":"MIT","richText":null,"loaded":false,"timedOut":false,"errorMessage":null,"headerInfo":{"toc":null,"siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FHKUDS%2FLightRAG"}}],"overviewFilesProcessingTime":0}},"appPayload":{"helpUrl":"https://docs.github.com","findFileWorkerPath":"/assets-cdn/worker/find-file-worker-7d7eb7c71814.js","findInFileWorkerPath":"/assets-cdn/worker/find-in-file-worker-96e76d5fdb2c.js","githubDevUrl":null,"enabled_features":{"copilot_workspace":null,"code_nav_ui_events":false,"overview_shared_code_dropdown_button":false,"react_blob_overlay":false,"accessible_code_button":true,"github_models_repo_tab":false}}}}</script> <div data-target="react-partial.reactRoot"><style data-styled="true" data-styled-version="5.3.11">.iVEunk{margin-top:16px;margin-bottom:16px;}/*!sc*/ .jzuOtQ{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;}/*!sc*/ .bGojzy{margin-bottom:0;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;row-gap:16px;}/*!sc*/ .iNSVHo{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;padding-bottom:16px;padding-top:8px;}/*!sc*/ .bVgnfw{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;gap:8px;}/*!sc*/ @media screen and (max-width:320px){.bVgnfw{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .CEgMp{position:relative;}/*!sc*/ @media screen and (max-width:380px){.CEgMp .ref-selector-button-text-container{max-width:80px;}}/*!sc*/ @media screen and (max-width:320px){.CEgMp{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}.CEgMp .overview-ref-selector{width:100%;}.CEgMp .overview-ref-selector > span{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-pack:start;-webkit-justify-content:flex-start;-ms-flex-pack:start;justify-content:flex-start;}.CEgMp .overview-ref-selector > span > span[data-component="text"]{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}}/*!sc*/ .gMOVLe[data-size="medium"]{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:0;}/*!sc*/ .gMOVLe[data-size="medium"] svg{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .gMOVLe[data-size="medium"] > span{width:inherit;}/*!sc*/ .gUkoLg{-webkit-box-pack:center;-webkit-justify-content:center;-ms-flex-pack:center;justify-content:center;}/*!sc*/ .bZBlpz{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;}/*!sc*/ .lhTYNA{margin-right:4px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .ffLUq{font-size:14px;min-width:0;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}/*!sc*/ .bmcJak{min-width:0;}/*!sc*/ .fLXEGX{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1079px){.fLXEGX{display:none;}}/*!sc*/ .lmSMZJ[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));padding-left:4px;padding-right:4px;}/*!sc*/ .lmSMZJ[data-size="medium"] span[data-component="leadingVisual"]{margin-right:4px !important;}/*!sc*/ .dqfxud{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1080px){.dqfxud{display:none;}}/*!sc*/ @media screen and (max-width:543px){.dqfxud{display:none;}}/*!sc*/ .fGwBZA[data-size="medium"][data-no-visuals]{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));}/*!sc*/ .jxTzTd{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;padding-left:8px;gap:8px;}/*!sc*/ .gqqBXN{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;gap:8px;}/*!sc*/ @media screen and (max-width:543px){.gqqBXN{display:none;}}/*!sc*/ .dzXgxt{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (max-width:1011px){.dzXgxt{display:none;}}/*!sc*/ .iWFGlI{margin-left:8px;margin-right:8px;margin:0;}/*!sc*/ .vcvyP{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;min-width:160px;}/*!sc*/ .YUPas{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:1012px){.YUPas{display:none;}}/*!sc*/ .izFOf{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;}/*!sc*/ @media screen and (min-width:544px){.izFOf{display:none;}}/*!sc*/ .vIPPs{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;gap:16px;}/*!sc*/ .fdROMU{width:100%;border-collapse:separate;border-spacing:0;border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;table-layout:fixed;overflow:unset;}/*!sc*/ .jGKpsv{height:0px;line-height:0px;}/*!sc*/ .jGKpsv tr{height:0px;font-size:0px;}/*!sc*/ .jdgHnn{padding:16px;color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;text-align:left;height:40px;}/*!sc*/ .jdgHnn th{padding-left:16px;background-color:var(--bgColor-muted,var(--color-canvas-subtle,#f6f8fa));}/*!sc*/ .bQivRW{width:100%;border-top-left-radius:6px;}/*!sc*/ @media screen and (min-width:544px){.bQivRW{display:none;}}/*!sc*/ .ldkMIO{width:40%;border-top-left-radius:6px;}/*!sc*/ @media screen and (max-width:543px){.ldkMIO{display:none;}}/*!sc*/ .jMbWeI{text-align:right;padding-right:16px;width:136px;border-top-right-radius:6px;}/*!sc*/ .gpqjiB{color:var(--fgColor-muted,var(--color-fg-muted,#656d76));font-size:12px;height:40px;}/*!sc*/ .dzCJzi{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;-webkit-box-pack:justify;-webkit-justify-content:space-between;-ms-flex-pack:justify;justify-content:space-between;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;gap:8px;min-width:273px;padding:8px;}/*!sc*/ @media screen and (min-width:544px){.dzCJzi{-webkit-flex-wrap:nowrap;-ms-flex-wrap:nowrap;flex-wrap:nowrap;}}/*!sc*/ .eNCcrz{text-align:center;vertical-align:center;height:40px;border-top:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));}/*!sc*/ .bHTcCe{border-top:1px solid var(--borderColor-default,var(--color-border-default));cursor:pointer;}/*!sc*/ .csrIcr{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;gap:16px;}/*!sc*/ .bUQNHB{border:1px solid;border-color:var(--borderColor-default,var(--color-border-default,#d0d7de));border-radius:6px;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}/*!sc*/ @media screen and (max-width:543px){.bUQNHB{margin-left:-16px;margin-right:-16px;max-width:calc(100% + 32px);}}/*!sc*/ @media screen and (min-width:544px){.bUQNHB{max-width:100%;}}/*!sc*/ .jPdcfu{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;border-bottom:1px solid;border-bottom-color:var(--borderColor-default,var(--color-border-default,#d0d7de));-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-right:8px;position:-webkit-sticky;position:sticky;top:0;background-color:var(--bgColor-default,var(--color-canvas-default,#ffffff));z-index:1;border-top-left-radius:6px;border-top-right-radius:6px;}/*!sc*/ .iphEWz{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;border-bottom:none;max-width:100%;padding-left:8px;padding-right:8px;}/*!sc*/ .hUCRAk{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;}/*!sc*/ .cwoBXV[data-size="medium"]{color:var(--fgColor-muted,var(--color-fg-subtle,#6e7781));padding-left:8px;padding-right:8px;}/*!sc*/ .QkQOb{padding:32px;overflow:auto;}/*!sc*/ data-styled.g1[id="Box-sc-g0xbh4-0"]{content:"iVEunk,jzuOtQ,bGojzy,iNSVHo,bVgnfw,CEgMp,gMOVLe,gUkoLg,bZBlpz,lhTYNA,ffLUq,bmcJak,fLXEGX,lmSMZJ,dqfxud,fGwBZA,jxTzTd,gqqBXN,dzXgxt,iWFGlI,vcvyP,YUPas,izFOf,vIPPs,fdROMU,jGKpsv,jdgHnn,bQivRW,ldkMIO,jMbWeI,gpqjiB,dzCJzi,eNCcrz,bHTcCe,csrIcr,bUQNHB,jPdcfu,iphEWz,hUCRAk,cwoBXV,QkQOb,"}/*!sc*/ .brGdpi{position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;-webkit-clip:rect(0,0,0,0);clip:rect(0,0,0,0);white-space:nowrap;border-width:0;}/*!sc*/ data-styled.g6[id="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0"]{content:"brGdpi,"}/*!sc*/ .hWlpPn{position:relative;display:inline-block;}/*!sc*/ .hWlpPn::after{position:absolute;z-index:1000000;display:none;padding:0.5em 0.75em;font:normal normal 11px/1.5 -apple-system,BlinkMacSystemFont,"Segoe UI","Noto Sans",Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji";-webkit-font-smoothing:subpixel-antialiased;color:var(--tooltip-fgColor,var(--fgColor-onEmphasis,var(--color-fg-on-emphasis,#ffffff)));text-align:center;-webkit-text-decoration:none;text-decoration:none;text-shadow:none;text-transform:none;-webkit-letter-spacing:normal;-moz-letter-spacing:normal;-ms-letter-spacing:normal;letter-spacing:normal;word-wrap:break-word;white-space:pre;pointer-events:none;content:attr(aria-label);background:var(--tooltip-bgColor,var(--bgColor-emphasis,var(--color-neutral-emphasis-plus,#24292f)));border-radius:6px;opacity:0;}/*!sc*/ @-webkit-keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ @keyframes tooltip-appear{from{opacity:0;}to{opacity:1;}}/*!sc*/ .hWlpPn:hover::after,.hWlpPn:active::after,.hWlpPn:focus::after,.hWlpPn:focus-within::after{display:inline-block;-webkit-text-decoration:none;text-decoration:none;-webkit-animation-name:tooltip-appear;animation-name:tooltip-appear;-webkit-animation-duration:0.1s;animation-duration:0.1s;-webkit-animation-fill-mode:forwards;animation-fill-mode:forwards;-webkit-animation-timing-function:ease-in;animation-timing-function:ease-in;-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-no-delay:hover::after,.hWlpPn.tooltipped-no-delay:active::after,.hWlpPn.tooltipped-no-delay:focus::after,.hWlpPn.tooltipped-no-delay:focus-within::after{-webkit-animation-delay:0s;animation-delay:0s;}/*!sc*/ .hWlpPn.tooltipped-multiline:hover::after,.hWlpPn.tooltipped-multiline:active::after,.hWlpPn.tooltipped-multiline:focus::after,.hWlpPn.tooltipped-multiline:focus-within::after{display:table-cell;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-se::after,.hWlpPn.tooltipped-sw::after{top:100%;right:50%;margin-top:6px;}/*!sc*/ .hWlpPn.tooltipped-se::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-sw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-n::after,.hWlpPn.tooltipped-ne::after,.hWlpPn.tooltipped-nw::after{right:50%;bottom:100%;margin-bottom:6px;}/*!sc*/ .hWlpPn.tooltipped-ne::after{right:auto;left:50%;margin-left:-16px;}/*!sc*/ .hWlpPn.tooltipped-nw::after{margin-right:-16px;}/*!sc*/ .hWlpPn.tooltipped-s::after,.hWlpPn.tooltipped-n::after{-webkit-transform:translateX(50%);-ms-transform:translateX(50%);transform:translateX(50%);}/*!sc*/ .hWlpPn.tooltipped-w::after{right:100%;bottom:50%;margin-right:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-e::after{bottom:50%;left:100%;margin-left:6px;-webkit-transform:translateY(50%);-ms-transform:translateY(50%);transform:translateY(50%);}/*!sc*/ .hWlpPn.tooltipped-multiline::after{width:-webkit-max-content;width:-moz-max-content;width:max-content;max-width:250px;word-wrap:break-word;white-space:pre-line;border-collapse:separate;}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-s::after,.hWlpPn.tooltipped-multiline.tooltipped-n::after{right:auto;left:50%;-webkit-transform:translateX(-50%);-ms-transform:translateX(-50%);transform:translateX(-50%);}/*!sc*/ .hWlpPn.tooltipped-multiline.tooltipped-w::after,.hWlpPn.tooltipped-multiline.tooltipped-e::after{right:100%;}/*!sc*/ .hWlpPn.tooltipped-align-right-2::after{right:0;margin-right:0;}/*!sc*/ .hWlpPn.tooltipped-align-left-2::after{left:0;margin-left:0;}/*!sc*/ data-styled.g17[id="Tooltip__TooltipBase-sc-17tf59c-0"]{content:"hWlpPn,"}/*!sc*/ .liVpTx{display:inline-block;overflow:hidden;text-overflow:ellipsis;vertical-align:top;white-space:nowrap;max-width:125px;}/*!sc*/ data-styled.g19[id="Truncate__StyledTruncate-sc-23o1d2-0"]{content:"liVpTx,"}/*!sc*/ </style> <!-- --> <!-- --> <div class="Box-sc-g0xbh4-0 iVEunk"><div class="Box-sc-g0xbh4-0 jzuOtQ"><div class="Box-sc-g0xbh4-0 bGojzy"></div></div><div class="Box-sc-g0xbh4-0 iNSVHo"><div class="Box-sc-g0xbh4-0 bVgnfw"><div class="Box-sc-g0xbh4-0 CEgMp"><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="main branch" data-testid="anchor-button" class="Box-sc-g0xbh4-0 gMOVLe prc-Button-ButtonBase-c50BI overview-ref-selector width-full" data-loading="false" data-size="medium" data-variant="default" aria-describedby="branch-picker-repos-header-ref-selector-loading-announcement" id="branch-picker-repos-header-ref-selector"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x"><div class="Box-sc-g0xbh4-0 bZBlpz"><div class="Box-sc-g0xbh4-0 lhTYNA"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></div><div class="Box-sc-g0xbh4-0 ffLUq ref-selector-button-text-container"><span class="Box-sc-g0xbh4-0 bmcJak prc-Text-Text-0ima0"> <!-- -->main</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><button hidden="" data-hotkey-scope="read-only-cursor-text-area"></button></div><div class="Box-sc-g0xbh4-0 fLXEGX"><a style="--button-color:fg.muted" type="button" href="/HKUDS/LightRAG/branches" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rclab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Branches</span></span></a><a style="--button-color:fg.muted" type="button" href="/HKUDS/LightRAG/tags" class="Box-sc-g0xbh4-0 lmSMZJ prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rklab:-loading-announcement"><span data-component="buttonContent" class="Box-sc-g0xbh4-0 gUkoLg prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Tags</span></span></a></div><div class="Box-sc-g0xbh4-0 dqfxud"><a style="--button-color:fg.muted" type="button" aria-label="Go to Branches page" href="/HKUDS/LightRAG/branches" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Relab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></a><a style="--button-color:fg.muted" type="button" aria-label="Go to Tags page" href="/HKUDS/LightRAG/tags" class="Box-sc-g0xbh4-0 fGwBZA prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-describedby=":Rmlab:-loading-announcement"><svg aria-hidden="true" focusable="false" class="octicon octicon-tag" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path></svg></a></div></div><div class="Box-sc-g0xbh4-0 jxTzTd"><div class="Box-sc-g0xbh4-0 gqqBXN"><div class="Box-sc-g0xbh4-0 dzXgxt"><!--$--><div class="Box-sc-g0xbh4-0 iWFGlI"><span class="Box-sc-g0xbh4-0 vcvyP TextInput-wrapper prc-components-TextInputWrapper-i1ofR prc-components-TextInputBaseWrapper-ueK9q" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id=":R2j5ab:" aria-hidden="true"><svg aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellcheck="false" placeholder="Go to file" aria-describedby=":R2j5ab: :R2j5abH1:" data-component="input" class="prc-components-Input-Ic-y8" value=""/><span class="TextInput-icon" id=":R2j5abH1:" aria-hidden="true"></span></span></div><!--/$--></div><div class="Box-sc-g0xbh4-0 YUPas"><button type="button" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":Rr5ab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="text" class="prc-Button-Label-pTQ3x">Go to file</span></span></button></div><div class="react-directory-add-file-icon"></div><div class="react-directory-remove-file-icon"></div></div><button type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="primary" aria-describedby=":R55ab:-loading-announcement" id=":R55ab:"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="hide-sm" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x">Code</span><span data-component="trailingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="Box-sc-g0xbh4-0 izFOf"><button data-component="IconButton" type="button" aria-label="Open more actions menu" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-c50BI prc-Button-IconButton-szpyj" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-describedby=":R75ab:-loading-announcement" id=":R75ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button></div></div></div><div class="Box-sc-g0xbh4-0 vIPPs"><div data-hpc="true"><button hidden="" data-testid="focus-next-element-button" data-hotkey="j"></button><button hidden="" data-testid="focus-previous-element-button" data-hotkey="k"></button><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading" id="folders-and-files">Folders and files</h2><table aria-labelledby="folders-and-files" class="Box-sc-g0xbh4-0 fdROMU"><thead class="Box-sc-g0xbh4-0 jGKpsv"><tr class="Box-sc-g0xbh4-0 jdgHnn"><th colSpan="2" class="Box-sc-g0xbh4-0 bQivRW"><span class="text-bold">Name</span></th><th colSpan="1" class="Box-sc-g0xbh4-0 ldkMIO"><span class="text-bold">Name</span></th><th class="hide-sm"><div title="Last commit message" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit message</span></div></th><th colSpan="1" class="Box-sc-g0xbh4-0 jMbWeI"><div title="Last commit date" class="Truncate__StyledTruncate-sc-23o1d2-0 liVpTx width-fit"><span class="text-bold">Last commit date</span></div></th></tr></thead><tbody><tr class="Box-sc-g0xbh4-0 gpqjiB"><td colSpan="3" class="bgColor-muted p-1 rounded-top-2"><div class="Box-sc-g0xbh4-0 dzCJzi"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone--vW4Cq prc-Heading-Heading-6CmGO" data-testid="screen-reader-heading">History</h2><a href="/HKUDS/LightRAG/commits/main/" class="prc-Button-ButtonBase-c50BI d-none d-lg-flex LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":Raqj8pab:-loading-announcement"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-pTQ3x"><span class="fgColor-default">2,655 Commits</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><span role="tooltip" aria-label="2,655 Commits" id="history-icon-button-tooltip" class="Tooltip__TooltipBase-sc-17tf59c-0 hWlpPn tooltipped-n"><a href="/HKUDS/LightRAG/commits/main/" class="prc-Button-ButtonBase-c50BI LinkButton-module__code-view-link-button--xvCGA flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby=":R1iqj8pab:-loading-announcement history-icon-button-tooltip"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-HKbr-"><span data-component="leadingVisual" class="prc-Button-Visual-2epfX prc-Button-VisualWrap-Db-eB"><svg aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a></span></div></div></div></div></td></tr><tr class="react-directory-row undefined" id="folder-row-0"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/.github">.github</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".github" aria-label=".github, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/.github">.github</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-1"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="assets" aria-label="assets, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/assets">assets</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="assets" aria-label="assets, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/assets">assets</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-2"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="docs" aria-label="docs, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/docs">docs</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="docs" aria-label="docs, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/docs">docs</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-3"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="examples" aria-label="examples, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/examples">examples</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="examples" aria-label="examples, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/examples">examples</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-4"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag" aria-label="lightrag, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/lightrag">lightrag</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag" aria-label="lightrag, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/lightrag">lightrag</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-5"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag_webui" aria-label="lightrag_webui, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/lightrag_webui">lightrag_webui</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag_webui" aria-label="lightrag_webui, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/lightrag_webui">lightrag_webui</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-6"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="reproduce" aria-label="reproduce, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/reproduce">reproduce</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="reproduce" aria-label="reproduce, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/reproduce">reproduce</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-7"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tests" aria-label="tests, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/tests">tests</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="icon-directory" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M1.75 1A1.75 1.75 0 0 0 0 2.75v10.5C0 14.216.784 15 1.75 15h12.5A1.75 1.75 0 0 0 16 13.25v-8.5A1.75 1.75 0 0 0 14.25 3H7.5a.25.25 0 0 1-.2-.1l-.9-1.2C6.07 1.26 5.55 1 5 1H1.75Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="tests" aria-label="tests, (Directory)" class="Link--primary" href="/HKUDS/LightRAG/tree/main/tests">tests</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-8"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".dockerignore" aria-label=".dockerignore, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.dockerignore">.dockerignore</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".dockerignore" aria-label=".dockerignore, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.dockerignore">.dockerignore</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row undefined" id="folder-row-9"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitattributes" aria-label=".gitattributes, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.gitattributes">.gitattributes</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitattributes" aria-label=".gitattributes, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.gitattributes">.gitattributes</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-10"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".gitignore" aria-label=".gitignore, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.gitignore">.gitignore</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-11"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".pre-commit-config.yaml" aria-label=".pre-commit-config.yaml, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.pre-commit-config.yaml">.pre-commit-config.yaml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title=".pre-commit-config.yaml" aria-label=".pre-commit-config.yaml, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/.pre-commit-config.yaml">.pre-commit-config.yaml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-12"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Dockerfile" aria-label="Dockerfile, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/Dockerfile">Dockerfile</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="Dockerfile" aria-label="Dockerfile, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/Dockerfile">Dockerfile</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-13"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="LICENSE" aria-label="LICENSE, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/LICENSE">LICENSE</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-14"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="MANIFEST.in" aria-label="MANIFEST.in, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/MANIFEST.in">MANIFEST.in</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="MANIFEST.in" aria-label="MANIFEST.in, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/MANIFEST.in">MANIFEST.in</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-15"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README-zh.md" aria-label="README-zh.md, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/README-zh.md">README-zh.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README-zh.md" aria-label="README-zh.md, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/README-zh.md">README-zh.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-16"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="README.md" aria-label="README.md, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/README.md">README.md</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-17"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="config.ini.example" aria-label="config.ini.example, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/config.ini.example">config.ini.example</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="config.ini.example" aria-label="config.ini.example, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/config.ini.example">config.ini.example</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-18"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="docker-compose.yml" aria-label="docker-compose.yml, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/docker-compose.yml">docker-compose.yml</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="docker-compose.yml" aria-label="docker-compose.yml, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/docker-compose.yml">docker-compose.yml</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-19"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="env.example" aria-label="env.example, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/env.example">env.example</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="env.example" aria-label="env.example, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/env.example">env.example</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-20"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag-api" aria-label="lightrag-api, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/lightrag-api">lightrag-api</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag-api" aria-label="lightrag-api, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/lightrag-api">lightrag-api</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-21"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag.service.example" aria-label="lightrag.service.example, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/lightrag.service.example">lightrag.service.example</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="lightrag.service.example" aria-label="lightrag.service.example, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/lightrag.service.example">lightrag.service.example</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-22"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="requirements.txt" aria-label="requirements.txt, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/requirements.txt">requirements.txt</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="requirements.txt" aria-label="requirements.txt, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/requirements.txt">requirements.txt</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="react-directory-row truncate-for-mobile" id="folder-row-23"><td class="react-directory-row-name-cell-small-screen" colSpan="2"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="setup.py" aria-label="setup.py, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/setup.py">setup.py</a></div></div></div></div></td><td class="react-directory-row-name-cell-large-screen" colSpan="1"><div class="react-directory-filename-column"><svg aria-hidden="true" focusable="false" class="color-fg-muted" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M2 1.75C2 .784 2.784 0 3.75 0h6.586c.464 0 .909.184 1.237.513l2.914 2.914c.329.328.513.773.513 1.237v9.586A1.75 1.75 0 0 1 13.25 16h-9.5A1.75 1.75 0 0 1 2 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h9.5a.25.25 0 0 0 .25-.25V6h-2.75A1.75 1.75 0 0 1 9 4.25V1.5Zm6.75.062V4.25c0 .138.112.25.25.25h2.688l-.011-.013-2.914-2.914-.013-.011Z"></path></svg><div class="overflow-hidden"><div class="react-directory-filename-cell"><div class="react-directory-truncate"><a title="setup.py" aria-label="setup.py, (File)" class="Link--primary" href="/HKUDS/LightRAG/blob/main/setup.py">setup.py</a></div></div></div></div></td><td class="react-directory-row-commit-cell"><div class="Skeleton Skeleton--text"> </div></td><td><div class="Skeleton Skeleton--text"> </div></td></tr><tr class="Box-sc-g0xbh4-0 eNCcrz show-for-mobile" data-testid="view-all-files-row"><td colSpan="3" class="Box-sc-g0xbh4-0 bHTcCe"><div><button class="prc-Link-Link-85e08">View all files</button></div></td></tr></tbody></table></div><div class="Box-sc-g0xbh4-0 csrIcr"><div class="Box-sc-g0xbh4-0 bUQNHB"><div itemscope="" itemType="https://schema.org/abstract" class="Box-sc-g0xbh4-0 jPdcfu"><h2 class="_VisuallyHidden__VisuallyHidden-sc-11jhm7a-0 brGdpi">Repository files navigation</h2><nav class="Box-sc-g0xbh4-0 iphEWz prc-components-UnderlineWrapper-oOh5J" aria-label="Repository files"><ul class="prc-components-UnderlineItemList-b23Hf" role="list"><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#" aria-current="page"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-book" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path></svg></span><span data-component="text" data-content="README">README</span></a></li><li class="Box-sc-g0xbh4-0 hUCRAk"><a class="prc-components-UnderlineItem-lJsg-" href="#"><span data-component="icon"><svg aria-hidden="true" focusable="false" class="octicon octicon-law" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path></svg></span><span data-component="text" data-content="MIT license">MIT license</span></a></li></ul></nav><button style="--button-color:fg.subtle" type="button" aria-label="Outline" aria-haspopup="true" aria-expanded="false" tabindex="0" class="Box-sc-g0xbh4-0 cwoBXV prc-Button-ButtonBase-c50BI" data-loading="false" data-size="medium" data-variant="invisible" aria-describedby=":Rr9ab:-loading-announcement" id=":Rr9ab:"><svg aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" style="display:inline-block;user-select:none;vertical-align:text-bottom;overflow:visible"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button></div><div class="Box-sc-g0xbh4-0 QkQOb js-snippet-clipboard-copy-unpositioned undefined" data-hpc="true"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation</h2><a id="user-content--lightrag-simple-and-fast-retrieval-augmented-generation" class="anchor" aria-label="Permalink: 🚀 LightRAG: Simple and Fast Retrieval-Augmented Generation" href="#-lightrag-simple-and-fast-retrieval-augmented-generation"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div align="center" dir="auto"> <markdown-accessiblity-table><table border="0" width="100%"> <tbody><tr> <td width="100" align="center"> <a target="_blank" rel="noopener noreferrer" href="/HKUDS/LightRAG/blob/main/assets/logo.png"><img src="/HKUDS/LightRAG/raw/main/assets/logo.png" width="80" height="80" alt="lightrag" style="max-width: 100%;"></a> </td> <td> <div dir="auto"> <p dir="auto"> <a href="https://lightrag.github.io" rel="nofollow"><img src="https://camo.githubusercontent.com/bf3933961c03cc78ffde90f26e4a3376b69d4efd5b7c54936d89419b6085c055/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f50726f6a6563742d506167652d477265656e" data-canonical-src="https://img.shields.io/badge/Project-Page-Green" style="max-width: 100%;"></a> <a href="https://youtu.be/oageL-1I0GE" rel="nofollow"><img src="https://camo.githubusercontent.com/9c0743f0b8d19de24e97aea157e76b9b4d48a5e7cd96a2378fcd8c0dd9e0a820/68747470733a2f2f6261646765732e616c65656e34322e636f6d2f7372632f796f75747562652e737667" data-canonical-src="https://badges.aleen42.com/src/youtube.svg" style="max-width: 100%;"></a> <a href="https://arxiv.org/abs/2410.05779" rel="nofollow"><img src="https://camo.githubusercontent.com/75124114ae539f960521098bc31b590246873173eef5b4329622b55ceda6788b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f61725869762d323431302e30353737392d623331623162" data-canonical-src="https://img.shields.io/badge/arXiv-2410.05779-b31b1b" style="max-width: 100%;"></a> <a href="https://learnopencv.com/lightrag" rel="nofollow"><img src="https://camo.githubusercontent.com/5271c193c9d3c73535c61967f3d5cf5a1a06dfb74d64ba68899c72c4430dffb7/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6561726e4f70656e43562d626c7565" data-canonical-src="https://img.shields.io/badge/LearnOpenCV-blue" style="max-width: 100%;"></a> </p> <p dir="auto"> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/abd492053c71c0ae6bd17e96559e53590c59850bb28609652eb4f8ac240b9a22/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f686b7564732f6c696768747261673f636f6c6f723d677265656e267374796c653d736f6369616c"><img src="https://camo.githubusercontent.com/abd492053c71c0ae6bd17e96559e53590c59850bb28609652eb4f8ac240b9a22/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f686b7564732f6c696768747261673f636f6c6f723d677265656e267374796c653d736f6369616c" data-canonical-src="https://img.shields.io/github/stars/hkuds/lightrag?color=green&style=social" style="max-width: 100%;"></a> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/1285b1059a69a51878dfb49eb0fbac318730acd72b2f04f6b6e807e5f40be74d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31302d626c7565"><img src="https://camo.githubusercontent.com/1285b1059a69a51878dfb49eb0fbac318730acd72b2f04f6b6e807e5f40be74d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31302d626c7565" data-canonical-src="https://img.shields.io/badge/python-3.10-blue" style="max-width: 100%;"></a> <a href="https://pypi.org/project/lightrag-hku/" rel="nofollow"><img src="https://camo.githubusercontent.com/4094352f409b6b46f908f41ec227ff914ae1068c8ee9ab4149b82a67987f3bfa/68747470733a2f2f696d672e736869656c64732e696f2f707970692f762f6c696768747261672d686b752e737667" data-canonical-src="https://img.shields.io/pypi/v/lightrag-hku.svg" style="max-width: 100%;"></a> <a href="https://pepy.tech/project/lightrag-hku" rel="nofollow"><img src="https://camo.githubusercontent.com/9070137fb166fcab2fe65a568b0a54744a67128e485b60b810c93ca11eb8300f/68747470733a2f2f7374617469632e706570792e746563682f62616467652f6c696768747261672d686b752f6d6f6e7468" data-canonical-src="https://static.pepy.tech/badge/lightrag-hku/month" style="max-width: 100%;"></a> </p> <p dir="auto"> <a href="https://discord.gg/yF2MmDJyGJ" rel="nofollow"><img src="https://camo.githubusercontent.com/9a5dd24429c18847a68aea872315cdcbec0eae9481e42df36fa407ce2bdfd8f7/68747470733a2f2f646973636f72646170702e636f6d2f6170692f6775696c64732f313239363334383039383030333733343632392f7769646765742e706e673f7374796c653d736869656c64" data-canonical-src="https://discordapp.com/api/guilds/1296348098003734629/widget.png?style=shield" style="max-width: 100%;"></a> <a href="https://github.com/HKUDS/LightRAG/issues/285" data-hovercard-type="issue" data-hovercard-url="/HKUDS/LightRAG/issues/285/hovercard"><img src="https://camo.githubusercontent.com/609a2c89a6c6be9dea60f008e7b9301bd7b0b74493a70bd1f27aad4cbd5ff529/68747470733a2f2f696d672e736869656c64732e696f2f62616467652fe7bea4e8818a2d7765636861742d677265656e" data-canonical-src="https://img.shields.io/badge/群聊-wechat-green" style="max-width: 100%;"></a> </p> </div> </td> </tr> </tbody></table></markdown-accessiblity-table> <div align="center" dir="auto"> This repository hosts the code of LightRAG. The structure of this code is based on <a href="https://github.com/gusye1234/nano-graphrag">nano-graphrag</a>. <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/054a656498dc5e6890e4ec2ec7e0444fa754051d652642e1bf8ad529762c7012/68747470733a2f2f692d626c6f672e6373646e696d672e636e2f6469726563742f62326161663633343135316234373036383932363933666662343364393039332e706e67"><img src="https://camo.githubusercontent.com/054a656498dc5e6890e4ec2ec7e0444fa754051d652642e1bf8ad529762c7012/68747470733a2f2f692d626c6f672e6373646e696d672e636e2f6469726563742f62326161663633343135316234373036383932363933666662343364393039332e706e67" width="800" alt="LightRAG Diagram" data-canonical-src="https://i-blog.csdnimg.cn/direct/b2aaf634151b4706892693ffb43d9093.png" style="max-width: 100%;"></a> </div> </div> <br> <details> <summary> 🎉 News </summary> <ul class="contains-task-list"> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2025.03.18]🎯📢LightRAG now supports citation functionality.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2025.02.05]🎯📢Our team has released <a href="https://github.com/HKUDS/VideoRAG">VideoRAG</a> understanding extremely long-context videos.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2025.01.13]🎯📢Our team has released <a href="https://github.com/HKUDS/MiniRAG">MiniRAG</a> making RAG simpler with small models.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2025.01.06]🎯📢You can now <a href="#using-postgresql-for-storage">use PostgreSQL for Storage</a>.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.12.31]🎯📢LightRAG now supports <a href="https://github.com/HKUDS/LightRAG?tab=readme-ov-file#delete">deletion by document ID</a>.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.11.25]🎯📢LightRAG now supports seamless integration of <a href="https://github.com/HKUDS/LightRAG?tab=readme-ov-file#insert-custom-kg">custom knowledge graphs</a>, empowering users to enhance the system with their own domain expertise.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.11.19]🎯📢A comprehensive guide to LightRAG is now available on <a href="https://learnopencv.com/lightrag" rel="nofollow">LearnOpenCV</a>. Many thanks to the blog author.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.11.12]🎯📢LightRAG now supports <a href="https://github.com/HKUDS/LightRAG/blob/main/examples/lightrag_oracle_demo.py">Oracle Database 23ai for all storage types (KV, vector, and graph)</a>.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.11.11]🎯📢LightRAG now supports <a href="https://github.com/HKUDS/LightRAG?tab=readme-ov-file#delete">deleting entities by their names</a>.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.11.09]🎯📢Introducing the <a href="https://lightrag-gui.streamlit.app" rel="nofollow">LightRAG Gui</a>, which allows you to insert, query, visualize, and download LightRAG knowledge.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.11.04]🎯📢You can now <a href="https://github.com/HKUDS/LightRAG?tab=readme-ov-file#using-neo4j-for-storage">use Neo4J for Storage</a>.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.10.29]🎯📢LightRAG now supports multiple file types, including PDF, DOC, PPT, and CSV via <code>textract</code>.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.10.20]🎯📢We've added a new feature to LightRAG: Graph Visualization.</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.10.18]🎯📢We've added a link to a <a href="https://youtu.be/oageL-1I0GE" rel="nofollow">LightRAG Introduction Video</a>. Thanks to the author!</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.10.17]🎯📢We have created a <a href="https://discord.gg/yF2MmDJyGJ" rel="nofollow">Discord channel</a>! Welcome to join for sharing and discussions! 🎉🎉</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.10.16]🎯📢LightRAG now supports <a href="https://github.com/HKUDS/LightRAG?tab=readme-ov-file#quick-start">Ollama models</a>!</li> <li class="task-list-item"><input type="checkbox" id="" disabled="" class="task-list-item-checkbox" checked=""> [2024.10.15]🎯📢LightRAG now supports <a href="https://github.com/HKUDS/LightRAG?tab=readme-ov-file#quick-start">Hugging Face models</a>!</li> </ul> </details> <details> <summary> Algorithm Flowchart </summary> <p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/fa79bd2d317163583e8acdeb7c28b16d10652cfcd92c4bab85cc00954ffb1888/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d566563746f7244422d4a736f6e2d4b562d53746f72652d496e646578696e672d466c6f7763686172742d7363616c65642e6a7067"><img src="https://camo.githubusercontent.com/fa79bd2d317163583e8acdeb7c28b16d10652cfcd92c4bab85cc00954ffb1888/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d566563746f7244422d4a736f6e2d4b562d53746f72652d496e646578696e672d466c6f7763686172742d7363616c65642e6a7067" alt="LightRAG Indexing Flowchart" data-canonical-src="https://learnopencv.com/wp-content/uploads/2024/11/LightRAG-VectorDB-Json-KV-Store-Indexing-Flowchart-scaled.jpg" style="max-width: 100%;"></a> <em>Figure 1: LightRAG Indexing Flowchart - Img Caption : <a href="https://learnopencv.com/lightrag/" rel="nofollow">Source</a></em> <a target="_blank" rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/32d67fdd28040d24756373fc674cae593b9961c2ef84fb8a0a8104f33735ab2a/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d5175657279696e672d466c6f7763686172742d4475616c2d4c6576656c2d52657472696576616c2d47656e65726174696f6e2d4b6e6f776c656467652d4772617068732d7363616c65642e6a7067"><img src="https://camo.githubusercontent.com/32d67fdd28040d24756373fc674cae593b9961c2ef84fb8a0a8104f33735ab2a/68747470733a2f2f6c6561726e6f70656e63762e636f6d2f77702d636f6e74656e742f75706c6f6164732f323032342f31312f4c696768745241472d5175657279696e672d466c6f7763686172742d4475616c2d4c6576656c2d52657472696576616c2d47656e65726174696f6e2d4b6e6f776c656467652d4772617068732d7363616c65642e6a7067" alt="LightRAG Retrieval and Querying Flowchart" data-canonical-src="https://learnopencv.com/wp-content/uploads/2024/11/LightRAG-Querying-Flowchart-Dual-Level-Retrieval-Generation-Knowledge-Graphs-scaled.jpg" style="max-width: 100%;"></a> <em>Figure 2: LightRAG Retrieval and Querying Flowchart - Img Caption : <a href="https://learnopencv.com/lightrag/" rel="nofollow">Source</a></em></p> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Install</h2><a id="user-content-install" class="anchor" aria-label="Permalink: Install" href="#install"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li>Install from source (Recommend)</li> </ul> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="cd LightRAG pip install -e ."><pre><span class="pl-c1">cd</span> LightRAG pip install -e <span class="pl-c1">.</span></pre></div> <ul dir="auto"> <li>Install from PyPI</li> </ul> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="pip install lightrag-hku"><pre>pip install lightrag-hku</pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Quick Start</h2><a id="user-content-quick-start" class="anchor" aria-label="Permalink: Quick Start" href="#quick-start"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="https://www.youtube.com/watch?v=g21royNJ4fw" rel="nofollow">Video demo</a> of running LightRAG locally.</li> <li>All the code can be found in the <code>examples</code>.</li> <li>Set OpenAI API key in environment if using OpenAI models: <code>export OPENAI_API_KEY="sk-...".</code></li> <li>Download the demo text "A Christmas Carol by Charles Dickens":</li> </ul> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt > ./book.txt"><pre>curl https://raw.githubusercontent.com/gusye1234/nano-graphrag/main/tests/mock_data.txt <span class="pl-k">></span> ./book.txt</pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Query</h2><a id="user-content-query" class="anchor" aria-label="Permalink: Query" href="#query"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Use the below Python snippet (in a script) to initialize LightRAG and perform queries:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import os import asyncio from lightrag import LightRAG, QueryParam from lightrag.llm.openai import gpt_4o_mini_complete, gpt_4o_complete, openai_embed from lightrag.kg.shared_storage import initialize_pipeline_status from lightrag.utils import setup_logger setup_logger("lightrag", level="INFO") async def initialize_rag(): rag = LightRAG( working_dir="your/path", embedding_func=openai_embed, llm_model_func=gpt_4o_mini_complete ) await rag.initialize_storages() await initialize_pipeline_status() return rag def main(): # Initialize RAG instance rag = asyncio.run(initialize_rag()) # Insert text rag.insert("Your text") # Perform naive search mode="naive" # Perform local search mode="local" # Perform global search mode="global" # Perform hybrid search mode="hybrid" # Mix mode Integrates knowledge graph and vector retrieval. mode="mix" rag.query( "What are the top themes in this story?", param=QueryParam(mode=mode) ) if __name__ == "__main__": main()"><pre><span class="pl-k">import</span> <span class="pl-s1">os</span> <span class="pl-k">import</span> <span class="pl-s1">asyncio</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span> <span class="pl-k">import</span> <span class="pl-v">LightRAG</span>, <span class="pl-v">QueryParam</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">llm</span>.<span class="pl-s1">openai</span> <span class="pl-k">import</span> <span class="pl-s1">gpt_4o_mini_complete</span>, <span class="pl-s1">gpt_4o_complete</span>, <span class="pl-s1">openai_embed</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">kg</span>.<span class="pl-s1">shared_storage</span> <span class="pl-k">import</span> <span class="pl-s1">initialize_pipeline_status</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">utils</span> <span class="pl-k">import</span> <span class="pl-s1">setup_logger</span> <span class="pl-en">setup_logger</span>(<span class="pl-s">"lightrag"</span>, <span class="pl-s1">level</span><span class="pl-c1">=</span><span class="pl-s">"INFO"</span>) <span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">initialize_rag</span>(): <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-s">"your/path"</span>, <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-s1">openai_embed</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">gpt_4o_mini_complete</span> ) <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">initialize_storages</span>() <span class="pl-k">await</span> <span class="pl-en">initialize_pipeline_status</span>() <span class="pl-k">return</span> <span class="pl-s1">rag</span> <span class="pl-k">def</span> <span class="pl-en">main</span>(): <span class="pl-c"># Initialize RAG instance</span> <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-s1">asyncio</span>.<span class="pl-c1">run</span>(<span class="pl-en">initialize_rag</span>()) <span class="pl-c"># Insert text</span> <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s">"Your text"</span>) <span class="pl-c"># Perform naive search</span> <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"naive"</span> <span class="pl-c"># Perform local search</span> <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"local"</span> <span class="pl-c"># Perform global search</span> <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"global"</span> <span class="pl-c"># Perform hybrid search</span> <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"hybrid"</span> <span class="pl-c"># Mix mode Integrates knowledge graph and vector retrieval.</span> <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"mix"</span> <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>( <span class="pl-s">"What are the top themes in this story?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-en">QueryParam</span>(<span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s1">mode</span>) ) <span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">"__main__"</span>: <span class="pl-en">main</span>()</pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Query Param</h3><a id="user-content-query-param" class="anchor" aria-label="Permalink: Query Param" href="#query-param"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="class QueryParam: mode: Literal["local", "global", "hybrid", "naive", "mix"] = "global" """Specifies the retrieval mode: - "local": Focuses on context-dependent information. - "global": Utilizes global knowledge. - "hybrid": Combines local and global retrieval methods. - "naive": Performs a basic search without advanced techniques. - "mix": Integrates knowledge graph and vector retrieval. Mix mode combines knowledge graph and vector search: - Uses both structured (KG) and unstructured (vector) information - Provides comprehensive answers by analyzing relationships and context - Supports image content through HTML img tags - Allows control over retrieval depth via top_k parameter """ only_need_context: bool = False """If True, only returns the retrieved context without generating a response.""" response_type: str = "Multiple Paragraphs" """Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'.""" top_k: int = 60 """Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode.""" max_token_for_text_unit: int = 4000 """Maximum number of tokens allowed for each retrieved text chunk.""" max_token_for_global_context: int = 4000 """Maximum number of tokens allocated for relationship descriptions in global retrieval.""" max_token_for_local_context: int = 4000 """Maximum number of tokens allocated for entity descriptions in local retrieval.""" ids: list[str] | None = None # ONLY SUPPORTED FOR PG VECTOR DBs """List of ids to filter the RAG.""" ..."><pre><span class="pl-k">class</span> <span class="pl-v">QueryParam</span>: <span class="pl-s1">mode</span>: <span class="pl-v">Literal</span>[<span class="pl-s">"local"</span>, <span class="pl-s">"global"</span>, <span class="pl-s">"hybrid"</span>, <span class="pl-s">"naive"</span>, <span class="pl-s">"mix"</span>] <span class="pl-c1">=</span> <span class="pl-s">"global"</span> <span class="pl-s">"""Specifies the retrieval mode:</span> <span class="pl-s"> - "local": Focuses on context-dependent information.</span> <span class="pl-s"> - "global": Utilizes global knowledge.</span> <span class="pl-s"> - "hybrid": Combines local and global retrieval methods.</span> <span class="pl-s"> - "naive": Performs a basic search without advanced techniques.</span> <span class="pl-s"> - "mix": Integrates knowledge graph and vector retrieval. Mix mode combines knowledge graph and vector search:</span> <span class="pl-s"> - Uses both structured (KG) and unstructured (vector) information</span> <span class="pl-s"> - Provides comprehensive answers by analyzing relationships and context</span> <span class="pl-s"> - Supports image content through HTML img tags</span> <span class="pl-s"> - Allows control over retrieval depth via top_k parameter</span> <span class="pl-s"> """</span> <span class="pl-s1">only_need_context</span>: <span class="pl-smi">bool</span> <span class="pl-c1">=</span> <span class="pl-c1">False</span> <span class="pl-s">"""If True, only returns the retrieved context without generating a response."""</span> <span class="pl-s1">response_type</span>: <span class="pl-smi">str</span> <span class="pl-c1">=</span> <span class="pl-s">"Multiple Paragraphs"</span> <span class="pl-s">"""Defines the response format. Examples: 'Multiple Paragraphs', 'Single Paragraph', 'Bullet Points'."""</span> <span class="pl-s1">top_k</span>: <span class="pl-smi">int</span> <span class="pl-c1">=</span> <span class="pl-c1">60</span> <span class="pl-s">"""Number of top items to retrieve. Represents entities in 'local' mode and relationships in 'global' mode."""</span> <span class="pl-s1">max_token_for_text_unit</span>: <span class="pl-smi">int</span> <span class="pl-c1">=</span> <span class="pl-c1">4000</span> <span class="pl-s">"""Maximum number of tokens allowed for each retrieved text chunk."""</span> <span class="pl-s1">max_token_for_global_context</span>: <span class="pl-smi">int</span> <span class="pl-c1">=</span> <span class="pl-c1">4000</span> <span class="pl-s">"""Maximum number of tokens allocated for relationship descriptions in global retrieval."""</span> <span class="pl-s1">max_token_for_local_context</span>: <span class="pl-smi">int</span> <span class="pl-c1">=</span> <span class="pl-c1">4000</span> <span class="pl-s">"""Maximum number of tokens allocated for entity descriptions in local retrieval."""</span> <span class="pl-s1">ids</span>: <span class="pl-s1">list</span>[<span class="pl-smi">str</span>] <span class="pl-c1">|</span> <span class="pl-c1">None</span> <span class="pl-c1">=</span> <span class="pl-c1">None</span> <span class="pl-c"># ONLY SUPPORTED FOR PG VECTOR DBs</span> <span class="pl-s">"""List of ids to filter the RAG."""</span> ...</pre></div> <blockquote> <p dir="auto">default value of Top_k can be change by environment variables TOP_K.</p> </blockquote> <details> <summary> <b>Using Open AI-like APIs</b> </summary> <ul dir="auto"> <li>LightRAG also supports Open AI-like chat/embeddings APIs:</li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="async def llm_model_func( prompt, system_prompt=None, history_messages=[], keyword_extraction=False, **kwargs ) -> str: return await openai_complete_if_cache( "solar-mini", prompt, system_prompt=system_prompt, history_messages=history_messages, api_key=os.getenv("UPSTAGE_API_KEY"), base_url="https://api.upstage.ai/v1/solar", **kwargs ) async def embedding_func(texts: list[str]) -> np.ndarray: return await openai_embed( texts, model="solar-embedding-1-large-query", api_key=os.getenv("UPSTAGE_API_KEY"), base_url="https://api.upstage.ai/v1/solar" ) async def initialize_rag(): rag = LightRAG( working_dir=WORKING_DIR, llm_model_func=llm_model_func, embedding_func=EmbeddingFunc( embedding_dim=4096, max_token_size=8192, func=embedding_func ) ) await rag.initialize_storages() await initialize_pipeline_status() return rag"><pre><span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">llm_model_func</span>( <span class="pl-s1">prompt</span>, <span class="pl-s1">system_prompt</span><span class="pl-c1">=</span><span class="pl-c1">None</span>, <span class="pl-s1">history_messages</span><span class="pl-c1">=</span>[], <span class="pl-s1">keyword_extraction</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-c1">**</span><span class="pl-s1">kwargs</span> ) <span class="pl-c1">-></span> <span class="pl-smi">str</span>: <span class="pl-k">return</span> <span class="pl-k">await</span> <span class="pl-en">openai_complete_if_cache</span>( <span class="pl-s">"solar-mini"</span>, <span class="pl-s1">prompt</span>, <span class="pl-s1">system_prompt</span><span class="pl-c1">=</span><span class="pl-s1">system_prompt</span>, <span class="pl-s1">history_messages</span><span class="pl-c1">=</span><span class="pl-s1">history_messages</span>, <span class="pl-s1">api_key</span><span class="pl-c1">=</span><span class="pl-s1">os</span>.<span class="pl-c1">getenv</span>(<span class="pl-s">"UPSTAGE_API_KEY"</span>), <span class="pl-s1">base_url</span><span class="pl-c1">=</span><span class="pl-s">"https://api.upstage.ai/v1/solar"</span>, <span class="pl-c1">**</span><span class="pl-s1">kwargs</span> ) <span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">embedding_func</span>(<span class="pl-s1">texts</span>: <span class="pl-s1">list</span>[<span class="pl-smi">str</span>]) <span class="pl-c1">-></span> <span class="pl-s1">np</span>.<span class="pl-c1">ndarray</span>: <span class="pl-k">return</span> <span class="pl-k">await</span> <span class="pl-en">openai_embed</span>( <span class="pl-s1">texts</span>, <span class="pl-s1">model</span><span class="pl-c1">=</span><span class="pl-s">"solar-embedding-1-large-query"</span>, <span class="pl-s1">api_key</span><span class="pl-c1">=</span><span class="pl-s1">os</span>.<span class="pl-c1">getenv</span>(<span class="pl-s">"UPSTAGE_API_KEY"</span>), <span class="pl-s1">base_url</span><span class="pl-c1">=</span><span class="pl-s">"https://api.upstage.ai/v1/solar"</span> ) <span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">initialize_rag</span>(): <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">llm_model_func</span>, <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-en">EmbeddingFunc</span>( <span class="pl-s1">embedding_dim</span><span class="pl-c1">=</span><span class="pl-c1">4096</span>, <span class="pl-s1">max_token_size</span><span class="pl-c1">=</span><span class="pl-c1">8192</span>, <span class="pl-s1">func</span><span class="pl-c1">=</span><span class="pl-s1">embedding_func</span> ) ) <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">initialize_storages</span>() <span class="pl-k">await</span> <span class="pl-en">initialize_pipeline_status</span>() <span class="pl-k">return</span> <span class="pl-s1">rag</span></pre></div> </details> <details> <summary> <b>Using Hugging Face Models</b> </summary> <ul dir="auto"> <li>If you want to use Hugging Face models, you only need to set LightRAG as follows:</li> </ul> <p dir="auto">See <code>lightrag_hf_demo.py</code></p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Initialize LightRAG with Hugging Face model rag = LightRAG( working_dir=WORKING_DIR, llm_model_func=hf_model_complete, # Use Hugging Face model for text generation llm_model_name='meta-llama/Llama-3.1-8B-Instruct', # Model name from Hugging Face # Use Hugging Face embedding function embedding_func=EmbeddingFunc( embedding_dim=384, max_token_size=5000, func=lambda texts: hf_embed( texts, tokenizer=AutoTokenizer.from_pretrained("sentence-transformers/all-MiniLM-L6-v2"), embed_model=AutoModel.from_pretrained("sentence-transformers/all-MiniLM-L6-v2") ) ), )"><pre><span class="pl-c"># Initialize LightRAG with Hugging Face model</span> <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">hf_model_complete</span>, <span class="pl-c"># Use Hugging Face model for text generation</span> <span class="pl-s1">llm_model_name</span><span class="pl-c1">=</span><span class="pl-s">'meta-llama/Llama-3.1-8B-Instruct'</span>, <span class="pl-c"># Model name from Hugging Face</span> <span class="pl-c"># Use Hugging Face embedding function</span> <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-en">EmbeddingFunc</span>( <span class="pl-s1">embedding_dim</span><span class="pl-c1">=</span><span class="pl-c1">384</span>, <span class="pl-s1">max_token_size</span><span class="pl-c1">=</span><span class="pl-c1">5000</span>, <span class="pl-s1">func</span><span class="pl-c1">=</span><span class="pl-k">lambda</span> <span class="pl-s1">texts</span>: <span class="pl-en">hf_embed</span>( <span class="pl-s1">texts</span>, <span class="pl-s1">tokenizer</span><span class="pl-c1">=</span><span class="pl-v">AutoTokenizer</span>.<span class="pl-c1">from_pretrained</span>(<span class="pl-s">"sentence-transformers/all-MiniLM-L6-v2"</span>), <span class="pl-s1">embed_model</span><span class="pl-c1">=</span><span class="pl-v">AutoModel</span>.<span class="pl-c1">from_pretrained</span>(<span class="pl-s">"sentence-transformers/all-MiniLM-L6-v2"</span>) ) ), )</pre></div> </details> <details> <summary> <b>Using Ollama Models</b> </summary> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Overview</h3><a id="user-content-overview" class="anchor" aria-label="Permalink: Overview" href="#overview"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">If you want to use Ollama models, you need to pull model you plan to use and embedding model, for example <code>nomic-embed-text</code>.</p> <p dir="auto">Then you only need to set LightRAG as follows:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Initialize LightRAG with Ollama model rag = LightRAG( working_dir=WORKING_DIR, llm_model_func=ollama_model_complete, # Use Ollama model for text generation llm_model_name='your_model_name', # Your model name # Use Ollama embedding function embedding_func=EmbeddingFunc( embedding_dim=768, max_token_size=8192, func=lambda texts: ollama_embed( texts, embed_model="nomic-embed-text" ) ), )"><pre><span class="pl-c"># Initialize LightRAG with Ollama model</span> <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">ollama_model_complete</span>, <span class="pl-c"># Use Ollama model for text generation</span> <span class="pl-s1">llm_model_name</span><span class="pl-c1">=</span><span class="pl-s">'your_model_name'</span>, <span class="pl-c"># Your model name</span> <span class="pl-c"># Use Ollama embedding function</span> <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-en">EmbeddingFunc</span>( <span class="pl-s1">embedding_dim</span><span class="pl-c1">=</span><span class="pl-c1">768</span>, <span class="pl-s1">max_token_size</span><span class="pl-c1">=</span><span class="pl-c1">8192</span>, <span class="pl-s1">func</span><span class="pl-c1">=</span><span class="pl-k">lambda</span> <span class="pl-s1">texts</span>: <span class="pl-en">ollama_embed</span>( <span class="pl-s1">texts</span>, <span class="pl-s1">embed_model</span><span class="pl-c1">=</span><span class="pl-s">"nomic-embed-text"</span> ) ), )</pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Increasing context size</h3><a id="user-content-increasing-context-size" class="anchor" aria-label="Permalink: Increasing context size" href="#increasing-context-size"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">In order for LightRAG to work context should be at least 32k tokens. By default Ollama models have context size of 8k. You can achieve this using one of two ways:</p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Increasing the <code>num_ctx</code> parameter in Modelfile.</h4><a id="user-content-increasing-the-num_ctx-parameter-in-modelfile" class="anchor" aria-label="Permalink: Increasing the num_ctx parameter in Modelfile." href="#increasing-the-num_ctx-parameter-in-modelfile"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ol dir="auto"> <li>Pull the model:</li> </ol> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="ollama pull qwen2"><pre>ollama pull qwen2</pre></div> <ol start="2" dir="auto"> <li>Display the model file:</li> </ol> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="ollama show --modelfile qwen2 > Modelfile"><pre>ollama show --modelfile qwen2 <span class="pl-k">></span> Modelfile</pre></div> <ol start="3" dir="auto"> <li>Edit the Modelfile by adding the following line:</li> </ol> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="PARAMETER num_ctx 32768"><pre>PARAMETER num_ctx 32768</pre></div> <ol start="4" dir="auto"> <li>Create the modified model:</li> </ol> <div class="highlight highlight-source-shell notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="ollama create -f Modelfile qwen2m"><pre>ollama create -f Modelfile qwen2m</pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Setup <code>num_ctx</code> via Ollama API.</h4><a id="user-content-setup-num_ctx-via-ollama-api" class="anchor" aria-label="Permalink: Setup num_ctx via Ollama API." href="#setup-num_ctx-via-ollama-api"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Tiy can use <code>llm_model_kwargs</code> param to configure ollama:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="rag = LightRAG( working_dir=WORKING_DIR, llm_model_func=ollama_model_complete, # Use Ollama model for text generation llm_model_name='your_model_name', # Your model name llm_model_kwargs={"options": {"num_ctx": 32768}}, # Use Ollama embedding function embedding_func=EmbeddingFunc( embedding_dim=768, max_token_size=8192, func=lambda texts: ollama_embedding( texts, embed_model="nomic-embed-text" ) ), )"><pre><span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">ollama_model_complete</span>, <span class="pl-c"># Use Ollama model for text generation</span> <span class="pl-s1">llm_model_name</span><span class="pl-c1">=</span><span class="pl-s">'your_model_name'</span>, <span class="pl-c"># Your model name</span> <span class="pl-s1">llm_model_kwargs</span><span class="pl-c1">=</span>{<span class="pl-s">"options"</span>: {<span class="pl-s">"num_ctx"</span>: <span class="pl-c1">32768</span>}}, <span class="pl-c"># Use Ollama embedding function</span> <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-en">EmbeddingFunc</span>( <span class="pl-s1">embedding_dim</span><span class="pl-c1">=</span><span class="pl-c1">768</span>, <span class="pl-s1">max_token_size</span><span class="pl-c1">=</span><span class="pl-c1">8192</span>, <span class="pl-s1">func</span><span class="pl-c1">=</span><span class="pl-k">lambda</span> <span class="pl-s1">texts</span>: <span class="pl-en">ollama_embedding</span>( <span class="pl-s1">texts</span>, <span class="pl-s1">embed_model</span><span class="pl-c1">=</span><span class="pl-s">"nomic-embed-text"</span> ) ), )</pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Low RAM GPUs</h4><a id="user-content-low-ram-gpus" class="anchor" aria-label="Permalink: Low RAM GPUs" href="#low-ram-gpus"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">In order to run this experiment on low RAM GPU you should select small model and tune context window (increasing context increase memory consumption). For example, running this ollama example on repurposed mining GPU with 6Gb of RAM required to set context size to 26k while using <code>gemma2:2b</code>. It was able to find 197 entities and 19 relations on <code>book.txt</code>.</p> </details> <details> <summary> <b>LlamaIndex</b> </summary> <p dir="auto">LightRAG supports integration with LlamaIndex.</p> <ol dir="auto"> <li><strong>LlamaIndex</strong> (<code>llm/llama_index_impl.py</code>): <ul dir="auto"> <li>Integrates with OpenAI and other providers through LlamaIndex</li> <li>See <a href="/HKUDS/LightRAG/blob/main/lightrag/llm/Readme.md">LlamaIndex Documentation</a> for detailed setup and examples</li> </ul> </li> </ol> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Example Usage</h3><a id="user-content-example-usage" class="anchor" aria-label="Permalink: Example Usage" href="#example-usage"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Using LlamaIndex with direct OpenAI access import asyncio from lightrag import LightRAG from lightrag.llm.llama_index_impl import llama_index_complete_if_cache, llama_index_embed from llama_index.embeddings.openai import OpenAIEmbedding from llama_index.llms.openai import OpenAI from lightrag.kg.shared_storage import initialize_pipeline_status from lightrag.utils import setup_logger # Setup log handler for LightRAG setup_logger("lightrag", level="INFO") async def initialize_rag(): rag = LightRAG( working_dir="your/path", llm_model_func=llama_index_complete_if_cache, # LlamaIndex-compatible completion function embedding_func=EmbeddingFunc( # LlamaIndex-compatible embedding function embedding_dim=1536, max_token_size=8192, func=lambda texts: llama_index_embed(texts, embed_model=embed_model) ), ) await rag.initialize_storages() await initialize_pipeline_status() return rag def main(): # Initialize RAG instance rag = asyncio.run(initialize_rag()) with open("./book.txt", "r", encoding="utf-8") as f: rag.insert(f.read()) # Perform naive search print( rag.query("What are the top themes in this story?", param=QueryParam(mode="naive")) ) # Perform local search print( rag.query("What are the top themes in this story?", param=QueryParam(mode="local")) ) # Perform global search print( rag.query("What are the top themes in this story?", param=QueryParam(mode="global")) ) # Perform hybrid search print( rag.query("What are the top themes in this story?", param=QueryParam(mode="hybrid")) ) if __name__ == "__main__": main()"><pre><span class="pl-c"># Using LlamaIndex with direct OpenAI access</span> <span class="pl-k">import</span> <span class="pl-s1">asyncio</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span> <span class="pl-k">import</span> <span class="pl-v">LightRAG</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">llm</span>.<span class="pl-s1">llama_index_impl</span> <span class="pl-k">import</span> <span class="pl-s1">llama_index_complete_if_cache</span>, <span class="pl-s1">llama_index_embed</span> <span class="pl-k">from</span> <span class="pl-s1">llama_index</span>.<span class="pl-s1">embeddings</span>.<span class="pl-s1">openai</span> <span class="pl-k">import</span> <span class="pl-v">OpenAIEmbedding</span> <span class="pl-k">from</span> <span class="pl-s1">llama_index</span>.<span class="pl-s1">llms</span>.<span class="pl-s1">openai</span> <span class="pl-k">import</span> <span class="pl-v">OpenAI</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">kg</span>.<span class="pl-s1">shared_storage</span> <span class="pl-k">import</span> <span class="pl-s1">initialize_pipeline_status</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">utils</span> <span class="pl-k">import</span> <span class="pl-s1">setup_logger</span> <span class="pl-c"># Setup log handler for LightRAG</span> <span class="pl-en">setup_logger</span>(<span class="pl-s">"lightrag"</span>, <span class="pl-s1">level</span><span class="pl-c1">=</span><span class="pl-s">"INFO"</span>) <span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">initialize_rag</span>(): <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-s">"your/path"</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">llama_index_complete_if_cache</span>, <span class="pl-c"># LlamaIndex-compatible completion function</span> <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-en">EmbeddingFunc</span>( <span class="pl-c"># LlamaIndex-compatible embedding function</span> <span class="pl-s1">embedding_dim</span><span class="pl-c1">=</span><span class="pl-c1">1536</span>, <span class="pl-s1">max_token_size</span><span class="pl-c1">=</span><span class="pl-c1">8192</span>, <span class="pl-s1">func</span><span class="pl-c1">=</span><span class="pl-k">lambda</span> <span class="pl-s1">texts</span>: <span class="pl-en">llama_index_embed</span>(<span class="pl-s1">texts</span>, <span class="pl-s1">embed_model</span><span class="pl-c1">=</span><span class="pl-s1">embed_model</span>) ), ) <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">initialize_storages</span>() <span class="pl-k">await</span> <span class="pl-en">initialize_pipeline_status</span>() <span class="pl-k">return</span> <span class="pl-s1">rag</span> <span class="pl-k">def</span> <span class="pl-en">main</span>(): <span class="pl-c"># Initialize RAG instance</span> <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-s1">asyncio</span>.<span class="pl-c1">run</span>(<span class="pl-en">initialize_rag</span>()) <span class="pl-k">with</span> <span class="pl-en">open</span>(<span class="pl-s">"./book.txt"</span>, <span class="pl-s">"r"</span>, <span class="pl-s1">encoding</span><span class="pl-c1">=</span><span class="pl-s">"utf-8"</span>) <span class="pl-k">as</span> <span class="pl-s1">f</span>: <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s1">f</span>.<span class="pl-c1">read</span>()) <span class="pl-c"># Perform naive search</span> <span class="pl-en">print</span>( <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>(<span class="pl-s">"What are the top themes in this story?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-en">QueryParam</span>(<span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"naive"</span>)) ) <span class="pl-c"># Perform local search</span> <span class="pl-en">print</span>( <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>(<span class="pl-s">"What are the top themes in this story?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-en">QueryParam</span>(<span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"local"</span>)) ) <span class="pl-c"># Perform global search</span> <span class="pl-en">print</span>( <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>(<span class="pl-s">"What are the top themes in this story?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-en">QueryParam</span>(<span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"global"</span>)) ) <span class="pl-c"># Perform hybrid search</span> <span class="pl-en">print</span>( <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>(<span class="pl-s">"What are the top themes in this story?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-en">QueryParam</span>(<span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"hybrid"</span>)) ) <span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">"__main__"</span>: <span class="pl-en">main</span>()</pre></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">For detailed documentation and examples, see:</h4><a id="user-content-for-detailed-documentation-and-examples-see" class="anchor" aria-label="Permalink: For detailed documentation and examples, see:" href="#for-detailed-documentation-and-examples-see"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><a href="/HKUDS/LightRAG/blob/main/lightrag/llm/Readme.md">LlamaIndex Documentation</a></li> <li><a href="/HKUDS/LightRAG/blob/main/examples/lightrag_llamaindex_direct_demo.py">Direct OpenAI Example</a></li> <li><a href="/HKUDS/LightRAG/blob/main/examples/lightrag_llamaindex_litellm_demo.py">LiteLLM Proxy Example</a></li> </ul> </details> <details> <summary> <b>Conversation History Support</b> </summary> <p dir="auto">LightRAG now supports multi-turn dialogue through the conversation history feature. Here's how to use it:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Create conversation history conversation_history = [ {"role": "user", "content": "What is the main character's attitude towards Christmas?"}, {"role": "assistant", "content": "At the beginning of the story, Ebenezer Scrooge has a very negative attitude towards Christmas..."}, {"role": "user", "content": "How does his attitude change?"} ] # Create query parameters with conversation history query_param = QueryParam( mode="mix", # or any other mode: "local", "global", "hybrid" conversation_history=conversation_history, # Add the conversation history history_turns=3 # Number of recent conversation turns to consider ) # Make a query that takes into account the conversation history response = rag.query( "What causes this change in his character?", param=query_param )"><pre><span class="pl-c"># Create conversation history</span> <span class="pl-s1">conversation_history</span> <span class="pl-c1">=</span> [ {<span class="pl-s">"role"</span>: <span class="pl-s">"user"</span>, <span class="pl-s">"content"</span>: <span class="pl-s">"What is the main character's attitude towards Christmas?"</span>}, {<span class="pl-s">"role"</span>: <span class="pl-s">"assistant"</span>, <span class="pl-s">"content"</span>: <span class="pl-s">"At the beginning of the story, Ebenezer Scrooge has a very negative attitude towards Christmas..."</span>}, {<span class="pl-s">"role"</span>: <span class="pl-s">"user"</span>, <span class="pl-s">"content"</span>: <span class="pl-s">"How does his attitude change?"</span>} ] <span class="pl-c"># Create query parameters with conversation history</span> <span class="pl-s1">query_param</span> <span class="pl-c1">=</span> <span class="pl-en">QueryParam</span>( <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"mix"</span>, <span class="pl-c"># or any other mode: "local", "global", "hybrid"</span> <span class="pl-s1">conversation_history</span><span class="pl-c1">=</span><span class="pl-s1">conversation_history</span>, <span class="pl-c"># Add the conversation history</span> <span class="pl-s1">history_turns</span><span class="pl-c1">=</span><span class="pl-c1">3</span> <span class="pl-c"># Number of recent conversation turns to consider</span> ) <span class="pl-c"># Make a query that takes into account the conversation history</span> <span class="pl-s1">response</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>( <span class="pl-s">"What causes this change in his character?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-s1">query_param</span> )</pre></div> </details> <details> <summary> <b>Custom Prompt Support</b> </summary> <p dir="auto">LightRAG now supports custom prompts for fine-tuned control over the system's behavior. Here's how to use it:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Create query parameters query_param = QueryParam( mode="hybrid", # or other mode: "local", "global", "hybrid", "mix" and "naive" ) # Example 1: Using the default system prompt response_default = rag.query( "What are the primary benefits of renewable energy?", param=query_param ) print(response_default) # Example 2: Using a custom prompt custom_prompt = """ You are an expert assistant in environmental science. Provide detailed and structured answers with examples. ---Conversation History--- {history} ---Knowledge Base--- {context_data} ---Response Rules--- - Target format and length: {response_type} """ response_custom = rag.query( "What are the primary benefits of renewable energy?", param=query_param, system_prompt=custom_prompt # Pass the custom prompt ) print(response_custom)"><pre><span class="pl-c"># Create query parameters</span> <span class="pl-s1">query_param</span> <span class="pl-c1">=</span> <span class="pl-en">QueryParam</span>( <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"hybrid"</span>, <span class="pl-c"># or other mode: "local", "global", "hybrid", "mix" and "naive"</span> ) <span class="pl-c"># Example 1: Using the default system prompt</span> <span class="pl-s1">response_default</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>( <span class="pl-s">"What are the primary benefits of renewable energy?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-s1">query_param</span> ) <span class="pl-en">print</span>(<span class="pl-s1">response_default</span>) <span class="pl-c"># Example 2: Using a custom prompt</span> <span class="pl-s1">custom_prompt</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s">You are an expert assistant in environmental science. Provide detailed and structured answers with examples.</span> <span class="pl-s">---Conversation History---</span> <span class="pl-s">{history}</span> <span class="pl-s"></span> <span class="pl-s">---Knowledge Base---</span> <span class="pl-s">{context_data}</span> <span class="pl-s"></span> <span class="pl-s">---Response Rules---</span> <span class="pl-s"></span> <span class="pl-s">- Target format and length: {response_type}</span> <span class="pl-s">"""</span> <span class="pl-s1">response_custom</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">query</span>( <span class="pl-s">"What are the primary benefits of renewable energy?"</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-s1">query_param</span>, <span class="pl-s1">system_prompt</span><span class="pl-c1">=</span><span class="pl-s1">custom_prompt</span> <span class="pl-c"># Pass the custom prompt</span> ) <span class="pl-en">print</span>(<span class="pl-s1">response_custom</span>)</pre></div> </details> <details> <summary> <b>Separate Keyword Extraction</b> </summary> <p dir="auto">We've introduced a new function <code>query_with_separate_keyword_extraction</code> to enhance the keyword extraction capabilities. This function separates the keyword extraction process from the user's prompt, focusing solely on the query to improve the relevance of extracted keywords.</p> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">How It Works?</h5><a id="user-content-how-it-works" class="anchor" aria-label="Permalink: How It Works?" href="#how-it-works"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The function operates by dividing the input into two parts:</p> <ul dir="auto"> <li><code>User Query</code></li> <li><code>Prompt</code></li> </ul> <p dir="auto">It then performs keyword extraction exclusively on the <code>user query</code>. This separation ensures that the extraction process is focused and relevant, unaffected by any additional language in the <code>prompt</code>. It also allows the <code>prompt</code> to serve purely for response formatting, maintaining the intent and clarity of the user's original question.</p> <div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">Usage Example</h5><a id="user-content-usage-example" class="anchor" aria-label="Permalink: Usage Example" href="#usage-example"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">This <code>example</code> shows how to tailor the function for educational content, focusing on detailed explanations for older students.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="rag.query_with_separate_keyword_extraction( query="Explain the law of gravity", prompt="Provide a detailed explanation suitable for high school students studying physics.", param=QueryParam(mode="hybrid") )"><pre><span class="pl-s1">rag</span>.<span class="pl-c1">query_with_separate_keyword_extraction</span>( <span class="pl-s1">query</span><span class="pl-c1">=</span><span class="pl-s">"Explain the law of gravity"</span>, <span class="pl-s1">prompt</span><span class="pl-c1">=</span><span class="pl-s">"Provide a detailed explanation suitable for high school students studying physics."</span>, <span class="pl-s1">param</span><span class="pl-c1">=</span><span class="pl-en">QueryParam</span>(<span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">"hybrid"</span>) )</pre></div> </details> <details> <summary> <b>Insert Custom KG</b> </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="custom_kg = { "chunks": [ { "content": "Alice and Bob are collaborating on quantum computing research.", "source_id": "doc-1" } ], "entities": [ { "entity_name": "Alice", "entity_type": "person", "description": "Alice is a researcher specializing in quantum physics.", "source_id": "doc-1" }, { "entity_name": "Bob", "entity_type": "person", "description": "Bob is a mathematician.", "source_id": "doc-1" }, { "entity_name": "Quantum Computing", "entity_type": "technology", "description": "Quantum computing utilizes quantum mechanical phenomena for computation.", "source_id": "doc-1" } ], "relationships": [ { "src_id": "Alice", "tgt_id": "Bob", "description": "Alice and Bob are research partners.", "keywords": "collaboration research", "weight": 1.0, "source_id": "doc-1" }, { "src_id": "Alice", "tgt_id": "Quantum Computing", "description": "Alice conducts research on quantum computing.", "keywords": "research expertise", "weight": 1.0, "source_id": "doc-1" }, { "src_id": "Bob", "tgt_id": "Quantum Computing", "description": "Bob researches quantum computing.", "keywords": "research application", "weight": 1.0, "source_id": "doc-1" } ] } rag.insert_custom_kg(custom_kg)"><pre><span class="pl-s1">custom_kg</span> <span class="pl-c1">=</span> { <span class="pl-s">"chunks"</span>: [ { <span class="pl-s">"content"</span>: <span class="pl-s">"Alice and Bob are collaborating on quantum computing research."</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> } ], <span class="pl-s">"entities"</span>: [ { <span class="pl-s">"entity_name"</span>: <span class="pl-s">"Alice"</span>, <span class="pl-s">"entity_type"</span>: <span class="pl-s">"person"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Alice is a researcher specializing in quantum physics."</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> }, { <span class="pl-s">"entity_name"</span>: <span class="pl-s">"Bob"</span>, <span class="pl-s">"entity_type"</span>: <span class="pl-s">"person"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Bob is a mathematician."</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> }, { <span class="pl-s">"entity_name"</span>: <span class="pl-s">"Quantum Computing"</span>, <span class="pl-s">"entity_type"</span>: <span class="pl-s">"technology"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Quantum computing utilizes quantum mechanical phenomena for computation."</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> } ], <span class="pl-s">"relationships"</span>: [ { <span class="pl-s">"src_id"</span>: <span class="pl-s">"Alice"</span>, <span class="pl-s">"tgt_id"</span>: <span class="pl-s">"Bob"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Alice and Bob are research partners."</span>, <span class="pl-s">"keywords"</span>: <span class="pl-s">"collaboration research"</span>, <span class="pl-s">"weight"</span>: <span class="pl-c1">1.0</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> }, { <span class="pl-s">"src_id"</span>: <span class="pl-s">"Alice"</span>, <span class="pl-s">"tgt_id"</span>: <span class="pl-s">"Quantum Computing"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Alice conducts research on quantum computing."</span>, <span class="pl-s">"keywords"</span>: <span class="pl-s">"research expertise"</span>, <span class="pl-s">"weight"</span>: <span class="pl-c1">1.0</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> }, { <span class="pl-s">"src_id"</span>: <span class="pl-s">"Bob"</span>, <span class="pl-s">"tgt_id"</span>: <span class="pl-s">"Quantum Computing"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Bob researches quantum computing."</span>, <span class="pl-s">"keywords"</span>: <span class="pl-s">"research application"</span>, <span class="pl-s">"weight"</span>: <span class="pl-c1">1.0</span>, <span class="pl-s">"source_id"</span>: <span class="pl-s">"doc-1"</span> } ] } <span class="pl-s1">rag</span>.<span class="pl-c1">insert_custom_kg</span>(<span class="pl-s1">custom_kg</span>)</pre></div> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Insert</h2><a id="user-content-insert" class="anchor" aria-label="Permalink: Insert" href="#insert"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Basic Insert</h4><a id="user-content-basic-insert" class="anchor" aria-label="Permalink: Basic Insert" href="#basic-insert"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Basic Insert rag.insert("Text")"><pre><span class="pl-c"># Basic Insert</span> <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s">"Text"</span>)</pre></div> <details> <summary> <b> Batch Insert </b></summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Basic Batch Insert: Insert multiple texts at once rag.insert(["TEXT1", "TEXT2",...]) # Batch Insert with custom batch size configuration rag = LightRAG( working_dir=WORKING_DIR, addon_params={ "insert_batch_size": 20 # Process 20 documents per batch } ) rag.insert(["TEXT1", "TEXT2", "TEXT3", ...]) # Documents will be processed in batches of 20"><pre><span class="pl-c"># Basic Batch Insert: Insert multiple texts at once</span> <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>([<span class="pl-s">"TEXT1"</span>, <span class="pl-s">"TEXT2"</span>,...]) <span class="pl-c"># Batch Insert with custom batch size configuration</span> <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">addon_params</span><span class="pl-c1">=</span>{ <span class="pl-s">"insert_batch_size"</span>: <span class="pl-c1">20</span> <span class="pl-c"># Process 20 documents per batch</span> } ) <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>([<span class="pl-s">"TEXT1"</span>, <span class="pl-s">"TEXT2"</span>, <span class="pl-s">"TEXT3"</span>, ...]) <span class="pl-c"># Documents will be processed in batches of 20</span></pre></div> <p dir="auto">The <code>insert_batch_size</code> parameter in <code>addon_params</code> controls how many documents are processed in each batch during insertion. This is useful for:</p> <ul dir="auto"> <li>Managing memory usage with large document collections</li> <li>Optimizing processing speed</li> <li>Providing better progress tracking</li> <li>Default value is 10 if not specified</li> </ul> </details> <details> <summary> <b> Insert with ID </b></summary> <p dir="auto">If you want to provide your own IDs for your documents, number of documents and number of IDs must be the same.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Insert single text, and provide ID for it rag.insert("TEXT1", ids=["ID_FOR_TEXT1"]) # Insert multiple texts, and provide IDs for them rag.insert(["TEXT1", "TEXT2",...], ids=["ID_FOR_TEXT1", "ID_FOR_TEXT2"])"><pre><span class="pl-c"># Insert single text, and provide ID for it</span> <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s">"TEXT1"</span>, <span class="pl-s1">ids</span><span class="pl-c1">=</span>[<span class="pl-s">"ID_FOR_TEXT1"</span>]) <span class="pl-c"># Insert multiple texts, and provide IDs for them</span> <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>([<span class="pl-s">"TEXT1"</span>, <span class="pl-s">"TEXT2"</span>,...], <span class="pl-s1">ids</span><span class="pl-c1">=</span>[<span class="pl-s">"ID_FOR_TEXT1"</span>, <span class="pl-s">"ID_FOR_TEXT2"</span>])</pre></div> </details> <details> <summary><b>Insert using Pipeline</b></summary> <p dir="auto">The <code>apipeline_enqueue_documents</code> and <code>apipeline_process_enqueue_documents</code> functions allow you to perform incremental insertion of documents into the graph.</p> <p dir="auto">This is useful for scenarios where you want to process documents in the background while still allowing the main thread to continue executing.</p> <p dir="auto">And using a routine to process news documents.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="rag = LightRAG(..) await rag.apipeline_enqueue_documents(input) # Your routine in loop await rag.apipeline_process_enqueue_documents(input)"><pre><span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>(..) <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">apipeline_enqueue_documents</span>(<span class="pl-s1">input</span>) <span class="pl-c"># Your routine in loop</span> <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">apipeline_process_enqueue_documents</span>(<span class="pl-s1">input</span>)</pre></div> </details> <details> <summary><b>Insert Multi-file Type Support</b></summary> <p dir="auto">The <code>textract</code> supports reading file types such as TXT, DOCX, PPTX, CSV, and PDF.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import textract file_path = 'TEXT.pdf' text_content = textract.process(file_path) rag.insert(text_content.decode('utf-8'))"><pre><span class="pl-k">import</span> <span class="pl-s1">textract</span> <span class="pl-s1">file_path</span> <span class="pl-c1">=</span> <span class="pl-s">'TEXT.pdf'</span> <span class="pl-s1">text_content</span> <span class="pl-c1">=</span> <span class="pl-s1">textract</span>.<span class="pl-c1">process</span>(<span class="pl-s1">file_path</span>) <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s1">text_content</span>.<span class="pl-c1">decode</span>(<span class="pl-s">'utf-8'</span>))</pre></div> </details> <details> <summary><b>Citation Functionality</b></summary> <p dir="auto">By providing file paths, the system ensures that sources can be traced back to their original documents.</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Define documents and their file paths documents = ["Document content 1", "Document content 2"] file_paths = ["path/to/doc1.txt", "path/to/doc2.txt"] # Insert documents with file paths rag.insert(documents, file_paths=file_paths)"><pre><span class="pl-c"># Define documents and their file paths</span> <span class="pl-s1">documents</span> <span class="pl-c1">=</span> [<span class="pl-s">"Document content 1"</span>, <span class="pl-s">"Document content 2"</span>] <span class="pl-s1">file_paths</span> <span class="pl-c1">=</span> [<span class="pl-s">"path/to/doc1.txt"</span>, <span class="pl-s">"path/to/doc2.txt"</span>] <span class="pl-c"># Insert documents with file paths</span> <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s1">documents</span>, <span class="pl-s1">file_paths</span><span class="pl-c1">=</span><span class="pl-s1">file_paths</span>)</pre></div> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Storage</h2><a id="user-content-storage" class="anchor" aria-label="Permalink: Storage" href="#storage"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <details> <summary> <b>Using Neo4J for Storage</b> </summary> <ul dir="auto"> <li>For production level scenarios you will most likely want to leverage an enterprise solution</li> <li>for KG storage. Running Neo4J in Docker is recommended for seamless local testing.</li> <li>See: <a href="https://hub.docker.com/_/neo4j" rel="nofollow">https://hub.docker.com/_/neo4j</a></li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="export NEO4J_URI="neo4j://localhost:7687" export NEO4J_USERNAME="neo4j" export NEO4J_PASSWORD="password" # Setup logger for LightRAG setup_logger("lightrag", level="INFO") # When you launch the project be sure to override the default KG: NetworkX # by specifying kg="Neo4JStorage". # Note: Default settings use NetworkX # Initialize LightRAG with Neo4J implementation. async def initialize_rag(): rag = LightRAG( working_dir=WORKING_DIR, llm_model_func=gpt_4o_mini_complete, # Use gpt_4o_mini_complete LLM model graph_storage="Neo4JStorage", #<-----------override KG default ) # Initialize database connections await rag.initialize_storages() # Initialize pipeline status for document processing await initialize_pipeline_status() return rag"><pre><span class="pl-s1">export</span> <span class="pl-v">NEO4J_URI</span><span class="pl-c1">=</span><span class="pl-s">"neo4j://localhost:7687"</span> <span class="pl-s1">export</span> <span class="pl-v">NEO4J_USERNAME</span><span class="pl-c1">=</span><span class="pl-s">"neo4j"</span> <span class="pl-s1">export</span> <span class="pl-v">NEO4J_PASSWORD</span><span class="pl-c1">=</span><span class="pl-s">"password"</span> <span class="pl-c"># Setup logger for LightRAG</span> <span class="pl-en">setup_logger</span>(<span class="pl-s">"lightrag"</span>, <span class="pl-s1">level</span><span class="pl-c1">=</span><span class="pl-s">"INFO"</span>) <span class="pl-c"># When you launch the project be sure to override the default KG: NetworkX</span> <span class="pl-c"># by specifying kg="Neo4JStorage".</span> <span class="pl-c"># Note: Default settings use NetworkX</span> <span class="pl-c"># Initialize LightRAG with Neo4J implementation.</span> <span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">initialize_rag</span>(): <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">gpt_4o_mini_complete</span>, <span class="pl-c"># Use gpt_4o_mini_complete LLM model</span> <span class="pl-s1">graph_storage</span><span class="pl-c1">=</span><span class="pl-s">"Neo4JStorage"</span>, <span class="pl-c">#<-----------override KG default</span> ) <span class="pl-c"># Initialize database connections</span> <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">initialize_storages</span>() <span class="pl-c"># Initialize pipeline status for document processing</span> <span class="pl-k">await</span> <span class="pl-en">initialize_pipeline_status</span>() <span class="pl-k">return</span> <span class="pl-s1">rag</span></pre></div> <p dir="auto">see test_neo4j.py for a working example.</p> </details> <details> <summary> <b>Using PostgreSQL for Storage</b> </summary> <p dir="auto">For production level scenarios you will most likely want to leverage an enterprise solution. PostgreSQL can provide a one-stop solution for you as KV store, VectorDB (pgvector) and GraphDB (apache AGE).</p> <ul dir="auto"> <li>PostgreSQL is lightweight,the whole binary distribution including all necessary plugins can be zipped to 40MB: Ref to <a href="https://github.com/ShanGor/apache-age-windows/releases/tag/PG17%2Fv1.5.0-rc0">Windows Release</a> as it is easy to install for Linux/Mac.</li> <li>If you prefer docker, please start with this image if you are a beginner to avoid hiccups (DO read the overview): <a href="https://hub.docker.com/r/shangor/postgres-for-rag" rel="nofollow">https://hub.docker.com/r/shangor/postgres-for-rag</a></li> <li>How to start? Ref to: <a href="https://github.com/HKUDS/LightRAG/blob/main/examples/lightrag_zhipu_postgres_demo.py">examples/lightrag_zhipu_postgres_demo.py</a></li> <li>Create index for AGE example: (Change below <code>dickens</code> to your graph name if necessary) <div class="highlight highlight-source-sql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="load 'age'; SET search_path = ag_catalog, "$user", public; CREATE INDEX CONCURRENTLY entity_p_idx ON dickens."Entity" (id); CREATE INDEX CONCURRENTLY vertex_p_idx ON dickens."_ag_label_vertex" (id); CREATE INDEX CONCURRENTLY directed_p_idx ON dickens."DIRECTED" (id); CREATE INDEX CONCURRENTLY directed_eid_idx ON dickens."DIRECTED" (end_id); CREATE INDEX CONCURRENTLY directed_sid_idx ON dickens."DIRECTED" (start_id); CREATE INDEX CONCURRENTLY directed_seid_idx ON dickens."DIRECTED" (start_id,end_id); CREATE INDEX CONCURRENTLY edge_p_idx ON dickens."_ag_label_edge" (id); CREATE INDEX CONCURRENTLY edge_sid_idx ON dickens."_ag_label_edge" (start_id); CREATE INDEX CONCURRENTLY edge_eid_idx ON dickens."_ag_label_edge" (end_id); CREATE INDEX CONCURRENTLY edge_seid_idx ON dickens."_ag_label_edge" (start_id,end_id); create INDEX CONCURRENTLY vertex_idx_node_id ON dickens."_ag_label_vertex" (ag_catalog.agtype_access_operator(properties, '"node_id"'::agtype)); create INDEX CONCURRENTLY entity_idx_node_id ON dickens."Entity" (ag_catalog.agtype_access_operator(properties, '"node_id"'::agtype)); CREATE INDEX CONCURRENTLY entity_node_id_gin_idx ON dickens."Entity" using gin(properties); ALTER TABLE dickens."DIRECTED" CLUSTER ON directed_sid_idx; -- drop if necessary drop INDEX entity_p_idx; drop INDEX vertex_p_idx; drop INDEX directed_p_idx; drop INDEX directed_eid_idx; drop INDEX directed_sid_idx; drop INDEX directed_seid_idx; drop INDEX edge_p_idx; drop INDEX edge_sid_idx; drop INDEX edge_eid_idx; drop INDEX edge_seid_idx; drop INDEX vertex_idx_node_id; drop INDEX entity_idx_node_id; drop INDEX entity_node_id_gin_idx;"><pre>load <span class="pl-s"><span class="pl-pds">'</span>age<span class="pl-pds">'</span></span>; <span class="pl-k">SET</span> search_path <span class="pl-k">=</span> ag_catalog, <span class="pl-s"><span class="pl-pds">"</span>$user<span class="pl-pds">"</span></span>, public; <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> entity_p_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>Entity<span class="pl-pds">"</span></span> (id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> vertex_p_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>_ag_label_vertex<span class="pl-pds">"</span></span> (id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> directed_p_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>DIRECTED<span class="pl-pds">"</span></span> (id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> directed_eid_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>DIRECTED<span class="pl-pds">"</span></span> (end_id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> directed_sid_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>DIRECTED<span class="pl-pds">"</span></span> (start_id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> directed_seid_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>DIRECTED<span class="pl-pds">"</span></span> (start_id,end_id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> edge_p_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>_ag_label_edge<span class="pl-pds">"</span></span> (id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> edge_sid_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>_ag_label_edge<span class="pl-pds">"</span></span> (start_id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> edge_eid_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>_ag_label_edge<span class="pl-pds">"</span></span> (end_id); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> edge_seid_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>_ag_label_edge<span class="pl-pds">"</span></span> (start_id,end_id); <span class="pl-k">create</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> vertex_idx_node_id <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>_ag_label_vertex<span class="pl-pds">"</span></span> (<span class="pl-c1">ag_catalog</span>.<span class="pl-c1">agtype_access_operator</span>(properties, <span class="pl-s"><span class="pl-pds">'</span>"node_id"<span class="pl-pds">'</span></span>::agtype)); <span class="pl-k">create</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> entity_idx_node_id <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>Entity<span class="pl-pds">"</span></span> (<span class="pl-c1">ag_catalog</span>.<span class="pl-c1">agtype_access_operator</span>(properties, <span class="pl-s"><span class="pl-pds">'</span>"node_id"<span class="pl-pds">'</span></span>::agtype)); <span class="pl-k">CREATE</span> <span class="pl-k">INDEX</span> <span class="pl-en">CONCURRENTLY</span> entity_node_id_gin_idx <span class="pl-k">ON</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>Entity<span class="pl-pds">"</span></span> using gin(properties); <span class="pl-k">ALTER</span> <span class="pl-k">TABLE</span> dickens.<span class="pl-s"><span class="pl-pds">"</span>DIRECTED<span class="pl-pds">"</span></span> CLUSTER <span class="pl-k">ON</span> directed_sid_idx; <span class="pl-c"><span class="pl-c">--</span> drop if necessary</span> <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> entity_p_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> vertex_p_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> directed_p_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> directed_eid_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> directed_sid_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> directed_seid_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> edge_p_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> edge_sid_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> edge_eid_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> edge_seid_idx; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> vertex_idx_node_id; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> entity_idx_node_id; <span class="pl-k">drop</span> <span class="pl-k">INDEX</span> entity_node_id_gin_idx;</pre></div> </li> <li>Known issue of the Apache AGE: The released versions got below issue: <blockquote> <p dir="auto">You might find that the properties of the nodes/edges are empty. It is a known issue of the release version: <a class="issue-link js-issue-link" data-error-text="Failed to load title" data-id="2226727319" data-permission-text="Title is private" data-url="https://github.com/apache/age/issues/1721" data-hovercard-type="pull_request" data-hovercard-url="/apache/age/pull/1721/hovercard" href="https://github.com/apache/age/pull/1721">apache/age#1721</a></p> <p dir="auto">You can Compile the AGE from source code and fix it.</p> </blockquote> </li> </ul> </details> <details> <summary> <b>Using Faiss for Storage</b> </summary> <ul dir="auto"> <li>Install the required dependencies:</li> </ul> <div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="pip install faiss-cpu"><pre class="notranslate"><code>pip install faiss-cpu </code></pre></div> <p dir="auto">You can also install <code>faiss-gpu</code> if you have GPU support.</p> <ul dir="auto"> <li>Here we are using <code>sentence-transformers</code> but you can also use <code>OpenAIEmbedding</code> model with <code>3072</code> dimensions.</li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="async def embedding_func(texts: list[str]) -> np.ndarray: model = SentenceTransformer('all-MiniLM-L6-v2') embeddings = model.encode(texts, convert_to_numpy=True) return embeddings # Initialize LightRAG with the LLM model function and embedding function rag = LightRAG( working_dir=WORKING_DIR, llm_model_func=llm_model_func, embedding_func=EmbeddingFunc( embedding_dim=384, max_token_size=8192, func=embedding_func, ), vector_storage="FaissVectorDBStorage", vector_db_storage_cls_kwargs={ "cosine_better_than_threshold": 0.3 # Your desired threshold } )"><pre><span class="pl-k">async</span> <span class="pl-k">def</span> <span class="pl-en">embedding_func</span>(<span class="pl-s1">texts</span>: <span class="pl-s1">list</span>[<span class="pl-smi">str</span>]) <span class="pl-c1">-></span> <span class="pl-s1">np</span>.<span class="pl-c1">ndarray</span>: <span class="pl-s1">model</span> <span class="pl-c1">=</span> <span class="pl-en">SentenceTransformer</span>(<span class="pl-s">'all-MiniLM-L6-v2'</span>) <span class="pl-s1">embeddings</span> <span class="pl-c1">=</span> <span class="pl-s1">model</span>.<span class="pl-c1">encode</span>(<span class="pl-s1">texts</span>, <span class="pl-s1">convert_to_numpy</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-k">return</span> <span class="pl-s1">embeddings</span> <span class="pl-c"># Initialize LightRAG with the LLM model function and embedding function</span> <span class="pl-s1">rag</span> <span class="pl-c1">=</span> <span class="pl-en">LightRAG</span>( <span class="pl-s1">working_dir</span><span class="pl-c1">=</span><span class="pl-c1">WORKING_DIR</span>, <span class="pl-s1">llm_model_func</span><span class="pl-c1">=</span><span class="pl-s1">llm_model_func</span>, <span class="pl-s1">embedding_func</span><span class="pl-c1">=</span><span class="pl-en">EmbeddingFunc</span>( <span class="pl-s1">embedding_dim</span><span class="pl-c1">=</span><span class="pl-c1">384</span>, <span class="pl-s1">max_token_size</span><span class="pl-c1">=</span><span class="pl-c1">8192</span>, <span class="pl-s1">func</span><span class="pl-c1">=</span><span class="pl-s1">embedding_func</span>, ), <span class="pl-s1">vector_storage</span><span class="pl-c1">=</span><span class="pl-s">"FaissVectorDBStorage"</span>, <span class="pl-s1">vector_db_storage_cls_kwargs</span><span class="pl-c1">=</span>{ <span class="pl-s">"cosine_better_than_threshold"</span>: <span class="pl-c1">0.3</span> <span class="pl-c"># Your desired threshold</span> } )</pre></div> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Delete</h2><a id="user-content-delete" class="anchor" aria-label="Permalink: Delete" href="#delete"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Delete Entity: Deleting entities by their names rag.delete_by_entity("Project Gutenberg") # Delete Document: Deleting entities and relationships associated with the document by doc id rag.delete_by_doc_id("doc_id")"><pre><span class="pl-c"># Delete Entity: Deleting entities by their names</span> <span class="pl-s1">rag</span>.<span class="pl-c1">delete_by_entity</span>(<span class="pl-s">"Project Gutenberg"</span>) <span class="pl-c"># Delete Document: Deleting entities and relationships associated with the document by doc id</span> <span class="pl-s1">rag</span>.<span class="pl-c1">delete_by_doc_id</span>(<span class="pl-s">"doc_id"</span>)</pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Edit Entities and Relations</h2><a id="user-content-edit-entities-and-relations" class="anchor" aria-label="Permalink: Edit Entities and Relations" href="#edit-entities-and-relations"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">LightRAG now supports comprehensive knowledge graph management capabilities, allowing you to create, edit, and delete entities and relationships within your knowledge graph.</p> <details> <summary> <b>Create Entities and Relations</b> </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Create new entity entity = rag.create_entity("Google", { "description": "Google is a multinational technology company specializing in internet-related services and products.", "entity_type": "company" }) # Create another entity product = rag.create_entity("Gmail", { "description": "Gmail is an email service developed by Google.", "entity_type": "product" }) # Create relation between entities relation = rag.create_relation("Google", "Gmail", { "description": "Google develops and operates Gmail.", "keywords": "develops operates service", "weight": 2.0 })"><pre><span class="pl-c"># Create new entity</span> <span class="pl-s1">entity</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">create_entity</span>(<span class="pl-s">"Google"</span>, { <span class="pl-s">"description"</span>: <span class="pl-s">"Google is a multinational technology company specializing in internet-related services and products."</span>, <span class="pl-s">"entity_type"</span>: <span class="pl-s">"company"</span> }) <span class="pl-c"># Create another entity</span> <span class="pl-s1">product</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">create_entity</span>(<span class="pl-s">"Gmail"</span>, { <span class="pl-s">"description"</span>: <span class="pl-s">"Gmail is an email service developed by Google."</span>, <span class="pl-s">"entity_type"</span>: <span class="pl-s">"product"</span> }) <span class="pl-c"># Create relation between entities</span> <span class="pl-s1">relation</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">create_relation</span>(<span class="pl-s">"Google"</span>, <span class="pl-s">"Gmail"</span>, { <span class="pl-s">"description"</span>: <span class="pl-s">"Google develops and operates Gmail."</span>, <span class="pl-s">"keywords"</span>: <span class="pl-s">"develops operates service"</span>, <span class="pl-s">"weight"</span>: <span class="pl-c1">2.0</span> })</pre></div> </details> <details> <summary> <b>Edit Entities and Relations</b> </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Edit an existing entity updated_entity = rag.edit_entity("Google", { "description": "Google is a subsidiary of Alphabet Inc., founded in 1998.", "entity_type": "tech_company" }) # Rename an entity (with all its relationships properly migrated) renamed_entity = rag.edit_entity("Gmail", { "entity_name": "Google Mail", "description": "Google Mail (formerly Gmail) is an email service." }) # Edit a relation between entities updated_relation = rag.edit_relation("Google", "Google Mail", { "description": "Google created and maintains Google Mail service.", "keywords": "creates maintains email service", "weight": 3.0 })"><pre><span class="pl-c"># Edit an existing entity</span> <span class="pl-s1">updated_entity</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">edit_entity</span>(<span class="pl-s">"Google"</span>, { <span class="pl-s">"description"</span>: <span class="pl-s">"Google is a subsidiary of Alphabet Inc., founded in 1998."</span>, <span class="pl-s">"entity_type"</span>: <span class="pl-s">"tech_company"</span> }) <span class="pl-c"># Rename an entity (with all its relationships properly migrated)</span> <span class="pl-s1">renamed_entity</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">edit_entity</span>(<span class="pl-s">"Gmail"</span>, { <span class="pl-s">"entity_name"</span>: <span class="pl-s">"Google Mail"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"Google Mail (formerly Gmail) is an email service."</span> }) <span class="pl-c"># Edit a relation between entities</span> <span class="pl-s1">updated_relation</span> <span class="pl-c1">=</span> <span class="pl-s1">rag</span>.<span class="pl-c1">edit_relation</span>(<span class="pl-s">"Google"</span>, <span class="pl-s">"Google Mail"</span>, { <span class="pl-s">"description"</span>: <span class="pl-s">"Google created and maintains Google Mail service."</span>, <span class="pl-s">"keywords"</span>: <span class="pl-s">"creates maintains email service"</span>, <span class="pl-s">"weight"</span>: <span class="pl-c1">3.0</span> })</pre></div> </details> <p dir="auto">All operations are available in both synchronous and asynchronous versions. The asynchronous versions have the prefix "a" (e.g., <code>acreate_entity</code>, <code>aedit_relation</code>).</p> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Entity Operations</h4><a id="user-content-entity-operations" class="anchor" aria-label="Permalink: Entity Operations" href="#entity-operations"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><strong>create_entity</strong>: Creates a new entity with specified attributes</li> <li><strong>edit_entity</strong>: Updates an existing entity's attributes or renames it</li> </ul> <div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">Relation Operations</h4><a id="user-content-relation-operations" class="anchor" aria-label="Permalink: Relation Operations" href="#relation-operations"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <ul dir="auto"> <li><strong>create_relation</strong>: Creates a new relation between existing entities</li> <li><strong>edit_relation</strong>: Updates an existing relation's attributes</li> </ul> <p dir="auto">These operations maintain data consistency across both the graph database and vector database components, ensuring your knowledge graph remains coherent.</p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Data Export Functions</h2><a id="user-content-data-export-functions" class="anchor" aria-label="Permalink: Data Export Functions" href="#data-export-functions"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Overview</h2><a id="user-content-overview-1" class="anchor" aria-label="Permalink: Overview" href="#overview-1"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">LightRAG allows you to export your knowledge graph data in various formats for analysis, sharing, and backup purposes. The system supports exporting entities, relations, and relationship data.</p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Export Functions</h2><a id="user-content-export-functions" class="anchor" aria-label="Permalink: Export Functions" href="#export-functions"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Basic Usage</h3><a id="user-content-basic-usage" class="anchor" aria-label="Permalink: Basic Usage" href="#basic-usage"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Basic CSV export (default format) rag.export_data("knowledge_graph.csv") # Specify any format rag.export_data("output.xlsx", file_format="excel")"><pre><span class="pl-c"># Basic CSV export (default format)</span> <span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"knowledge_graph.csv"</span>) <span class="pl-c"># Specify any format</span> <span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"output.xlsx"</span>, <span class="pl-s1">file_format</span><span class="pl-c1">=</span><span class="pl-s">"excel"</span>)</pre></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Different File Formats supported</h3><a id="user-content-different-file-formats-supported" class="anchor" aria-label="Permalink: Different File Formats supported" href="#different-file-formats-supported"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="#Export data in CSV format rag.export_data("graph_data.csv", file_format="csv") # Export data in Excel sheet rag.export_data("graph_data.xlsx", file_format="excel") # Export data in markdown format rag.export_data("graph_data.md", file_format="md") # Export data in Text rag.export_data("graph_data.txt", file_format="txt")"><pre><span class="pl-c">#Export data in CSV format</span> <span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"graph_data.csv"</span>, <span class="pl-s1">file_format</span><span class="pl-c1">=</span><span class="pl-s">"csv"</span>) <span class="pl-c"># Export data in Excel sheet</span> <span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"graph_data.xlsx"</span>, <span class="pl-s1">file_format</span><span class="pl-c1">=</span><span class="pl-s">"excel"</span>) <span class="pl-c"># Export data in markdown format</span> <span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"graph_data.md"</span>, <span class="pl-s1">file_format</span><span class="pl-c1">=</span><span class="pl-s">"md"</span>) <span class="pl-c"># Export data in Text</span> <span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"graph_data.txt"</span>, <span class="pl-s1">file_format</span><span class="pl-c1">=</span><span class="pl-s">"txt"</span>)</pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Additional Options</h2><a id="user-content-additional-options" class="anchor" aria-label="Permalink: Additional Options" href="#additional-options"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Include vector embeddings in the export (optional):</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="rag.export_data("complete_data.csv", include_vector_data=True)"><pre><span class="pl-s1">rag</span>.<span class="pl-c1">export_data</span>(<span class="pl-s">"complete_data.csv"</span>, <span class="pl-s1">include_vector_data</span><span class="pl-c1">=</span><span class="pl-c1">True</span>)</pre></div> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Data Included in Export</h2><a id="user-content-data-included-in-export" class="anchor" aria-label="Permalink: Data Included in Export" href="#data-included-in-export"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">All exports include:</p> <ul dir="auto"> <li>Entity information (names, IDs, metadata)</li> <li>Relation data (connections between entities)</li> <li>Relationship information from vector database</li> </ul> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Entity Merging</h2><a id="user-content-entity-merging" class="anchor" aria-label="Permalink: Entity Merging" href="#entity-merging"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <details> <summary> <b>Merge Entities and Their Relationships</b> </summary> <p dir="auto">LightRAG now supports merging multiple entities into a single entity, automatically handling all relationships:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Basic entity merging rag.merge_entities( source_entities=["Artificial Intelligence", "AI", "Machine Intelligence"], target_entity="AI Technology" )"><pre><span class="pl-c"># Basic entity merging</span> <span class="pl-s1">rag</span>.<span class="pl-c1">merge_entities</span>( <span class="pl-s1">source_entities</span><span class="pl-c1">=</span>[<span class="pl-s">"Artificial Intelligence"</span>, <span class="pl-s">"AI"</span>, <span class="pl-s">"Machine Intelligence"</span>], <span class="pl-s1">target_entity</span><span class="pl-c1">=</span><span class="pl-s">"AI Technology"</span> )</pre></div> <p dir="auto">With custom merge strategy:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Define custom merge strategy for different fields rag.merge_entities( source_entities=["John Smith", "Dr. Smith", "J. Smith"], target_entity="John Smith", merge_strategy={ "description": "concatenate", # Combine all descriptions "entity_type": "keep_first", # Keep the entity type from the first entity "source_id": "join_unique" # Combine all unique source IDs } )"><pre><span class="pl-c"># Define custom merge strategy for different fields</span> <span class="pl-s1">rag</span>.<span class="pl-c1">merge_entities</span>( <span class="pl-s1">source_entities</span><span class="pl-c1">=</span>[<span class="pl-s">"John Smith"</span>, <span class="pl-s">"Dr. Smith"</span>, <span class="pl-s">"J. Smith"</span>], <span class="pl-s1">target_entity</span><span class="pl-c1">=</span><span class="pl-s">"John Smith"</span>, <span class="pl-s1">merge_strategy</span><span class="pl-c1">=</span>{ <span class="pl-s">"description"</span>: <span class="pl-s">"concatenate"</span>, <span class="pl-c"># Combine all descriptions</span> <span class="pl-s">"entity_type"</span>: <span class="pl-s">"keep_first"</span>, <span class="pl-c"># Keep the entity type from the first entity</span> <span class="pl-s">"source_id"</span>: <span class="pl-s">"join_unique"</span> <span class="pl-c"># Combine all unique source IDs</span> } )</pre></div> <p dir="auto">With custom target entity data:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Specify exact values for the merged entity rag.merge_entities( source_entities=["New York", "NYC", "Big Apple"], target_entity="New York City", target_entity_data={ "entity_type": "LOCATION", "description": "New York City is the most populous city in the United States.", } )"><pre><span class="pl-c"># Specify exact values for the merged entity</span> <span class="pl-s1">rag</span>.<span class="pl-c1">merge_entities</span>( <span class="pl-s1">source_entities</span><span class="pl-c1">=</span>[<span class="pl-s">"New York"</span>, <span class="pl-s">"NYC"</span>, <span class="pl-s">"Big Apple"</span>], <span class="pl-s1">target_entity</span><span class="pl-c1">=</span><span class="pl-s">"New York City"</span>, <span class="pl-s1">target_entity_data</span><span class="pl-c1">=</span>{ <span class="pl-s">"entity_type"</span>: <span class="pl-s">"LOCATION"</span>, <span class="pl-s">"description"</span>: <span class="pl-s">"New York City is the most populous city in the United States."</span>, } )</pre></div> <p dir="auto">Advanced usage combining both approaches:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Merge company entities with both strategy and custom data rag.merge_entities( source_entities=["Microsoft Corp", "Microsoft Corporation", "MSFT"], target_entity="Microsoft", merge_strategy={ "description": "concatenate", # Combine all descriptions "source_id": "join_unique" # Combine source IDs }, target_entity_data={ "entity_type": "ORGANIZATION", } )"><pre><span class="pl-c"># Merge company entities with both strategy and custom data</span> <span class="pl-s1">rag</span>.<span class="pl-c1">merge_entities</span>( <span class="pl-s1">source_entities</span><span class="pl-c1">=</span>[<span class="pl-s">"Microsoft Corp"</span>, <span class="pl-s">"Microsoft Corporation"</span>, <span class="pl-s">"MSFT"</span>], <span class="pl-s1">target_entity</span><span class="pl-c1">=</span><span class="pl-s">"Microsoft"</span>, <span class="pl-s1">merge_strategy</span><span class="pl-c1">=</span>{ <span class="pl-s">"description"</span>: <span class="pl-s">"concatenate"</span>, <span class="pl-c"># Combine all descriptions</span> <span class="pl-s">"source_id"</span>: <span class="pl-s">"join_unique"</span> <span class="pl-c"># Combine source IDs</span> }, <span class="pl-s1">target_entity_data</span><span class="pl-c1">=</span>{ <span class="pl-s">"entity_type"</span>: <span class="pl-s">"ORGANIZATION"</span>, } )</pre></div> <p dir="auto">When merging entities:</p> <ul dir="auto"> <li>All relationships from source entities are redirected to the target entity</li> <li>Duplicate relationships are intelligently merged</li> <li>Self-relationships (loops) are prevented</li> <li>Source entities are removed after merging</li> <li>Relationship weights and attributes are preserved</li> </ul> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Cache</h2><a id="user-content-cache" class="anchor" aria-label="Permalink: Cache" href="#cache"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <details> <summary> <b>Clear Cache</b> </summary> <p dir="auto">You can clear the LLM response cache with different modes:</p> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="# Clear all cache await rag.aclear_cache() # Clear local mode cache await rag.aclear_cache(modes=["local"]) # Clear extraction cache await rag.aclear_cache(modes=["default"]) # Clear multiple modes await rag.aclear_cache(modes=["local", "global", "hybrid"]) # Synchronous version rag.clear_cache(modes=["local"])"><pre><span class="pl-c"># Clear all cache</span> <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">aclear_cache</span>() <span class="pl-c"># Clear local mode cache</span> <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">aclear_cache</span>(<span class="pl-s1">modes</span><span class="pl-c1">=</span>[<span class="pl-s">"local"</span>]) <span class="pl-c"># Clear extraction cache</span> <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">aclear_cache</span>(<span class="pl-s1">modes</span><span class="pl-c1">=</span>[<span class="pl-s">"default"</span>]) <span class="pl-c"># Clear multiple modes</span> <span class="pl-k">await</span> <span class="pl-s1">rag</span>.<span class="pl-c1">aclear_cache</span>(<span class="pl-s1">modes</span><span class="pl-c1">=</span>[<span class="pl-s">"local"</span>, <span class="pl-s">"global"</span>, <span class="pl-s">"hybrid"</span>]) <span class="pl-c"># Synchronous version</span> <span class="pl-s1">rag</span>.<span class="pl-c1">clear_cache</span>(<span class="pl-s1">modes</span><span class="pl-c1">=</span>[<span class="pl-s">"local"</span>])</pre></div> <p dir="auto">Valid modes are:</p> <ul dir="auto"> <li><code>"default"</code>: Extraction cache</li> <li><code>"naive"</code>: Naive search cache</li> <li><code>"local"</code>: Local search cache</li> <li><code>"global"</code>: Global search cache</li> <li><code>"hybrid"</code>: Hybrid search cache</li> <li><code>"mix"</code>: Mix search cache</li> </ul> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">LightRAG init parameters</h2><a id="user-content-lightrag-init-parameters" class="anchor" aria-label="Permalink: LightRAG init parameters" href="#lightrag-init-parameters"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <details> <summary> Parameters </summary> <markdown-accessiblity-table><table> <thead> <tr> <th><strong>Parameter</strong></th> <th><strong>Type</strong></th> <th><strong>Explanation</strong></th> <th><strong>Default</strong></th> </tr> </thead> <tbody> <tr> <td><strong>working_dir</strong></td> <td><code>str</code></td> <td>Directory where the cache will be stored</td> <td><code>lightrag_cache+timestamp</code></td> </tr> <tr> <td><strong>kv_storage</strong></td> <td><code>str</code></td> <td>Storage type for documents and text chunks. Supported types:<code>JsonKVStorage</code>, <code>OracleKVStorage</code></td> <td><code>JsonKVStorage</code></td> </tr> <tr> <td><strong>vector_storage</strong></td> <td><code>str</code></td> <td>Storage type for embedding vectors. Supported types:<code>NanoVectorDBStorage</code>, <code>OracleVectorDBStorage</code></td> <td><code>NanoVectorDBStorage</code></td> </tr> <tr> <td><strong>graph_storage</strong></td> <td><code>str</code></td> <td>Storage type for graph edges and nodes. Supported types:<code>NetworkXStorage</code>, <code>Neo4JStorage</code>, <code>OracleGraphStorage</code></td> <td><code>NetworkXStorage</code></td> </tr> <tr> <td><strong>chunk_token_size</strong></td> <td><code>int</code></td> <td>Maximum token size per chunk when splitting documents</td> <td><code>1200</code></td> </tr> <tr> <td><strong>chunk_overlap_token_size</strong></td> <td><code>int</code></td> <td>Overlap token size between two chunks when splitting documents</td> <td><code>100</code></td> </tr> <tr> <td><strong>tiktoken_model_name</strong></td> <td><code>str</code></td> <td>Model name for the Tiktoken encoder used to calculate token numbers</td> <td><code>gpt-4o-mini</code></td> </tr> <tr> <td><strong>entity_extract_max_gleaning</strong></td> <td><code>int</code></td> <td>Number of loops in the entity extraction process, appending history messages</td> <td><code>1</code></td> </tr> <tr> <td><strong>entity_summary_to_max_tokens</strong></td> <td><code>int</code></td> <td>Maximum token size for each entity summary</td> <td><code>500</code></td> </tr> <tr> <td><strong>node_embedding_algorithm</strong></td> <td><code>str</code></td> <td>Algorithm for node embedding (currently not used)</td> <td><code>node2vec</code></td> </tr> <tr> <td><strong>node2vec_params</strong></td> <td><code>dict</code></td> <td>Parameters for node embedding</td> <td><code>{"dimensions": 1536,"num_walks": 10,"walk_length": 40,"window_size": 2,"iterations": 3,"random_seed": 3,}</code></td> </tr> <tr> <td><strong>embedding_func</strong></td> <td><code>EmbeddingFunc</code></td> <td>Function to generate embedding vectors from text</td> <td><code>openai_embed</code></td> </tr> <tr> <td><strong>embedding_batch_num</strong></td> <td><code>int</code></td> <td>Maximum batch size for embedding processes (multiple texts sent per batch)</td> <td><code>32</code></td> </tr> <tr> <td><strong>embedding_func_max_async</strong></td> <td><code>int</code></td> <td>Maximum number of concurrent asynchronous embedding processes</td> <td><code>16</code></td> </tr> <tr> <td><strong>llm_model_func</strong></td> <td><code>callable</code></td> <td>Function for LLM generation</td> <td><code>gpt_4o_mini_complete</code></td> </tr> <tr> <td><strong>llm_model_name</strong></td> <td><code>str</code></td> <td>LLM model name for generation</td> <td><code>meta-llama/Llama-3.2-1B-Instruct</code></td> </tr> <tr> <td><strong>llm_model_max_token_size</strong></td> <td><code>int</code></td> <td>Maximum token size for LLM generation (affects entity relation summaries)</td> <td><code>32768</code>(default value changed by env var MAX_TOKENS)</td> </tr> <tr> <td><strong>llm_model_max_async</strong></td> <td><code>int</code></td> <td>Maximum number of concurrent asynchronous LLM processes</td> <td><code>4</code>(default value changed by env var MAX_ASYNC)</td> </tr> <tr> <td><strong>llm_model_kwargs</strong></td> <td><code>dict</code></td> <td>Additional parameters for LLM generation</td> <td></td> </tr> <tr> <td><strong>vector_db_storage_cls_kwargs</strong></td> <td><code>dict</code></td> <td>Additional parameters for vector database, like setting the threshold for nodes and relations retrieval.</td> <td>cosine_better_than_threshold: 0.2(default value changed by env var COSINE_THRESHOLD)</td> </tr> <tr> <td><strong>enable_llm_cache</strong></td> <td><code>bool</code></td> <td>If <code>TRUE</code>, stores LLM results in cache; repeated prompts return cached responses</td> <td><code>TRUE</code></td> </tr> <tr> <td><strong>enable_llm_cache_for_entity_extract</strong></td> <td><code>bool</code></td> <td>If <code>TRUE</code>, stores LLM results in cache for entity extraction; Good for beginners to debug your application</td> <td><code>TRUE</code></td> </tr> <tr> <td><strong>addon_params</strong></td> <td><code>dict</code></td> <td>Additional parameters, e.g.,<code>{"example_number": 1, "language": "Simplified Chinese", "entity_types": ["organization", "person", "geo", "event"], "insert_batch_size": 10}</code>: sets example limit, output language, and batch size for document processing</td> <td><code>example_number: all examples, language: English, insert_batch_size: 10</code></td> </tr> <tr> <td><strong>convert_response_to_json_func</strong></td> <td><code>callable</code></td> <td>Not used</td> <td><code>convert_response_to_json</code></td> </tr> <tr> <td><strong>embedding_cache_config</strong></td> <td><code>dict</code></td> <td>Configuration for question-answer caching. Contains three parameters:<code><br></code>- <code>enabled</code>: Boolean value to enable/disable cache lookup functionality. When enabled, the system will check cached responses before generating new answers.<code><br></code>- <code>similarity_threshold</code>: Float value (0-1), similarity threshold. When a new question's similarity with a cached question exceeds this threshold, the cached answer will be returned directly without calling the LLM.<code><br></code>- <code>use_llm_check</code>: Boolean value to enable/disable LLM similarity verification. When enabled, LLM will be used as a secondary check to verify the similarity between questions before returning cached answers.</td> <td>Default:<code>{"enabled": False, "similarity_threshold": 0.95, "use_llm_check": False}</code></td> </tr> </tbody> </table></markdown-accessiblity-table> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Error Handling</h2><a id="user-content-error-handling" class="anchor" aria-label="Permalink: Error Handling" href="#error-handling"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <details> <summary>Click to view error handling details</summary> <p dir="auto">The API includes comprehensive error handling:</p> <ul dir="auto"> <li>File not found errors (404)</li> <li>Processing errors (500)</li> <li>Supports multiple file encodings (UTF-8 and GBK)</li> </ul> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">API</h2><a id="user-content-api" class="anchor" aria-label="Permalink: API" href="#api"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">LightRag can be installed with API support to serve a Fast api interface to perform data upload and indexing/Rag operations/Rescan of the input folder etc..</p> <p dir="auto"><a href="/HKUDS/LightRAG/blob/main/lightrag/api/README.md">LightRag API</a></p> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Graph Visualization</h2><a id="user-content-graph-visualization" class="anchor" aria-label="Permalink: Graph Visualization" href="#graph-visualization"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <details> <summary> <b>Graph visualization with html</b> </summary> <ul dir="auto"> <li>The following code can be found in <code>examples/graph_visual_with_html.py</code></li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import networkx as nx from pyvis.network import Network # Load the GraphML file G = nx.read_graphml('./dickens/graph_chunk_entity_relation.graphml') # Create a Pyvis network net = Network(notebook=True) # Convert NetworkX graph to Pyvis network net.from_nx(G) # Save and display the network net.show('knowledge_graph.html')"><pre><span class="pl-k">import</span> <span class="pl-s1">networkx</span> <span class="pl-k">as</span> <span class="pl-s1">nx</span> <span class="pl-k">from</span> <span class="pl-s1">pyvis</span>.<span class="pl-s1">network</span> <span class="pl-k">import</span> <span class="pl-v">Network</span> <span class="pl-c"># Load the GraphML file</span> <span class="pl-c1">G</span> <span class="pl-c1">=</span> <span class="pl-s1">nx</span>.<span class="pl-c1">read_graphml</span>(<span class="pl-s">'./dickens/graph_chunk_entity_relation.graphml'</span>) <span class="pl-c"># Create a Pyvis network</span> <span class="pl-s1">net</span> <span class="pl-c1">=</span> <span class="pl-en">Network</span>(<span class="pl-s1">notebook</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-c"># Convert NetworkX graph to Pyvis network</span> <span class="pl-s1">net</span>.<span class="pl-c1">from_nx</span>(<span class="pl-c1">G</span>) <span class="pl-c"># Save and display the network</span> <span class="pl-s1">net</span>.<span class="pl-c1">show</span>(<span class="pl-s">'knowledge_graph.html'</span>)</pre></div> </details> <details> <summary> <b>Graph visualization with Neo4</b> </summary> <ul dir="auto"> <li>The following code can be found in <code>examples/graph_visual_with_neo4j.py</code></li> </ul> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="import os import json from lightrag.utils import xml_to_json from neo4j import GraphDatabase # Constants WORKING_DIR = "./dickens" BATCH_SIZE_NODES = 500 BATCH_SIZE_EDGES = 100 # Neo4j connection credentials NEO4J_URI = "bolt://localhost:7687" NEO4J_USERNAME = "neo4j" NEO4J_PASSWORD = "your_password" def convert_xml_to_json(xml_path, output_path): """Converts XML file to JSON and saves the output.""" if not os.path.exists(xml_path): print(f"Error: File not found - {xml_path}") return None json_data = xml_to_json(xml_path) if json_data: with open(output_path, 'w', encoding='utf-8') as f: json.dump(json_data, f, ensure_ascii=False, indent=2) print(f"JSON file created: {output_path}") return json_data else: print("Failed to create JSON data") return None def process_in_batches(tx, query, data, batch_size): """Process data in batches and execute the given query.""" for i in range(0, len(data), batch_size): batch = data[i:i + batch_size] tx.run(query, {"nodes": batch} if "nodes" in query else {"edges": batch}) def main(): # Paths xml_file = os.path.join(WORKING_DIR, 'graph_chunk_entity_relation.graphml') json_file = os.path.join(WORKING_DIR, 'graph_data.json') # Convert XML to JSON json_data = convert_xml_to_json(xml_file, json_file) if json_data is None: return # Load nodes and edges nodes = json_data.get('nodes', []) edges = json_data.get('edges', []) # Neo4j queries create_nodes_query = """ UNWIND $nodes AS node MERGE (e:Entity {id: node.id}) SET e.entity_type = node.entity_type, e.description = node.description, e.source_id = node.source_id, e.displayName = node.id REMOVE e:Entity WITH e, node CALL apoc.create.addLabels(e, [node.entity_type]) YIELD node AS labeledNode RETURN count(*) """ create_edges_query = """ UNWIND $edges AS edge MATCH (source {id: edge.source}) MATCH (target {id: edge.target}) WITH source, target, edge, CASE WHEN edge.keywords CONTAINS 'lead' THEN 'lead' WHEN edge.keywords CONTAINS 'participate' THEN 'participate' WHEN edge.keywords CONTAINS 'uses' THEN 'uses' WHEN edge.keywords CONTAINS 'located' THEN 'located' WHEN edge.keywords CONTAINS 'occurs' THEN 'occurs' ELSE REPLACE(SPLIT(edge.keywords, ',')[0], '\"', '') END AS relType CALL apoc.create.relationship(source, relType, { weight: edge.weight, description: edge.description, keywords: edge.keywords, source_id: edge.source_id }, target) YIELD rel RETURN count(*) """ set_displayname_and_labels_query = """ MATCH (n) SET n.displayName = n.id WITH n CALL apoc.create.setLabels(n, [n.entity_type]) YIELD node RETURN count(*) """ # Create a Neo4j driver driver = GraphDatabase.driver(NEO4J_URI, auth=(NEO4J_USERNAME, NEO4J_PASSWORD)) try: # Execute queries in batches with driver.session() as session: # Insert nodes in batches session.execute_write(process_in_batches, create_nodes_query, nodes, BATCH_SIZE_NODES) # Insert edges in batches session.execute_write(process_in_batches, create_edges_query, edges, BATCH_SIZE_EDGES) # Set displayName and labels session.run(set_displayname_and_labels_query) except Exception as e: print(f"Error occurred: {e}") finally: driver.close() if __name__ == "__main__": main()"><pre><span class="pl-k">import</span> <span class="pl-s1">os</span> <span class="pl-k">import</span> <span class="pl-s1">json</span> <span class="pl-k">from</span> <span class="pl-s1">lightrag</span>.<span class="pl-s1">utils</span> <span class="pl-k">import</span> <span class="pl-s1">xml_to_json</span> <span class="pl-k">from</span> <span class="pl-s1">neo4j</span> <span class="pl-k">import</span> <span class="pl-v">GraphDatabase</span> <span class="pl-c"># Constants</span> <span class="pl-c1">WORKING_DIR</span> <span class="pl-c1">=</span> <span class="pl-s">"./dickens"</span> <span class="pl-c1">BATCH_SIZE_NODES</span> <span class="pl-c1">=</span> <span class="pl-c1">500</span> <span class="pl-c1">BATCH_SIZE_EDGES</span> <span class="pl-c1">=</span> <span class="pl-c1">100</span> <span class="pl-c"># Neo4j connection credentials</span> <span class="pl-v">NEO4J_URI</span> <span class="pl-c1">=</span> <span class="pl-s">"bolt://localhost:7687"</span> <span class="pl-v">NEO4J_USERNAME</span> <span class="pl-c1">=</span> <span class="pl-s">"neo4j"</span> <span class="pl-v">NEO4J_PASSWORD</span> <span class="pl-c1">=</span> <span class="pl-s">"your_password"</span> <span class="pl-k">def</span> <span class="pl-en">convert_xml_to_json</span>(<span class="pl-s1">xml_path</span>, <span class="pl-s1">output_path</span>): <span class="pl-s">"""Converts XML file to JSON and saves the output."""</span> <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">exists</span>(<span class="pl-s1">xml_path</span>): <span class="pl-en">print</span>(<span class="pl-s">f"Error: File not found - <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">xml_path</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">return</span> <span class="pl-c1">None</span> <span class="pl-s1">json_data</span> <span class="pl-c1">=</span> <span class="pl-en">xml_to_json</span>(<span class="pl-s1">xml_path</span>) <span class="pl-k">if</span> <span class="pl-s1">json_data</span>: <span class="pl-k">with</span> <span class="pl-en">open</span>(<span class="pl-s1">output_path</span>, <span class="pl-s">'w'</span>, <span class="pl-s1">encoding</span><span class="pl-c1">=</span><span class="pl-s">'utf-8'</span>) <span class="pl-k">as</span> <span class="pl-s1">f</span>: <span class="pl-s1">json</span>.<span class="pl-c1">dump</span>(<span class="pl-s1">json_data</span>, <span class="pl-s1">f</span>, <span class="pl-s1">ensure_ascii</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">indent</span><span class="pl-c1">=</span><span class="pl-c1">2</span>) <span class="pl-en">print</span>(<span class="pl-s">f"JSON file created: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">output_path</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">return</span> <span class="pl-s1">json_data</span> <span class="pl-k">else</span>: <span class="pl-en">print</span>(<span class="pl-s">"Failed to create JSON data"</span>) <span class="pl-k">return</span> <span class="pl-c1">None</span> <span class="pl-k">def</span> <span class="pl-en">process_in_batches</span>(<span class="pl-s1">tx</span>, <span class="pl-s1">query</span>, <span class="pl-s1">data</span>, <span class="pl-s1">batch_size</span>): <span class="pl-s">"""Process data in batches and execute the given query."""</span> <span class="pl-k">for</span> <span class="pl-s1">i</span> <span class="pl-c1">in</span> <span class="pl-en">range</span>(<span class="pl-c1">0</span>, <span class="pl-en">len</span>(<span class="pl-s1">data</span>), <span class="pl-s1">batch_size</span>): <span class="pl-s1">batch</span> <span class="pl-c1">=</span> <span class="pl-s1">data</span>[<span class="pl-s1">i</span>:<span class="pl-s1">i</span> <span class="pl-c1">+</span> <span class="pl-s1">batch_size</span>] <span class="pl-s1">tx</span>.<span class="pl-c1">run</span>(<span class="pl-s1">query</span>, {<span class="pl-s">"nodes"</span>: <span class="pl-s1">batch</span>} <span class="pl-k">if</span> <span class="pl-s">"nodes"</span> <span class="pl-c1">in</span> <span class="pl-s1">query</span> <span class="pl-k">else</span> {<span class="pl-s">"edges"</span>: <span class="pl-s1">batch</span>}) <span class="pl-k">def</span> <span class="pl-en">main</span>(): <span class="pl-c"># Paths</span> <span class="pl-s1">xml_file</span> <span class="pl-c1">=</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">join</span>(<span class="pl-c1">WORKING_DIR</span>, <span class="pl-s">'graph_chunk_entity_relation.graphml'</span>) <span class="pl-s1">json_file</span> <span class="pl-c1">=</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">join</span>(<span class="pl-c1">WORKING_DIR</span>, <span class="pl-s">'graph_data.json'</span>) <span class="pl-c"># Convert XML to JSON</span> <span class="pl-s1">json_data</span> <span class="pl-c1">=</span> <span class="pl-en">convert_xml_to_json</span>(<span class="pl-s1">xml_file</span>, <span class="pl-s1">json_file</span>) <span class="pl-k">if</span> <span class="pl-s1">json_data</span> <span class="pl-c1">is</span> <span class="pl-c1">None</span>: <span class="pl-k">return</span> <span class="pl-c"># Load nodes and edges</span> <span class="pl-s1">nodes</span> <span class="pl-c1">=</span> <span class="pl-s1">json_data</span>.<span class="pl-c1">get</span>(<span class="pl-s">'nodes'</span>, []) <span class="pl-s1">edges</span> <span class="pl-c1">=</span> <span class="pl-s1">json_data</span>.<span class="pl-c1">get</span>(<span class="pl-s">'edges'</span>, []) <span class="pl-c"># Neo4j queries</span> <span class="pl-s1">create_nodes_query</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> UNWIND $nodes AS node</span> <span class="pl-s"> MERGE (e:Entity {id: node.id})</span> <span class="pl-s"> SET e.entity_type = node.entity_type,</span> <span class="pl-s"> e.description = node.description,</span> <span class="pl-s"> e.source_id = node.source_id,</span> <span class="pl-s"> e.displayName = node.id</span> <span class="pl-s"> REMOVE e:Entity</span> <span class="pl-s"> WITH e, node</span> <span class="pl-s"> CALL apoc.create.addLabels(e, [node.entity_type]) YIELD node AS labeledNode</span> <span class="pl-s"> RETURN count(*)</span> <span class="pl-s"> """</span> <span class="pl-s1">create_edges_query</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> UNWIND $edges AS edge</span> <span class="pl-s"> MATCH (source {id: edge.source})</span> <span class="pl-s"> MATCH (target {id: edge.target})</span> <span class="pl-s"> WITH source, target, edge,</span> <span class="pl-s"> CASE</span> <span class="pl-s"> WHEN edge.keywords CONTAINS 'lead' THEN 'lead'</span> <span class="pl-s"> WHEN edge.keywords CONTAINS 'participate' THEN 'participate'</span> <span class="pl-s"> WHEN edge.keywords CONTAINS 'uses' THEN 'uses'</span> <span class="pl-s"> WHEN edge.keywords CONTAINS 'located' THEN 'located'</span> <span class="pl-s"> WHEN edge.keywords CONTAINS 'occurs' THEN 'occurs'</span> <span class="pl-s"> ELSE REPLACE(SPLIT(edge.keywords, ',')[0], '<span class="pl-cce">\"</span>', '')</span> <span class="pl-s"> END AS relType</span> <span class="pl-s"> CALL apoc.create.relationship(source, relType, {</span> <span class="pl-s"> weight: edge.weight,</span> <span class="pl-s"> description: edge.description,</span> <span class="pl-s"> keywords: edge.keywords,</span> <span class="pl-s"> source_id: edge.source_id</span> <span class="pl-s"> }, target) YIELD rel</span> <span class="pl-s"> RETURN count(*)</span> <span class="pl-s"> """</span> <span class="pl-s1">set_displayname_and_labels_query</span> <span class="pl-c1">=</span> <span class="pl-s">"""</span> <span class="pl-s"> MATCH (n)</span> <span class="pl-s"> SET n.displayName = n.id</span> <span class="pl-s"> WITH n</span> <span class="pl-s"> CALL apoc.create.setLabels(n, [n.entity_type]) YIELD node</span> <span class="pl-s"> RETURN count(*)</span> <span class="pl-s"> """</span> <span class="pl-c"># Create a Neo4j driver</span> <span class="pl-s1">driver</span> <span class="pl-c1">=</span> <span class="pl-v">GraphDatabase</span>.<span class="pl-c1">driver</span>(<span class="pl-v">NEO4J_URI</span>, <span class="pl-s1">auth</span><span class="pl-c1">=</span>(<span class="pl-v">NEO4J_USERNAME</span>, <span class="pl-v">NEO4J_PASSWORD</span>)) <span class="pl-k">try</span>: <span class="pl-c"># Execute queries in batches</span> <span class="pl-k">with</span> <span class="pl-s1">driver</span>.<span class="pl-c1">session</span>() <span class="pl-k">as</span> <span class="pl-s1">session</span>: <span class="pl-c"># Insert nodes in batches</span> <span class="pl-s1">session</span>.<span class="pl-c1">execute_write</span>(<span class="pl-s1">process_in_batches</span>, <span class="pl-s1">create_nodes_query</span>, <span class="pl-s1">nodes</span>, <span class="pl-c1">BATCH_SIZE_NODES</span>) <span class="pl-c"># Insert edges in batches</span> <span class="pl-s1">session</span>.<span class="pl-c1">execute_write</span>(<span class="pl-s1">process_in_batches</span>, <span class="pl-s1">create_edges_query</span>, <span class="pl-s1">edges</span>, <span class="pl-c1">BATCH_SIZE_EDGES</span>) <span class="pl-c"># Set displayName and labels</span> <span class="pl-s1">session</span>.<span class="pl-c1">run</span>(<span class="pl-s1">set_displayname_and_labels_query</span>) <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>: <span class="pl-en">print</span>(<span class="pl-s">f"Error occurred: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">finally</span>: <span class="pl-s1">driver</span>.<span class="pl-c1">close</span>() <span class="pl-k">if</span> <span class="pl-s1">__name__</span> <span class="pl-c1">==</span> <span class="pl-s">"__main__"</span>: <span class="pl-en">main</span>()</pre></div> </details> <details> <summary> <b>Graphml 3d visualizer</b> </summary> <p dir="auto">LightRag can be installed with Tools support to add extra tools like the graphml 3d visualizer.</p> <p dir="auto"><a href="/HKUDS/LightRAG/blob/main/lightrag/tools/lightrag_visualizer/README.md">LightRag Visualizer</a></p> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Evaluation</h2><a id="user-content-evaluation" class="anchor" aria-label="Permalink: Evaluation" href="#evaluation"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Dataset</h3><a id="user-content-dataset" class="anchor" aria-label="Permalink: Dataset" href="#dataset"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">The dataset used in LightRAG can be downloaded from <a href="https://huggingface.co/datasets/TommyChien/UltraDomain" rel="nofollow">TommyChien/UltraDomain</a>.</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Generate Query</h3><a id="user-content-generate-query" class="anchor" aria-label="Permalink: Generate Query" href="#generate-query"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">LightRAG uses the following prompt to generate high-level queries, with the corresponding code in <code>example/generate_query.py</code>.</p> <details> <summary> Prompt </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="Given the following description of a dataset: {description} Please identify 5 potential users who would engage with this dataset. For each user, list 5 tasks they would perform with this dataset. Then, for each (user, task) combination, generate 5 questions that require a high-level understanding of the entire dataset. Output the results in the following structure: - User 1: [user description] - Task 1: [task description] - Question 1: - Question 2: - Question 3: - Question 4: - Question 5: - Task 2: [task description] ... - Task 5: [task description] - User 2: [user description] ... - User 5: [user description] ..."><pre><span class="pl-v">Given</span> <span class="pl-s1">the</span> <span class="pl-s1">following</span> <span class="pl-s1">description</span> <span class="pl-s1">of</span> <span class="pl-s1">a</span> <span class="pl-s1">dataset</span>: {<span class="pl-s1">description</span>} <span class="pl-v">Please</span> <span class="pl-s1">identify</span> <span class="pl-c1">5</span> <span class="pl-s1">potential</span> <span class="pl-s1">users</span> <span class="pl-s1">who</span> <span class="pl-s1">would</span> <span class="pl-s1">engage</span> <span class="pl-k">with</span> <span class="pl-s1">this</span> <span class="pl-s1">dataset</span>. <span class="pl-c1">For</span> <span class="pl-s1">each</span> <span class="pl-s1">user</span>, <span class="pl-s1">list</span> <span class="pl-c1">5</span> <span class="pl-s1">tasks</span> <span class="pl-s1">they</span> <span class="pl-s1">would</span> <span class="pl-s1">perform</span> <span class="pl-k">with</span> <span class="pl-s1">this</span> <span class="pl-s1">dataset</span>. <span class="pl-c1">Then</span>, <span class="pl-s1">for</span> <span class="pl-en">each</span> (<span class="pl-s1">user</span>, <span class="pl-s1">task</span>) <span class="pl-s1">combination</span>, <span class="pl-s1">generate</span> <span class="pl-c1">5</span> <span class="pl-s1">questions</span> <span class="pl-s1">that</span> <span class="pl-s1">require</span> <span class="pl-s1">a</span> <span class="pl-s1">high</span><span class="pl-c1">-</span><span class="pl-s1">level</span> <span class="pl-s1">understanding</span> <span class="pl-s1">of</span> <span class="pl-s1">the</span> <span class="pl-s1">entire</span> <span class="pl-s1">dataset</span>. <span class="pl-c1">Output</span> <span class="pl-s1">the</span> <span class="pl-s1">results</span> <span class="pl-c1">in</span> <span class="pl-s1">the</span> <span class="pl-s1">following</span> <span class="pl-s1">structure</span>: <span class="pl-c1">-</span> <span class="pl-v">User</span> <span class="pl-c1">1</span>: [<span class="pl-s1">user</span> <span class="pl-s1">description</span>] <span class="pl-c1">-</span> <span class="pl-v">Task</span> <span class="pl-c1">1</span>: [<span class="pl-s1">task</span> <span class="pl-s1">description</span>] <span class="pl-c1">-</span> <span class="pl-v">Question</span> <span class="pl-c1">1</span>: <span class="pl-c1">-</span> <span class="pl-v">Question</span> <span class="pl-c1">2</span>: <span class="pl-c1">-</span> <span class="pl-v">Question</span> <span class="pl-c1">3</span>: <span class="pl-c1">-</span> <span class="pl-v">Question</span> <span class="pl-c1">4</span>: <span class="pl-c1">-</span> <span class="pl-v">Question</span> <span class="pl-c1">5</span>: <span class="pl-c1">-</span> <span class="pl-v">Task</span> <span class="pl-c1">2</span>: [<span class="pl-s1">task</span> <span class="pl-s1">description</span>] ... <span class="pl-c1">-</span> <span class="pl-v">Task</span> <span class="pl-c1">5</span>: [<span class="pl-s1">task</span> <span class="pl-s1">description</span>] <span class="pl-c1">-</span> <span class="pl-v">User</span> <span class="pl-c1">2</span>: [<span class="pl-s1">user</span> <span class="pl-s1">description</span>] ... <span class="pl-c1">-</span> <span class="pl-v">User</span> <span class="pl-c1">5</span>: [<span class="pl-s1">user</span> <span class="pl-s1">description</span>] ...</pre></div> </details> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Batch Eval</h3><a id="user-content-batch-eval" class="anchor" aria-label="Permalink: Batch Eval" href="#batch-eval"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">To evaluate the performance of two RAG systems on high-level queries, LightRAG uses the following prompt, with the specific code available in <code>example/batch_eval.py</code>.</p> <details> <summary> Prompt </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="---Role--- You are an expert tasked with evaluating two answers to the same question based on three criteria: **Comprehensiveness**, **Diversity**, and **Empowerment**. ---Goal--- You will evaluate two answers to the same question based on three criteria: **Comprehensiveness**, **Diversity**, and **Empowerment**. - **Comprehensiveness**: How much detail does the answer provide to cover all aspects and details of the question? - **Diversity**: How varied and rich is the answer in providing different perspectives and insights on the question? - **Empowerment**: How well does the answer help the reader understand and make informed judgments about the topic? For each criterion, choose the better answer (either Answer 1 or Answer 2) and explain why. Then, select an overall winner based on these three categories. Here is the question: {query} Here are the two answers: **Answer 1:** {answer1} **Answer 2:** {answer2} Evaluate both answers using the three criteria listed above and provide detailed explanations for each criterion. Output your evaluation in the following JSON format: {{ "Comprehensiveness": {{ "Winner": "[Answer 1 or Answer 2]", "Explanation": "[Provide explanation here]" }}, "Empowerment": {{ "Winner": "[Answer 1 or Answer 2]", "Explanation": "[Provide explanation here]" }}, "Overall Winner": {{ "Winner": "[Answer 1 or Answer 2]", "Explanation": "[Summarize why this answer is the overall winner based on the three criteria]" }} }}"><pre><span class="pl-c1">-</span><span class="pl-c1">-</span><span class="pl-c1">-</span><span class="pl-v">Role</span><span class="pl-c1">-</span><span class="pl-c1">-</span><span class="pl-c1">-</span> <span class="pl-v">You</span> <span class="pl-s1">are</span> <span class="pl-s1">an</span> <span class="pl-s1">expert</span> <span class="pl-s1">tasked</span> <span class="pl-k">with</span> <span class="pl-s1">evaluating</span> <span class="pl-s1">two</span> <span class="pl-s1">answers</span> <span class="pl-s1">to</span> <span class="pl-s1">the</span> <span class="pl-s1">same</span> <span class="pl-s1">question</span> <span class="pl-s1">based</span> <span class="pl-s1">on</span> <span class="pl-s1">three</span> <span class="pl-s1">criteria</span>: <span class="pl-c1">**</span><span class="pl-v">Comprehensiveness</span><span class="pl-c1">**</span>, <span class="pl-c1">*</span><span class="pl-c1">*</span><span class="pl-v">Diversity</span><span class="pl-c1">**</span>, <span class="pl-s1">and</span> <span class="pl-c1">**</span><span class="pl-v">Empowerment</span><span class="pl-c1">**</span>. <span class="pl-c1">-</span><span class="pl-c1">-</span><span class="pl-c1">-</span><span class="pl-v">Goal</span><span class="pl-c1">-</span><span class="pl-c1">-</span><span class="pl-c1">-</span> <span class="pl-v">You</span> <span class="pl-s1">will</span> <span class="pl-s1">evaluate</span> <span class="pl-s1">two</span> <span class="pl-s1">answers</span> <span class="pl-s1">to</span> <span class="pl-s1">the</span> <span class="pl-s1">same</span> <span class="pl-s1">question</span> <span class="pl-s1">based</span> <span class="pl-s1">on</span> <span class="pl-s1">three</span> <span class="pl-s1">criteria</span>: <span class="pl-c1">**</span><span class="pl-v">Comprehensiveness</span><span class="pl-c1">**</span>, <span class="pl-c1">*</span><span class="pl-c1">*</span><span class="pl-v">Diversity</span><span class="pl-c1">**</span>, <span class="pl-s1">and</span> <span class="pl-c1">**</span><span class="pl-v">Empowerment</span><span class="pl-c1">**</span>. <span class="pl-c1">-</span> <span class="pl-c1">*</span><span class="pl-c1">*</span><span class="pl-v">Comprehensiveness</span><span class="pl-c1">**</span>: <span class="pl-v">How</span> <span class="pl-s1">much</span> <span class="pl-s1">detail</span> <span class="pl-s1">does</span> <span class="pl-s1">the</span> <span class="pl-s1">answer</span> <span class="pl-s1">provide</span> <span class="pl-s1">to</span> <span class="pl-s1">cover</span> <span class="pl-s1">all</span> <span class="pl-s1">aspects</span> <span class="pl-c1">and</span> <span class="pl-s1">details</span> <span class="pl-s1">of</span> <span class="pl-s1">the</span> <span class="pl-s1">question</span>? <span class="pl-c1">-</span> <span class="pl-c1">*</span><span class="pl-c1">*</span><span class="pl-v">Diversity</span><span class="pl-c1">**</span>: <span class="pl-v">How</span> <span class="pl-s1">varied</span> <span class="pl-c1">and</span> <span class="pl-s1">rich</span> <span class="pl-c1">is</span> <span class="pl-s1">the</span> <span class="pl-s1">answer</span> <span class="pl-c1">in</span> <span class="pl-s1">providing</span> <span class="pl-s1">different</span> <span class="pl-s1">perspectives</span> <span class="pl-c1">and</span> <span class="pl-s1">insights</span> <span class="pl-s1">on</span> <span class="pl-s1">the</span> <span class="pl-s1">question</span>? <span class="pl-c1">-</span> <span class="pl-c1">*</span><span class="pl-c1">*</span><span class="pl-v">Empowerment</span><span class="pl-c1">**</span>: <span class="pl-v">How</span> <span class="pl-s1">well</span> <span class="pl-s1">does</span> <span class="pl-s1">the</span> <span class="pl-s1">answer</span> <span class="pl-s1">help</span> <span class="pl-s1">the</span> <span class="pl-s1">reader</span> <span class="pl-s1">understand</span> <span class="pl-c1">and</span> <span class="pl-s1">make</span> <span class="pl-s1">informed</span> <span class="pl-s1">judgments</span> <span class="pl-s1">about</span> <span class="pl-s1">the</span> <span class="pl-s1">topic</span>? <span class="pl-v">For</span> <span class="pl-s1">each</span> <span class="pl-s1">criterion</span>, <span class="pl-s1">choose</span> <span class="pl-s1">the</span> <span class="pl-s1">better</span> <span class="pl-en">answer</span> (<span class="pl-s1">either</span> <span class="pl-v">Answer</span> <span class="pl-c1">1</span> <span class="pl-c1">or</span> <span class="pl-v">Answer</span> <span class="pl-c1">2</span>) <span class="pl-c1">and</span> <span class="pl-s1">explain</span> <span class="pl-s1">why</span>. <span class="pl-c1">Then</span>, <span class="pl-s1">select</span> <span class="pl-s1">an</span> <span class="pl-s1">overall</span> <span class="pl-s1">winner</span> <span class="pl-s1">based</span> <span class="pl-s1">on</span> <span class="pl-s1">these</span> <span class="pl-s1">three</span> <span class="pl-s1">categories</span>. <span class="pl-v">Here</span> <span class="pl-c1">is</span> <span class="pl-s1">the</span> <span class="pl-s1">question</span>: {<span class="pl-s1">query</span>} <span class="pl-v">Here</span> <span class="pl-s1">are</span> <span class="pl-s1">the</span> <span class="pl-s1">two</span> <span class="pl-s1">answers</span>: <span class="pl-c1">**</span><span class="pl-v">Answer</span> <span class="pl-c1">1</span>:<span class="pl-c1">**</span> {<span class="pl-s1">answer1</span>} <span class="pl-c1">**</span><span class="pl-v">Answer</span> <span class="pl-c1">2</span>:<span class="pl-c1">**</span> {<span class="pl-s1">answer2</span>} <span class="pl-v">Evaluate</span> <span class="pl-s1">both</span> <span class="pl-s1">answers</span> <span class="pl-s1">using</span> <span class="pl-s1">the</span> <span class="pl-s1">three</span> <span class="pl-s1">criteria</span> <span class="pl-s1">listed</span> <span class="pl-s1">above</span> <span class="pl-c1">and</span> <span class="pl-s1">provide</span> <span class="pl-s1">detailed</span> <span class="pl-s1">explanations</span> <span class="pl-s1">for</span> <span class="pl-s1">each</span> <span class="pl-s1">criterion</span>. <span class="pl-c1">Output</span> <span class="pl-s1">your</span> <span class="pl-s1">evaluation</span> <span class="pl-c1">in</span> <span class="pl-s1">the</span> <span class="pl-s1">following</span> <span class="pl-c1">JSON</span> <span class="pl-s1">format</span>: {{ <span class="pl-s">"Comprehensiveness"</span>: {{ <span class="pl-s">"Winner"</span>: <span class="pl-s">"[Answer 1 or Answer 2]"</span>, <span class="pl-s">"Explanation"</span>: <span class="pl-s">"[Provide explanation here]"</span> }}, <span class="pl-s">"Empowerment"</span>: {{ <span class="pl-s">"Winner"</span>: <span class="pl-s">"[Answer 1 or Answer 2]"</span>, <span class="pl-s">"Explanation"</span>: <span class="pl-s">"[Provide explanation here]"</span> }}, <span class="pl-s">"Overall Winner"</span>: {{ <span class="pl-s">"Winner"</span>: <span class="pl-s">"[Answer 1 or Answer 2]"</span>, <span class="pl-s">"Explanation"</span>: <span class="pl-s">"[Summarize why this answer is the overall winner based on the three criteria]"</span> }} }}</pre></div> </details> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Overall Performance Table</h3><a id="user-content-overall-performance-table" class="anchor" aria-label="Permalink: Overall Performance Table" href="#overall-performance-table"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <markdown-accessiblity-table><table> <thead> <tr> <th></th> <th><strong>Agriculture</strong></th> <th></th> <th><strong>CS</strong></th> <th></th> <th><strong>Legal</strong></th> <th></th> <th><strong>Mix</strong></th> <th></th> </tr> </thead> <tbody> <tr> <td></td> <td>NaiveRAG</td> <td><strong>LightRAG</strong></td> <td>NaiveRAG</td> <td><strong>LightRAG</strong></td> <td>NaiveRAG</td> <td><strong>LightRAG</strong></td> <td>NaiveRAG</td> <td><strong>LightRAG</strong></td> </tr> <tr> <td><strong>Comprehensiveness</strong></td> <td>32.4%</td> <td><strong>67.6%</strong></td> <td>38.4%</td> <td><strong>61.6%</strong></td> <td>16.4%</td> <td><strong>83.6%</strong></td> <td>38.8%</td> <td><strong>61.2%</strong></td> </tr> <tr> <td><strong>Diversity</strong></td> <td>23.6%</td> <td><strong>76.4%</strong></td> <td>38.0%</td> <td><strong>62.0%</strong></td> <td>13.6%</td> <td><strong>86.4%</strong></td> <td>32.4%</td> <td><strong>67.6%</strong></td> </tr> <tr> <td><strong>Empowerment</strong></td> <td>32.4%</td> <td><strong>67.6%</strong></td> <td>38.8%</td> <td><strong>61.2%</strong></td> <td>16.4%</td> <td><strong>83.6%</strong></td> <td>42.8%</td> <td><strong>57.2%</strong></td> </tr> <tr> <td><strong>Overall</strong></td> <td>32.4%</td> <td><strong>67.6%</strong></td> <td>38.8%</td> <td><strong>61.2%</strong></td> <td>15.2%</td> <td><strong>84.8%</strong></td> <td>40.0%</td> <td><strong>60.0%</strong></td> </tr> <tr> <td></td> <td>RQ-RAG</td> <td><strong>LightRAG</strong></td> <td>RQ-RAG</td> <td><strong>LightRAG</strong></td> <td>RQ-RAG</td> <td><strong>LightRAG</strong></td> <td>RQ-RAG</td> <td><strong>LightRAG</strong></td> </tr> <tr> <td><strong>Comprehensiveness</strong></td> <td>31.6%</td> <td><strong>68.4%</strong></td> <td>38.8%</td> <td><strong>61.2%</strong></td> <td>15.2%</td> <td><strong>84.8%</strong></td> <td>39.2%</td> <td><strong>60.8%</strong></td> </tr> <tr> <td><strong>Diversity</strong></td> <td>29.2%</td> <td><strong>70.8%</strong></td> <td>39.2%</td> <td><strong>60.8%</strong></td> <td>11.6%</td> <td><strong>88.4%</strong></td> <td>30.8%</td> <td><strong>69.2%</strong></td> </tr> <tr> <td><strong>Empowerment</strong></td> <td>31.6%</td> <td><strong>68.4%</strong></td> <td>36.4%</td> <td><strong>63.6%</strong></td> <td>15.2%</td> <td><strong>84.8%</strong></td> <td>42.4%</td> <td><strong>57.6%</strong></td> </tr> <tr> <td><strong>Overall</strong></td> <td>32.4%</td> <td><strong>67.6%</strong></td> <td>38.0%</td> <td><strong>62.0%</strong></td> <td>14.4%</td> <td><strong>85.6%</strong></td> <td>40.0%</td> <td><strong>60.0%</strong></td> </tr> <tr> <td></td> <td>HyDE</td> <td><strong>LightRAG</strong></td> <td>HyDE</td> <td><strong>LightRAG</strong></td> <td>HyDE</td> <td><strong>LightRAG</strong></td> <td>HyDE</td> <td><strong>LightRAG</strong></td> </tr> <tr> <td><strong>Comprehensiveness</strong></td> <td>26.0%</td> <td><strong>74.0%</strong></td> <td>41.6%</td> <td><strong>58.4%</strong></td> <td>26.8%</td> <td><strong>73.2%</strong></td> <td>40.4%</td> <td><strong>59.6%</strong></td> </tr> <tr> <td><strong>Diversity</strong></td> <td>24.0%</td> <td><strong>76.0%</strong></td> <td>38.8%</td> <td><strong>61.2%</strong></td> <td>20.0%</td> <td><strong>80.0%</strong></td> <td>32.4%</td> <td><strong>67.6%</strong></td> </tr> <tr> <td><strong>Empowerment</strong></td> <td>25.2%</td> <td><strong>74.8%</strong></td> <td>40.8%</td> <td><strong>59.2%</strong></td> <td>26.0%</td> <td><strong>74.0%</strong></td> <td>46.0%</td> <td><strong>54.0%</strong></td> </tr> <tr> <td><strong>Overall</strong></td> <td>24.8%</td> <td><strong>75.2%</strong></td> <td>41.6%</td> <td><strong>58.4%</strong></td> <td>26.4%</td> <td><strong>73.6%</strong></td> <td>42.4%</td> <td><strong>57.6%</strong></td> </tr> <tr> <td></td> <td>GraphRAG</td> <td><strong>LightRAG</strong></td> <td>GraphRAG</td> <td><strong>LightRAG</strong></td> <td>GraphRAG</td> <td><strong>LightRAG</strong></td> <td>GraphRAG</td> <td><strong>LightRAG</strong></td> </tr> <tr> <td><strong>Comprehensiveness</strong></td> <td>45.6%</td> <td><strong>54.4%</strong></td> <td>48.4%</td> <td><strong>51.6%</strong></td> <td>48.4%</td> <td><strong>51.6%</strong></td> <td><strong>50.4%</strong></td> <td>49.6%</td> </tr> <tr> <td><strong>Diversity</strong></td> <td>22.8%</td> <td><strong>77.2%</strong></td> <td>40.8%</td> <td><strong>59.2%</strong></td> <td>26.4%</td> <td><strong>73.6%</strong></td> <td>36.0%</td> <td><strong>64.0%</strong></td> </tr> <tr> <td><strong>Empowerment</strong></td> <td>41.2%</td> <td><strong>58.8%</strong></td> <td>45.2%</td> <td><strong>54.8%</strong></td> <td>43.6%</td> <td><strong>56.4%</strong></td> <td><strong>50.8%</strong></td> <td>49.2%</td> </tr> <tr> <td><strong>Overall</strong></td> <td>45.2%</td> <td><strong>54.8%</strong></td> <td>48.0%</td> <td><strong>52.0%</strong></td> <td>47.2%</td> <td><strong>52.8%</strong></td> <td><strong>50.4%</strong></td> <td>49.6%</td> </tr> </tbody> </table></markdown-accessiblity-table> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Reproduce</h2><a id="user-content-reproduce" class="anchor" aria-label="Permalink: Reproduce" href="#reproduce"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">All the code can be found in the <code>./reproduce</code> directory.</p> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Step-0 Extract Unique Contexts</h3><a id="user-content-step-0-extract-unique-contexts" class="anchor" aria-label="Permalink: Step-0 Extract Unique Contexts" href="#step-0-extract-unique-contexts"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">First, we need to extract unique contexts in the datasets.</p> <details> <summary> Code </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="def extract_unique_contexts(input_directory, output_directory): os.makedirs(output_directory, exist_ok=True) jsonl_files = glob.glob(os.path.join(input_directory, '*.jsonl')) print(f"Found {len(jsonl_files)} JSONL files.") for file_path in jsonl_files: filename = os.path.basename(file_path) name, ext = os.path.splitext(filename) output_filename = f"{name}_unique_contexts.json" output_path = os.path.join(output_directory, output_filename) unique_contexts_dict = {} print(f"Processing file: {filename}") try: with open(file_path, 'r', encoding='utf-8') as infile: for line_number, line in enumerate(infile, start=1): line = line.strip() if not line: continue try: json_obj = json.loads(line) context = json_obj.get('context') if context and context not in unique_contexts_dict: unique_contexts_dict[context] = None except json.JSONDecodeError as e: print(f"JSON decoding error in file {filename} at line {line_number}: {e}") except FileNotFoundError: print(f"File not found: {filename}") continue except Exception as e: print(f"An error occurred while processing file {filename}: {e}") continue unique_contexts_list = list(unique_contexts_dict.keys()) print(f"There are {len(unique_contexts_list)} unique `context` entries in the file {filename}.") try: with open(output_path, 'w', encoding='utf-8') as outfile: json.dump(unique_contexts_list, outfile, ensure_ascii=False, indent=4) print(f"Unique `context` entries have been saved to: {output_filename}") except Exception as e: print(f"An error occurred while saving to the file {output_filename}: {e}") print("All files have been processed.") "><pre><span class="pl-k">def</span> <span class="pl-en">extract_unique_contexts</span>(<span class="pl-s1">input_directory</span>, <span class="pl-s1">output_directory</span>): <span class="pl-s1">os</span>.<span class="pl-c1">makedirs</span>(<span class="pl-s1">output_directory</span>, <span class="pl-s1">exist_ok</span><span class="pl-c1">=</span><span class="pl-c1">True</span>) <span class="pl-s1">jsonl_files</span> <span class="pl-c1">=</span> <span class="pl-s1">glob</span>.<span class="pl-c1">glob</span>(<span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">join</span>(<span class="pl-s1">input_directory</span>, <span class="pl-s">'*.jsonl'</span>)) <span class="pl-en">print</span>(<span class="pl-s">f"Found <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-en">len</span>(<span class="pl-s1">jsonl_files</span>)<span class="pl-kos">}</span></span> JSONL files."</span>) <span class="pl-k">for</span> <span class="pl-s1">file_path</span> <span class="pl-c1">in</span> <span class="pl-s1">jsonl_files</span>: <span class="pl-s1">filename</span> <span class="pl-c1">=</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">basename</span>(<span class="pl-s1">file_path</span>) <span class="pl-s1">name</span>, <span class="pl-s1">ext</span> <span class="pl-c1">=</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">splitext</span>(<span class="pl-s1">filename</span>) <span class="pl-s1">output_filename</span> <span class="pl-c1">=</span> <span class="pl-s">f"<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">name</span><span class="pl-kos">}</span></span>_unique_contexts.json"</span> <span class="pl-s1">output_path</span> <span class="pl-c1">=</span> <span class="pl-s1">os</span>.<span class="pl-c1">path</span>.<span class="pl-c1">join</span>(<span class="pl-s1">output_directory</span>, <span class="pl-s1">output_filename</span>) <span class="pl-s1">unique_contexts_dict</span> <span class="pl-c1">=</span> {} <span class="pl-en">print</span>(<span class="pl-s">f"Processing file: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">filename</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">try</span>: <span class="pl-k">with</span> <span class="pl-en">open</span>(<span class="pl-s1">file_path</span>, <span class="pl-s">'r'</span>, <span class="pl-s1">encoding</span><span class="pl-c1">=</span><span class="pl-s">'utf-8'</span>) <span class="pl-k">as</span> <span class="pl-s1">infile</span>: <span class="pl-k">for</span> <span class="pl-s1">line_number</span>, <span class="pl-s1">line</span> <span class="pl-c1">in</span> <span class="pl-en">enumerate</span>(<span class="pl-s1">infile</span>, <span class="pl-s1">start</span><span class="pl-c1">=</span><span class="pl-c1">1</span>): <span class="pl-s1">line</span> <span class="pl-c1">=</span> <span class="pl-s1">line</span>.<span class="pl-c1">strip</span>() <span class="pl-k">if</span> <span class="pl-c1">not</span> <span class="pl-s1">line</span>: <span class="pl-k">continue</span> <span class="pl-k">try</span>: <span class="pl-s1">json_obj</span> <span class="pl-c1">=</span> <span class="pl-s1">json</span>.<span class="pl-c1">loads</span>(<span class="pl-s1">line</span>) <span class="pl-s1">context</span> <span class="pl-c1">=</span> <span class="pl-s1">json_obj</span>.<span class="pl-c1">get</span>(<span class="pl-s">'context'</span>) <span class="pl-k">if</span> <span class="pl-s1">context</span> <span class="pl-c1">and</span> <span class="pl-s1">context</span> <span class="pl-c1"><span class="pl-c1">not</span> <span class="pl-c1">in</span></span> <span class="pl-s1">unique_contexts_dict</span>: <span class="pl-s1">unique_contexts_dict</span>[<span class="pl-s1">context</span>] <span class="pl-c1">=</span> <span class="pl-c1">None</span> <span class="pl-k">except</span> <span class="pl-s1">json</span>.<span class="pl-c1">JSONDecodeError</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>: <span class="pl-en">print</span>(<span class="pl-s">f"JSON decoding error in file <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">filename</span><span class="pl-kos">}</span></span> at line <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">line_number</span><span class="pl-kos">}</span></span>: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">except</span> <span class="pl-v">FileNotFoundError</span>: <span class="pl-en">print</span>(<span class="pl-s">f"File not found: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">filename</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">continue</span> <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>: <span class="pl-en">print</span>(<span class="pl-s">f"An error occurred while processing file <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">filename</span><span class="pl-kos">}</span></span>: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">continue</span> <span class="pl-s1">unique_contexts_list</span> <span class="pl-c1">=</span> <span class="pl-en">list</span>(<span class="pl-s1">unique_contexts_dict</span>.<span class="pl-c1">keys</span>()) <span class="pl-en">print</span>(<span class="pl-s">f"There are <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-en">len</span>(<span class="pl-s1">unique_contexts_list</span>)<span class="pl-kos">}</span></span> unique `context` entries in the file <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">filename</span><span class="pl-kos">}</span></span>."</span>) <span class="pl-k">try</span>: <span class="pl-k">with</span> <span class="pl-en">open</span>(<span class="pl-s1">output_path</span>, <span class="pl-s">'w'</span>, <span class="pl-s1">encoding</span><span class="pl-c1">=</span><span class="pl-s">'utf-8'</span>) <span class="pl-k">as</span> <span class="pl-s1">outfile</span>: <span class="pl-s1">json</span>.<span class="pl-c1">dump</span>(<span class="pl-s1">unique_contexts_list</span>, <span class="pl-s1">outfile</span>, <span class="pl-s1">ensure_ascii</span><span class="pl-c1">=</span><span class="pl-c1">False</span>, <span class="pl-s1">indent</span><span class="pl-c1">=</span><span class="pl-c1">4</span>) <span class="pl-en">print</span>(<span class="pl-s">f"Unique `context` entries have been saved to: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">output_filename</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>: <span class="pl-en">print</span>(<span class="pl-s">f"An error occurred while saving to the file <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">output_filename</span><span class="pl-kos">}</span></span>: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-en">print</span>(<span class="pl-s">"All files have been processed."</span>)</pre></div> </details> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Step-1 Insert Contexts</h3><a id="user-content-step-1-insert-contexts" class="anchor" aria-label="Permalink: Step-1 Insert Contexts" href="#step-1-insert-contexts"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">For the extracted contexts, we insert them into the LightRAG system.</p> <details> <summary> Code </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="def insert_text(rag, file_path): with open(file_path, mode='r') as f: unique_contexts = json.load(f) retries = 0 max_retries = 3 while retries < max_retries: try: rag.insert(unique_contexts) break except Exception as e: retries += 1 print(f"Insertion failed, retrying ({retries}/{max_retries}), error: {e}") time.sleep(10) if retries == max_retries: print("Insertion failed after exceeding the maximum number of retries")"><pre><span class="pl-k">def</span> <span class="pl-en">insert_text</span>(<span class="pl-s1">rag</span>, <span class="pl-s1">file_path</span>): <span class="pl-k">with</span> <span class="pl-en">open</span>(<span class="pl-s1">file_path</span>, <span class="pl-s1">mode</span><span class="pl-c1">=</span><span class="pl-s">'r'</span>) <span class="pl-k">as</span> <span class="pl-s1">f</span>: <span class="pl-s1">unique_contexts</span> <span class="pl-c1">=</span> <span class="pl-s1">json</span>.<span class="pl-c1">load</span>(<span class="pl-s1">f</span>) <span class="pl-s1">retries</span> <span class="pl-c1">=</span> <span class="pl-c1">0</span> <span class="pl-s1">max_retries</span> <span class="pl-c1">=</span> <span class="pl-c1">3</span> <span class="pl-k">while</span> <span class="pl-s1">retries</span> <span class="pl-c1"><</span> <span class="pl-s1">max_retries</span>: <span class="pl-k">try</span>: <span class="pl-s1">rag</span>.<span class="pl-c1">insert</span>(<span class="pl-s1">unique_contexts</span>) <span class="pl-k">break</span> <span class="pl-k">except</span> <span class="pl-v">Exception</span> <span class="pl-k">as</span> <span class="pl-s1">e</span>: <span class="pl-s1">retries</span> <span class="pl-c1">+=</span> <span class="pl-c1">1</span> <span class="pl-en">print</span>(<span class="pl-s">f"Insertion failed, retrying (<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">retries</span><span class="pl-kos">}</span></span>/<span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">max_retries</span><span class="pl-kos">}</span></span>), error: <span class="pl-s1"><span class="pl-kos">{</span><span class="pl-s1">e</span><span class="pl-kos">}</span></span>"</span>) <span class="pl-s1">time</span>.<span class="pl-c1">sleep</span>(<span class="pl-c1">10</span>) <span class="pl-k">if</span> <span class="pl-s1">retries</span> <span class="pl-c1">==</span> <span class="pl-s1">max_retries</span>: <span class="pl-en">print</span>(<span class="pl-s">"Insertion failed after exceeding the maximum number of retries"</span>)</pre></div> </details> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Step-2 Generate Queries</h3><a id="user-content-step-2-generate-queries" class="anchor" aria-label="Permalink: Step-2 Generate Queries" href="#step-2-generate-queries"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">We extract tokens from the first and the second half of each context in the dataset, then combine them as dataset descriptions to generate queries.</p> <details> <summary> Code </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="tokenizer = GPT2Tokenizer.from_pretrained('gpt2') def get_summary(context, tot_tokens=2000): tokens = tokenizer.tokenize(context) half_tokens = tot_tokens // 2 start_tokens = tokens[1000:1000 + half_tokens] end_tokens = tokens[-(1000 + half_tokens):1000] summary_tokens = start_tokens + end_tokens summary = tokenizer.convert_tokens_to_string(summary_tokens) return summary"><pre><span class="pl-s1">tokenizer</span> <span class="pl-c1">=</span> <span class="pl-v">GPT2Tokenizer</span>.<span class="pl-c1">from_pretrained</span>(<span class="pl-s">'gpt2'</span>) <span class="pl-k">def</span> <span class="pl-en">get_summary</span>(<span class="pl-s1">context</span>, <span class="pl-s1">tot_tokens</span><span class="pl-c1">=</span><span class="pl-c1">2000</span>): <span class="pl-s1">tokens</span> <span class="pl-c1">=</span> <span class="pl-s1">tokenizer</span>.<span class="pl-c1">tokenize</span>(<span class="pl-s1">context</span>) <span class="pl-s1">half_tokens</span> <span class="pl-c1">=</span> <span class="pl-s1">tot_tokens</span> <span class="pl-c1">//</span> <span class="pl-c1">2</span> <span class="pl-s1">start_tokens</span> <span class="pl-c1">=</span> <span class="pl-s1">tokens</span>[<span class="pl-c1">1000</span>:<span class="pl-c1">1000</span> <span class="pl-c1">+</span> <span class="pl-s1">half_tokens</span>] <span class="pl-s1">end_tokens</span> <span class="pl-c1">=</span> <span class="pl-s1">tokens</span>[<span class="pl-c1">-</span>(<span class="pl-c1">1000</span> <span class="pl-c1">+</span> <span class="pl-s1">half_tokens</span>):<span class="pl-c1">1000</span>] <span class="pl-s1">summary_tokens</span> <span class="pl-c1">=</span> <span class="pl-s1">start_tokens</span> <span class="pl-c1">+</span> <span class="pl-s1">end_tokens</span> <span class="pl-s1">summary</span> <span class="pl-c1">=</span> <span class="pl-s1">tokenizer</span>.<span class="pl-c1">convert_tokens_to_string</span>(<span class="pl-s1">summary_tokens</span>) <span class="pl-k">return</span> <span class="pl-s1">summary</span></pre></div> </details> <div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">Step-3 Query</h3><a id="user-content-step-3-query" class="anchor" aria-label="Permalink: Step-3 Query" href="#step-3-query"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">For the queries generated in Step-2, we will extract them and query LightRAG.</p> <details> <summary> Code </summary> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="def extract_queries(file_path): with open(file_path, 'r') as f: data = f.read() data = data.replace('**', '') queries = re.findall(r'- Question \d+: (.+)', data) return queries"><pre><span class="pl-k">def</span> <span class="pl-en">extract_queries</span>(<span class="pl-s1">file_path</span>): <span class="pl-k">with</span> <span class="pl-en">open</span>(<span class="pl-s1">file_path</span>, <span class="pl-s">'r'</span>) <span class="pl-k">as</span> <span class="pl-s1">f</span>: <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s1">f</span>.<span class="pl-c1">read</span>() <span class="pl-s1">data</span> <span class="pl-c1">=</span> <span class="pl-s1">data</span>.<span class="pl-c1">replace</span>(<span class="pl-s">'**'</span>, <span class="pl-s">''</span>) <span class="pl-s1">queries</span> <span class="pl-c1">=</span> <span class="pl-s1">re</span>.<span class="pl-c1">findall</span>(<span class="pl-s">r'- Question \d+: (.+)'</span>, <span class="pl-s1">data</span>) <span class="pl-k">return</span> <span class="pl-s1">queries</span></pre></div> </details> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Star History</h2><a id="user-content-star-history" class="anchor" aria-label="Permalink: Star History" href="#star-history"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <a href="https://star-history.com/#HKUDS/LightRAG&Date" rel="nofollow"> <themed-picture data-catalyst-inline="true"><picture> <source media="(prefers-color-scheme: dark)" srcset="https://camo.githubusercontent.com/b6ed87f8202bd1ea192a0959cae29b291d27fefb1ee807d2997d987fb3027fd0/68747470733a2f2f6170692e737461722d686973746f72792e636f6d2f7376673f7265706f733d484b5544532f4c6967687452414726747970653d44617465267468656d653d6461726b" data-canonical-src="https://api.star-history.com/svg?repos=HKUDS/LightRAG&type=Date&theme=dark"> <source media="(prefers-color-scheme: light)" srcset="https://camo.githubusercontent.com/a9fcbb38fe225c78351d5079194ad1c44d4336716eac78098aeb323afcd0be19/68747470733a2f2f6170692e737461722d686973746f72792e636f6d2f7376673f7265706f733d484b5544532f4c6967687452414726747970653d44617465" data-canonical-src="https://api.star-history.com/svg?repos=HKUDS/LightRAG&type=Date"> <img alt="Star History Chart" src="https://camo.githubusercontent.com/a9fcbb38fe225c78351d5079194ad1c44d4336716eac78098aeb323afcd0be19/68747470733a2f2f6170692e737461722d686973746f72792e636f6d2f7376673f7265706f733d484b5544532f4c6967687452414726747970653d44617465" data-canonical-src="https://api.star-history.com/svg?repos=HKUDS/LightRAG&type=Date"> </picture></themed-picture> </a> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">Contribution</h2><a id="user-content-contribution" class="anchor" aria-label="Permalink: Contribution" href="#contribution"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <p dir="auto">Thank you to all our contributors!</p> <a href="https://github.com/HKUDS/LightRAG/graphs/contributors"> <img src="https://camo.githubusercontent.com/f6c0e619299f3b63fedc077c40d43ed35c6fa654914ec82a9369d36b40ef6349/68747470733a2f2f636f6e747269622e726f636b732f696d6167653f7265706f3d484b5544532f4c69676874524147" data-canonical-src="https://contrib.rocks/image?repo=HKUDS/LightRAG" style="max-width: 100%;"> </a> <div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">🌟Citation</h2><a id="user-content-citation" class="anchor" aria-label="Permalink: 🌟Citation" href="#citation"><svg class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div> <div class="highlight highlight-source-python notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="@article{guo2024lightrag, title={LightRAG: Simple and Fast Retrieval-Augmented Generation}, author={Zirui Guo and Lianghao Xia and Yanhua Yu and Tu Ao and Chao Huang}, year={2024}, eprint={2410.05779}, archivePrefix={arXiv}, primaryClass={cs.IR} }"><pre><span class="pl-en">@<span class="pl-s1">article</span>{<span class="pl-s1">guo2024lightrag</span>,</span> <span class="pl-en"><span class="pl-s1">title</span><span class="pl-c1">=</span>{<span class="pl-v">LightRAG</span>: <span class="pl-v">Simple</span> <span class="pl-c1">and</span> <span class="pl-v">Fast</span> <span class="pl-v">Retrieval</span><span class="pl-c1">-</span><span class="pl-v">Augmented</span> <span class="pl-v">Generation</span>},</span> <span class="pl-en"><span class="pl-s1">author</span><span class="pl-c1">=</span>{<span class="pl-v">Zirui</span> <span class="pl-v">Guo</span> <span class="pl-c1">and</span> <span class="pl-v">Lianghao</span> <span class="pl-v">Xia</span> <span class="pl-c1">and</span> <span class="pl-v">Yanhua</span> <span class="pl-v">Yu</span> <span class="pl-c1">and</span> <span class="pl-v">Tu</span> <span class="pl-v">Ao</span> <span class="pl-c1">and</span> <span class="pl-v">Chao</span> <span class="pl-v">Huang</span>},</span> <span class="pl-en"><span class="pl-s1">year</span><span class="pl-c1">=</span>{<span class="pl-c1">2024</span>},</span> <span class="pl-en"><span class="pl-s1">eprint</span><span class="pl-c1">=</span>{<span class="pl-c1">2410.05779</span>},</span> <span class="pl-en"><span class="pl-s1">archivePrefix</span><span class="pl-c1">=</span>{<span class="pl-s1">arXiv</span>},</span> <span class="pl-en"><span class="pl-s1">primaryClass</span><span class="pl-c1">=</span>{<span class="pl-s1">cs</span>.<span class="pl-c1">IR</span>}</span> <span class="pl-en">}</span></pre></div> <p dir="auto"><strong>Thank you for your interest in our work!</strong></p> </article></div></div></div></div></div> <!-- --> <!-- --> <script type="application/json" id="__PRIMER_DATA_:R0:__">{"resolvedServerColorMode":"day"}</script></div> </react-partial> <input type="hidden" data-csrf="true" value="OcPs9p8ZiOrDVUgk8VCCTVTGJKCtngkO6XI7IpSuThUqGFyuRRU/kD3PBDPyD3zQFMMYxvqPEKUE7IuFjO6L5w==" /> </div> <div data-view-component="true" class="Layout-sidebar"> <div class="BorderGrid about-margin" data-pjax> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <div class="hide-sm hide-md"> <h2 class="mb-3 h4">About</h2> <p class="f4 my-3"> "LightRAG: Simple and Fast Retrieval-Augmented Generation" </p> <div class="my-3 d-flex flex-items-center"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-link flex-shrink-0 mr-2"> <path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path> </svg> <span class="flex-auto min-width-0 css-truncate css-truncate-target width-fit"> <a title="https://arxiv.org/abs/2410.05779" role="link" target="_blank" rel="noopener noreferrer nofollow" class="text-bold" href="https://arxiv.org/abs/2410.05779">arxiv.org/abs/2410.05779</a> </span> </div> <h3 class="sr-only">Topics</h3> <div class="my-3"> <div class="f6"> <a href="/topics/knowledge-graph" title="Topic: knowledge-graph" data-view-component="true" class="topic-tag topic-tag-link"> knowledge-graph </a> <a href="/topics/gpt" title="Topic: gpt" data-view-component="true" class="topic-tag topic-tag-link"> gpt </a> <a href="/topics/rag" title="Topic: rag" data-view-component="true" class="topic-tag topic-tag-link"> rag </a> <a href="/topics/gpt-4" title="Topic: gpt-4" data-view-component="true" class="topic-tag topic-tag-link"> gpt-4 </a> <a href="/topics/large-language-models" title="Topic: large-language-models" data-view-component="true" class="topic-tag topic-tag-link"> large-language-models </a> <a href="/topics/llm" title="Topic: llm" data-view-component="true" class="topic-tag topic-tag-link"> llm </a> <a href="/topics/genai" title="Topic: genai" data-view-component="true" class="topic-tag topic-tag-link"> genai </a> <a href="/topics/retrieval-augmented-generation" title="Topic: retrieval-augmented-generation" data-view-component="true" class="topic-tag topic-tag-link"> retrieval-augmented-generation </a> <a href="/topics/graphrag" title="Topic: graphrag" data-view-component="true" class="topic-tag topic-tag-link"> graphrag </a> </div> </div> <h3 class="sr-only">Resources</h3> <div class="mt-2"> <a class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:readme"}" href="#readme-ov-file"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-book mr-2"> <path d="M0 1.75A.75.75 0 0 1 .75 1h4.253c1.227 0 2.317.59 3 1.501A3.743 3.743 0 0 1 11.006 1h4.245a.75.75 0 0 1 .75.75v10.5a.75.75 0 0 1-.75.75h-4.507a2.25 2.25 0 0 0-1.591.659l-.622.621a.75.75 0 0 1-1.06 0l-.622-.621A2.25 2.25 0 0 0 5.258 13H.75a.75.75 0 0 1-.75-.75Zm7.251 10.324.004-5.073-.002-2.253A2.25 2.25 0 0 0 5.003 2.5H1.5v9h3.757a3.75 3.75 0 0 1 1.994.574ZM8.755 4.75l-.004 7.322a3.752 3.752 0 0 1 1.992-.572H14.5v-9h-3.495a2.25 2.25 0 0 0-2.25 2.25Z"></path> </svg> Readme </a> </div> <h3 class="sr-only">License</h3> <div class="mt-2"> <a href="#MIT-1-ov-file" class="Link--muted" data-analytics-event="{"category":"Repository Overview","action":"click","label":"location:sidebar;file:license"}" > <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-law mr-2"> <path d="M8.75.75V2h.985c.304 0 .603.08.867.231l1.29.736c.038.022.08.033.124.033h2.234a.75.75 0 0 1 0 1.5h-.427l2.111 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.006.005-.01.01-.045.04c-.21.176-.441.327-.686.45C14.556 10.78 13.88 11 13 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L12.178 4.5h-.162c-.305 0-.604-.079-.868-.231l-1.29-.736a.245.245 0 0 0-.124-.033H8.75V13h2.5a.75.75 0 0 1 0 1.5h-6.5a.75.75 0 0 1 0-1.5h2.5V3.5h-.984a.245.245 0 0 0-.124.033l-1.289.737c-.265.15-.564.23-.869.23h-.162l2.112 4.692a.75.75 0 0 1-.154.838l-.53-.53.529.531-.001.002-.002.002-.006.006-.016.015-.045.04c-.21.176-.441.327-.686.45C4.556 10.78 3.88 11 3 11a4.498 4.498 0 0 1-2.023-.454 3.544 3.544 0 0 1-.686-.45l-.045-.04-.016-.015-.006-.006-.004-.004v-.001a.75.75 0 0 1-.154-.838L2.178 4.5H1.75a.75.75 0 0 1 0-1.5h2.234a.249.249 0 0 0 .125-.033l1.288-.737c.265-.15.564-.23.869-.23h.984V.75a.75.75 0 0 1 1.5 0Zm2.945 8.477c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L13 6.327Zm-10 0c.285.135.718.273 1.305.273s1.02-.138 1.305-.273L3 6.327Z"></path> </svg> MIT license </a> </div> <include-fragment src="/HKUDS/LightRAG/hovercards/citation/sidebar_partial?tree_name=main"> </include-fragment> <div class="mt-2"> <a href="/HKUDS/LightRAG/activity" data-view-component="true" class="Link Link--muted"><svg text="gray" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-pulse mr-2"> <path d="M6 2c.306 0 .582.187.696.471L10 10.731l1.304-3.26A.751.751 0 0 1 12 7h3.25a.75.75 0 0 1 0 1.5h-2.742l-1.812 4.528a.751.751 0 0 1-1.392 0L6 4.77 4.696 8.03A.75.75 0 0 1 4 8.5H.75a.75.75 0 0 1 0-1.5h2.742l1.812-4.529A.751.751 0 0 1 6 2Z"></path> </svg> <span class="color-fg-muted">Activity</span></a> </div> <h3 class="sr-only">Stars</h3> <div class="mt-2"> <a href="/HKUDS/LightRAG/stargazers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star mr-2"> <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path> </svg> <strong>12.9k</strong> stars</a> </div> <h3 class="sr-only">Watchers</h3> <div class="mt-2"> <a href="/HKUDS/LightRAG/watchers" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-eye mr-2"> <path d="M8 2c1.981 0 3.671.992 4.933 2.078 1.27 1.091 2.187 2.345 2.637 3.023a1.62 1.62 0 0 1 0 1.798c-.45.678-1.367 1.932-2.637 3.023C11.67 13.008 9.981 14 8 14c-1.981 0-3.671-.992-4.933-2.078C1.797 10.83.88 9.576.43 8.898a1.62 1.62 0 0 1 0-1.798c.45-.677 1.367-1.931 2.637-3.022C4.33 2.992 6.019 2 8 2ZM1.679 7.932a.12.12 0 0 0 0 .136c.411.622 1.241 1.75 2.366 2.717C5.176 11.758 6.527 12.5 8 12.5c1.473 0 2.825-.742 3.955-1.715 1.124-.967 1.954-2.096 2.366-2.717a.12.12 0 0 0 0-.136c-.412-.621-1.242-1.75-2.366-2.717C10.824 4.242 9.473 3.5 8 3.5c-1.473 0-2.825.742-3.955 1.715-1.124.967-1.954 2.096-2.366 2.717ZM8 10a2 2 0 1 1-.001-3.999A2 2 0 0 1 8 10Z"></path> </svg> <strong>113</strong> watching</a> </div> <h3 class="sr-only">Forks</h3> <div class="mt-2"> <a href="/HKUDS/LightRAG/forks" data-view-component="true" class="Link Link--muted"><svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2"> <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path> </svg> <strong>1.8k</strong> forks</a> </div> <div class="mt-2"> <a class="Link--muted" href="/contact/report-content?content_url=https%3A%2F%2Fgithub.com%2FHKUDS%2FLightRAG&report=HKUDS+%28user%29"> Report repository </a> </div> </div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame"> <a href="/HKUDS/LightRAG/releases" data-view-component="true" class="Link--primary no-underline Link">Releases <span title="26" data-view-component="true" class="Counter">26</span></a></h2> <a class="Link--primary d-flex no-underline" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/HKUDS/LightRAG/releases/tag/v1.2.6"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-tag flex-shrink-0 mt-1 color-fg-success"> <path d="M1 7.775V2.75C1 1.784 1.784 1 2.75 1h5.025c.464 0 .91.184 1.238.513l6.25 6.25a1.75 1.75 0 0 1 0 2.474l-5.026 5.026a1.75 1.75 0 0 1-2.474 0l-6.25-6.25A1.752 1.752 0 0 1 1 7.775Zm1.5 0c0 .066.026.13.073.177l6.25 6.25a.25.25 0 0 0 .354 0l5.025-5.025a.25.25 0 0 0 0-.354l-6.25-6.25a.25.25 0 0 0-.177-.073H2.75a.25.25 0 0 0-.25.25ZM6 5a1 1 0 1 1 0 2 1 1 0 0 1 0-2Z"></path> </svg> <div class="ml-2 min-width-0"> <div class="d-flex"> <span class="css-truncate css-truncate-target text-bold mr-2" style="max-width: none;">v1.2.6</span> <span title="Label: Latest" data-view-component="true" class="Label Label--success flex-shrink-0"> Latest </span> </div> <div class="text-small color-fg-muted"><relative-time datetime="2025-03-18T07:25:43Z" class="no-wrap">Mar 18, 2025</relative-time></div> </div> </a> <div data-view-component="true" class="mt-3"> <a text="small" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/HKUDS/LightRAG/releases" data-view-component="true" class="Link">+ 25 releases</a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/users/HKUDS/packages?repo_name=LightRAG" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Packages <span title="0" hidden="hidden" data-view-component="true" class="Counter ml-1">0</span></a></h2> <div class="text-small color-fg-muted" > No packages published <br> </div> </div> </div> <div class="BorderGrid-row" hidden> <div class="BorderGrid-cell"> <include-fragment src="/HKUDS/LightRAG/used_by_list" accept="text/fragment+html"> </include-fragment> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3"> <a href="/HKUDS/LightRAG/graphs/contributors" data-view-component="true" class="Link--primary no-underline Link d-flex flex-items-center">Contributors <span title="106" data-view-component="true" class="Counter ml-1">106</span></a></h2> <include-fragment src="/HKUDS/LightRAG/contributors_list?count=106&current_repository=LightRAG&items_to_show=14" aria-busy="true" aria-label="Loading contributors"> <ul class="list-style-none d-flex flex-wrap mb-n2"> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> <li class="mb-2 "> <div class="Skeleton avatar avatar-user mr-2" style="width:32px;height:32px;"></div> </li> </ul> </include-fragment> <div data-view-component="true" class="mt-3"> <a text="small" href="/HKUDS/LightRAG/graphs/contributors" data-view-component="true" class="Link--inTextBlock Link">+ 92 contributors</a></div> </div> </div> <div class="BorderGrid-row"> <div class="BorderGrid-cell"> <h2 class="h4 mb-3">Languages</h2> <div class="mb-2"> <span data-view-component="true" class="Progress"> <span style="background-color:#3572A5 !important;;width: 77.6%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#3178c6 !important;;width: 21.6%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#663399 !important;;width: 0.4%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#f1e05a !important;;width: 0.2%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#384d54 !important;;width: 0.1%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> <span style="background-color:#e34c26 !important;;width: 0.1%;" itemprop="keywords" data-view-component="true" class="Progress-item color-bg-success-emphasis"></span> </span></div> <ul class="list-style-none"> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/HKUDS/LightRAG/search?l=python" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#3572A5;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Python</span> <span>77.6%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/HKUDS/LightRAG/search?l=typescript" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#3178c6;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">TypeScript</span> <span>21.6%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/HKUDS/LightRAG/search?l=css" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#663399;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">CSS</span> <span>0.4%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/HKUDS/LightRAG/search?l=javascript" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#f1e05a;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">JavaScript</span> <span>0.2%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/HKUDS/LightRAG/search?l=dockerfile" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#384d54;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">Dockerfile</span> <span>0.1%</span> </a> </li> <li class="d-inline"> <a class="d-inline-flex flex-items-center flex-nowrap Link--secondary no-underline text-small mr-3" href="/HKUDS/LightRAG/search?l=html" data-ga-click="Repository, language stats search click, location:repo overview"> <svg style="color:#e34c26;" aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-dot-fill mr-2"> <path d="M8 4a4 4 0 1 1 0 8 4 4 0 0 1 0-8Z"></path> </svg> <span class="color-fg-default text-bold mr-1">HTML</span> <span>0.1%</span> </a> </li> </ul> </div> </div> </div> </div> </div></div> </div> </div> </turbo-frame> </main> </div> </div> <footer class="footer pt-8 pb-6 f6 color-fg-muted p-responsive" role="contentinfo" > <h2 class='sr-only'>Footer</h2> <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap"> <div class="d-flex flex-items-center flex-shrink-0 mx-2"> <a aria-label="Homepage" title="GitHub" class="footer-octicon mr-2" href="https://github.com"> <svg aria-hidden="true" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github"> <path d="M12.5.75C6.146.75 1 5.896 1 12.25c0 5.089 3.292 9.387 7.863 10.91.575.101.79-.244.79-.546 0-.273-.014-1.178-.014-2.142-2.889.532-3.636-.704-3.866-1.35-.13-.331-.69-1.352-1.18-1.625-.402-.216-.977-.748-.014-.762.906-.014 1.553.834 1.769 1.179 1.035 1.74 2.688 1.25 3.349.948.1-.747.402-1.25.733-1.538-2.559-.287-5.232-1.279-5.232-5.678 0-1.25.445-2.285 1.178-3.09-.115-.288-.517-1.467.115-3.048 0 0 .963-.302 3.163 1.179.92-.259 1.897-.388 2.875-.388.977 0 1.955.13 2.875.388 2.2-1.495 3.162-1.179 3.162-1.179.633 1.581.23 2.76.115 3.048.733.805 1.179 1.825 1.179 3.09 0 4.413-2.688 5.39-5.247 5.678.417.36.776 1.05.776 2.128 0 1.538-.014 2.774-.014 3.162 0 .302.216.662.79.547C20.709 21.637 24 17.324 24 12.25 24 5.896 18.854.75 12.5.75Z"></path> </svg> </a> <span> © 2025 GitHub, Inc. </span> </div> <nav aria-label="Footer"> <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3> <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading"> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to Terms","label":"text:terms"}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to privacy","label":"text:privacy"}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to security","label":"text:security"}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to status","label":"text:status"}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to docs","label":"text:docs"}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a> </li> <li class="mx-2"> <a data-analytics-event="{"category":"Footer","action":"go to contact","label":"text:contact"}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a> </li> <li class="mx-2" > <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"cookies","context":"subfooter","tag":"link","label":"cookies_link_subfooter_footer"}" > Manage cookies </button> </cookie-consent-link> </li> <li class="mx-2"> <cookie-consent-link> <button type="button" class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent" data-action="click:cookie-consent-link#showConsentManagement" data-analytics-event="{"location":"footer","action":"dont_share_info","context":"subfooter","tag":"link","label":"dont_share_info_link_subfooter_footer"}" > Do not share my personal information </button> </cookie-consent-link> </li> </ul> </nav> </div> </footer> <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999" data-initial-cookie-consent-allowed="" data-cookie-consent-required="false"></ghcc-consent> <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert"> <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path> </svg> <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> You can’t perform that action at this time. </div> <template id="site-details-dialog"> <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open> <summary role="button" aria-label="Close dialog"></summary> <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal"> <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x"> <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path> </svg> </button> <div class="octocat-spinner my-6 js-details-dialog-spinner"></div> </details-dialog> </details> </template> <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;"> <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;"> </div> </div> <template id="snippet-clipboard-copy-button"> <div class="zeroclipboard-container position-absolute right-0 top-0"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> <template id="snippet-clipboard-copy-button-unpositioned"> <div class="zeroclipboard-container"> <clipboard-copy aria-label="Copy" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w"> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon"> <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path> </svg> <svg aria-hidden="true" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none"> <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path> </svg> </clipboard-copy> </div> </template> </div> <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div> <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div> </body> </html>