Skip to content

[Bug] extra_metadata_keys not propagated through AST chunking path #7

@ngmks

Description

@ngmks

🏷️ Priorité : MOYENNE | Type : Bug

Problème

Dans create_text_chunks(), quand l'AST chunking réussit pour les fichiers code, le paramètre extra_metadata_keys n'est pas passé à create_ast_chunks(). Les metadata custom (session_id, turn_id, project_name) sont silencieusement perdues pour les chunks AST.

Localisation

Fichier : packages/leann-core/src/leann/chunking_utils.py, lignes 452-455

# ACTUEL — extra_metadata_keys ABSENT :
all_chunks.extend(
    create_ast_chunks(
        code_docs, max_chunk_size=ast_chunk_size, chunk_overlap=ast_chunk_overlap
    )
)

Comparer avec le path traditional (lignes 461-463) où c'est correctement passé :

all_chunks.extend(
    _traditional_chunks_as_dicts(code_docs, chunk_size, chunk_overlap, extra_metadata_keys)
)

Impact

Aujourd'hui claude_code_rag.py utilise use_ast_chunking=False (défaut), donc le bug n'est pas déclenché en pratique. Mais si quelqu'un active l'AST chunking pour des sessions contenant du code, les metadata seront perdues.

Correction attendue

Étape 1 : Ajouter le paramètre à create_ast_chunks()

def create_ast_chunks(
    documents,
    max_chunk_size: int = 512,
    chunk_overlap: int = 64,
    metadata_template: str = "default",
    extra_metadata_keys: list[str] | None = None,  # ← AJOUTER
) -> list[dict[str, Any]]:

Étape 2 : Propager les metadata dans la boucle (ligne ~320-329)

if extra_metadata_keys:
    for key in extra_metadata_keys:
        if key in doc.metadata:
            doc_metadata[key] = doc.metadata[key]

Étape 3 : Passer le paramètre dans create_text_chunks() (ligne 452)

all_chunks.extend(
    create_ast_chunks(
        code_docs,
        max_chunk_size=ast_chunk_size,
        chunk_overlap=ast_chunk_overlap,
        extra_metadata_keys=extra_metadata_keys,  # ← AJOUTER
    )
)

Critères de succès

  • extra_metadata_keys propagé dans le path AST chunking
  • Test vérifiant que les metadata custom sont présentes dans les chunks AST
  • Backward compatible (paramètre optionnel avec défaut None)
  • Tests existants passent toujours

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions