-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathpyproject.toml
More file actions
82 lines (72 loc) · 3.34 KB
/
Copy pathpyproject.toml
File metadata and controls
82 lines (72 loc) · 3.34 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
[build-system]
requires = ["setuptools>=68"]
build-backend = "setuptools.build_meta"
[project]
name = "fusion-embedding"
version = "0.3.0"
description = "Fusion Embedding: an open-weight multimodal embedding model. One vector space for text, image, video, and audio, on a frozen Qwen3-VL-Embedding base. Weights download from Hugging Face."
authors = [{ name = "Abdul Basit Tonmoy" }]
readme = "README.md"
license = { text = "Apache-2.0" }
requires-python = ">=3.10"
keywords = ["embeddings", "multimodal", "retrieval", "audio", "video", "qwen3-vl", "open-weights"]
classifiers = [
"License :: OSI Approved :: Apache Software License",
"Programming Language :: Python :: 3",
"Topic :: Scientific/Engineering :: Artificial Intelligence",
"Intended Audience :: Developers",
]
dependencies = [
"torch>=2.1",
"numpy>=1.24",
]
[project.urls]
Homepage = "https://www.eximiuslabs.com"
Repository = "https://github.com/Eximius-Labs/fusion-embedding"
Weights = "https://huggingface.co/EximiusLabs"
# vLLM discovers and loads this at startup; it is inert outside a vLLM process.
# Serving support: `vllm serve EximiusLabs/fusion-embedding-2-2b-preview --runner pooling`
# (see fusion_embedding/vllm_plugin/README.md; smoke-tested against vllm==0.26.0).
[project.entry-points."vllm.general_plugins"]
fusion_embedding = "fusion_embedding.vllm_plugin:register"
# SGLang counterpart; inert outside an SGLang process. Serving support:
# `python -m sglang.launch_server --model-path EximiusLabs/fusion-embedding-2-2b-preview
# --is-embedding` (see fusion_embedding/sglang_plugin/README.md; smoke-tested against
# sglang==0.5.16). The audio path needs librosa+soundfile (the `sense` extra below).
[project.entry-points."sglang.srt.plugins"]
fusion_embedding = "fusion_embedding.sglang_plugin:register"
[project.optional-dependencies]
# Real model loading: pulls the weights from Hugging Face at runtime via from_pretrained.
# The base install (torch + numpy) runs the CPU end-to-end path against an injected fake.
hf = [
"transformers>=4.46",
"huggingface_hub>=0.24",
"accelerate>=0.30",
"bitsandbytes>=0.43; platform_system == 'Linux'", # 4-bit frozen base (Linux/Modal)
"soundfile>=0.12",
"librosa>=0.10",
]
# Modal serverless GPU deployment (preprocess + train as Modal functions).
deploy = ["modal>=0.64"]
# Audio decode/resample for the serving plugins (soxr_hq via librosa — the resampler
# the released audio path was trained with). Subset of [hf]; kept separate so serving
# environments need not pull transformers/accelerate.
sense = ["librosa>=0.10", "soundfile>=0.12"]
# Dev tooling — installed by default by `uv sync` (PEP 735 default group).
# scikit-learn backs the STAG cluster-sampling helpers in scripts/fsr_train.py (PCA + KMeans);
# it is a test-time requirement so those helpers are never silently skipped before a GPU run.
[dependency-groups]
dev = ["pytest>=7", "scikit-learn>=1.3"]
[tool.setuptools.packages.find]
include = ["fusion_embedding*"]
[tool.pytest.ini_options]
testpaths = ["tests"]
addopts = "-q"
# --- uv: pull torch from the CUDA cu124 index (RTX 4060 = Ada; also valid on Modal Linux).
# Switch the URL to .../whl/cpu for a CPU-only box, or .../whl/cu126 etc. as needed.
[tool.uv.sources]
torch = [{ index = "pytorch-cu124" }]
[[tool.uv.index]]
name = "pytorch-cu124"
url = "https://download.pytorch.org/whl/cu124"
explicit = true