[Bug]: TokenChunker never terminates when chunking overlap >= size (no validation of size/overlap)
I maintainer di solito rispondono entro 5 giorni
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 78/100
Direzione di ricerca
Inizia da TokenChunker.__init__ in graphrag_chunking/token_chunker.py e dal ciclo delle finestre in split_text_on_tokens, dove il passo chunk_size - chunk_overlap può essere zero o negativo. Controlla anche i campi size e overlap in graphrag_chunking/chunking_config.py. Riproduci il problema con un wrapper di decode che conta le chiamate e si ferma dopo 1000. Il lavoro è completato quando il costruttore solleva ValueError se size non è positivo o se overlap è fuori da 0 <= overlap < size, con test unitari per valori uguali, maggiori, zero e negativi.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Do you need to file an issue?
- I have searched the existing issues and this bug is not already filed.
- My model is hosted on OpenAI or Azure. If not, please look at the "model providers" issue and don't file a new one here. (Not applicable: the bug is in chunking, before any model call.)
- I believe this is a legitimate bug, not just a question. If this is a question, please use the Discussions area.
Describe the bug
split_text_on_tokens advances the window with start_idx += chunk_size - chunk_overlap (token_chunker.py#L65). When overlap == size the step is 0, so cur_idx never reaches len(input_tokens) and the while loop keeps appending chunks to result without ever exiting. When overlap > size the step is negative, start_idx moves backwards, and the loop also never terminates. size <= 0 has the same problem.
ChunkingConfig.size and ChunkingConfig.overlap are bare int fields with no validators (chunking_config.py#L25-L32), and TokenChunker.__init__ does not check them either (token_chunker.py#L20-L29). A settings.yaml with, say, size: 100 and overlap: 100 therefore gives a chunking step that hangs with no error message. The config value is operator-controlled, so this is a usability/robustness problem, not a security one.
A negative overlap is also accepted and silently skips tokens between consecutive windows.
Steps to reproduce
from graphrag_chunking.token_chunker import TokenChunker
enc = lambda s: [ord(c) for c in s]
dec = lambda t: "".join(chr(x) for x in t)
TokenChunker(size=10, overlap=10, encode=enc, decode=dec).chunk("abcdefghijklmnopqrstuvwxyz") # never returns
The same happens with overlap=15 or size=0.
I did not let the real call run to exhaustion. Instead I ran split_text_on_tokens with a decode wrapper that raises after 1000 calls: for both overlap=10 and overlap=15 (size 10) the cap was hit, i.e. the loop kept calling decode and appending chunks well past the 3 windows that 26 characters need. In the real loop result grows without bound.
Expected Behavior
A clear ValueError at config load / chunker construction when the values are invalid: require size > 0 and 0 <= overlap < size.
GraphRAG Config Used
chunking:
type: tokens
size: 100
overlap: 100
Logs and screenshots
No output: the process does not return.
Additional Information
- GraphRAG Version: 3.3.0 (graphrag-chunking at 5faaaf4f)
- Operating System: macOS
- Python Version: 3.11
- Related Issues: #2589 (a different TokenChunker bug, about decoding at token boundaries, in the same function)
Suggested minimal fix: validate in ChunkingConfig (Field(gt=0) on size, Field(ge=0) on overlap, plus a validator enforcing overlap < size) and raise ValueError in TokenChunker.__init__ so direct library use is covered too, with unit tests for equal, greater, zero and negative values. Happy to open a PR if that approach is fine.
- Lingua principale
- Python
- Stelle
- 36.6k
- Fork
- 3.9k
- Merge medio
- 4g 11h
- PR unite (30g)
- 1
Preparare l'ambiente
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/graphrag
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
microsoft/graphrag#2626 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
-
[Bug]: response_format_json_object=True is silently dropped, so JSON mode never reaches the modelApertabug triage
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
microsoft/graphrag#2625 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
-
Difficoltà 1/5 Meno di un'ora Idoneità per principianti 95/100
I maintainer di solito rispondono entro 5 giorni
-
[Bug]: JsonCache.get() crashes with unhandled AttributeError on non-dict or invalid envelope JSON payloadsForse di nuovo libera Una pull request per questa issue è stata chiusa senza essere unita. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
microsoft/graphrag#2614 · 2 commenti ·
I maintainer di solito rispondono entro 5 giorni
-
[Bug]: JSONLinesFileReader drops rows containing U+2028, U+2029 or U+0085 (uses str.splitlines)Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 85/100
microsoft/graphrag#2594 · 1 commento ·
I maintainer di solito rispondono entro 5 giorni
Tutte le issue di microsoft/graphrag
Issue simili
-
Input: placeholder drawn in the text colour when the empty Input is focused but not yet editedAperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
pierreaubert/gpui-toolkit#114 ·
I maintainer di solito rispondono entro 1 giorno
-
intake mcp-intake needs-human-review priority:high type:bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
Ikalus1988/MisakaNet#4903 · 2 commenti ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 64/100
FinanceFlash/unvibecode#819 ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
I maintainer di solito rispondono entro 1 giorno