Skip to main content

Python toolkit for ML, CV, NLP and multimodal AI development

Project description

maque (麻雀)

Python toolkit for ML, CV, NLP and multimodal AI development

PyPI version License tests pypi downloads


Features

  • MLLM Processing - Batch image analysis with OpenAI/Gemini compatible APIs
  • LLM Server - Local LLM inference with Transformers backend
  • Embedding Service - Text/multimodal embedding API server
  • Clustering Pipeline - UMAP + HDBSCAN for vector clustering and visualization
  • Async Executor - Priority queue-based concurrent task execution with retry
  • Rich CLI - Modular command groups for various tasks

Installation

# Basic installation
pip install maque

# With specific feature sets
pip install maque[torch,nlp,cv]          # ML/NLP/CV features
pip install maque[clustering,embedding]  # ML pipeline features
pip install maque[dev,test]              # Development setup

# From source
pip install -e .
pip install -e .[dev,test]

CLI Usage

Commands are organized into groups: maque <group> <command>. Short alias mq is also available.

Config Management

maque config show                 # Show current configuration
maque config edit                 # Open config in editor
maque config init                 # Initialize config file

MLLM (Multimodal LLM)

# Process images from a table
maque mllm call-table data.xlsx --image_col="image_path" --model="gpt-4o"

# Process images from a folder
maque mllm call-images ./photos --recursive=True --output_file="results.csv"

LLM Server

# Start LLM inference server
maque llm serve Qwen/Qwen2.5-7B-Instruct --port=8000

# Interactive chat
maque llm chat --model="gpt-4o"

Embedding Service

# Start embedding API server
maque embedding serve --model=BAAI/bge-m3 --port=8001

# Test embedding endpoint
maque embedding test --text="Hello world"

Data Processing

# Interactive table viewer (Streamlit)
maque data table-viewer data.csv --port=8501

# Convert between formats
maque data convert input.json output.csv

System Utilities

# Kill processes on ports
maque system kill 8000 8001

# Pack directory
maque system pack ./folder

# Split large file
maque system split large_file.dat --chunk_size=1GB

Git Helpers

# Clone with options
maque git clone https://github.com/user/repo --branch=dev

# Generate SSH key
maque git gen-key project_name --email=your@email.com

Python API

IO Utilities

from maque import yaml_load, yaml_dump, json_load, json_dump, jsonl_load, jsonl_dump

# Load/save YAML
config = yaml_load("config.yaml")
yaml_dump(data, "output.yaml")

# Load/save JSONL
records = jsonl_load("data.jsonl")
jsonl_dump(records, "output.jsonl")

MLLM Client

from maque.mllm import MllmClient

client = MllmClient(
    base_url="https://api.openai.com/v1",
    api_key="your-api-key",
    model="gpt-4o"
)

# Single image
response = client.call("Describe this image", image_path="photo.jpg")

# Batch processing
from maque.mllm import TableProcessor
processor = TableProcessor(client)
results = processor.process("data.xlsx", image_col="image_path", prompt="Describe the image")

Async Executor

from maque.async_api import ConcurrentExecutor

async def process_item(item):
    # Your async processing logic
    return result

executor = ConcurrentExecutor(
    max_concurrent=10,
    max_qps=5,
    max_retries=3
)

results = await executor.run(
    process_item,
    items,
    progress=True
)

Embedding & Retrieval

from maque.embedding import TextEmbedding
from maque.retriever import ChromaRetriever, Document

# Initialize
embedding = TextEmbedding(base_url="http://localhost:8001/v1", model="bge-m3")
retriever = ChromaRetriever(
    embedding,
    persist_dir="./chroma_db",
    collection_name="my_data"
)

# Insert documents
documents = [Document(id="1", content="text...", metadata={"source": "file1"})]
retriever.upsert_batch(documents, batch_size=32, skip_existing=True)

# Search
results = retriever.search("query text", top_k=10)

Clustering Pipeline

from maque.clustering import ClusterAnalyzer

analyzer = ClusterAnalyzer(algorithm="hdbscan", min_cluster_size=15)

# Analyze from ChromaDB
result = analyzer.analyze_chroma(
    persist_dir="./chroma_db",
    collection_name="my_data",
    output_dir="./results",
    sample_size=10000,
    visualize=True
)

# Access results
print(f"Found {result.n_clusters} clusters")
print(result.labels)
print(result.cluster_stats)

Performance Measurement

from maque import MeasureTime

with MeasureTime("model inference", gpu=True):
    output = model(input)
# Prints: model inference took 0.123s (GPU: 0.089s)

Configuration

maque uses hierarchical configuration (highest priority first):

  1. ./maque_config.yaml (current directory)
  2. Project root config
  3. ~/.maque/config.yaml (user config)

Example configuration:

mllm:
  model: gpt-4o
  base_url: https://api.openai.com/v1
  api_key: ${OPENAI_API_KEY}

embedding:
  model: BAAI/bge-m3
  base_url: http://localhost:8001/v1

llm:
  default_port: 8000

Initialize config:

maque config init

Development

# Install development dependencies
pip install -e .[dev,test]

# Run tests
pytest
pytest -m "not slow"  # Skip slow tests

# Format code
black .
isort .

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

maque-0.1.4.tar.gz (1.7 MB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

maque-0.1.4-py3-none-any.whl (1.8 MB view details)

Uploaded Python 3

File details

Details for the file maque-0.1.4.tar.gz.

File metadata

  • Download URL: maque-0.1.4.tar.gz
  • Upload date:
  • Size: 1.7 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for maque-0.1.4.tar.gz
Algorithm Hash digest
SHA256 05b54167c8988ba3e7b4800df0884e9c0fb9bd10aa5158289b3fac4e4d8b1571
MD5 8f6a12dd31754464aa6c83612d877ba0
BLAKE2b-256 3f62e9f86dc19c99b2f6a490c9e52309e3b020f988415f955b4337442cc906e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for maque-0.1.4.tar.gz:

Publisher: python-publish.yml on KenyonY/maque

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file maque-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: maque-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 1.8 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for maque-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 44440bd2c44946d04c3bad410ab6d8a1fafab97a35dadef686aadc87f4bb3fb0
MD5 c4a9e08dfb65fd405c0d472570f2f6cd
BLAKE2b-256 1a801ffede9d53c8a36b30407dcda7bf349e4fa486b49328cfab0a02c469cfe6

See more details on using hashes here.

Provenance

The following attestation bundles were made for maque-0.1.4-py3-none-any.whl:

Publisher: python-publish.yml on KenyonY/maque

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page