| | """ |
| | SPARKNET CLI Main Entry Point |
| | |
| | Usage: |
| | sparknet document parse <file> |
| | sparknet document extract <file> --schema <schema.yaml> |
| | sparknet rag index <file> |
| | sparknet rag ask <question> |
| | """ |
| |
|
| | import typer |
| | from typing import Optional |
| | from pathlib import Path |
| | import json |
| | import sys |
| |
|
| | from .document import document_app |
| | from .rag import rag_app |
| |
|
| | |
| | app = typer.Typer( |
| | name="sparknet", |
| | help="SPARKNET Document Intelligence CLI", |
| | add_completion=False, |
| | ) |
| |
|
| | |
| | app.add_typer(document_app, name="document", help="Document processing commands") |
| | app.add_typer(rag_app, name="rag", help="RAG and retrieval commands") |
| |
|
| |
|
| | @app.command() |
| | def version(): |
| | """Show SPARKNET version.""" |
| | typer.echo("SPARKNET Document Intelligence v0.1.0") |
| |
|
| |
|
| | @app.command() |
| | def info(): |
| | """Show system information and configuration.""" |
| | from loguru import logger |
| | import platform |
| |
|
| | typer.echo("SPARKNET Document Intelligence") |
| | typer.echo("=" * 40) |
| | typer.echo(f"Python: {platform.python_version()}") |
| | typer.echo(f"Platform: {platform.system()} {platform.release()}") |
| | typer.echo() |
| |
|
| | |
| | typer.echo("Components:") |
| |
|
| | |
| | try: |
| | from paddleocr import PaddleOCR |
| | typer.echo(" [β] PaddleOCR") |
| | except ImportError: |
| | typer.echo(" [β] PaddleOCR (install with: pip install paddleocr)") |
| |
|
| | try: |
| | import pytesseract |
| | typer.echo(" [β] Tesseract") |
| | except ImportError: |
| | typer.echo(" [β] Tesseract (install with: pip install pytesseract)") |
| |
|
| | |
| | try: |
| | import chromadb |
| | typer.echo(" [β] ChromaDB") |
| | except ImportError: |
| | typer.echo(" [β] ChromaDB (install with: pip install chromadb)") |
| |
|
| | |
| | try: |
| | import httpx |
| | with httpx.Client(timeout=2.0) as client: |
| | resp = client.get("http://localhost:11434/api/tags") |
| | if resp.status_code == 200: |
| | models = resp.json().get("models", []) |
| | typer.echo(f" [β] Ollama ({len(models)} models)") |
| | else: |
| | typer.echo(" [β] Ollama (not responding)") |
| | except Exception: |
| | typer.echo(" [β] Ollama (not running)") |
| |
|
| |
|
| | @app.callback() |
| | def main_callback( |
| | verbose: bool = typer.Option(False, "--verbose", "-v", help="Enable verbose output"), |
| | quiet: bool = typer.Option(False, "--quiet", "-q", help="Suppress output"), |
| | ): |
| | """SPARKNET Document Intelligence CLI.""" |
| | from loguru import logger |
| | import sys |
| |
|
| | |
| | logger.remove() |
| | if verbose: |
| | logger.add(sys.stderr, level="DEBUG") |
| | elif not quiet: |
| | logger.add(sys.stderr, level="INFO") |
| |
|
| |
|
| | def main(): |
| | """Main entry point.""" |
| | app() |
| |
|
| |
|
| | if __name__ == "__main__": |
| | main() |
| |
|