Files
wehub-resource-sync c889a57b6b
Test Suites / Build CI Environment (push) Has been cancelled
Test Suites / Basic Tests (push) Has been cancelled
Test Suites / End-to-End Tests (push) Has been cancelled
Test Suites / CLI Tests (push) Has been cancelled
Test Suites / Slow End-to-End Tests (push) Has been cancelled
Test Suites / Graph Database Tests (push) Has been cancelled
Test Suites / Vector DB Tests (push) Has been cancelled
Test Suites / Temporal Graph Test (push) Has been cancelled
Test Suites / Search Test on Different DBs (push) Has been cancelled
Test Suites / Example Tests (push) Has been cancelled
Test Suites / Notebook Tests (push) Has been cancelled
Test Suites / OS and Python Tests Ubuntu (push) Has been cancelled
Test Suites / OS and Python Tests Extended (push) Has been cancelled
Test Suites / LLM Test Suite (push) Has been cancelled
Test Suites / S3 File Storage Test (push) Has been cancelled
Test Suites / Run Integration Tests (push) Has been cancelled
Test Suites / MCP Tests (push) Has been cancelled
Test Suites / Docker Compose Test (push) Has been cancelled
Test Suites / Docker CI test (push) Has been cancelled
Test Suites / Relational DB Migration Tests (push) Has been cancelled
Test Suites / Distributed Cognee Test (push) Has been cancelled
Test Suites / DB Examples Tests (push) Has been cancelled
Test Suites / Test Completion Status (push) Has been cancelled
Test Suites / Claude Code Review (push) Has been cancelled
Test Suites / basic checks (push) Has been cancelled
build | Build and Push Cognee MCP Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Scorecard supply-chain security / Scorecard analysis (push) Has been cancelled
build | Build and Push Docker Image to dockerhub / docker-build-and-push (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.11) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Core Functionality (3.12) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (kuzu, kuzu) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges with Different Graph Databases (neo4j, neo4j) (push) Has been cancelled
Weighted Edges Tests / Test Weighted Edges Examples (push) Has been cancelled
Weighted Edges Tests / Code Quality for Weighted Edges (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 13:02:24 +08:00

178 lines
7.6 KiB
Python

import argparse
import asyncio
import os
from typing import Optional
from cognee.cli.reference import SupportsCliCommand
from cognee.cli import DEFAULT_DOCS_URL
from cognee.cli.config import CHUNKER_CHOICES
import cognee.cli.echo as fmt
from cognee.cli.exceptions import CliCommandException, CliCommandInnerException
class CognifyCommand(SupportsCliCommand):
command_string = "cognify"
help_string = "Transform ingested data into a structured knowledge graph"
docs_url = DEFAULT_DOCS_URL
description = """
Transform ingested data into a structured knowledge graph.
This is the core processing step in Cognee that converts raw text and documents
into an intelligent knowledge graph. It analyzes content, extracts entities and
relationships, and creates semantic connections for enhanced search and reasoning.
Processing Pipeline:
1. **Document Classification**: Identifies document types and structures
2. **Permission Validation**: Ensures user has processing rights
3. **Text Chunking**: Breaks content into semantically meaningful segments
4. **Entity Extraction**: Identifies key concepts, people, places, organizations
5. **Relationship Detection**: Discovers connections between entities
6. **Graph Construction**: Builds semantic knowledge graph with embeddings
7. **Content Summarization**: Creates text summaries for navigation
After successful cognify processing, use `cognee search` to query the knowledge graph.
"""
def configure_parser(self, parser: argparse.ArgumentParser) -> None:
parser.add_argument(
"--datasets",
"-d",
nargs="*",
help="Dataset name(s) to process. Processes all available data if not specified. Can be multiple: --datasets dataset1 dataset2",
)
parser.add_argument(
"--chunk-size",
type=int,
help="Maximum tokens per chunk. Auto-calculated based on LLM if not specified (~512-8192 tokens)",
)
parser.add_argument(
"--ontology-file",
help="Path to RDF/OWL ontology file for domain-specific entity types. "
"Multiple files can be given as a comma-separated list.",
)
parser.add_argument(
"--chunker",
choices=CHUNKER_CHOICES,
default="TextChunker",
help="Text chunking strategy (default: TextChunker)",
)
parser.add_argument(
"--background",
"-b",
action="store_true",
help="Run processing in background and return immediately (recommended for large datasets)",
)
parser.add_argument(
"--verbose", "-v", action="store_true", help="Show detailed progress information"
)
parser.add_argument(
"--chunks-per-batch",
type=int,
help="Number of chunks to process per task batch (try 50 for large single documents).",
)
def execute(self, args: argparse.Namespace) -> None:
try:
# Import cognee here to avoid circular imports
import cognee
if args.ontology_file:
missing = [
path.strip()
for path in args.ontology_file.split(",")
if not os.path.isfile(path.strip())
]
if missing:
raise CliCommandInnerException(f"Ontology file not found: {', '.join(missing)}")
# Prepare datasets parameter
datasets = args.datasets if args.datasets else None
dataset_msg = f" for datasets {datasets}" if datasets else " for all available data"
fmt.echo(f"Starting cognification{dataset_msg}...")
if args.verbose:
fmt.note("This process will analyze your data and build knowledge graphs.")
fmt.note("Depending on data size, this may take several minutes.")
if args.background:
fmt.note(
"Running in background mode - the process will continue after this command exits."
)
# Prepare chunker parameter - will be handled in the async function
# Run the async cognify function
async def run_cognify():
try:
from cognee.cli.user_resolution import resolve_cli_user
user = await resolve_cli_user(getattr(args, "user_id", None))
# Import chunker classes here
from cognee.modules.chunking.TextChunker import TextChunker
chunker_class = TextChunker # Default
if args.chunker == "LangchainChunker":
try:
from cognee.modules.chunking.LangchainChunker import LangchainChunker
chunker_class = LangchainChunker
except ImportError:
fmt.warning("LangchainChunker not available, using TextChunker")
elif args.chunker == "CsvChunker":
try:
from cognee.modules.chunking.CsvChunker import CsvChunker
chunker_class = CsvChunker
except ImportError:
fmt.warning("CsvChunker not available, using TextChunker")
# Translate --ontology-file into the canonical ontology Config
# structure, built with the same factory cognify() uses for
# its env-based fallback.
config = None
if args.ontology_file:
from cognee.modules.ontology.get_default_ontology_resolver import (
get_ontology_resolver_from_env,
)
config = {
"ontology_config": {
"ontology_resolver": get_ontology_resolver_from_env(
ontology_resolver="rdflib",
matching_strategy="fuzzy",
ontology_file_path=args.ontology_file,
)
}
}
result = await cognee.cognify(
datasets=datasets,
user=user,
chunker=chunker_class,
chunk_size=args.chunk_size,
config=config,
run_in_background=args.background,
chunks_per_batch=getattr(args, "chunks_per_batch", None),
)
return result
except Exception as e:
raise CliCommandInnerException(f"Failed to cognify: {str(e)}") from e
result = asyncio.run(run_cognify())
if args.background:
fmt.success("Cognification started in background!")
if args.verbose and result:
fmt.echo(
"Background processing initiated. Use pipeline monitoring to track progress."
)
else:
fmt.success("Cognification completed successfully!")
if args.verbose and result:
fmt.echo(f"Processing results: {result}")
except Exception as e:
if isinstance(e, CliCommandInnerException):
raise CliCommandException(str(e), error_code=1) from e
raise CliCommandException(f"Error during cognification: {str(e)}", error_code=1) from e