GraphRAG feature - Part 1 - add spacy to extract entity and relation (#14670)

### What problem does this PR solve?

GraphRAG feature - Part 1 - add spacy to extract entity and relation

<img width="1621" height="1288" alt="image"
src="https://github.com/user-attachments/assets/aadeddad-94da-46c6-adad-9c3784181f61"
/>


### Type of change

- [x] New Feature (non-breaking change which adds functionality)
This commit is contained in:
Wang Qi
2026-05-11 12:59:59 +08:00
committed by GitHub
parent cc207b5b05
commit 3838770e7a
23 changed files with 1118 additions and 30 deletions

View File

@@ -351,7 +351,7 @@ class RaptorConfig(Base):
class GraphragConfig(Base):
use_graphrag: Annotated[bool, Field(default=False)]
entity_types: Annotated[list[str], Field(default_factory=lambda: ["organization", "person", "geo", "event", "category"])]
method: Annotated[Literal["light", "general"], Field(default="light")]
method: Annotated[Literal["light", "general", "ner"], Field(default="light")]
community: Annotated[bool, Field(default=False)]
resolution: Annotated[bool, Field(default=False)]

View File

@@ -101,6 +101,8 @@ dependencies = [
"ruamel-yaml>=0.18.6,<0.19.0",
"scholarly==1.7.11",
"selenium-wire==5.1.0",
"spacy==3.8.14",
"en-core-web-sm @ https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl",
"slack-sdk==3.37.0",
"socksio==1.0.0",
"agentrun-sdk>=0.0.16,<1.0.0",

View File

@@ -29,6 +29,7 @@ from rag.graphrag.general.community_reports_extractor import CommunityReportsExt
from rag.graphrag.general.extractor import Extractor
from rag.graphrag.general.graph_extractor import GraphExtractor as GeneralKGExt
from rag.graphrag.light.graph_extractor import GraphExtractor as LightKGExt
from rag.graphrag.ner.graph_extractor import GraphExtractor as NerKGExt
from rag.graphrag.phase_markers import (
PHASE_COMMUNITY,
PHASE_RESOLUTION,
@@ -53,6 +54,24 @@ from common import settings
from common.doc_store.doc_store_base import OrderByExpr
def _select_extractor(graphrag_config: dict):
"""Return the extractor class matching ``graphrag_config["method"]``.
Supported values:
- ``"general"`` Microsoft GraphRAG LLM-based extractor (default in
earlier versions).
- ``"light"`` LightRAG-style LLM-based extractor (the default when
*method* is omitted or unrecognised).
- ``"ner"`` NER-based extractor using spaCy (no LLM
needed for entity / relation extraction itself).
"""
method = graphrag_config.get("method", "light")
if method == "general":
return GeneralKGExt
if method == "ner":
return NerKGExt
return LightKGExt
async def load_subgraph_from_store(tenant_id: str, kb_id: str, doc_id: str):
"""Load a previously saved subgraph from the doc store.
@@ -123,9 +142,7 @@ async def run_graphrag(
try:
subgraph = await asyncio.wait_for(
generate_subgraph(
LightKGExt if "method" not in row["kb_parser_config"].get("graphrag", {})
or row["kb_parser_config"]["graphrag"]["method"] != "general"
else GeneralKGExt,
_select_extractor(row["kb_parser_config"].get("graphrag", {})),
tenant_id,
kb_id,
doc_id,
@@ -294,7 +311,7 @@ async def run_graphrag_for_kb(
callback(msg=f"[GraphRAG] doc:{doc_id} has no available chunks, skip generation.")
return
kg_extractor = LightKGExt if ("method" not in kb_parser_config.get("graphrag", {}) or kb_parser_config["graphrag"]["method"] != "general") else GeneralKGExt
kg_extractor = _select_extractor(kb_parser_config.get("graphrag", {}))
deadline = max(120, len(chunks) * 60 * 10) if enable_timeout_assertion else 10000000000

View File

@@ -0,0 +1,18 @@
#
# Copyright 2025 The InfiniFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
from .graph_extractor import GraphExtractor
__all__ = ["GraphExtractor"]

View File

@@ -0,0 +1,644 @@
#
# Copyright 2025 The InfiniFlow Authors. All Rights Reserved.
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
"""
spaCy-based entity and relationship extractor for GraphRAG.
Combines techniques from **LinearRAG** and **MGranRAG**:
* **Entity extraction** uses MGranRAG's multi-pass stacking algorithm
(hyphen/apostrophe merging → capitalised-word merging → continuous
noun/number merging) combined with spaCy NER, then deduplicated via
``ner_all_keywords``.
* **Relationship inference** follows LinearRAG's *relation-free* approach:
entities co-occurring in the same sentence (or nearby sentences) are
linked by implicit semantic edges whose description is the shared
sentence text (semantic bridging). Edge weights are optionally TF-
normalised.
No LLM calls are needed for the extraction step itself. The LLM is only
used downstream (inherited from ``Extractor``) for merging / summarising
duplicate entity descriptions when the same entity appears in multiple
chunks.
"""
import logging
from collections import defaultdict
from rag.graphrag.general.extractor import Extractor
from rag.llm.chat_model import Base as CompletionLLM
# ---------------------------------------------------------------------------
# spaCy model loading (lazy, module-level singleton)
# ---------------------------------------------------------------------------
_nlp = None
_nlp_model_name = ""
def _load_spacy_model(model_name: str = "en_core_web_sm"):
"""Load (or return cached) spaCy language model.
Automatically downloads the model if it is not yet installed.
"""
global _nlp, _nlp_model_name
if _nlp is not None and _nlp_model_name == model_name:
return _nlp
try:
import spacy
except ImportError:
raise ImportError(
"spaCy is required for the spacy GraphRAG method. "
"Install it with: pip install spacy && python -m spacy download en_core_web_sm"
)
try:
_nlp = spacy.load(model_name)
logging.info("Loaded spaCy model '%s'", model_name)
except OSError:
logging.warning(
"spaCy model '%s' not found; downloading automatically …", model_name
)
from spacy.cli import download as spacy_download
spacy_download(model_name)
_nlp = spacy.load(model_name)
logging.info("Downloaded and loaded spaCy model '%s'", model_name)
_nlp_model_name = model_name
return _nlp
# ---------------------------------------------------------------------------
# spaCy ↔ application entity-type mapping
# ---------------------------------------------------------------------------
# spaCy's built-in entity labels → the application-level types used by
# ``DEFAULT_ENTITY_TYPES``. Labels not listed here fall through to
# ``"category"``.
SPACY_TO_APP_ENTITY_TYPE: dict[str, str] = {
"PERSON": "person",
"ORG": "organization",
"GPE": "geo",
"LOC": "geo",
"FAC": "geo",
"EVENT": "event",
"PRODUCT": "category",
"WORK_OF_ART": "category",
"LAW": "category",
"LANGUAGE": "category",
"NORP": "category",
"MONEY": "category",
"QUANTITY": "category",
"TIME": "event",
"DATE": "event",
}
# Labels to skip entirely (from LinearRAG: ordinals / cardinals are rarely
# useful as graph nodes).
_SKIP_SPACY_LABELS = {"ORDINAL", "CARDINAL"}
# ---------------------------------------------------------------------------
# MGranRAG-style multi-pass keyword extraction
# ---------------------------------------------------------------------------
def _has_uppercase(text: str) -> bool:
return any(c.isupper() for c in text)
def _replace_word(word: str) -> str:
"""Normalise spaces around hyphens and apostrophes (from MGranRAG)."""
return (
word.replace(" - ", "-")
.replace(" -", "-")
.replace("- ", "-")
.replace(" 's", "'s")
.replace(" 'S", "'S")
)
def extract_keywords(spacy_doc) -> set[str]:
"""MGranRAG-style 3-pass stacking keyword extraction.
Phase 1 — Hyphen / apostrophe merging:
Tokens connected by ``-`` or ``'s`` are merged into a single
phrase labelled ``NP`` (e.g. ``New-York``, ``cat's``).
Phase 2 — Capitalised-word merging:
Consecutive tokens whose ``shape_`` contains ``X`` (i.e. start
with an uppercase letter) are merged. Function words (ADP, CCONJ,
DET, PART) between them are absorbed as well, producing phrases
like ``King of England``. Merged results are labelled ``NX``
unless already ``PROPN``.
Phase 3 — Continuous noun / number merging:
Consecutive tokens with POS in ``[PROPN, NOUN, NUM, NX, NP]``
are merged and labelled ``NNN`` (unless already ``PROPN``).
Finally, results with a trailing lowercase non-noun word are
truncated, and coordinating conjunctions (``and``, ``or``) inside a
merged phrase cause it to be split so that each proper noun is
extracted individually (e.g. ``Bob and Lucy`` → ``Bob``, ``Lucy``).
"""
# ── Phase 1: hyphen / apostrophe ──────────────────────────────────
f1_word: list[str] = []
f1_shape: list[str] = []
f1_pos: list[str] = []
f1_pos_list: list[list[str]] = []
f1_word_list: list[list[str]] = []
is_right = False
for token in spacy_doc:
if token.shape_ in ("'x", "-") and token.pos_ in ("PUNCT", "PART"):
if token.shape_ == "-":
is_right = True
if f1_word:
f1_word[-1] += token.text
f1_pos[-1] = "NP"
f1_pos_list[-1].append(token.pos_)
f1_word_list[-1].append(token.text)
elif is_right:
is_right = False
if f1_word:
f1_word[-1] += token.text
f1_pos[-1] = "NP"
f1_pos_list[-1].append(token.pos_)
f1_word_list[-1].append(token.text)
else:
f1_word.append(token.text)
f1_shape.append(token.shape_)
f1_pos.append(token.pos_)
f1_pos_list.append([token.pos_])
f1_word_list.append([token.text])
# ── Phase 2: capitalised-word merging ───────────────────────────
f2_word: list[str] = []
f2_shape: list[str] = []
f2_pos: list[str] = []
f2_pos_list: list[list[str]] = []
f2_word_list: list[list[str]] = []
for cur in range(len(f1_word)):
cw = f1_word[cur]
cs = f1_shape[cur]
cp = f1_pos[cur]
cpl = f1_pos_list[cur]
cwl = f1_word_list[cur]
if "X" in cs or cp in ("ADP", "CCONJ", "DET", "PART"):
if f2_word and "X" in f2_shape[-1]:
# Merge with previous capitalised token.
f2_word[-1] += " " + cw
f2_shape[-1] += "X"
if f2_pos[-1] != "PROPN":
f2_pos[-1] = "NX"
f2_pos_list[-1].extend(cpl)
f2_word_list[-1].extend(cwl)
else:
f2_word.append(cw)
f2_shape.append(cs + "Start" if "X" in cs else cs)
f2_pos.append(cp)
f2_pos_list.append(cpl)
f2_word_list.append(cwl)
else:
f2_word.append(cw)
f2_shape.append(cs)
f2_pos.append(cp)
f2_pos_list.append(cpl)
f2_word_list.append(cwl)
# ── Phase 3: continuous noun / number merging ───────────────────
f3_word: list[str] = []
f3_shape: list[str] = []
f3_pos: list[str] = []
f3_pos_list: list[list[str]] = []
f3_word_list: list[list[str]] = []
_noun_pos = {"PROPN", "NOUN", "NUM", "NX", "NP"}
_noun_pos_ext = _noun_pos | {"NNN"}
for cur in range(len(f2_word)):
cw = f2_word[cur]
cs = f2_shape[cur]
cp = f2_pos[cur]
cpl = f2_pos_list[cur]
cwl = f2_word_list[cur]
if cp in _noun_pos:
if f3_word and f3_pos[-1] in _noun_pos_ext:
f3_word[-1] += " " + cw
f3_shape[-1] += "X"
if f3_pos[-1] != "PROPN":
f3_pos[-1] = "NNN"
f3_pos_list[-1].extend(cpl)
f3_word_list[-1].extend(cwl)
else:
f3_word.append(cw)
f3_shape.append(cs)
f3_pos.append(cp)
f3_pos_list.append(cpl)
f3_word_list.append(cwl)
else:
f3_word.append(cw)
f3_shape.append(cs)
f3_pos.append(cp)
f3_pos_list.append(cpl)
f3_word_list.append(cwl)
# ── Final keyword collection ────────────────────────────────────
keywords: set[str] = set()
for cur in range(len(f3_word)):
cw = f3_word[cur]
cp = f3_pos[cur]
cpl = f3_pos_list[cur]
cwl = f3_word_list[cur]
if cp not in _noun_pos_ext:
continue
# Truncate trailing lowercase non-noun / non-number words.
if cwl and not _has_uppercase(cwl[-1]) and cpl[-1] not in (
"PROPN",
"NOUN",
"NUM",
"PART",
):
for i in range(len(cpl) - 1, 0, -1):
if cpl[i] in ("PROPN", "NOUN", "NUM", "PART") or _has_uppercase(
cwl[i]
):
break
word = _replace_word(" ".join(cwl[: i + 1]))
keywords.add(word)
else:
word = _replace_word(cw)
keywords.add(word)
# Split on coordinating conjunctions (and/or) inside merged
# phrases so that individual proper nouns are also extracted
# (e.g. ``Bob and Lucy`` → ``Bob``, ``Lucy``).
if any(p in ("PROPN", "NOUN", "NUM") for p in cpl):
cur_kws: list[str] = []
for pidx, pos in enumerate(cpl):
if pos == "CCONJ" and cwl[pidx] and cwl[pidx][0].islower():
if cur_kws:
keywords.add(_replace_word(" ".join(cur_kws)))
cur_kws = []
else:
cur_kws.append(cwl[pidx])
if cur_kws:
keywords.add(_replace_word(" ".join(cur_kws)))
return keywords
def get_ner(spacy_doc) -> dict[str, str]:
"""Return ``{entity_text: spaCy_label}`` for all NER entities."""
entities_dict: dict[str, str] = {}
for ent in spacy_doc.ents:
if ent.label_ in _SKIP_SPACY_LABELS:
continue
text = ent.text.strip()
for t in text.split("\n"):
t = t.strip()
if t:
entities_dict[t] = ent.label_
return entities_dict
def ner_all_keywords(spacy_doc) -> set[str]:
"""Combine rule-based keyword extraction with spaCy NER (MGranRAG).
Returns the union of:
- keywords from the 3-pass stacking algorithm (``extract_keywords``)
- entity texts from spaCy NER (``get_ner``)
"""
keywords = extract_keywords(spacy_doc)
ner_dict = get_ner(spacy_doc)
return keywords.union(ner_dict.keys())
# ---------------------------------------------------------------------------
# Main extractor class
# ---------------------------------------------------------------------------
class GraphExtractor(Extractor):
"""Extract entities and relationships using spaCy (no LLM calls).
Entity extraction
MGranRAG's ``ner_all_keywords`` combines a 3-pass stacking
keyword algorithm with spaCy NER, yielding broader coverage than
NER alone (e.g. it catches compound nouns, hyphenated terms, and
multi-word proper nouns that NER might miss).
Relationship inference
LinearRAG's *relation-free* semantic bridging: entities
co-occurring in the same sentence (or within
``max_sentence_distance`` sentences) are linked by an implicit
edge. The edge description is the shared sentence text, which
provides natural language context without requiring an LLM.
Optionally, edge weights are TF-normalised (LinearRAG):
``weight = count(entity_in_chunk) / sum(all_entity_counts_in_chunk)``.
The ``llm_invoker`` is only used downstream for merging / summarising
duplicate descriptions (inherited from ``Extractor``).
Parameters
----------
llm_invoker : CompletionLLM
LLM handle (used only for description summarisation, not extraction).
language : str
Language hint.
entity_types : list[str] | None
Application-level entity types to keep. Entities whose mapped
type is not in this list are discarded.
spacy_model : str
Name of the spaCy model to load (default ``en_core_web_sm``).
max_sentence_distance : int
When inferring relationships, pair entities that co-occur within
the same sentence. If > 1, also pair entities in sentences whose
indices differ by at most this value.
relationship_strength : int
Default weight assigned to every inferred relationship when
``use_tf_weight`` is ``False``.
use_tf_weight : bool
If ``True``, use TF-normalised weighting (LinearRAG-style) for
edge weights instead of the fixed ``relationship_strength``.
"""
def __init__(
self,
llm_invoker: CompletionLLM,
language: str | None = "English",
entity_types: list[str] | None = None,
spacy_model: str = "en_core_web_sm",
max_sentence_distance: int = 1,
relationship_strength: int = 1,
use_tf_weight: bool = False,
):
super().__init__(llm_invoker, language, entity_types)
self._spacy_model_name = spacy_model
self._max_sentence_distance = max_sentence_distance
self._relationship_strength = relationship_strength
self._use_tf_weight = use_tf_weight
# Eagerly load the model so import errors surface early.
self._nlp = _load_spacy_model(spacy_model)
# ------------------------------------------------------------------
# Public interface called by ``Extractor.__call__``
# ------------------------------------------------------------------
async def _process_single_content(
self,
chunk_key_dp: tuple[str, str],
chunk_seq: int,
num_chunks: int,
out_results,
task_id="",
):
"""Process one chunk through spaCy NER + keyword stacking + co-occurrence."""
chunk_key = chunk_key_dp[0]
content = chunk_key_dp[1]
doc = self._nlp(content)
# ── 1. Entity extraction (MGranRAG: ner_all_keywords) ────────
# Build a mapping from keyword text → spaCy label (if available).
ner_label_map: dict[str, str] = get_ner(doc)
all_keywords = ner_all_keywords(doc)
# For each keyword, determine its app-level entity type.
# - If the keyword matches a NER entity, use that label.
# - Otherwise, infer from POS heuristics.
ent_records: dict[str, dict] = {} # entity_name_upper → record
ent_by_sent: dict[int, list[dict]] = defaultdict(list)
for kw in all_keywords:
kw_upper = kw.strip().upper()
if not kw_upper:
continue
# Determine entity type.
spacy_label = ner_label_map.get(kw)
if spacy_label:
app_type = SPACY_TO_APP_ENTITY_TYPE.get(spacy_label, "category")
else:
app_type = self._infer_type_from_pos(doc, kw)
if app_type not in self._entity_types_set:
continue
# Determine which sentence this keyword belongs to.
sent_idx = self._keyword_sent_idx(doc, kw)
# Description: use the containing sentence (LinearRAG semantic bridging).
#sent_text = self._keyword_sent_text(doc, kw)
ent_record = dict(
entity_name=kw_upper,
entity_type=app_type.upper(),
description="", #sent_text or kw,
source_id=chunk_key,
)
# A keyword may appear multiple times; keep the first.
if kw_upper not in ent_records:
ent_records[kw_upper] = ent_record
ent_by_sent[sent_idx].append(ent_record)
maybe_nodes: dict[str, list[dict]] = defaultdict(list)
for name, rec in ent_records.items():
maybe_nodes[name].append(rec)
# ── 2. Relationship inference (LinearRAG: sentence co-occurrence) ─
maybe_edges: dict[tuple, list[dict]] = defaultdict(list)
# Pre-compute TF weights if needed (LinearRAG).
entity_tf: dict[str, float] = {}
if self._use_tf_weight:
total_count = sum(
content.upper().count(name) for name in ent_records
)
for name in ent_records:
count = content.upper().count(name)
entity_tf[name] = count / total_count if total_count > 0 else 0.0
seen_pairs: set[tuple[str, str]] = set()
for si in sorted(ent_by_sent.keys()):
ents_in_range = list(ent_by_sent[si])
# Expand with nearby sentences.
for offset in range(1, self._max_sentence_distance + 1):
for nb_si in (si + offset, si - offset):
if nb_si in ent_by_sent:
ents_in_range.extend(ent_by_sent[nb_si])
# Deduplicate by entity name.
unique: dict[str, dict] = {}
for e in ents_in_range:
unique[e["entity_name"]] = e
ent_list = list(unique.values())
for a_idx in range(len(ent_list)):
for b_idx in range(a_idx + 1, len(ent_list)):
ea, eb = ent_list[a_idx], ent_list[b_idx]
pair = tuple(sorted([ea["entity_name"], eb["entity_name"]]))
if pair in seen_pairs:
continue
seen_pairs.add(pair)
# Relationship description: shared sentence text
# (LinearRAG semantic bridging — the sentence is the
# semantic bridge between entities).
#desc = self._cooccurrence_description(doc, ea["entity_name"], eb["entity_name"])
# Edge weight: TF-normalised (LinearRAG) or fixed.
if self._use_tf_weight:
w = (entity_tf.get(ea["entity_name"], 0.0)
+ entity_tf.get(eb["entity_name"], 0.0))
weight = max(w, 0.01)
else:
weight = self._relationship_strength
# Keywords for the edge: the two entity names.
edge_record = dict(
src_id=pair[0],
tgt_id=pair[1],
weight=weight,
description="", #desc,
keywords=[ea["entity_name"], eb["entity_name"]],
source_id=chunk_key,
)
maybe_edges[pair].append(edge_record)
token_count = len(doc)
out_results.append((dict(maybe_nodes), dict(maybe_edges), token_count))
if self.callback:
self.callback(
0.5 + 0.1 * len(out_results) / num_chunks,
msg=f"[spacy] Entities extraction of chunk {chunk_seq} "
f"{len(out_results)}/{num_chunks} done, "
f"{len(maybe_nodes)} nodes, {len(maybe_edges)} edges, "
f"{token_count} tokens.",
)
# ------------------------------------------------------------------
# Helpers
# ------------------------------------------------------------------
@property
def _entity_types_set(self) -> set[str]:
return {t.lower() for t in self._entity_types}
@staticmethod
def _infer_type_from_pos(doc, keyword: str) -> str:
"""Infer an application-level entity type from POS tags when the
keyword was found by the stacking algorithm but not by NER."""
kw_upper = keyword.upper()
for token in doc:
if token.text.upper() == kw_upper or token.text.upper().startswith(kw_upper.split()[0]):
if token.pos_ == "PROPN":
return "person"
if token.pos_ == "NOUN":
return "category"
if token.pos_ == "NUM":
return "event"
break
# Fallback: check for uppercase → likely a named entity.
if _has_uppercase(keyword):
return "person"
return "category"
@staticmethod
def _keyword_sent_idx(doc, keyword: str) -> int:
"""Return the sentence index that contains *keyword*."""
kw_lower = keyword.lower()
for i, sent in enumerate(doc.sents):
if kw_lower in sent.text.lower():
return i
return 0
@staticmethod
def _keyword_sent_text(doc, keyword: str) -> str | None:
"""Return the sentence text containing *keyword* (LinearRAG semantic bridging)."""
kw_lower = keyword.lower()
for sent in doc.sents:
if kw_lower in sent.text.lower():
return sent.text.strip()
return None
@staticmethod
def _cooccurrence_description(doc, head_name: str, tail_name: str) -> str:
"""Derive a relationship description using sentence co-occurrence
(LinearRAG) with dependency-path enhancement as fallback.
If both entities appear in the same sentence, that sentence is
used as the description (semantic bridging). Otherwise, try to
find a lowest common ancestor in the dependency tree. As a last
resort, return a generic statement.
"""
head_lower = head_name.lower()
tail_lower = tail_name.lower()
# Primary: shared sentence text (LinearRAG semantic bridging).
for sent in doc.sents:
sent_lower = sent.text.lower()
if head_lower in sent_lower and tail_lower in sent_lower:
return sent.text.strip()
# Fallback: dependency path via LCA.
head_tok = GraphExtractor._find_token_by_text(doc, head_name)
tail_tok = GraphExtractor._find_token_by_text(doc, tail_name)
if head_tok is not None and tail_tok is not None:
path_head = list(GraphExtractor._ancestor_path(head_tok))
path_tail = list(GraphExtractor._ancestor_path(tail_tok))
lca = None
for h in path_head:
for t in path_tail:
if h == t:
lca = h
break
if lca is not None:
break
if lca is not None and lca is not head_tok and lca is not tail_tok:
return f"{head_name} is related to {tail_name} via '{lca.lemma_}'"
# Final fallback: nearby sentences.
head_sent = GraphExtractor._find_sent_for_text(doc, head_lower)
if head_sent is not None:
return head_sent.text.strip()
return f"{head_name} is related to {tail_name}"
@staticmethod
def _find_token_by_text(doc, ent_name: str):
"""Return the head token of the first spaCy entity matching *ent_name*."""
target = ent_name.upper()
for ent in doc.ents:
if ent.text.strip().upper() == target:
return ent.root
# Fallback: token-level match for keywords not in doc.ents.
for token in doc:
if token.text.strip().upper() == target:
return token
return None
@staticmethod
def _find_sent_for_text(doc, text_lower: str):
"""Return the first ``Span`` whose text contains *text_lower*."""
for sent in doc.sents:
if text_lower in sent.text.lower():
return sent
return None
@staticmethod
def _ancestor_path(token):
"""Yield *token* then each ancestor up to the root."""
yield token
for anc in token.ancestors:
yield anc

View File

@@ -556,8 +556,8 @@ class TestDatasetCreate:
("graphrag_type_invalid", {"graphrag": {"use_graphrag": "string"}}, "Input should be a valid boolean"),
("graphrag_entity_types_not_list", {"graphrag": {"entity_types": "1,2"}}, "Input should be a valid list"),
("graphrag_entity_types_not_str_in_list", {"graphrag": {"entity_types": [1, 2]}}, "nput should be a valid string"),
("graphrag_method_unknown", {"graphrag": {"method": "unknown"}}, "Input should be 'light' or 'general'"),
("graphrag_method_none", {"graphrag": {"method": None}}, "Input should be 'light' or 'general'"),
("graphrag_method_unknown", {"graphrag": {"method": "unknown"}}, "Input should be 'light', 'general' or 'ner'"),
("graphrag_method_none", {"graphrag": {"method": None}}, "Input should be 'light', 'general' or 'ner'"),
("graphrag_community_type_invalid", {"graphrag": {"community": "string"}}, "Input should be a valid boolean"),
("graphrag_resolution_type_invalid", {"graphrag": {"resolution": "string"}}, "Input should be a valid boolean"),
("raptor_type_invalid", {"raptor": {"use_raptor": "string"}}, "Input should be a valid boolean"),

View File

@@ -686,8 +686,8 @@ class TestDatasetUpdate:
({"graphrag": {"use_graphrag": "string"}}, "Input should be a valid boolean"),
({"graphrag": {"entity_types": "1,2"}}, "Input should be a valid list"),
({"graphrag": {"entity_types": [1, 2]}}, "nput should be a valid string"),
({"graphrag": {"method": "unknown"}}, "Input should be 'light' or 'general'"),
({"graphrag": {"method": None}}, "Input should be 'light' or 'general'"),
({"graphrag": {"method": "unknown"}}, "Input should be 'light', 'general' or 'ner'"),
({"graphrag": {"method": None}}, "Input should be 'light', 'general' or 'ner'"),
({"graphrag": {"community": "string"}}, "Input should be a valid boolean"),
({"graphrag": {"resolution": "string"}}, "Input should be a valid boolean"),
({"raptor": {"use_raptor": "string"}}, "Input should be a valid boolean"),

View File

@@ -494,8 +494,8 @@ class TestDatasetCreate:
("graphrag_type_invalid", {"graphrag": {"use_graphrag": "string"}}, "Input should be a valid boolean"),
("graphrag_entity_types_not_list", {"graphrag": {"entity_types": "1,2"}}, "Input should be a valid list"),
("graphrag_entity_types_not_str_in_list", {"graphrag": {"entity_types": [1, 2]}}, "nput should be a valid string"),
("graphrag_method_unknown", {"graphrag": {"method": "unknown"}}, "Input should be 'light' or 'general'"),
("graphrag_method_none", {"graphrag": {"method": None}}, "Input should be 'light' or 'general'"),
("graphrag_method_unknown", {"graphrag": {"method": "unknown"}}, "Input should be 'light', 'general' or 'ner'"),
("graphrag_method_none", {"graphrag": {"method": None}}, "Input should be 'light', 'general' or 'ner'"),
("graphrag_community_type_invalid", {"graphrag": {"community": "string"}}, "Input should be a valid boolean"),
("graphrag_resolution_type_invalid", {"graphrag": {"resolution": "string"}}, "Input should be a valid boolean"),
("raptor_type_invalid", {"raptor": {"use_raptor": "string"}}, "Input should be a valid boolean"),

View File

@@ -550,8 +550,8 @@ class TestDatasetUpdate:
({"graphrag": {"use_graphrag": "string"}}, "Input should be a valid boolean"),
({"graphrag": {"entity_types": "1,2"}}, "Input should be a valid list"),
({"graphrag": {"entity_types": [1, 2]}}, "nput should be a valid string"),
({"graphrag": {"method": "unknown"}}, "Input should be 'light' or 'general'"),
({"graphrag": {"method": None}}, "Input should be 'light' or 'general'"),
({"graphrag": {"method": "unknown"}}, "Input should be 'light', 'general' or 'ner'"),
({"graphrag": {"method": None}}, "Input should be 'light', 'general' or 'ner'"),
({"graphrag": {"community": "string"}}, "Input should be a valid boolean"),
({"graphrag": {"resolution": "string"}}, "Input should be a valid boolean"),
({"raptor": {"use_raptor": "string"}}, "Input should be a valid boolean"),

393
uv.lock generated
View File

@@ -889,6 +889,38 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/10/cb/f2ad4230dc2eb1a74edf38f1a38b9b52277f75bef262d8908e60d957e13c/blinker-1.9.0-py3-none-any.whl", hash = "sha256:ba0efaa9080b619ff2f3459d1d500c57bddea4a6b424b60a91141db6fd2f08bc" },
]
[[package]]
name = "blis"
version = "1.3.3"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "numpy" },
]
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d0/d0/d8cc8c9a4488a787e7fa430f6055e5bd1ddb22c340a751d9e901b82e2efe/blis-1.3.3.tar.gz", hash = "sha256:034d4560ff3cc43e8aa37e188451b0440e3261d989bb8a42ceee865607715ecd" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/16/d1/429cf0cf693d4c7dc2efed969bd474e315aab636e4a95f66c4ed7264912d/blis-1.3.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:2a1c74e100665f8e918ebdbae2794576adf1f691680b5cdb8b29578432f623ef" },
{ url = "https://mirrors.aliyun.com/pypi/packages/11/69/363c8df8d98b3cc97be19aad6aabb2c9c53f372490d79316bdee92d476e7/blis-1.3.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3f6c595185176ce021316263e1a1d636a3425b6c48366c1fd712d08d0b71849a" },
{ url = "https://mirrors.aliyun.com/pypi/packages/96/2a/fbf65d906d823d839076c5150a6f8eb5ecbc5f9135e0b6510609bda1e6b7/blis-1.3.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d734b19fba0be7944f272dfa7b443b37c61f9476d9ab054a9ac53555ceadd2e0" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d5/ad/58deaa3ad856dd3cc96493e40ffd2ed043d18d4d304f85a65cde1ccbf644/blis-1.3.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:1ef6d6e2b599a3a2788eb6d9b443533961265aa4ec49d574ed4bb846e548dcdb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/78/82/816a7adfe1f7acc8151f01ec86ef64467a3c833932d8f19f8e06613b8a4e/blis-1.3.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8c888438ae99c500422d50698e3028b65caa8ebb44e24204d87fda2df64058f7" },
{ url = "https://mirrors.aliyun.com/pypi/packages/1e/e2/0e93b865f648b5519360846669a35f28ee8f4e1d93d054f6850d8afbabde/blis-1.3.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8177879fd3590b5eecdd377f9deafb5dc8af6d684f065bd01553302fb3fcf9a7" },
{ url = "https://mirrors.aliyun.com/pypi/packages/20/07/fb43edc2ff0a6a367e4a94fc39eb3b85aa1e55e24cc857af2db145ce9f0d/blis-1.3.3-cp312-cp312-win_amd64.whl", hash = "sha256:f20f7ad69aaffd1ce14fe77de557b6df9b61e0c9e582f75a843715d836b5c8af" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e6/f7/d26e62d9be3d70473a63e0a5d30bae49c2fe138bebac224adddcdef8a7ce/blis-1.3.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1e647341f958421a86b028a2efe16ce19c67dba2a05f79e8f7e80b1ff45328aa" },
{ url = "https://mirrors.aliyun.com/pypi/packages/4a/78/750d12da388f714958eb2f2fd177652323bbe7ec528365c37129edd6eb84/blis-1.3.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d563160f874abb78a57e346f07312c5323f7ad67b6370052b6b17087ef234a8e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e8/36/eac4199c5b200a5f3e93cad197da8d26d909f218eb444c4f552647c95240/blis-1.3.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:30b8a5b90cb6cb81d1ada9ae05aa55fb8e70d9a0ae9db40d2401bb9c1c8f14c4" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bf/51/472e7b36a6bedb5242a9757e7486f702c3619eff76e256735d0c8b1679c6/blis-1.3.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9f5c53b277f6ac5b3ca30bc12ebab7ea16c8f8c36b14428abb56924213dc127" },
{ url = "https://mirrors.aliyun.com/pypi/packages/84/da/d0dfb6d6e6321ae44df0321384c32c322bd07b15740d7422727a1a49fc5d/blis-1.3.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6297e7616c158b305c9a8a4e47ca5fc9b0785194dd96c903b1a1591a7ca21ddf" },
{ url = "https://mirrors.aliyun.com/pypi/packages/20/c5/2b0b5e556fa0364ed671051ea078a6d6d7b979b1cfef78d64ad3ca5f0c7f/blis-1.3.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:3f966ca74f89f8a33e568b9a1d71992fc9a0d29a423e047f0a212643e21b5458" },
{ url = "https://mirrors.aliyun.com/pypi/packages/31/07/4cdc81a47bf862c0b06d91f1bc6782064e8b69ac9b5d4ff51d97e4ff03da/blis-1.3.3-cp313-cp313-win_amd64.whl", hash = "sha256:7a0fc4b237a3a453bdc3c7ab48d91439fcd2d013b665c46948d9eaf9c3e45a97" },
{ url = "https://mirrors.aliyun.com/pypi/packages/5f/8a/80f7c68fbc24a76fc9c18522c46d6d69329c320abb18e26a707a5d874083/blis-1.3.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:c3e33cfbf22a418373766816343fcfcd0556012aa3ffdf562c29cddec448a415" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e5/52/d1aa3a51a7fc299b0c89dcaa971922714f50b1202769eebbdaadd1b5cff7/blis-1.3.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:6f165930e8d3a85c606d2003211497e28d528c7416fbfeafb6b15600963f7c9b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/99/4f/badc7bd7f74861b26c10123bba7b9d16f99cd9535ad0128780360713820f/blis-1.3.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:878d4d96d8f2c7a2459024f013f2e4e5f46d708b23437dae970d998e7bff14a0" },
{ url = "https://mirrors.aliyun.com/pypi/packages/72/a6/f62a3bd814ca19ec7e29ac889fd354adea1217df3183e10217de51e2eb8b/blis-1.3.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f36c0ca84a05ee5d3dbaa38056c4423c1fc29948b17a7923dd2fed8967375d74" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d4/6c/671af79ee42bc4c968cae35c091ac89e8721c795bfa4639100670dc59139/blis-1.3.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:e5a662c48cd4aad5dae1a950345df23957524f071315837a4c6feb7d3b288990" },
{ url = "https://mirrors.aliyun.com/pypi/packages/be/92/7cd7f8490da7c98ee01557f2105885cc597217b0e7fd2eeb9e22cdd4ef23/blis-1.3.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:9de26fbd72bac900c273b76d46f0b45b77a28eace2e01f6ac6c2239531a413bb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0a/de/acae8e9f9a1f4bb393d41c8265898b0f29772e38eac14e9f69d191e2c006/blis-1.3.3-cp314-cp314-win_amd64.whl", hash = "sha256:9e5fdf4211b1972400f8ff6dafe87cb689c5d84f046b4a76b207c0bd2270faaf" },
]
[[package]]
name = "boto3"
version = "1.42.74"
@@ -998,6 +1030,15 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/da/ff/3f0982ecd37c2d6a7266c22e7ea2e47d0773fe449984184c5316459d2776/captcha-0.7.1-py3-none-any.whl", hash = "sha256:8b73b5aba841ad1e5bdb856205bf5f09560b728ee890eb9dae42901219c8c599" },
]
[[package]]
name = "catalogue"
version = "2.0.10"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/38/b4/244d58127e1cdf04cf2dc7d9566f0d24ef01d5ce21811bab088ecc62b5ea/catalogue-2.0.10.tar.gz", hash = "sha256:4f56daa940913d3f09d589c191c74e5a6d51762b3a9e37dd53b7437afd6cda15" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/9e/96/d32b941a501ab566a16358d68b6eb4e4acc373fab3c3c4d7d9e649f7b4bb/catalogue-2.0.10-py3-none-any.whl", hash = "sha256:58c2de0020aa90f4a2da7dfad161bf7b3b054c86a5f09fcedc0b2b740c109a9f" },
]
[[package]]
name = "cattrs"
version = "22.2.0"
@@ -1218,6 +1259,15 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/ae/5a/4f025bc751087833686892e17e7564828e409c43b632878afeae554870cd/click_log-0.4.0-py2.py3-none-any.whl", hash = "sha256:a43e394b528d52112af599f2fc9e4b7cf3c15f94e53581f74fa6867e68c91756" },
]
[[package]]
name = "cloudpathlib"
version = "0.24.0"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/06/19/58bc6b5d7d0f81c7209b05445af477e147c486552f96665a5912211839b9/cloudpathlib-0.24.0.tar.gz", hash = "sha256:c521a984e77b47e656fe78e20a7e3e260e0ab45fc69e33ac01094227c979e34a" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/c2/5b/ba933f896d9b0b07608d575a8501e2b4e32166b60d84c430a4a7285ebe64/cloudpathlib-0.24.0-py3-none-any.whl", hash = "sha256:b1c51e2d2ec7dc4fed6538991f4aea849d6cf11a7e6b9069f86e461aa1f9b5b4" },
]
[[package]]
name = "cn2an"
version = "0.5.22"
@@ -1313,6 +1363,15 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/07/1d/62f5bf92e12335eb63517f42671ed78512d48bbc69e02a942dd7b90f03f0/compressed_rtf-1.0.7-py3-none-any.whl", hash = "sha256:b7904921d78c67a0a4b7fff9fb361a00ae2b447b6edca010ce321cd98fa0fcc0" },
]
[[package]]
name = "confection"
version = "1.3.3"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ca/65/efd0fe8a936fc8ca2978cb7b82581fb20d901c6039e746a808f746b7647b/confection-1.3.3.tar.gz", hash = "sha256:f0f6810d567ff73993fe74d218ca5e1ffb6a44fb03f391257fc5d033546cbfaa" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/8d/e4/d66708bdf0d92fb4d49b22cdff4b10cec38aca5dcd7e81d909bb55c65cd7/confection-1.3.3-py3-none-any.whl", hash = "sha256:b9fef9ee84b237ef4611ec3eb5797b70e13063e6310ad9f15536373f5e313c82" },
]
[[package]]
name = "contourpy"
version = "1.3.3"
@@ -1710,6 +1769,54 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl", hash = "sha256:85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30" },
]
[[package]]
name = "cymem"
version = "2.0.13"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/c0/8f/2f0fbb32535c3731b7c2974c569fb9325e0a38ed5565a08e1139a3b71e82/cymem-2.0.13.tar.gz", hash = "sha256:1c91a92ae8c7104275ac26bd4d29b08ccd3e7faff5893d3858cb6fadf1bc1588" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/c9/52/478a2911ab5028cb710b4900d64aceba6f4f882fcb13fd8d40a456a1b6dc/cymem-2.0.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e8afbc5162a0fe14b6463e1c4e45248a1b2fe2cbcecc8a5b9e511117080da0eb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f9/71/f0f8adee945524774b16af326bd314a14a478ed369a728a22834e6785a18/cymem-2.0.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9251d889348fe79a75e9b3e4d1b5fa651fca8a64500820685d73a3acc21b6a8" },
{ url = "https://mirrors.aliyun.com/pypi/packages/62/6d/159780fe162ff715d62b809246e5fc20901cef87ca28b67d255a8d741861/cymem-2.0.13-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:742fc19764467a49ed22e56a4d2134c262d73a6c635409584ae3bf9afa092c33" },
{ url = "https://mirrors.aliyun.com/pypi/packages/eb/12/678d16f7aa1996f947bf17b8cfb917ea9c9674ef5e2bd3690c04123d5680/cymem-2.0.13-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f190a92fe46197ee64d32560eb121c2809bb843341733227f51538ce77b3410d" },
{ url = "https://mirrors.aliyun.com/pypi/packages/31/5d/0dd8c167c08cd85e70d274b7235cfe1e31b3cebc99221178eaf4bbb95c6f/cymem-2.0.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d670329ee8dbbbf241b7c08069fe3f1d3a1a3e2d69c7d05ea008a7010d826298" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b7/c9/d6514a412a1160aa65db539836b3d47f9b59f6675f294ec34ae32f867c82/cymem-2.0.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a84ba3178d9128b9ffb52ce81ebab456e9fe959125b51109f5b73ebdfc6b60d6" },
{ url = "https://mirrors.aliyun.com/pypi/packages/dd/fe/3ee37d02ca4040f2fb22d34eb415198f955862b5dd47eee01df4c8f5454c/cymem-2.0.13-cp312-cp312-win_amd64.whl", hash = "sha256:2ff1c41fd59b789579fdace78aa587c5fc091991fa59458c382b116fc36e30dc" },
{ url = "https://mirrors.aliyun.com/pypi/packages/94/fb/1b681635bfd5f2274d0caa8f934b58435db6c091b97f5593738065ddb786/cymem-2.0.13-cp312-cp312-win_arm64.whl", hash = "sha256:6bbd701338df7bf408648191dff52472a9b334f71bcd31a21a41d83821050f67" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ce/0f/95a4d1e3bebfdfa7829252369357cf9a764f67569328cd9221f21e2c952e/cymem-2.0.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:891fd9030293a8b652dc7fb9fdc79a910a6c76fc679cd775e6741b819ffea476" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bf/a0/8fc929cc29ae466b7b4efc23ece99cbd3ea34992ccff319089c624d667fd/cymem-2.0.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:89c4889bd16513ce1644ccfe1e7c473ba7ca150f0621e66feac3a571bde09e7e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/4a/b3/deeb01354ebaf384438083ffe0310209ef903db3e7ba5a8f584b06d28387/cymem-2.0.13-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:45dcaba0f48bef9cc3d8b0b92058640244a95a9f12542210b51318da97c2cf28" },
{ url = "https://mirrors.aliyun.com/pypi/packages/36/36/bc980b9a14409f3356309c45a8d88d58797d02002a9d794dd6c84e809d3a/cymem-2.0.13-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e96848faaafccc0abd631f1c5fb194eac0caee4f5a8777fdbb3e349d3a21741c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/fd/dd/a12522952624685bd0f8968e26d2ed6d059c967413ce6eb52292f538f1b0/cymem-2.0.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e02d3e2c3bfeb21185d5a4a70790d9df40629a87d8d7617dc22b4e864f665fa3" },
{ url = "https://mirrors.aliyun.com/pypi/packages/08/11/5dc933ddfeb2dfea747a0b935cb965b9a7580b324d96fc5f5a1b5ff8df29/cymem-2.0.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:fece5229fd5ecdcd7a0738affb8c59890e13073ae5626544e13825f26c019d3c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/70/66/d23b06166864fa94e13a98e5922986ce774832936473578febce64448d75/cymem-2.0.13-cp313-cp313-win_amd64.whl", hash = "sha256:38aefeb269597c1a0c2ddf1567dd8605489b661fa0369c6406c1acd433b4c7ba" },
{ url = "https://mirrors.aliyun.com/pypi/packages/2f/9e/c7b21271ab88a21760f3afdec84d2bc09ffa9e6c8d774ad9d4f1afab0416/cymem-2.0.13-cp313-cp313-win_arm64.whl", hash = "sha256:717270dcfd8c8096b479c42708b151002ff98e434a7b6f1f916387a6c791e2ad" },
{ url = "https://mirrors.aliyun.com/pypi/packages/7f/28/d3b03427edc04ae04910edf1c24b993881c3ba93a9729a42bcbb816a1808/cymem-2.0.13-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7e1a863a7f144ffb345397813701509cfc74fc9ed360a4d92799805b4b865dd1" },
{ url = "https://mirrors.aliyun.com/pypi/packages/35/a9/7ed53e481f47ebfb922b0b42e980cec83e98ccb2137dc597ea156642440c/cymem-2.0.13-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:c16cb80efc017b054f78998c6b4b013cef509c7b3d802707ce1f85a1d68361bf" },
{ url = "https://mirrors.aliyun.com/pypi/packages/61/39/a3d6ad073cf7f0fbbb8bbf09698c3c8fac11be3f791d710239a4e8dd3438/cymem-2.0.13-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:0d78a27c88b26c89bd1ece247d1d5939dba05a1dae6305aad8fd8056b17ddb51" },
{ url = "https://mirrors.aliyun.com/pypi/packages/36/0c/20697c8bc19f624a595833e566f37d7bcb9167b0ce69de896eba7cfc9c2d/cymem-2.0.13-cp313-cp313t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6d36710760f817194dacb09d9fc45cb6a5062ed75e85f0ef7ad7aeeb13d80cc3" },
{ url = "https://mirrors.aliyun.com/pypi/packages/82/d4/9326e3422d1c2d2b4a8fb859bdcce80138f6ab721ddafa4cba328a505c71/cymem-2.0.13-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:c8f30971cadd5dcf73bcfbbc5849b1f1e1f40db8cd846c4aa7d3b5e035c7b583" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ed/bc/68da7dd749b72884dc22e898562f335002d70306069d496376e5ff3b6153/cymem-2.0.13-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:9d441d0e45798ec1fd330373bf7ffa6b795f229275f64016b6a193e6e2a51522" },
{ url = "https://mirrors.aliyun.com/pypi/packages/50/23/dbf2ad6ecd19b99b3aab6203b1a06608bbd04a09c522d836b854f2f30f73/cymem-2.0.13-cp313-cp313t-win_amd64.whl", hash = "sha256:d1c950eebb9f0f15e3ef3591313482a5a611d16fc12d545e2018cd607f40f472" },
{ url = "https://mirrors.aliyun.com/pypi/packages/54/3f/35701c13e1fc7b0895198c8b20068c569a841e0daf8e0b14d1dc0816b28f/cymem-2.0.13-cp313-cp313t-win_arm64.whl", hash = "sha256:042e8611ef862c34a97b13241f5d0da86d58aca3cecc45c533496678e75c5a1f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/a7/2e/f0e1596010a9a57fa9ebd124a678c07c5b2092283781ae51e79edcf5cb98/cymem-2.0.13-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d2a4bf67db76c7b6afc33de44fb1c318207c3224a30da02c70901936b5aafdf1" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bc/45/8ccc21df08fcbfa6aa3efeb7efc11a1c81c90e7476e255768bb9c29ba02a/cymem-2.0.13-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:92a2ce50afa5625fb5ce7c9302cee61e23a57ccac52cd0410b4858e572f8614b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/01/8c/fe16531631f051d3d1226fa42e2d76fd2c8d5cfa893ec93baee90c7a9d90/cymem-2.0.13-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:bc116a70cc3a5dc3d1684db5268eff9399a0be8603980005e5b889564f1ea42f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/47/4b/39d67b80ffb260457c05fcc545de37d82e9e2dbafc93dd6b64f17e09b933/cymem-2.0.13-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:68489bf0035c4c280614067ab6a82815b01dc9fcd486742a5306fe9f68deb7ef" },
{ url = "https://mirrors.aliyun.com/pypi/packages/53/0e/76f6531f74dfdfe7107899cce93ab063bb7ee086ccd3910522b31f623c08/cymem-2.0.13-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:03cb7bdb55718d5eb6ef0340b1d2430ba1386db30d33e9134d01ba9d6d34d705" },
{ url = "https://mirrors.aliyun.com/pypi/packages/c7/7c/eee56757db81f0aefc2615267677ae145aff74228f529838425057003c0d/cymem-2.0.13-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:1710390e7fb2510a8091a1991024d8ae838fd06b02cdfdcd35f006192e3c6b0e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/77/e0/a4b58ec9e53c836dce07ef39837a64a599f4a21a134fc7ca57a3a8f9a4b5/cymem-2.0.13-cp314-cp314-win_amd64.whl", hash = "sha256:ac699c8ec72a3a9de8109bd78821ab22f60b14cf2abccd970b5ff310e14158ed" },
{ url = "https://mirrors.aliyun.com/pypi/packages/61/81/9931d1f83e5aeba175440af0b28f0c2e6f71274a5a7b688bc3e907669388/cymem-2.0.13-cp314-cp314-win_arm64.whl", hash = "sha256:90c2d0c04bcda12cd5cebe9be93ce3af6742ad8da96e1b1907e3f8e00291def1" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b7/ef/af447c2184dec6dec973be14614df8ccb4d16d1c74e0784ab4f02538433c/cymem-2.0.13-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:ff036bbc1464993552fd1251b0a83fe102af334b301e3896d7aa05a4999ad042" },
{ url = "https://mirrors.aliyun.com/pypi/packages/8c/95/e10f33a8d4fc17f9b933d451038218437f9326c2abb15a3e7f58ce2a06ec/cymem-2.0.13-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:fb8291691ba7ff4e6e000224cc97a744a8d9588418535c9454fd8436911df612" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e7/7a/5efeb2d2ea6ebad2745301ad33a4fa9a8f9a33b66623ee4d9185683007a6/cymem-2.0.13-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d8d06ea59006b1251ad5794bcc00121e148434826090ead0073c7b7fedebe431" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0b/28/2a3f65842cc8443c2c0650cf23d525be06c8761ab212e0a095a88627be1b/cymem-2.0.13-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:c0046a619ecc845ccb4528b37b63426a0cbcb4f14d7940add3391f59f13701e6" },
{ url = "https://mirrors.aliyun.com/pypi/packages/98/73/dd5f9729398f0108c2e71d942253d0d484d299d08b02e474d7cfc43ed0b0/cymem-2.0.13-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:18ad5b116a82fa3674bc8838bd3792891b428971e2123ae8c0fd3ca472157c5e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/5a/01/ffe51729a8f961a437920560659073e47f575d4627445216c1177ecd4a41/cymem-2.0.13-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:666ce6146bc61b9318aa70d91ce33f126b6344a25cf0b925621baed0c161e9cc" },
{ url = "https://mirrors.aliyun.com/pypi/packages/fd/ac/c9e7d68607f71ef978c81e334ab2898b426944c71950212b1467186f69f9/cymem-2.0.13-cp314-cp314t-win_amd64.whl", hash = "sha256:84c1168c563d9d1e04546cb65e3e54fde2bf814f7c7faf11fc06436598e386d1" },
{ url = "https://mirrors.aliyun.com/pypi/packages/66/66/150e406a2db5535533aa3c946de58f0371f2e412e23f050c704588023e6e/cymem-2.0.13-cp314-cp314t-win_arm64.whl", hash = "sha256:e9027764dc5f1999fb4b4cabee1d0322c59e330c0a6485b436a68275f614277f" },
]
[[package]]
name = "darabonba-core"
version = "1.0.5"
@@ -1965,6 +2072,14 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/6b/ee/4699000ef357e476a3984fd1eff236f820e3346c4aef7c7772e580b81b31/elasticsearch_dsl-8.12.0-py3-none-any.whl", hash = "sha256:2ea9e6ded64d21a8f1ef72477a4d116c6fbeea631ac32a2e2490b9c0d09a99a6" },
]
[[package]]
name = "en-core-web-sm"
version = "3.8.0"
source = { url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl" }
wheels = [
{ url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl", hash = "sha256:1932429db727d4bff3deed6b34cfc05df17794f4a52eeb26cf8928f7c1a0fb85" },
]
[[package]]
name = "et-xmlfile"
version = "2.0.0"
@@ -4376,6 +4491,54 @@ version = "0.0.12"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/17/0d/74f0293dfd7dcc3837746d0138cbedd60b31701ecc75caec7d3f281feba0/multitasking-0.0.12.tar.gz", hash = "sha256:2fba2fa8ed8c4b85e227c5dd7dc41c7d658de3b6f247927316175a57349b84d1" }
[[package]]
name = "murmurhash"
version = "1.0.15"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/23/2e/88c147931ea9725d634840d538622e94122bceaf346233349b7b5c62964b/murmurhash-1.0.15.tar.gz", hash = "sha256:58e2b27b7847f9e2a6edf10b47a8c8dd70a4705f45dccb7bf76aeadacf56ba01" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/b6/46/be8522d3456fdccf1b8b049c6d82e7a3c1114c4fc2cfe14b04cba4b3e701/murmurhash-1.0.15-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d37e3ae44746bca80b1a917c2ea625cf216913564ed43f69d2888e5df97db0cb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ed/cc/630449bf4f6178d7daf948ce46ad00b25d279065fc30abd8d706be3d87e0/murmurhash-1.0.15-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0861cb11039409eaf46878456b7d985ef17b6b484103a6fc367b2ecec846891d" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ff/30/ea8f601a9bf44db99468696efd59eb9cff1157cd55cb586d67116697583f/murmurhash-1.0.15-cp312-cp312-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:5a301decfaccfec70fe55cb01dde2a012c3014a874542eaa7cc73477bb749616" },
{ url = "https://mirrors.aliyun.com/pypi/packages/c9/de/c40ce8c0877d406691e735b8d6e9c815f36a82b499d358313db5dbe219d7/murmurhash-1.0.15-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:32c6fde7bd7e9407003370a07b5f4addacabe1556ad3dc2cac246b7a2bba3400" },
{ url = "https://mirrors.aliyun.com/pypi/packages/47/84/bd49963ecd84ebab2fe66595e2d1ed41d5e8b5153af5dc930f0bd827007c/murmurhash-1.0.15-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5d8b43a7011540dc3c7ce66f2134df9732e2bc3bbb4a35f6458bc755e48bde26" },
{ url = "https://mirrors.aliyun.com/pypi/packages/4f/7c/2530769c545074417c862583f05f4245644599f1e9ff619b3dfe2969aafc/murmurhash-1.0.15-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:43bf4541892ecd95963fcd307bf1c575fc0fee1682f41c93007adee71ca2bb40" },
{ url = "https://mirrors.aliyun.com/pypi/packages/84/a4/b249b042f5afe34d14ada2dc4afc777e883c15863296756179652e081c44/murmurhash-1.0.15-cp312-cp312-win_amd64.whl", hash = "sha256:f4ac15a2089dc42e6eb0966622d42d2521590a12c92480aafecf34c085302cca" },
{ url = "https://mirrors.aliyun.com/pypi/packages/13/bf/028179259aebc18fd4ba5cae2601d1d47517427a537ab44336446431a215/murmurhash-1.0.15-cp312-cp312-win_arm64.whl", hash = "sha256:4a70ca4ae19e600d9be3da64d00710e79dde388a4d162f22078d64844d0ebdda" },
{ url = "https://mirrors.aliyun.com/pypi/packages/29/2f/ba300b5f04dae0409202d6285668b8a9d3ade43a846abee3ef611cb388d5/murmurhash-1.0.15-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:fe50dc70e52786759358fd1471e309b94dddfffb9320d9dfea233c7684c894ba" },
{ url = "https://mirrors.aliyun.com/pypi/packages/34/02/29c19d268e6f4ea1ed2a462c901eed1ed35b454e2cbc57da592fad663ac6/murmurhash-1.0.15-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1349a7c23f6092e7998ddc5bd28546cc31a595afc61e9fdb3afc423feec3d7ad" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e2/63/58e2de2b5232cd294c64092688c422196e74f9fa8b3958bdf02d33df24b9/murmurhash-1.0.15-cp313-cp313-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:b3ba6d05de2613535b5a9227d4ad8ef40a540465f64660d4a8800634ae10e04f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/aa/9a/d13e2e9f8ba1ced06840921a50f7cece0a475453284158a3018b72679761/murmurhash-1.0.15-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:fa1b70b3cc2801ab44179c65827bbd12009c68b34e9d9ce7125b6a0bd35af63c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b2/e1/47994f1813fa205c84977b0ff51ae6709f8539af052c7491a5f863d82bdc/murmurhash-1.0.15-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:213d710fb6f4ef3bc11abbfad0fa94a75ffb675b7dc158c123471e5de869f9af" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b9/ea/90c1fd00b4aeb704fb5e84cd666b33ffd7f245155048071ffbb51d2bb57d/murmurhash-1.0.15-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:b65a5c4e7f5d71f7ccac2d2b60bdf7092d7976270878cfec59d5a66a533db823" },
{ url = "https://mirrors.aliyun.com/pypi/packages/00/db/da73462dbfa77f6433b128d2120ba7ba300f8c06dc4f4e022c38d240a5f5/murmurhash-1.0.15-cp313-cp313-win_amd64.whl", hash = "sha256:9aba94c5d841e1904cd110e94ceb7f49cfb60a874bbfb27e0373622998fb7c7c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bb/83/032729ef14971b938fbef41ee125fc8800020ee229bd35178b6ede8ee934/murmurhash-1.0.15-cp313-cp313-win_arm64.whl", hash = "sha256:263807eca40d08c7b702413e45cca75ecb5883aa337237dc5addb660f1483378" },
{ url = "https://mirrors.aliyun.com/pypi/packages/10/83/7547d9205e9bd2f8e5dfd0b682cc9277594f98909f228eb359489baec1df/murmurhash-1.0.15-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:694fd42a74b7ce257169d14c24aa616aa6cd4ccf8abe50eca0557e08da99d055" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b7/c7/3afd5de7a5b3ae07fe2d3a3271b327ee1489c58ba2b2f2159bd31a25edb9/murmurhash-1.0.15-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a2ea4546ba426390beff3cd10db8f0152fdc9072c4f2583ec7d8aa9f3e4ac070" },
{ url = "https://mirrors.aliyun.com/pypi/packages/02/69/d6637ee67d78ebb2538c00411f28ea5c154886bbe1db16c49435a8a4ab16/murmurhash-1.0.15-cp313-cp313t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:34e5a91139c40b10f98d0b297907f5d5267b4b1b2e5dd2eb74a021824f751b98" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ab/4c/89e590165b4c7da6bf941441212a721a270195332d3aacfdfdf527d466ca/murmurhash-1.0.15-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:dc35606868a5961cf42e79314ca0bddf5a400ce377b14d83192057928d6252ec" },
{ url = "https://mirrors.aliyun.com/pypi/packages/07/7a/95c42df0c21d2e413b9fcd17317a7587351daeb264dc29c6aec1fdbd26f8/murmurhash-1.0.15-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:43cc6ac3b91ca0f7a5ae9c063ba4d6c26972c97fd7c25280ecc666413e4c5535" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d0/22/9d02c880a88b83bb3ce7d6a38fb727373ab78d82e5f3d8d9fc5612219f90/murmurhash-1.0.15-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:847d712136cb462f0e4bd6229ee2d9eb996d8854eb8312dff3d20c8f5181fda5" },
{ url = "https://mirrors.aliyun.com/pypi/packages/9a/e3/750232524e0dc262e8dcede6536dafc766faadd9a52f1d23746b02948ad8/murmurhash-1.0.15-cp313-cp313t-win_amd64.whl", hash = "sha256:2680851af6901dbe66cc4aa7ef8e263de47e6e1b425ae324caa571bdf18f8d58" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ff/89/4ad9d215ef6ade89f27a72dc4e86b98ef1a43534cc3e6a6900a362a0bf0a/murmurhash-1.0.15-cp313-cp313t-win_arm64.whl", hash = "sha256:189a8de4d657b5da9efd66601b0636330b08262b3a55431f2379097c986995d0" },
{ url = "https://mirrors.aliyun.com/pypi/packages/1c/69/726df275edf07688146966e15eaaa23168100b933a2e1a29b37eb56c6db8/murmurhash-1.0.15-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7c4280136b738e85ff76b4bdc4341d0b867ee753e73fd8b6994288080c040d0b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/59/8f/24ecf9061bc2b20933df8aba47c73e904274ea8811c8300cab92f6f82372/murmurhash-1.0.15-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:d4d681f474830489e2ec1d912095cfff027fbaf2baa5414c7e9d25b89f0fab68" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ba/26/fff3caba25aa3c0622114e03c69fb66c839b22335b04d7cce91a3a126d44/murmurhash-1.0.15-cp314-cp314-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:d7e47c5746785db6a43b65fac47b9e63dd71dfbd89a8c92693425b9715e68c6e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/df/e4/0f2b9fc533467a27afb4e906c33f32d5f637477de87dd94690e0c44335a6/murmurhash-1.0.15-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:e8e674f02a99828c8a671ba99cd03299381b2f0744e6f25c29cadfc6151dc724" },
{ url = "https://mirrors.aliyun.com/pypi/packages/da/bf/9d1c107989728ec46e25773d503aa54070b32822a18cfa7f9d5f41bc17a5/murmurhash-1.0.15-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:26fd7c7855ac4850ad8737991d7b0e3e501df93ebaf0cf45aa5954303085fdba" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0d/81/dcf27c71445c0e993b10e33169a098ca60ee702c5c58fcbde205fa6332a6/murmurhash-1.0.15-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:cb8ebafae60d5f892acff533cc599a359954d8c016a829514cb3f6e9ee10f322" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bc/32/e874a14b2d2246bd2d16f80f49fad393a3865d4ee7d66d2cae939a67a29a/murmurhash-1.0.15-cp314-cp314-win_amd64.whl", hash = "sha256:898a629bf111f1aeba4437e533b5b836c0a9d2dd12d6880a9c75f6ca13e30e22" },
{ url = "https://mirrors.aliyun.com/pypi/packages/af/8e/4fca051ed8ae4d23a15aaf0a82b18cb368e8cf84f1e3b474d5749ec46069/murmurhash-1.0.15-cp314-cp314-win_arm64.whl", hash = "sha256:88dc1dd53b7b37c0df1b8b6bce190c12763014492f0269ff7620dc6027f470f4" },
{ url = "https://mirrors.aliyun.com/pypi/packages/38/9c/c72c2a4edd86aac829337ab9f83cf04cdb15e5d503e4c9a3a243f30a261c/murmurhash-1.0.15-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:6cb4e962ec4f928b30c271b2d84e6707eff6d942552765b663743cfa618b294b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ac/d7/72b47ebc86436cd0aa1fd4c6e8779521ec389397ac11389990278d0f7a47/murmurhash-1.0.15-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5678a3ea4fbf0cbaaca2bed9b445f556f294d5f799c67185d05ffcb221a77faf" },
{ url = "https://mirrors.aliyun.com/pypi/packages/64/bb/6d2f09135079c34dc2d26e961c52742d558b320c61503f273eab6ba743d9/murmurhash-1.0.15-cp314-cp314t-manylinux1_x86_64.manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:ef19f38c6b858eef83caf710773db98c8f7eb2193b4c324650c74f3d8ba299e0" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b9/e2/9c1b462e33f9cb2d632056f07c90b502fc20bd7da50a15d0557343bd2fed/murmurhash-1.0.15-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22aa3ceaedd2e57078b491ed08852d512b84ff4ff9bb2ff3f9bf0eec7f214c9e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e8/73/8694db1408fcdfa73589f7df6c445437ea146986fa1e393ec60d26d6e30c/murmurhash-1.0.15-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:bba0e0262c0d08682b028cb963ac477bd9839029486fa1333fc5c01fb6072749" },
{ url = "https://mirrors.aliyun.com/pypi/packages/2d/f9/8e360bdfc3c44e267e7e046f0e0b9922766da92da26959a6963f597e6bb5/murmurhash-1.0.15-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:4fd8189ee293a09f30f4931408f40c28ccd42d9de4f66595f8814879339378bc" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f9/31/97649680595b1096803d877ababb9a67c07f4378f177ec885eea28b9db6d/murmurhash-1.0.15-cp314-cp314t-win_amd64.whl", hash = "sha256:66395b1388f7daa5103db92debe06842ae3be4c0749ef6db68b444518666cdcc" },
{ url = "https://mirrors.aliyun.com/pypi/packages/76/66/4fce8755f25d77324401886c00017c556be7ca3039575b94037aff905385/murmurhash-1.0.15-cp314-cp314t-win_arm64.whl", hash = "sha256:c22e56c6a0b70598a66e456de5272f76088bc623688da84ef403148a6d41851d" },
]
[[package]]
name = "mygene"
version = "3.2.2"
@@ -5313,6 +5476,50 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/f7/b1/8ca34418e7c4a2ec666e2204539577287223c4e78ab80b1c746cedb559c3/pot-0.9.6.post1-cp313-cp313-win_amd64.whl", hash = "sha256:a43e2b61389bd32f5b488da2488999ed55867e95fedb25dd64f9f390e40b4fab" },
]
[[package]]
name = "preshed"
version = "3.0.13"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "cymem" },
{ name = "murmurhash" },
]
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/43/75/fe6b7bbd0dea530a001b0e24c331b21a0be2786e402abf3c57f5dce43d4b/preshed-3.0.13.tar.gz", hash = "sha256:d75f718bbfd97e992f7827e0fa7faf6a91bdd9c922d5baa4b50d62731396cb89" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/39/fb/ccff23c44c04088c248539005fcda78b9014512a34d170c5360f02ad908b/preshed-3.0.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5d14eea14bd01291388928991d7df7d60b9fd19ae970e55006eb4d29b0c1e8eb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/8e/ce/cad5a8145881a771e6c0d002f2e585fc19b962f120860b54d32af5baa342/preshed-3.0.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f05b08ce92399c0655b5e0eb5a1cc1f9e295703ed3aabdfaf6538dfa8ae23d57" },
{ url = "https://mirrors.aliyun.com/pypi/packages/a7/a2/c5fed4fb3e946699259d11e4036a3cfdd8c89b3e542e3077d46781642425/preshed-3.0.13-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:62cf7f3113132891d6bba70ff547ad81c6fe50a31930bbbb8499f1d47cd122b7" },
{ url = "https://mirrors.aliyun.com/pypi/packages/51/94/8c9bc48a6ea4903f53a1a0031ce8e35687526949f25821762ef21493c007/preshed-3.0.13-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:8b8de3f58043070a354477995acdd98626ce43e4193c708ebd0f694e467f5155" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b6/df/ecd2f40055ff52527ca117ffbfafb888c1a3079b59fbabe03c5b8f9b7240/preshed-3.0.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:183b339956a9e1d7a4a00038a3b9587a734db9e8bd915939a49791bd1b372156" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e6/88/bdb244e40284ded3632a9f88c23bc80230bd7b2ae4a8b7f2cc91adead7a8/preshed-3.0.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2e77bed56aded7cbe5d28d6bd2178bc5b13eda0e0e464dab205fb578fa915000" },
{ url = "https://mirrors.aliyun.com/pypi/packages/a0/c9/c91ea56342e6c364fc69b444a1ac5432327857199c44032c9cc9dc4c3a23/preshed-3.0.13-cp312-cp312-win_amd64.whl", hash = "sha256:04d8f13f2986e5d11af5ac51f55ce3106c70c41b483d20ea392e6180bdd0f870" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b2/0b/6a99d99619fd83b14c696e2489caed7070647488d4d3ac0b723d35db2de0/preshed-3.0.13-cp312-cp312-win_arm64.whl", hash = "sha256:19318dc1cd8cac6663c6c830bf7e0002d2de853769fb03e056774e97c21bedfd" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0e/2a/401158195d6dc7f6aef0b354d74d0e95c9da124499448c2b3dbb95b71204/preshed-3.0.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c0d0c14187dc0078d8a63bf190ec045a4d13e7748b6caeb557a7d575e411410b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/88/8f/e20e64573988528785447a6893b2e7ab287ecfd85b3888e978b28812fd20/preshed-3.0.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:7770987c2e57497cd26124a9be5f652b5b3ccd0def89859ab0da8bca6144a3de" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b9/72/18168f881359c4482d312f8dc196371bdd61c1583a52b34390da4c88bbea/preshed-3.0.13-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4a7bc48220de579be6bdb0a8715482cf36e2a625a6fd5ad26c9f43485a4a23b5" },
{ url = "https://mirrors.aliyun.com/pypi/packages/fd/3a/3543476091087102775568cea9885dde3453569e9aeee365809108de572f/preshed-3.0.13-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e5c8462472f790c16708306aef3a102a762bd19dfe3d2f8ee08bd5e12f51b835" },
{ url = "https://mirrors.aliyun.com/pypi/packages/cf/65/b13f01329decc44ef53cfb6b4601ba85382dcb2a4ec78d9250f03a418066/preshed-3.0.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c046736239cc8d72670749b79b526e4111839a2fc461a58545d212797649129c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d1/c7/f1a996c6832234efd4d543041b582418d41ac480ee55c557ec9e65344637/preshed-3.0.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7c333f18e9a81c8a6de0603fd8781e17115324b117c445ca91abdf7bfb1abe49" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e3/b9/96fb71499049885ce19545903fdd38877bbc2be0da47e37c04d01f3e9f66/preshed-3.0.13-cp313-cp313-win_amd64.whl", hash = "sha256:461327f8dd36520dcf1fd55a671e0c3c2c97a2d95e22fc85faa31173f4785dda" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ef/a7/32a4903019d936a2316fdd330bedddac287ac26326107d24fb76a1fbc60a/preshed-3.0.13-cp313-cp313-win_arm64.whl", hash = "sha256:35d6c5acb3ee3b12b87a551913063f0cec784055c2af16e028c19fe875f079d0" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bb/b5/993886c98f5caaa6f07a648cac97a7c62a3093091cad65e1e43a1bd41cc4/preshed-3.0.13-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:d2f1efae396cadab5f3890a2fd43d2ee65373ef9096ccbb805e51e8d8bcc563b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/c6/86/b7fd137cbf140afd6c45e895946068a15f5b55642916de0075e6eb18581c/preshed-3.0.13-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:8d6acc1f5031a535a55a6f7148e2f274554a8343a16309c700cebea0fe7aee8c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/8b/ca/21a7e79625614134273dfed32bca5bb4c2ec1313e33fbd12d41657536f1f/preshed-3.0.13-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:7da9d931e7660dcdd757e5870269f0c159126d682ed73ed313971d199eb0f334" },
{ url = "https://mirrors.aliyun.com/pypi/packages/8f/3a/2dbd299516461831ae90e0d5b0637137bf28520c4e6dd0b01d6f1886659a/preshed-3.0.13-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d4ae5cfe075bb7a07982e382bca44f41ddf041f4d24cbd358e8cccfc049259b8" },
{ url = "https://mirrors.aliyun.com/pypi/packages/7c/d3/af654eba4f6587c4ee02c5043e62c194b0a1c4431ffef0c67b9518f6b61c/preshed-3.0.13-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7557963d0125a3a7bcdb2eb6948f3e45da31b5a7f066b55320de3dea22d7557f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/bf/9b/ebcb2b9e8cb881e40b55b0bf450f8a6b187e2ef3ae0c685cce81d2d85026/preshed-3.0.13-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:c4bc60dc994864095d784b7e4d77dba3e64188d169ac88722b699d175561fddb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/97/f7/c6c012779edcaa6e2cd092c554e98dc53e77f41205b07208655ba77e2327/preshed-3.0.13-cp314-cp314-win_amd64.whl", hash = "sha256:208dcebbe294bf1881ce33fb015d56ab2a7587aece85a09147727174207892e4" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f8/82/390ef87d732ef64e673ef6bf9e5d898453986e979efa50fb3a400e2c0766/preshed-3.0.13-cp314-cp314-win_arm64.whl", hash = "sha256:cf8e1a7a1823b2a7765121446c630140ac6e8650c07a6efbf375e168d1fef4f7" },
{ url = "https://mirrors.aliyun.com/pypi/packages/80/3a/a9dde3167bcecb27ae82ce4567b5ab1aa3989113ae6814c092ce223cc4ef/preshed-3.0.13-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:9ca43ecbc3783eda4d6ab3416ae2ecd9ef23dca5f53995843f69f7457bcd0677" },
{ url = "https://mirrors.aliyun.com/pypi/packages/74/d4/22d9355b50b6a13b407dcad0a81df83fb1d5602092d1f05834674dde8fda/preshed-3.0.13-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:c8596e41a258ff213553a441e0bb3eb388fd8158e84a7bf3aae6d8ede2c166d3" },
{ url = "https://mirrors.aliyun.com/pypi/packages/70/42/a225ee83fdb306d2a503f21a627953b820f4e079c90c8a84338957cb8ff5/preshed-3.0.13-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:4f8856ca3d88e9b250630d70abb4f260d8933151ddfb413024784b25b009868e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/40/ba/09a9dfe3d22d7e745483fd5d7f2a82cd4d39c161f7d2daa0faa4bd6402be/preshed-3.0.13-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:0e5b2865aecbd2e1e10e5d19bb8bfad765863c1307c6c3e51f2a08bd64122409" },
{ url = "https://mirrors.aliyun.com/pypi/packages/6c/5c/e10e2e05133e7fcbd7c40536af1148c82dd24357b8f5726e2c7bc51cfd53/preshed-3.0.13-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:09f96b477c987755b3c945df214ea1c1c80bfb350e9f34e78da89585535b77e8" },
{ url = "https://mirrors.aliyun.com/pypi/packages/37/aa/51e5b4109a4cdfae28c3613eeeb10764a3794ebef8de93ffbb109465bea3/preshed-3.0.13-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:670db59a52e1823b5f088c764df474e65b686592d4093adbeef14581c95ee2cb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0e/6a/1d966f367a14c703dde629d150d996c1b727d442f620300b21c9ec1a24d1/preshed-3.0.13-cp314-cp314t-win_amd64.whl", hash = "sha256:b03e21b0bf95eb56e23973f32cabb930e94f352228652f81c0955dbd6967d904" },
{ url = "https://mirrors.aliyun.com/pypi/packages/22/80/368139067603e590a000122355f9c8576c8ebed4fb0b8849feaa2698489d/preshed-3.0.13-cp314-cp314t-win_arm64.whl", hash = "sha256:b980f3ea9bb74b7f94464bc3d6eb3c9162b6b79b531febd14c6465c24344d2cc" },
]
[[package]]
name = "primp"
version = "1.1.3"
@@ -6589,6 +6796,7 @@ dependencies = [
{ name = "duckduckgo-search" },
{ name = "editdistance" },
{ name = "elasticsearch-dsl" },
{ name = "en-core-web-sm" },
{ name = "exceptiongroup" },
{ name = "extract-msg" },
{ name = "feedparser" },
@@ -6665,6 +6873,7 @@ dependencies = [
{ name = "selenium-wire" },
{ name = "slack-sdk" },
{ name = "socksio" },
{ name = "spacy" },
{ name = "sqlglotrs" },
{ name = "strenum" },
{ name = "tavily-python" },
@@ -6734,6 +6943,7 @@ requires-dist = [
{ name = "duckduckgo-search", specifier = ">=7.2.0,<8.0.0" },
{ name = "editdistance", specifier = "==0.8.1" },
{ name = "elasticsearch-dsl", specifier = "==8.12.0" },
{ name = "en-core-web-sm", url = "https://github.com/explosion/spacy-models/releases/download/en_core_web_sm-3.8.0/en_core_web_sm-3.8.0-py3-none-any.whl" },
{ name = "exceptiongroup", specifier = ">=1.3.0,<2.0.0" },
{ name = "extract-msg", specifier = ">=0.39.0" },
{ name = "feedparser", specifier = ">=6.0.11,<7.0.0" },
@@ -6810,6 +7020,7 @@ requires-dist = [
{ name = "selenium-wire", specifier = "==5.1.0" },
{ name = "slack-sdk", specifier = "==3.37.0" },
{ name = "socksio", specifier = "==1.0.0" },
{ name = "spacy", specifier = "==3.8.14" },
{ name = "sqlglotrs", specifier = "==0.9.0" },
{ name = "strenum", specifier = "==0.4.15" },
{ name = "tavily-python", specifier = "==0.5.1" },
@@ -7650,6 +7861,67 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/46/2c/1462b1d0a634697ae9e55b3cecdcb64788e8b7d63f54d923fcd0bb140aed/soupsieve-2.8.3-py3-none-any.whl", hash = "sha256:ed64f2ba4eebeab06cc4962affce381647455978ffc1e36bb79a545b91f45a95" },
]
[[package]]
name = "spacy"
version = "3.8.14"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "catalogue" },
{ name = "confection" },
{ name = "cymem" },
{ name = "jinja2" },
{ name = "murmurhash" },
{ name = "numpy" },
{ name = "packaging" },
{ name = "preshed" },
{ name = "pydantic" },
{ name = "requests" },
{ name = "setuptools" },
{ name = "spacy-legacy" },
{ name = "spacy-loggers" },
{ name = "srsly" },
{ name = "thinc" },
{ name = "tqdm" },
{ name = "typer" },
{ name = "wasabi" },
{ name = "weasel" },
]
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/0c/78/e4f2ae19a791cae756cd0e801204953eaec4e9ab75a60ad39f671dbb8d5a/spacy-3.8.14-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:726f02c60a2c6b0029167370d22d51731172a053d29c7e2ea6190db6de3ab483" },
{ url = "https://mirrors.aliyun.com/pypi/packages/06/df/178bbab47fa209c8baf2f1e609cbddc6b18a985200be1ceee22bd5b89beb/spacy-3.8.14-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:e3ebe50b93f2d40e8ec3451255528bb622ccb12be39fd140bb87668ce8d1075b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ff/e8/048d83b73b28686307bd9a60878a58de7b7b21b562ca4de8b5bd558031e9/spacy-3.8.14-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:daeb64b048f12c059997281aed53eb8776d26416dd313cf17ad6f63124b2b564" },
{ url = "https://mirrors.aliyun.com/pypi/packages/8e/3f/1799af5f4ccc8eb7500e4a20ca301488134429dba08cda5be68ce6ab2992/spacy-3.8.14-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:6d45715a24446f23b98ec3f09409a1d4111983d1d64613250ee38c3270e21853" },
{ url = "https://mirrors.aliyun.com/pypi/packages/78/07/81ab9acd0ec64bfdd7339acfc4cf35f5fb74bbbb0b2be7e64d717c416bac/spacy-3.8.14-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1069a8be34940809f8462eb69f09a3f0ce59bf8b9cb82475f2a8e3580f50ece0" },
{ url = "https://mirrors.aliyun.com/pypi/packages/74/a5/b081b5bd3cedb2634c23eb470b5e24c65c894c57646567f47627291c2b3f/spacy-3.8.14-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2dfa77aec7fdebac0455d8afd4ce1d92d6f868b03d507ed1976179a63db7b374" },
{ url = "https://mirrors.aliyun.com/pypi/packages/5f/55/4371413a6dfc1fa837282a365498165f828c2f3fe018dfb35336acc869e0/spacy-3.8.14-cp312-cp312-win_amd64.whl", hash = "sha256:9def18c76a4472b326cb91a195623c9ca38a2b86999ad2df9e00b49ba8c63734" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f3/5e/12ac876017da6c1e6b72afcc3c8b309996227fd3aa15382cd3311aee21b8/spacy-3.8.14-cp312-cp312-win_arm64.whl", hash = "sha256:d6257133357e4801c9c5d011925af5439b0a015aacf3c16528aa0009982431c7" },
{ url = "https://mirrors.aliyun.com/pypi/packages/1b/e5/822bbdfa459fee863ef2e9879a34b0ae5db7cd1e3eb76d32c766f19222e9/spacy-3.8.14-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:2b4f60fa8b9641a5e93e7a96db0cdd106d05d61756bf1d0ddcd1705ad347909a" },
{ url = "https://mirrors.aliyun.com/pypi/packages/7e/de/0e512154113e1f341567f2b9341835775e4180c180221e60faedaebb2f65/spacy-3.8.14-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0860c57220c633ccb20468bcd64bfb0d28908990c371a8857951d093a148dc8e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0c/4f/29c7e56afc7db07348a9e0efe0243b5eef465d5dc3d56433f164378c3fa6/spacy-3.8.14-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c24620b7dba879c69cebc51ef3b1107d4d4e44a1e0d4baa439372887d00c3fd9" },
{ url = "https://mirrors.aliyun.com/pypi/packages/1e/ce/cae678f664d5467016819253f5d6e52f8e68a12d8e799b651d73ec2a9a4b/spacy-3.8.14-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:9699c1248d115d5825987c287a6f6acd66386ef3ebee7994ee67ba093e932c59" },
{ url = "https://mirrors.aliyun.com/pypi/packages/04/d4/419868afd449bdd367df005932537eea66c71e97c899ba278f3124933f3c/spacy-3.8.14-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:042d799e342fdb6bb5b02a4213a95acc9116c40ed3c849bb0a8296fbe648ec22" },
{ url = "https://mirrors.aliyun.com/pypi/packages/ec/53/df5c1fee45f200b749ba72eeb536fbb2c545fc56230324954263b2f3be00/spacy-3.8.14-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:69b2264294097336e86832e8663f1ab3a7215621184863c96c082ab17ee11937" },
{ url = "https://mirrors.aliyun.com/pypi/packages/12/c2/f1882ec2f5cc9c4e73cf2132997a03c397d7ceeb5ee7f7bb878b51a16365/spacy-3.8.14-cp313-cp313-win_amd64.whl", hash = "sha256:4b6d4f20e291a7c70e37de2f246622b44a0ce82efaa710c9801c6bd599e75177" },
]
[[package]]
name = "spacy-legacy"
version = "3.0.12"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/d9/79/91f9d7cc8db5642acad830dcc4b49ba65a7790152832c4eceb305e46d681/spacy-legacy-3.0.12.tar.gz", hash = "sha256:b37d6e0c9b6e1d7ca1cf5bc7152ab64a4c4671f59c85adaf7a3fcb870357a774" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/c3/55/12e842c70ff8828e34e543a2c7176dac4da006ca6901c9e8b43efab8bc6b/spacy_legacy-3.0.12-py2.py3-none-any.whl", hash = "sha256:476e3bd0d05f8c339ed60f40986c07387c0a71479245d6d0f4298dbd52cda55f" },
]
[[package]]
name = "spacy-loggers"
version = "1.0.5"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/67/3d/926db774c9c98acf66cb4ed7faf6c377746f3e00b84b700d0868b95d0712/spacy-loggers-1.0.5.tar.gz", hash = "sha256:d60b0bdbf915a60e516cc2e653baeff946f0cfc461b452d11a4d5458c6fe5f24" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/33/78/d1a1a026ef3af911159398c939b1509d5c36fe524c7b644f34a5146c4e16/spacy_loggers-1.0.5-py3-none-any.whl", hash = "sha256:196284c9c446cc0cdb944005384270d775fdeaf4f494d8e269466cfa497ef645" },
]
[[package]]
name = "sphinx"
version = "9.1.0"
@@ -7856,6 +8128,49 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/ab/e3/5b7b4bb702691630d5b1f72470cdcfd8220bf32bc3ed9514af59904186bd/sqlglotrs-0.9.0-cp314-cp314-win_amd64.whl", hash = "sha256:41c8606a13a7284216dd3649521e0fe402e660f5e48acac6acf0facaa676d0bb" },
]
[[package]]
name = "srsly"
version = "2.5.3"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "catalogue" },
]
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/2b/db/f794f219a6c788b881252d2536a8c4a97d2bdaadc690391e1cb53d123d71/srsly-2.5.3.tar.gz", hash = "sha256:08f98dbecbff3a31466c4ae7c833131f59d3655a0ad8ac749e6e2c149e2b0680" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/02/cc/e9f7fcec4cc92ad8bad6316c4241638b8cf7380382d4489d94ec6c436452/srsly-2.5.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:71e51c046ccbeefb86524c6b1e17574f579c6ac4dc8ea4a09437d3e8f88342d3" },
{ url = "https://mirrors.aliyun.com/pypi/packages/21/e4/fea4512e9785f58509b2cf67d993323848e583161b5fcfdc7dd9d7c1f3df/srsly-2.5.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f73c0db911552e94fe2016e1759d261d2f47926f68826664cada3723c87006a" },
{ url = "https://mirrors.aliyun.com/pypi/packages/20/b1/53591681b6ff2699a4f97b2d5552ba196eaa6a979b0873605f4c04b5f7ee/srsly-2.5.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5c1ac27ae5f4bb9163c7d2c45fc8ec173aac3d92e32086d9472b326c5c6e570e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/4e/c9/741e29f534919a944a16da4184924b1d3404c4bf60716ab2b91be771d1e3/srsly-2.5.3-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:99026bcd9cbd3211cc36517400b04ca0fc5d3e412b14daf84ee6e65f67d9a2d8" },
{ url = "https://mirrors.aliyun.com/pypi/packages/89/57/5554f786eccf78b2750d6ac63be126e1b67badec2cb409dd611cf6f8c52b/srsly-2.5.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:07d682679e639eb46ff7e6da4a92714f4d5ffe351d088ee66f221e9b1f8865bb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/eb/95/9b4f73b1be3692f86d72ccc131c8e50f26f824d5c8830a59390bcc5b60ef/srsly-2.5.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8e0542d85d6b55cf2934050d6ffcb1cd76c768dcf9572e7467002cf087bb366d" },
{ url = "https://mirrors.aliyun.com/pypi/packages/5a/de/89ca640ca1953c4612279ce515d0af35658df3c06cdb324329bc91b4a7e1/srsly-2.5.3-cp312-cp312-win_amd64.whl", hash = "sha256:598f1e494c18cacb978299d77125415a586417081959f8ec3f068b32d97f8933" },
{ url = "https://mirrors.aliyun.com/pypi/packages/6d/4f/7ab6d49e36d9cc72ee15746cabd116eb6f338be8a06c1882968ee9d6c7d7/srsly-2.5.3-cp312-cp312-win_arm64.whl", hash = "sha256:4b1b721cd3ad1a9b2343519aadc786a4d09d5c0666962d49852eb12d6ec3fe26" },
{ url = "https://mirrors.aliyun.com/pypi/packages/9d/5c/12901e3794f4158abc6da750725aad6c2afddb1e4227b300fe7c71f66957/srsly-2.5.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e67b6bbacbfadea5e100266d2797f2d4cec9883ea4dc84a5537673850036a8d8" },
{ url = "https://mirrors.aliyun.com/pypi/packages/04/61/181c26370995f96f56f1b64b801e3ca1e0d703fc36506ae28606d62369fb/srsly-2.5.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:348c231b4477d8fe86603131d0f166d2feac9c372704dfc4398be71cc5b6fb07" },
{ url = "https://mirrors.aliyun.com/pypi/packages/77/c6/35876c78889f8ffe11ed3521644e666c3aef20ea31527b70f47456cf35c2/srsly-2.5.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:b0938c2978c91ae1ef9c1f2ba35abb86330e198fb23469e356eba311e02233ee" },
{ url = "https://mirrors.aliyun.com/pypi/packages/3e/da/40b71ca9906c8eb8f8feb6ac11d33dad458c85a56e1de764b96d402168a0/srsly-2.5.3-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:5f6a837954429ecbe6dcdd27390d2fb4c7d01a3f99c9ffcf9ce66b2a6dd1b738" },
{ url = "https://mirrors.aliyun.com/pypi/packages/dc/14/c0dd30cc8b93ce8137ff4766f743c882440ce49195fffc5d50eaeef311a6/srsly-2.5.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:3576c125c486ce2958c2047e8858fe3cfc9ea877adfa05203b0986f9badee355" },
{ url = "https://mirrors.aliyun.com/pypi/packages/08/f3/34354f183d8faafc631585571224b54d1b4b67e796972c36519c074ca355/srsly-2.5.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5fb59c42922e095d1ea36085c55bc16e2adb06a7bfe57b24d381e0194ae699f2" },
{ url = "https://mirrors.aliyun.com/pypi/packages/a4/d9/5531f8a19492060b4e76e4ab06aca6f096fb5128fe18cc813d1772daf653/srsly-2.5.3-cp313-cp313-win_amd64.whl", hash = "sha256:111805927f05f5db440aeeacb85ce43da0b19ce7b2a09567a9ef8d30f3cc4d83" },
{ url = "https://mirrors.aliyun.com/pypi/packages/8e/8a/62fb7a971eca29e12f03fb9ddacb058548c14d33e5b5675ff0f85839cc7b/srsly-2.5.3-cp313-cp313-win_arm64.whl", hash = "sha256:0f106b0a700ab56e4a7c431b0f1444009ab6cb332edc7bbf6811c2a43f4722cb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/e1/5b/e4ef43c2a381711230af98d4c94a5323df48d6a7899ee652e05bf889290e/srsly-2.5.3-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:39c13d552a9f9674a12cdcdc66b0c2f02f3430d0cd04c5f9cf598824c2bd3d65" },
{ url = "https://mirrors.aliyun.com/pypi/packages/92/2d/ebce7f3717e52cd0a01f4ec570f388f3b7098526794fcf1ad734e0b8f852/srsly-2.5.3-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:14c930767cc169611a2dc14e23bc7638cfb616d6f79029700ade033607343540" },
{ url = "https://mirrors.aliyun.com/pypi/packages/22/47/a8f3e9b214be2624c8e8a78d38ca7b1d4e26b92d57018412e4bfc4abe89a/srsly-2.5.3-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:2f2d464f0d0237e32fb53f0ec6f05418652c550e772b50e9918e83a1577cba4d" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d6/71/2a89dc3180a51e633a87a079ca064225f4aaf46c7b2a5fc720e28f261d98/srsly-2.5.3-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:d18933248a5bb0ad56a1bae6003a9a7f37daac2ecb0c5bcbfaaf081b317e1c84" },
{ url = "https://mirrors.aliyun.com/pypi/packages/b8/36/72e5ce3153927ca404b6f5bf5280e6ff3399c11557df472b153945468e0a/srsly-2.5.3-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:7ea5412ea229e571ac9738cbe14f845cc06c8e4e956afb5f42061ccd087ef31f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/04/b2/0895de109c28eca0d41a811ab7c076d4e4a505e8466f06bae22f5180a1dd/srsly-2.5.3-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:8d3988970b4cf7d03bdd5b5169302ff84562dd2e1e0f84aeb34df3e5b5dc19bf" },
{ url = "https://mirrors.aliyun.com/pypi/packages/c7/79/a37fa7759797fbdfe0a2e029ab13e78b1e81e191220d2bb8ff57d869aefb/srsly-2.5.3-cp314-cp314-win_amd64.whl", hash = "sha256:6a02d7dcc16126c8fae1c1c09b2072798a1dc482ab5f9c52b12c7114dac47325" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d7/25/0dae019b3b90ad9037f91de4c390555cdaac9460a93ad62b02b03babdff5/srsly-2.5.3-cp314-cp314-win_arm64.whl", hash = "sha256:1c9129c4abe31903ff7996904a51afdd5428060de6c3d12af49a4da5e8df2821" },
{ url = "https://mirrors.aliyun.com/pypi/packages/3a/44/72dd5285b2e05435d98b0797f101d91d9b345d491ddc1fdb9bd09e27ccb8/srsly-2.5.3-cp314-cp314t-macosx_10_15_x86_64.whl", hash = "sha256:29d5d01ba4c2e9c01f936e5e6d5babc4a47b38c9cbd6e1ec23f6d5a49df32605" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d2/ad/002c71b87fc3f648c9bf0ec47de0c3822bf2c95c8896a589dd03e7fd3977/srsly-2.5.3-cp314-cp314t-macosx_11_0_arm64.whl", hash = "sha256:5c8df4039426d99f0148b5743542842ab96b82daded0b342555e15a639927757" },
{ url = "https://mirrors.aliyun.com/pypi/packages/2a/35/2cea3d5e80aeecfc4ece9e7e1783e7792cc3bad7ab85ab585882e1db4e38/srsly-2.5.3-cp314-cp314t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:06a43d63bde2e8cccadb953d7fff70b18196ca286b65dd2ad16006d65f3f8166" },
{ url = "https://mirrors.aliyun.com/pypi/packages/aa/38/8a4d7e86dd0370a2e5af251b646000197bb5b7e0f9aa360c71bbfb253d0d/srsly-2.5.3-cp314-cp314t-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:808cfafc047f0dec507a34c8fa8e4cda5722737fd33577df73452f52f7aca644" },
{ url = "https://mirrors.aliyun.com/pypi/packages/99/05/340129de5ea7b237271b12f8a6962cfa7eb0c5a3056794626d348c5ae7c7/srsly-2.5.3-cp314-cp314t-musllinux_1_2_aarch64.whl", hash = "sha256:71d4cbe2b2a1335c76ed0acae2dc862163787d8b01a705e1949796907ed94ccd" },
{ url = "https://mirrors.aliyun.com/pypi/packages/01/cb/d7fee7ab27c6aa2e3f865fb7b50ba18c81a4c763bba12bdf53df246441bc/srsly-2.5.3-cp314-cp314t-musllinux_1_2_x86_64.whl", hash = "sha256:565f69083d33cb329cfc74317da937fb3270c0f40fabc1b4488702d8074b4a3e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d8/d1/9bad3a0f2fa7b72f4e0cf1d267b00513092d20ef538c47f72823ae4f7656/srsly-2.5.3-cp314-cp314t-win_amd64.whl", hash = "sha256:8ac016ffaeac35bc010992b71bf8afdd39d458f201c8138d84cf78778a936e6c" },
{ url = "https://mirrors.aliyun.com/pypi/packages/2a/ae/57d1d7af907e20c077e113e0e4976f87b82c0a415403d99284a262229dd0/srsly-2.5.3-cp314-cp314t-win_arm64.whl", hash = "sha256:d822083fe26ec6728bd8c273ac121fc4ab3864a0fdf0cf0ff3efb188fcd209ed" },
]
[[package]]
name = "sse-starlette"
version = "3.3.3"
@@ -8208,6 +8523,52 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/11/3d/2653f4cf49660bb44eeac8270617cc4c0287d61716f249f55053f0af0724/tf_playwright_stealth-1.2.0-py3-none-any.whl", hash = "sha256:26ee47ee89fa0f43c606fe37c188ea3ccd36f96ea90c01d167b768df457e7886" },
]
[[package]]
name = "thinc"
version = "8.3.13"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "blis" },
{ name = "catalogue" },
{ name = "confection" },
{ name = "cymem" },
{ name = "murmurhash" },
{ name = "numpy" },
{ name = "packaging" },
{ name = "preshed" },
{ name = "pydantic" },
{ name = "setuptools" },
{ name = "srsly" },
{ name = "wasabi" },
]
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/13/46/76df95f2c327f9a9cef30c1523bf285627897097163584dcf5f77b2ebce2/thinc-8.3.13.tar.gz", hash = "sha256:68e658549fc1eb3ff92aed5147fcbb9c15d6e9cc0e623b4d0998d16522ffb4f9" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/3e/af/f7c1ebfe92eb5d27d7f2f3da67a11e2eb57bc30ab1553279af6dc65b65a8/thinc-8.3.13-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:77a41f66285321d20aaedaea1e87d7cd48dca6d2427bed1867ec7cba7109fc8d" },
{ url = "https://mirrors.aliyun.com/pypi/packages/45/8f/69d7338575d98df85d0b54c0f5fc277dba72587fe9ab846ecdd12a998bcb/thinc-8.3.13-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:3710d318b4e5460cf366a6f7b5ddbefb5d39dbd4cfa408222750fdc6c27c4411" },
{ url = "https://mirrors.aliyun.com/pypi/packages/4b/a5/21d010c81e81e1589e5ccb4950e521804d13726e541e87f644c51815673b/thinc-8.3.13-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5a08c87143a6d20177652dca1ec0dc815d88216d8fc62594a57e8bc45bf5ed49" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f9/ff/6914bf370bd1d604d89e6dfb46b97d10cd9b00d42ff8c036283e92314a8c/thinc-8.3.13-cp312-cp312-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:4b5ec9ff313819e7d8667794a3559463fa89ff45aaa73e3fd8d6273b1e0d7a7f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f3/3d/5572b47fa155fb3388c071515b74024fa17a6efd1df9406da378f0aa84ef/thinc-8.3.13-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5c9a48f2bc1e04f138240ed5f9b815a9141a5de26accd0f08fa0137fcefed258" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f0/f0/a8d77c7bac089697c6df302cc3c936a1ab36a4720deae889e6f1dbcbd0eb/thinc-8.3.13-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:79a29a44d76bd02f5ac0624268c6e42b3576ae472c791a8ae9c2d813ae789b59" },
{ url = "https://mirrors.aliyun.com/pypi/packages/21/82/5651bb1f904d04220fc7670035ada921bf0638e2cff6444d67c12887a968/thinc-8.3.13-cp312-cp312-win_amd64.whl", hash = "sha256:ed1dc709ac4f2f03b710457889e4e02f05de51bc8456980c241d0b28798bc7cb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/94/8d/683703de021ffbe46833d722b70f49ffbbca8e5bd6876256977555d92d7d/thinc-8.3.13-cp312-cp312-win_arm64.whl", hash = "sha256:c6a049703a6011c8fe26ee41af7e70272145594140d82f79bb23de619c6a6525" },
{ url = "https://mirrors.aliyun.com/pypi/packages/af/b9/7b46942176df459d1804a9e77b0976f7c56f3abf3ec7485d0e5f836a0382/thinc-8.3.13-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:c2811dfd8d46d8b5d3b39051b23e64006b2994a5143b1978b436938018792af8" },
{ url = "https://mirrors.aliyun.com/pypi/packages/a7/79/53085a72cd8f4fc4e6e313d05ea5aa98e870684f4a0fb318a9875fc0a964/thinc-8.3.13-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5593e6300cb1ebe0c0e546e9c9fb49e7c2627a0aa688795cd4f995a8b820d2ec" },
{ url = "https://mirrors.aliyun.com/pypi/packages/9e/3e/d61b462b16da95ac6885f95bb395e672040ee594833e571a6edcffd234f5/thinc-8.3.13-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:f697174d3fb474966ce50b430bbafa101a6d2f7ffb559dac4b5c59389ef72d22" },
{ url = "https://mirrors.aliyun.com/pypi/packages/78/4c/898cc654bb123734c71ec5a425c02ca34439517d01ce1c95a6563295580e/thinc-8.3.13-cp313-cp313-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:e9c7c5c104737b414c8c4ec578e67d78b6c859afe25cbc0684402e721415bd7f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/cd/56/1abdbf0a4ad628e8a05d6516fe0745969649d805367a3dccad8ee872981b/thinc-8.3.13-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:7a99d0e242d1ccd23f9ae6bea7cd502f8626efa65c156b91d84581d0356696c3" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f1/22/b84dbdc6be5055bbdb2a7352e2c393f67e8593c137f1b83c82bf1e062b6e/thinc-8.3.13-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e676edd21a747afbe3e6b9f3fca8b962e36d146ded03b070cb0c28e2dfbe9499" },
{ url = "https://mirrors.aliyun.com/pypi/packages/0f/a8/763cd7ba949334c9d2cddc92dadb68b344cb9546dc01b8d4a733dcaa16c1/thinc-8.3.13-cp313-cp313-win_amd64.whl", hash = "sha256:8ad40307f20e83f77af28ff5c6be0b86af7a8b251d1231c545508d2763157d8f" },
{ url = "https://mirrors.aliyun.com/pypi/packages/f5/15/a11f7bb3cbc97dfecf32a90552f5a8f8a5c99316a99c6c17bdabf5baf256/thinc-8.3.13-cp313-cp313-win_arm64.whl", hash = "sha256:723949cab11d1925c15447928513a718276316cec6e0de28337cca0a62be0521" },
{ url = "https://mirrors.aliyun.com/pypi/packages/80/40/f4937d113912c6d669ffe982356ab29dcb6c7fe3be926a15981dbbb6a91c/thinc-8.3.13-cp314-cp314-macosx_10_15_x86_64.whl", hash = "sha256:7badb0be4825535e6362c19e8a41872b65409e9da46d3453a391b843a0720865" },
{ url = "https://mirrors.aliyun.com/pypi/packages/d2/00/4d4ed1a11ba2920b85a03a0683b16d97dc5beb2e78078dbf0e13e43bcea7/thinc-8.3.13-cp314-cp314-macosx_11_0_arm64.whl", hash = "sha256:565300b7e13de799e5abff00d445f537e9256cf7da4dcb0d0f005fc16748a29e" },
{ url = "https://mirrors.aliyun.com/pypi/packages/44/5d/dc33d6932be8721af2ef76b4a3a6e8020648630eabae61fb916d2a861d1d/thinc-8.3.13-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:c17cef1900a1aba7e1487493d16b8aa0a8633116f1b2a51c6649a4000697f17b" },
{ url = "https://mirrors.aliyun.com/pypi/packages/af/bc/a6d37d8dadc2c5b524f51192413481160c42c9dd6105e8d5551531623225/thinc-8.3.13-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:f4f26d1eec9b2a6a8f2e0298a5515d13eb06d70730d0d9e1040bb329e12bf3fb" },
{ url = "https://mirrors.aliyun.com/pypi/packages/7a/59/ce9c7067f1dfe5985875927de9cf7a79f9dae3e69487fd650dfba558029d/thinc-8.3.13-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:a61a31fd0ce3c2771cf4901ba6df70e774ffe32febf1024c5b43d63575cd58fe" },
{ url = "https://mirrors.aliyun.com/pypi/packages/4f/a8/f57819347fc4d8bef2204d15fcbb9d7dff2d6cdd5f83d5ed91456ddacc55/thinc-8.3.13-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:ba8119daf84a12259ae4d251d36426417bafa0b34108890b4b7e2b50966bd990" },
{ url = "https://mirrors.aliyun.com/pypi/packages/05/ef/a82214bb7c7c1e2d92b69e1a7654be90cfab180082c6108e45a98af2422c/thinc-8.3.13-cp314-cp314-win_amd64.whl", hash = "sha256:433e3826e018da489f1a8068e6de677f6eff3cc93991a599d90f12cd1bc26cdc" },
{ url = "https://mirrors.aliyun.com/pypi/packages/9f/ef/1648fda54e9689058335ff54f650a7a314db2a42e21af1b83949b2dc748e/thinc-8.3.13-cp314-cp314-win_arm64.whl", hash = "sha256:11754fada9ad5ba2e02d5f3f234f940e24015b82333db58372f4a6aedad9b43f" },
]
[[package]]
name = "threadpoolctl"
version = "3.6.0"
@@ -8560,6 +8921,18 @@ version = "0.2.5"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/9f/c1/dd817bf57e0274dacb10e0ac868cb6cd70876950cf361c41879c030a2b8b/warc3-wet-clueweb09-0.2.5.tar.gz", hash = "sha256:3054bfc07da525d5967df8ca3175f78fa3f78514c82643f8c81fbca96300b836" }
[[package]]
name = "wasabi"
version = "1.1.3"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "colorama", marker = "sys_platform == 'win32'" },
]
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ac/f9/054e6e2f1071e963b5e746b48d1e3727470b2a490834d18ad92364929db3/wasabi-1.1.3.tar.gz", hash = "sha256:4bb3008f003809db0c3e28b4daf20906ea871a2bb43f9914197d540f4f2e0878" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/06/7c/34330a89da55610daa5f245ddce5aab81244321101614751e7537f125133/wasabi-1.1.3-py3-none-any.whl", hash = "sha256:f76e16e8f7e79f8c4c8be49b4024ac725713ab10cd7f19350ad18a8e3f71728c" },
]
[[package]]
name = "wcwidth"
version = "0.6.0"
@@ -8569,6 +8942,26 @@ wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/68/5a/199c59e0a824a3db2b89c5d2dade7ab5f9624dbf6448dc291b46d5ec94d3/wcwidth-0.6.0-py3-none-any.whl", hash = "sha256:1a3a1e510b553315f8e146c54764f4fb6264ffad731b3d78088cdb1478ffbdad" },
]
[[package]]
name = "weasel"
version = "1.0.0"
source = { registry = "https://mirrors.aliyun.com/pypi/simple" }
dependencies = [
{ name = "cloudpathlib" },
{ name = "confection" },
{ name = "httpx" },
{ name = "packaging" },
{ name = "pydantic" },
{ name = "smart-open" },
{ name = "srsly" },
{ name = "typer" },
{ name = "wasabi" },
]
sdist = { url = "https://mirrors.aliyun.com/pypi/packages/ce/e5/e272bb9a045105a1fdf4b798d8086f5932a178f4d738f17a74f5c9e0ae9a/weasel-1.0.0.tar.gz", hash = "sha256:7b129b44c90cc543b760532974ca1e4eb30dad2aa2026f57bdce66354ae610fc" }
wheels = [
{ url = "https://mirrors.aliyun.com/pypi/packages/0a/07/57ebf7a6798b016c064bd0ca81b4c6a99daa4dc377b898bc7b41eb6b5af0/weasel-1.0.0-py3-none-any.whl", hash = "sha256:89518acee027f49d743126c3502d35e6dd14f5768be5c37c9af47c171b6005cc" },
]
[[package]]
name = "webdav4"
version = "0.10.0"

View File

@@ -35,6 +35,7 @@ export const showTagItems = (parserId: DocumentParserType) => {
const enum MethodValue {
General = 'general',
Light = 'light',
NER = 'ner',
}
export const excludedParseMethods = [
@@ -122,10 +123,12 @@ const GraphRagItems = ({
});
const methodOptions = useMemo(() => {
return [MethodValue.Light, MethodValue.General].map((x) => ({
value: x,
label: upperFirst(x),
}));
return [MethodValue.Light, MethodValue.General /*, MethodValue.NER*/].map(
(x) => ({
value: x,
label: x === MethodValue.NER ? 'NER' : upperFirst(x),
}),
);
}, []);
const renderWideTooltip = useCallback(

View File

@@ -606,7 +606,7 @@ export default {
'قم بإنشاء رسم بياني معرفي على أجزاء ملف من قاعدة المعرفة الحالية لتحسين الإجابة على الأسئلة متعددة القفزات التي تتضمن منطقًا متداخلاً. راجع https://ragflow.io/docs/dev/construct_knowledge_graph للحصول على التفاصيل.',
graphRagMethod: 'طريقة',
graphRagMethodTip:
'Light: (افتراضي) استخدم المطالبات المقدمة من github.com/HKUDS/LightRAG لاستخراج الكيانات والعلاقات. يستهلك هذا الخيار عددًا أقل من الرموز المميزة، وذاكرة أقل، وموارد حسابية أقل.</br>\n عام: استخدم المطالبات المقدمة من github.com/microsoft/graphrag لاستخراج الكيانات والعلاقات',
'Light: (افتراضي) استخدم المطالبات المقدمة من github.com/HKUDS/LightRAG لاستخراج الكيانات والعلاقات. يستهلك هذا الخيار عددًا أقل من الرموز المميزة، وذاكرة أقل، وموارد حسابية أقل.</br>\n عام: استخدم المطالبات المقدمة من github.com/microsoft/graphrag لاستخراج الكيانات والعلاقات.</br>\n NER: استخدم spaCy NER واستخراج الكلمات المفتاحية القائم على القواعد لاستخراج الكيانات والعلاقات. لا حاجة إلى LLM للاستخراج نفسه، مما يجعله سريعًا وفعالاً في الموارد.',
resolution: 'قرار الكيان',
resolutionTip:
'مفتاح إلغاء البيانات المكررة للكيان. عند التمكين، سيجمع LLM بين الكيانات المتشابهة - على سبيل المثال، "2025" و"عام 2025"، أو "تكنولوجيا المعلومات" و"تكنولوجيا المعلومات" - لإنشاء رسم بياني أكثر دقة',

View File

@@ -680,7 +680,8 @@ The above is the content you need to summarize.`,
graphRagMethod: 'Метод',
graphRagMethodTip: `
Light: (По подразбиране) Използва подсказки от github.com/HKUDS/LightRAG за извличане на обекти и връзки. Тази опция консумира по-малко токени, памет и изчислителни ресурси.</br>
General: Използва подсказки от github.com/microsoft/graphrag за извличане на обекти и връзки`,
General: Използва подсказки от github.com/microsoft/graphrag за извличане на обекти и връзки.</br>
NER: Използва spaCy NER и извличане на ключови думи на базата на правила за извличане на обекти и връзки. Не се изисква LLM за самото извличане, което го прави бързо и ефективно.`,
resolution: 'Разрешаване на обекти',
resolutionTip: `Превключвател за дедупликация на обекти. Когато е активиран, LLM ще комбинира подобни обекти — напр. '2025' и 'годината 2025', или 'ИТ' и 'Информационни технологии' — за изграждане на по-точен граф`,
community: 'Отчети на общности',

View File

@@ -687,8 +687,9 @@ Diese Auto-Tag-Funktion verbessert den Abruf, indem sie eine weitere Schicht dom
'Erstellen Sie einen Wissensgraph über Dateiabschnitte der aktuellen Wissensbasis, um die Beantwortung von Fragen mit mehreren Schritten und verschachtelter Logik zu verbessern. Weitere Informationen finden Sie unter https://ragflow.io/docs/dev/construct_knowledge_graph.',
graphRagMethod: 'Methode',
graphRagMethodTip: `
Light: (Standard) Verwendet von github.com/HKUDS/LightRAG bereitgestellte Prompts, um Entitäten und Beziehungen zu extrahieren. Diese Option verbraucht weniger Tokens, weniger Speicher und weniger Rechenressourcen.</br>
General: Verwendet von github.com/microsoft/graphrag bereitgestellte Prompts, um Entitäten und Beziehungen zu extrahieren`,
Light: (Standard) Verwendet von github.com/HKUDS/LightRAG bereitgestellte Prompts, um Entitäten und Beziehierungen zu extrahieren. Diese Option verbraucht weniger Tokens, weniger Speicher und weniger Rechenressourcen.</br>
General: Verwendet von github.com/microsoft/graphrag bereitgestellte Prompts, um Entitäten und Beziehierungen zu extrahieren.</br>
NER: Verwendet spaCy NER und regelbasierte Schlüsselwortextraktion, um Entitäten und Beziehungen zu extrahieren. Für die Extraktion selbst ist kein LLM erforderlich, was es schnell und ressourceneffizient macht.`,
resolution: 'Entitätsauflösung',
resolutionTip: `Ein Entitäts-Deduplizierungsschalter. Wenn aktiviert, wird das LLM ähnliche Entitäten kombinieren - z.B. '2025' und 'das Jahr 2025' oder 'IT' und 'Informationstechnologie' - um einen genaueren Graphen zu konstruieren`,
community: 'Generierung von Gemeinschaftsberichten',

View File

@@ -896,7 +896,8 @@ This auto-tagging feature enhances retrieval by adding another layer of domain-s
graphRagMethod: 'Method',
graphRagMethodTip: `
Light: (Default) Use prompts provided by github.com/HKUDS/LightRAG to extract entities and relationships. This option consumes fewer tokens, less memory, and fewer computational resources.</br>
General: Use prompts provided by github.com/microsoft/graphrag to extract entities and relationships`,
General: Use prompts provided by github.com/microsoft/graphrag to extract entities and relationships.</br>
NER: Use spaCy NER and rule-based keyword extraction to extract entities and relationships. No LLM is required for extraction itself, making it fast and resource-efficient.`,
resolution: 'Entity resolution',
resolutionTip: `An entity deduplication switch. When enabled, the LLM will combine similar entities - e.g., '2025' and 'the year of 2025', or 'IT' and 'Information Technology' - to construct a more accurate graph`,
community: 'Community reports',

View File

@@ -288,7 +288,8 @@ export default {
'Construit un graphe basé sur les segments de cette base pour répondre à des questions complexes. Voir documentation.',
graphRagMethod: 'Méthode',
graphRagMethodTip: `Light : (Par défaut) utilise les prompts de github.com/HKUDS/LightRAG. Moins de consommation.
General : utilise ceux de github.com/microsoft/graphrag.`,
General : utilise ceux de github.com/microsoft/graphrag.
NER : utilise spaCy NER et l'extraction de mots-clés basée sur des règles pour extraire les entités et les relations. Aucun LLM n'est requis pour l'extraction, ce qui la rend rapide et économe en ressources.`,
resolution: 'Résolution dentités',
resolutionTip:
'Fusionne des entités similaires comme "2025" et "lannée 2025".',

View File

@@ -483,7 +483,8 @@ Quanto sopra è il contenuto che devi riassumere.`,
graphRagMethod: 'Metodo',
graphRagMethodTip: `
Light: (Predefinito) Usa prompt forniti da github.com/HKUDS/LightRAG per estrarre entità e relazioni. Questa opzione consuma meno token, meno memoria e meno risorse computazionali.</br>
General: Usa prompt forniti da github.com/microsoft/graphrag per estrarre entità e relazioni`,
General: Usa prompt forniti da github.com/microsoft/graphrag per estrarre entità e relazioni.</br>
NER: Usa spaCy NER e l'estrazione di parole chiave basata su regole per estrarre entità e relazioni. Non è necessario un LLM per l'estrazione, rendendola veloce ed efficiente nelle risorse.`,
resolution: 'Risoluzione entità',
resolutionTip: `Un interruttore di deduplicazione entità. Quando abilitato, il LLM combinerà entità simili per costruire un grafo più accurato`,
community: 'Report comunità',

View File

@@ -719,7 +719,8 @@ export default {
graphRagMethod: 'Метод',
graphRagMethodTip: `
Light: (по умолчанию) Промпты github.com/HKUDS/LightRAG для извлечения сущностей и связей. Меньше токенов, памяти и вычислений.</br>
General: Промпты github.com/microsoft/graphrag`,
General: Промпты github.com/microsoft/graphrag.</br>
NER: Использует spaCy NER и извлечение ключевых слов на основе правил для извлечения сущностей и связей. LLM не требуется для самого извлечения, что делает его быстрым и эффективным.`,
resolution: 'Разрешение сущностей',
resolutionTip: `Переключатель дедубликации сущностей. Когда включен, LLM объединяет похожие сущности (например «2025» и «год 2025») для более точного графа`,
community: 'Отчёты сообществ',

View File

@@ -875,7 +875,8 @@ Bu otomatik etiketleme özelliği, mevcut datasete alanına özgü bilgi katman
graphRagMethod: 'Yöntem',
graphRagMethodTip: `
Hafif: (Varsayılan) Varlıkları ve ilişkileri çıkarmak için github.com/HKUDS/LightRAG tarafından sağlanan istemler kullanılır.</br>
Genel: Varlıkları ve ilişkileri çıkarmak için github.com/microsoft/graphrag tarafından sağlanan istemler kullanılır`,
Genel: Varlıkları ve ilişkileri çıkarmak için github.com/microsoft/graphrag tarafından sağlanan istemler kullanılır.</br>
NER: Varlıkları ve ilişkileri çıkarmak için spaCy NER ve kural tabanlı anahtar kelime çıkarma kullanılır. Çıkarma işlemi için LLM gerekmez, bu da onu hızlı ve kaynak verimli yapar.`,
resolution: 'Varlık çözünürlüğü',
resolutionTip: `Varlık tekilleştirme anahtarı. Etkinleştirildiğinde LLM benzer varlıkları birleştirir - örneğin '2025' ve '2025 yılı' veya 'BT' ve 'Bilgi Teknolojisi' - daha doğru bir grafik oluşturmak için`,
community: 'Topluluk raporları',

View File

@@ -348,7 +348,8 @@ export default {
tagCloud: 'Đám mây',
graphRagMethod: 'Phương pháp',
graphRagMethodTip: `Light: Câu lệnh trích xuất thực thể và quan hệ này được lấy từ GitHub - HKUDS/LightRAG: "LightRAG: Tạo sinh tăng cường truy xuất đơn giản và nhanh chóng".
General: Câu lệnh trích xuất thực thể và quan hệ này được lấy từ GitHub - microsoft/graphrag: Một hệ thống Tạo sinh tăng cường truy xuất (RAG) dựa trên đồ thị theo mô-đun.`,
General: Câu lệnh trích xuất thực thể và quan hệ này được lấy từ GitHub - microsoft/graphrag: Một hệ thống Tạo sinh tăng cường truy xuất (RAG) dựa trên đồ thị theo mô-đun.
NER: Sử dụng spaCy NER và trích xuất từ khóa dựa trên quy tắc để trích xuất thực thể và quan hệ. Không cần LLM cho việc trích xuất, giúp nhanh chóng và tiết kiệm tài nguyên.`,
useGraphRagTip:
'Xây dựng một biểu đồ tri thức trên các đoạn tệp của cơ sở tri thức hiện tại để tăng cường khả năng trả lời câu hỏi đa bước liên quan đến logic lồng nhau. Xem https://ragflow.io/docs/dev/construct_knowledge_graph để biết thêm chi tiết.',
resolution: 'Hợp nhất thực thể',
@@ -414,7 +415,7 @@ export default {
assistantAvatar: 'Avatar trợ lý',
language: 'Ngôn ngữ',
emptyResponse: 'Phản hồi trống',
emptyResponseTip: `Nếu không tìm thấy gì với câu hỏi của người dùng trong cơ sở kiến thức, nó sẽ sử dụng điều này làm câu trả lời. Nếu bạn muốn LLM đưa ra ý kiến riêng của mình khi không tìm thấy gì, hãy để trống.`,
emptyResponseTip: `Nếu không tìm thấy gì với câu hỏi của người dùng trong cơ sở kiến thức, nó sẽ sử dụng điều này làm câu trả lời. Nếu bạn muốn LLM đưa ra ý kiến riêng của mình khi không tìm thấy gì, hãy để trống.`,
setAnOpener: 'Đặt lời mở đầu',
setAnOpenerInitial: `Xin chào! Tôi là trợ lý của bạn, tôi có thể giúp gì cho bạn?`,
setAnOpenerTip: 'Bạn muốn chào đón khách hàng của mình như thế nào?',

View File

@@ -390,7 +390,8 @@ export default {
'基於知識庫內所有切好的文本塊構建知識圖譜,用以提升多跳和複雜問題回答的正確率。請注意:構建知識圖譜將消耗大量 token 和時間。詳見 https://ragflow.io/docs/dev/construct_knowledge_graph。',
graphRagMethod: '方法',
graphRagMethodTip: `Light實體和關係提取提示來自 GitHub - HKUDS/LightRAG“LightRAG簡單快速的檢索增強生成”<br>
一般:實體和關係擷取提示來自 GitHub - microsoft/graphrag基於模組化圖形的檢索增強生成 (RAG) 系統,`,
一般:實體和關係擷取提示來自 GitHub - microsoft/graphrag基於模組化圖形的檢索增強生成 (RAG) 系統,<br>
NER使用 spaCy NER 和基於規則的關鍵詞提取來抽取實體和關係,無需 LLM 參與提取過程,速度快且資源消耗低`,
resolution: '實體歸一化',
resolutionTip: `解析過程會將具有相同意義的實體合併在一起使知識圖譜更簡潔、更準確。應合併以下實體川普總統、唐納德·川普、唐納德·J·川普、唐納德·約翰·川普`,
community: '社群報告生成',

View File

@@ -811,7 +811,8 @@ export default {
'基于知识库内所有切好的文本块构建知识图谱,用以提升多跳和复杂问题回答的正确率。请注意:构建知识图谱将消耗大量 token 和时间。详见 https://ragflow.io/docs/dev/construct_knowledge_graph。',
graphRagMethod: '方法',
graphRagMethodTip: `Light实体和关系提取提示来自 GitHub - HKUDS/LightRAG“LightRAG简单快速的检索增强生成”<br>
General实体和关系提取提示来自 GitHub - microsoft/graphrag基于图的模块化检索增强生成 (RAG) 系统`,
General实体和关系提取提示来自 GitHub - microsoft/graphrag基于图的模块化检索增强生成 (RAG) 系统<br>
NER使用 spaCy NER 和基于规则的关键词提取来抽取实体和关系,无需 LLM 参与提取过程,速度快且资源消耗低`,
resolution: '实体归一化',
resolutionTip: `解析过程会将具有相同含义的实体合并在一起从而使知识图谱更简洁、更准确。应合并以下实体特朗普总统、唐纳德·特朗普、唐纳德·J·特朗普、唐纳德·约翰·特朗普`,
community: '社区报告生成',

View File

@@ -57,6 +57,7 @@ const initialEntityTypes = [
const enum MethodValue {
General = 'general',
Light = 'light',
NER = 'ner',
}
export default function DatasetSettings() {