sie-server 0.8.3__tar.gz → 0.9.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sie_server-0.8.3 → sie_server-0.9.0}/PKG-INFO +4 -1
- sie_server-0.9.0/README.md +648 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/transformers5.yaml +16 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Alibaba-NLP__gte-modernbert-base.yaml +6 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Alibaba-NLP__gte-reranker-modernbert-base.yaml +1 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3.8-27B-FP8.yaml +71 -3
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__madlad400-3b-mt.yaml +5 -5
- {sie_server-0.8.3 → sie_server-0.9.0}/models/ibm-granite__granite-embedding-97m-multilingual-r2.yaml +2 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/ibm-granite__granite-embedding-small-english-r2.yaml +6 -1
- sie_server-0.9.0/models/knowledgator__gliclass-base-v1.0-lw.yaml +29 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-base-v1.0.yaml +1 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-base-v3.0.yaml +4 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-edge-v3.0.yaml +1 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-instruct-base-v1.0.yaml +4 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-instruct-edge-v1.0.yaml +1 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-instruct-large-v1.0.yaml +4 -1
- sie_server-0.9.0/models/knowledgator__gliclass-large-v1.0-lw.yaml +29 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-large-v1.0.yaml +1 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-large-v3.0.yaml +4 -1
- sie_server-0.9.0/models/knowledgator__gliclass-modern-base-v3.0.yaml +30 -0
- sie_server-0.9.0/models/knowledgator__gliclass-modern-large-v3.0.yaml +30 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-multilang-edge.yaml +2 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-multilang-mini.yaml +1 -1
- sie_server-0.9.0/models/knowledgator__gliclass-multilang-ultra.yaml +29 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliclass-small-v1.0.yaml +4 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/models/lightonai__GTE-ModernColBERT-v1.yaml +1 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/lightonai__Reason-ModernColBERT.yaml +3 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/lightonai__mLateOn.yaml +3 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/mixedbread-ai__mxbai-edge-colbert-v0-32m.yaml +1 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nomic-ai__modernbert-embed-base.yaml +8 -1
- sie_server-0.9.0/models/tencent__Hy-MT2-1.8B.yaml +44 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/topk-io__Iso-ModernColBERT.yaml +16 -2
- sie_server-0.9.0/models/topk-io__topk-embed-v1-small.yaml +56 -0
- sie_server-0.9.0/models/topk-io__topk-embed-v1-xsmall.yaml +58 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/openapi.json +78 -17
- {sie_server-0.8.3 → sie_server-0.9.0}/pyproject.toml +7 -1
- sie_server-0.9.0/scripts/generate_topk_embed_goldens.py +220 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapter_call_loop.py +5 -1
- sie_server-0.9.0/src/sie_server/adapters/_cuda_graphs.py +70 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_generation_base.py +8 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_modernbert_flash.py +35 -5
- sie_server-0.9.0/src/sie_server/adapters/_modernbert_flash_graphs.py +723 -0
- sie_server-0.9.0/src/sie_server/adapters/_packed_rope.py +133 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/base.py +10 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colbert_modernbert_flash/adapter.py +112 -23
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/ctranslate2/generation.py +19 -6
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliclass/__init__.py +225 -77
- sie_server-0.9.0/src/sie_server/adapters/gliclass/cuda_graphs.py +746 -0
- sie_server-0.9.0/src/sie_server/adapters/gliclass/modernbert_flash.py +231 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/mlx/_server.py +3 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/mlx/generation.py +30 -4
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/modernbert_flash/__init__.py +126 -29
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/modernbert_flash_cross_encoder/__init__.py +148 -49
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/qwen2_flash_cross_encoder/adapter.py +52 -8
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/_server.py +34 -8
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/embedding.py +5 -13
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/generation.py +32 -14
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/tensorrt_llm/_server.py +3 -1
- sie_server-0.9.0/src/sie_server/adapters/topk_embed/_vision_rotary_kernel.py +47 -0
- sie_server-0.9.0/src/sie_server/adapters/topk_embed/adapter.py +1077 -0
- sie_server-0.9.0/src/sie_server/adapters/topk_embed/graphs.py +466 -0
- sie_server-0.9.0/src/sie_server/adapters/topk_embed/packed.py +463 -0
- sie_server-0.9.0/src/sie_server/adapters/topk_embed/vision_rotary.py +74 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/encode.py +1 -34
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/generate.py +54 -13
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/helpers.py +42 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/openai_compat.py +72 -98
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/openai_completions.py +27 -8
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/openai_local.py +130 -3
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/openai_responses.py +21 -7
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/score.py +8 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/ws.py +144 -39
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/app/app_factory.py +3 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/app/app_state_config.py +13 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/bundle_requirements.py +1 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/cli.py +25 -0
- sie_server-0.9.0/src/sie_server/config/upstreams.py +221 -0
- sie_server-0.9.0/src/sie_server/core/grammar_routing.py +172 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/inference_output.py +19 -0
- sie_server-0.9.0/src/sie_server/core/load_errors.py +348 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/model_loader.py +7 -6
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/registry.py +469 -293
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/runtime_options.py +161 -3
- sie_server-0.9.0/src/sie_server/core/upstream_client.py +57 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/handlers/score.py +14 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/ipc_types.py +13 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/local_ingest_client.py +81 -3
- sie_server-0.9.0/src/sie_server/observability/batch_fanin.py +86 -0
- sie_server-0.9.0/src/sie_server/observability/lifecycle.py +180 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/observability/tracing.py +5 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/observability/worker_telemetry.py +1 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/streaming.py +53 -12
- sie_server-0.9.0/src/sie_server/processors/strict_grammar.py +319 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/tool_call_parser.py +2 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/queue_executor.py +198 -28
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/grammar.py +6 -3
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/openapi.py +50 -3
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/responses.py +13 -0
- sie_server-0.9.0/tests/adapters/goldens/topk_embed/topk-io__topk-embed-v1-small.json +149 -0
- sie_server-0.9.0/tests/adapters/goldens/topk_embed/topk-io__topk-embed-v1-xsmall.json +149 -0
- sie_server-0.9.0/tests/adapters/test_colbert_modernbert_flash_batch_invariance.py +221 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_ctranslate2_generation.py +47 -0
- sie_server-0.9.0/tests/adapters/test_gliclass_cuda_graphs.py +888 -0
- sie_server-0.9.0/tests/adapters/test_gliclass_modernbert_flash.py +573 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliclass_overflow_policy.py +22 -14
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliclass_parity.py +72 -9
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliclass_request_options.py +179 -4
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_mlx_generation.py +43 -1
- sie_server-0.9.0/tests/adapters/test_modernbert_flash_graphs.py +867 -0
- sie_server-0.9.0/tests/adapters/test_modernbert_flash_rope.py +225 -0
- sie_server-0.9.0/tests/adapters/test_packed_rope.py +108 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_qwen2_flash_cross_encoder.py +70 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_sglang_generation.py +105 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed.py +407 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed_graphs.py +378 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed_overlap.py +107 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed_packed.py +327 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed_parity.py +148 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed_vision_rotary.py +40 -0
- sie_server-0.9.0/tests/adapters/test_topk_embed_warmup.py +131 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_generate.py +317 -1
- sie_server-0.9.0/tests/api/test_generation_timeouts.py +164 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_openai_compat.py +276 -5
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_openai_completions.py +28 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_openai_local.py +273 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_openai_responses.py +19 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_score.py +31 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_generation_mode_profiles.py +2 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_gte_modern_colbert_profiles.py +1 -1
- sie_server-0.9.0/tests/config/test_iso_moderncolbert_profiles.py +54 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_qwen38_generation_profiles.py +33 -0
- sie_server-0.9.0/tests/config/test_upstreams.py +211 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_visual_muvera_containment.py +2 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_bundle_requirements.py +2 -2
- sie_server-0.9.0/tests/core/test_grammar_routing.py +70 -0
- sie_server-0.9.0/tests/core/test_load_error_classification.py +365 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_async.py +46 -0
- sie_server-0.9.0/tests/core/test_registry_engine_exit.py +326 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_failed_state.py +28 -2
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_runtime_options.py +175 -0
- sie_server-0.9.0/tests/core/test_upstream_client.py +135 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/fake_stack/test_registry_races.py +16 -15
- sie_server-0.9.0/tests/fake_stack/test_registry_serving_isolation.py +225 -0
- sie_server-0.9.0/tests/observability/test_batch_fanin.py +102 -0
- sie_server-0.9.0/tests/observability/test_lifecycle.py +174 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/observability/test_worker_telemetry.py +7 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_streaming.py +210 -0
- sie_server-0.9.0/tests/processors/test_strict_grammar.py +451 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_tool_call_parser.py +2 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_all_models.py +87 -17
- sie_server-0.9.0/tests/test_all_models_assertions.py +51 -0
- sie_server-0.9.0/tests/test_cli_upstreams.py +87 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_ipc_server.py +549 -5
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_local_ingest_client.py +99 -1
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_metering_units.py +58 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_queue_executor.py +42 -4
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_queue_executor_stage1d.py +71 -0
- sie_server-0.9.0/tests/type_defs/__init__.py +0 -0
- sie_server-0.8.3/README.md +0 -273
- sie_server-0.8.3/src/sie_server/adapters/gliclass/cuda_graphs.py +0 -463
- sie_server-0.8.3/src/sie_server/core/load_errors.py +0 -246
- sie_server-0.8.3/tests/adapters/test_gliclass_cuda_graphs.py +0 -571
- {sie_server-0.8.3 → sie_server-0.9.0}/.gitignore +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/CONTRIBUTING.md +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/Dockerfile.cpu +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/Dockerfile.cuda12 +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/Dockerfile.cuda13 +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/LICENSE +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/candle.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/ctranslate2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/default.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/fake.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/sglang-cu130.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/sglang-embedding.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/sglang-vision-extract.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/sglang.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/bundles/tensorrt-llm.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Alibaba-NLP__gte-Qwen2-1.5B-instruct.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Alibaba-NLP__gte-Qwen2-7B-instruct.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Alibaba-NLP__gte-multilingual-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-base-en-v1.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-large-en-v1.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-m3.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-reranker-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-reranker-large.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-reranker-v2-m3.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-small-en-v1.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/BAAI__bge-small-zh-v1.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/EmergentMethods__gliner_large_news-v2.1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/GritLM__GritLM-7B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/IDEA-Research__grounding-dino-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/IDEA-Research__grounding-dino-tiny.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Ihor__gliner-biomed-large-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Linq-AI-Research__Linq-Embed-Mistral.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Marqo__marqo-ecommerce-embeddings-B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Marqo__marqo-fashionSigLIP.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/MoritzLaurer__ModernBERT-base-zeroshot-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/MoritzLaurer__deberta-v3-base-zeroshot-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/MoritzLaurer__deberta-v3-large-zeroshot-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/NeuML__gliner-bert-tiny.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/NovaSearch__stella_en_1.5B_v5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/NovaSearch__stella_en_400M_v5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/PaddlePaddle__PaddleOCR-VL-1.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-0.6B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-4B-Instruct-2507.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-Embedding-0.6B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-Embedding-4B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-Embedding-8B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-Reranker-0.6B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-Reranker-4B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-VL-8B-Instruct.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-VL-Embedding-2B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3-VL-Reranker-2B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3.5-4B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3.6-27B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Qwen__Qwen3.6-35B-A3B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Salesforce__SFR-Embedding-2_R.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Salesforce__SFR-Embedding-Mistral.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Snowflake__snowflake-arctic-embed-l-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Snowflake__snowflake-arctic-embed-m-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/Snowflake__snowflake-arctic-embed-s.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/TomoroAI__tomoro-colqwen3-embed-4b.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/WhereIsAI__UAE-Large-V1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/answerdotai__ModernBERT-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/answerdotai__ModernBERT-large.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/answerdotai__answerai-colbert-small-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/colbert-ir__colbertv2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/convaiinnovations__laya-multilingual.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/convaiinnovations__laya-typed-decisions.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/convaiinnovations__laya.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/cross-encoder__ms-marco-MiniLM-L-12-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/cross-encoder__ms-marco-MiniLM-L-6-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/cross-encoder__nli-deberta-v3-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/defog__sqlcoder-7b-2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/docling.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/facebook__bart-large-mnli.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/fastino__GLiNER2.5-Decide-1B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/fastino__GLiNER2.5-Decide.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/fastino__GLiNER2.5-multi-Decide.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/fastino__gliguard-LLMGuardrails-300M.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/fastino__gliner2-base-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/fastino__gliner2-large-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/gliner-community__gliner_large-v2.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/gliner-community__gliner_medium-v2.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/gliner-community__gliner_small-v2.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__embeddinggemma-300m.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__gemma-4-26B-A4B-it.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__gemma-4-31B-it.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__gemma-4-E2B-it.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__gemma-4-E4B-it.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__owlv2-base-patch16-ensemble.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__owlv2-large-patch14-ensemble.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__siglip-base-patch16-256.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__siglip-so400m-patch14-224.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__siglip-so400m-patch14-384.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__siglip2-base-patch16-224.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/google__translategemma-4b-it.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/ibm-granite__granite-embedding-30m-sparse.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/ibm-granite__granite-embedding-english-r2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/ibm-granite__granite-guardian-3.0-2b.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__e5-base-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__e5-large-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__e5-mistral-7b-instruct.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__e5-small-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__multilingual-e5-large-instruct.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__multilingual-e5-large.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/intfloat__multilingual-e5-small.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jackboyla__glirel-large-v0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-colbert-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-embeddings-v2-base-code.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-embeddings-v2-base-de.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-embeddings-v2-base-en.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-embeddings-v2-base-es.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-embeddings-v2-base-zh.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-embeddings-v2-small-en.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/jinaai__jina-reranker-v2-base-multilingual.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliformer-base-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliformer-large-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-bi-base-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-bi-edge-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-bi-large-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-bi-small-v2.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-pii-base-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-pii-edge-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-pii-large-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-pii-small-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__gliner-relex-large-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__modern-gliner-bi-base-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__opir-edge-multilang-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__opir-edge-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__opir-multitask-large-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/knowledgator__opir-multitask-multilang-v1.0.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/laion__CLIP-ViT-B-32-laion2B-s34B-b79K.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/laion__CLIP-ViT-H-14-laion2B-s32B-b79K.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/lightonai__LightOnOCR-2-1B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/microsoft__Florence-2-base-ft.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/microsoft__Florence-2-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/microsoft__Florence-2-large.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/mixedbread-ai__mxbai-colbert-large-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/mixedbread-ai__mxbai-embed-large-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/mixedbread-ai__mxbai-rerank-base-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/mixedbread-ai__mxbai-rerank-large-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/mynkchaudhry__Florence-2-FT-DocVQA.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/naver-clova-ix__donut-base-finetuned-cord-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/naver-clova-ix__donut-base-finetuned-docvqa.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/naver__splade-cocondenser-selfdistil.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/naver__splade-v3.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/naver__v-splade-quality.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nomic-ai__nomic-embed-text-v1.5.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nomic-ai__nomic-embed-text-v2-moe.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/numind__NuNER_Zero-span.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/numind__NuNER_Zero.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nvidia__NV-Embed-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nvidia__llama-embed-nemotron-8b.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nvidia__llama-nemoretriever-colembed-3b-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/nvidia__nemotron-colembed-vl-4b-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/openai__clip-vit-base-patch32.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/openai__clip-vit-large-patch14.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/openai__whisper-large-v3-turbo.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opendatalab__MinerU2.5-Pro-2604-1.2B.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opensearch-project__opensearch-neural-sparse-encoding-doc-v2-distill.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opensearch-project__opensearch-neural-sparse-encoding-doc-v2-mini.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opensearch-project__opensearch-neural-sparse-encoding-doc-v3-distill.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opensearch-project__opensearch-neural-sparse-encoding-doc-v3-gte.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opensearch-project__opensearch-neural-sparse-encoding-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/opensearch-project__opensearch-neural-sparse-encoding-v2-distill.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/prithivida__Splade_PP_en_v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/rasyosef__splade-mini.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/sentence-transformers__all-MiniLM-L6-v2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/sie-fake.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/sugiv__stablebridge-pruner-highlighter.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/tencent__R3-embedding-0.6b.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/tencent__R3-rerank-0.6b.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/thenlper__gte-base.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/thenlper__gte-large.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/thenlper__gte-small.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/urchade__gliner_large-v2.1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/urchade__gliner_medium-v2.1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/urchade__gliner_multi-v2.1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/urchade__gliner_multi_pii-v1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/urchade__gliner_small-v2.1.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/vidore__colSmol-256M.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/vidore__colpali-v1.3-hf.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/vidore__colqwen2.5-v0.2.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/zai-org__GLM-5.3-Flash.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/models/zai-org__GLM-OCR.yaml +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/scripts/generate_gliformer_goldens.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/scripts/generate_gliner2_decide_goldens.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/scripts/generate_laya_fixtures.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/scripts/generate_tokenize_fixture.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/_ipc_test_harness.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_base_adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_colbert_projection.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_colbert_utils.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_flash_base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_flash_pack.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_multivector.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_prompt_limit.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_pylate_dense.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_spec.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_types.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_utils.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_vision_patch_embed.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/_word_window.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/bert_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/bert_flash_cross_encoder/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/bge_m3/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/bge_m3_flag/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/bge_m3_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/bge_m3_score_mixin.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/clip/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colbert/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colbert_modernbert_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colbert_rotary_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colpali/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colqwen2/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colqwen3/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/colsmol/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/cross_encoder/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/ctranslate2/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/docling/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/docling/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/donut/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/errors.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/fake/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/fake/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/florence2/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliformer/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliformer/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliformer/output_schema.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliformer/relation_decoding.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliformer/span_decoding.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliformer/structuring_decoding.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner2/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner2/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner2/classification.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner2/decide.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner2/decisions.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner2/words.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gliner_bi/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/glirel/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/glm_ocr/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/grounding_dino/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/grounding_dino/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/gte_sparse_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/jina_flash_cross_encoder/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/laya/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/laya/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/laya/model.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/laya/questions.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/lighton_ocr/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/lighton_ocr/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/lora.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/mineru_vl/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/mlx/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/nemo_colembed/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/nli_classification/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/nli_classification_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/nomic_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/owlv2/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/owlv2/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/paddleocr_vl/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/peft_lora_mixin.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/pytorch_embedding/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/qwen2_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/qwen2_flash_cross_encoder/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/qwen3_vl_embedding/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/qwen3_vl_reranker/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/qwen3_vl_reranker/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/rope_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sentence_transformer/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/_compat/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/_compat/sitecustomize.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/cuda13.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang/gemma.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang_vision_extract/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang_vision_extract/_compat/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang_vision_extract/_compat/sitecustomize.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/sglang_vision_extract/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/siglip/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/siglip/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/splade_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/splade_flash/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/st_sparse_vision/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/st_sparse_vision/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/stablebridge_pruner/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/tensorrt_llm/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/tensorrt_llm/_compat/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/tensorrt_llm/_compat/sitecustomize.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/tensorrt_llm/compat.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/tensorrt_llm/generation.py +0 -0
- {sie_server-0.8.3/src/sie_server/adapters/whisper → sie_server-0.9.0/src/sie_server/adapters/topk_embed}/__init__.py +0 -0
- {sie_server-0.8.3/src/sie_server/app → sie_server-0.9.0/src/sie_server/adapters/whisper}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/whisper/adapter.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/adapters/xlm_roberta_flash/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/extract.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/health.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/models.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/openai_audio.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/openapi.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/options.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/root.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/serialization.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/api/validation.py +0 -0
- {sie_server-0.8.3/src/sie_server/config → sie_server-0.9.0/src/sie_server/app}/__init__.py +0 -0
- {sie_server-0.8.3/src/sie_server/health → sie_server-0.9.0/src/sie_server/config}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/config/device_groups.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/config/engine.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/config/model.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/config/package_artifacts.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/config/serving_artifacts.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/adaptive_batching.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/batcher.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/deps.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/disk_cache.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/encode_pipeline.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/extract_cost.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/gpu_health.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/hf_env.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/hot_reload.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/inference.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/loader.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/logging.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/memory.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/model_suggestions.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/oom.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/pool_isolation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/postprocessor.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/postprocessor_registry.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/prepared.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor/audio.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor/base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor/image.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor/text.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor/vision.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/preprocessor_registry.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/readiness.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/residency.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/score_cost.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/shutdown.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/text_tokens.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/timing.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/tokenizer.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/video_frames.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/watcher.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/handlers/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/handlers/base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/handlers/encode.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/handlers/extract.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/model_worker.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/oom_recovery.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/core/worker/types.py +0 -0
- {sie_server-0.8.3/src/sie_server/observability → sie_server-0.9.0/src/sie_server/health}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/health/saturation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/ipc_server.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/main.py +0 -0
- {sie_server-0.8.3/src/sie_server/processors → sie_server-0.9.0/src/sie_server/observability}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/observability/generation_diagnostics.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/observability/gpu.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/observability/telemetry.py +0 -0
- {sie_server-0.8.3/tests/adapters → sie_server-0.9.0/src/sie_server/processors}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/admission.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/grammar_cache.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/grammar_compile.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/tool_call_grammar.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/processors/work_class_scheduler.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/inputs.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/outputs.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/overflow_policy.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/src/sie_server/types/requests.py +0 -0
- {sie_server-0.8.3/tests/api → sie_server-0.9.0/tests/adapters}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/fixtures/laya/laya-multilingual.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/fixtures/laya/laya-typed-decisions.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/fixtures/laya/laya.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/goldens/gliformer/knowledgator__gliformer-base-v1.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/goldens/gliformer/knowledgator__gliformer-large-v1.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/goldens/gliner2_decide/fastino__GLiNER2.5-Decide-1B.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/goldens/gliner2_decide/fastino__GLiNER2.5-Decide.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/goldens/gliner2_decide/fastino__GLiNER2.5-multi-Decide.json +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_adapter_revision_contract.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_bge_m3.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_bge_m3_flash.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_clip.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_colbert.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_colbert_modernbert_flash_projection.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_colbert_modernbert_flash_tokenizer.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_colbert_projection.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_colbert_punctuation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_colqwen2_revision.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_docling.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_docling_smoke.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_donut.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_factory_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_fake.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_fake_catalog.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_fake_faults.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_flash_base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_flash_pack.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_florence2.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_generation_base.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliclass_contracts.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliformer.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliformer_parity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliformer_span_decoding.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner2.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner2_decide.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner2_decide_parity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner2_long_text.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner2_words.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner_bi_label_cache.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner_bi_metering.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner_long_words.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner_merge.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner_metering.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gliner_relations.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_glirel.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_glm_ocr.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_grounding_dino.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_gte_sparse.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_image_decode_errors.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_jina_flash_cross_encoder.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_laya.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_laya_bounds.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_laya_model.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_laya_parity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_lighton_ocr.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_lora.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_lora_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_mineru_vl.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_multivector.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_owlv2.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_paddleocr_vl.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_prompt_limit.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_pylate_dense.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_pytorch_embedding_model_encode.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_pytorch_embedding_revision.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_qwen3_vl_embedding.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_qwen3_vl_reranker.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_runtime_options.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_sentence_transformer.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_sglang.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_sglang_launch_flags.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_sglang_vision_extract.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_siglip.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_siglip_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_sparse_aggregation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_splade_flash_parity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_splade_packed_parity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_splade_roberta_position_ids.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_st_sparse_vision.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_stablebridge_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_stablebridge_pruner.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_tensorrt_llm_compat.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_tensorrt_llm_generation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_vision_patch_embed.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_visual_document.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_visual_muvera_postprocessors.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_whisper.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/adapters/test_word_window.py +0 -0
- {sie_server-0.8.3/tests/app → sie_server-0.9.0/tests/api}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_canonical_profile_conformance.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_dtype_queue_http_parity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_encode_dtype.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_encode_endpoint.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_encode_json_schema.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_encode_timing.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_encode_validation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_error_code_hygiene.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_extract.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_extract_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_extract_oom.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_generate_stream.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_generation_cleanup_precedence.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_health.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_helpers_telemetry.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_models.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_openai_audio.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_option.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_request_body_limit.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_usage_reporting.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_version_header.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/api/test_ws.py +0 -0
- {sie_server-0.8.3/tests/config → sie_server-0.9.0/tests/app}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/app/test_app_factory.py +0 -0
- {sie_server-0.8.3/tests/core → sie_server-0.9.0/tests/config}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_answerai_colbert_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_bundle_coverage.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_catalog_loadtime_options.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_colbertv2_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_config.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_h100_fp8_generation_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_jina_colbert_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_model_prewarm_grammars.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_muvera_profile_postprocessors.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_mxbai_colbert_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_mxbai_edge_colbert_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_nvidia_nemo_colembed_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_package_artifacts.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_profile_backend_consistency.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_profile_template_inheritance.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_qwen_generation_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_serving_artifact_config.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_serving_artifacts.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_tensor_parallel_options.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/config/test_video_generation_profiles.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/conftest.py +0 -0
- {sie_server-0.8.3/tests/core/worker → sie_server-0.9.0/tests/core}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_adaptive_batching.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_batcher.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_disk_cache.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_encode_format_output.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_encode_worker_batching.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_gpu_health.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_hot_reload.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_idle_evict.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_inference.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_load_rgb.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_loader.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_logging.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_lora_generation_exclusion.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_memory.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_memory_synthetic.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_model_load_timeout.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_model_loader_cache.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_model_suggestions.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_oom_detection.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_pool_isolation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_postprocessor.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_postprocessor_registry.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_prepared.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_preprocessor.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_preprocessor_registry.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_quantization.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_readiness.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_core.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_deps.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_device_groups.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_generation_drain.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_lifecycle_loop.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_memory.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_registry_multi_model.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_residency.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_revision_identity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_shutdown.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_timing.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_unload_off_event_loop.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_video_frames.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_watcher.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_backpressure.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_core.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_drain.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_extract.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_lora.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_options.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_preformed.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/test_worker_score.py +0 -0
- {sie_server-0.8.3/tests/fake_stack → sie_server-0.9.0/tests/core/worker}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/core/worker/test_oom_recovery.py +0 -0
- {sie_server-0.8.3/tests/health → sie_server-0.9.0/tests/fake_stack}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/fake_stack/conftest.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/fake_stack/test_lost_result.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/fake_stack/test_model_loading_race.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/fake_stack/test_oom_ladder.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/fake_stack/test_sdk_surface.py +0 -0
- {sie_server-0.8.3/tests/integration → sie_server-0.9.0/tests/health}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/health/test_saturation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/health/test_worker_id_consistency.py +0 -0
- {sie_server-0.8.3/tests/observability → sie_server-0.9.0/tests/integration}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/integration/test_chat_completions.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/integration/test_grammar_generate.py +0 -0
- {sie_server-0.8.3/tests/processors → sie_server-0.9.0/tests/observability}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/observability/test_generation_diagnostics.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/observability/test_telemetry.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/observability/test_trace_propagation.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/observability/test_tracing.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/observability/test_worker_telemetry_benchmark.py +0 -0
- {sie_server-0.8.3/tests/type_defs → sie_server-0.9.0/tests/processors}/__init__.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_grammar_cache.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_grammar_compile.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_grammar_prewarm.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_streaming_admission.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_streaming_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_tool_call_grammar.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/processors/test_work_class_scheduler.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_adapter_call_loop.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_cli_devices.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_cli_log_level.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_cli_pool.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_decode_item.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_docker_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_documented_model_ids.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_ipc_types_raw_output.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_item_text_size.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_model_yaml_filenames.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_openapi_export.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_parity_run_batch.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_readiness.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_sdk_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_server_process_fixture.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_server_smoke.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_sparse_integration.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/test_stage1d_byte_identity.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/type_defs/test_decode_image.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/type_defs/test_inputs.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/type_defs/test_inputs_json_decode.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/type_defs/test_media_bytes.py +0 -0
- {sie_server-0.8.3 → sie_server-0.9.0}/tests/type_defs/test_types.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: sie-server
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.9.0
|
|
4
4
|
Summary: Search Inference Engine - GPU inference server for search workloads
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
License-File: LICENSE
|
|
@@ -17,6 +17,7 @@ Requires-Dist: gliner<1,>=0.2.26
|
|
|
17
17
|
Requires-Dist: glirel<2,>=1.0
|
|
18
18
|
Requires-Dist: httpx>=0.28.1
|
|
19
19
|
Requires-Dist: huggingface-hub<2,>=0.26
|
|
20
|
+
Requires-Dist: jsonschema<5,>=4.23
|
|
20
21
|
Requires-Dist: loguru<1,>=0.7
|
|
21
22
|
Requires-Dist: msgpack-numpy<1,>=0.4
|
|
22
23
|
Requires-Dist: msgpack<2,>=1.2.1
|
|
@@ -36,6 +37,8 @@ Requires-Dist: pydantic-settings<3,>=2.6
|
|
|
36
37
|
Requires-Dist: pydantic<3,>=2.9
|
|
37
38
|
Requires-Dist: python-multipart<1,>=0.0.20
|
|
38
39
|
Requires-Dist: pyyaml<7,>=6
|
|
40
|
+
Requires-Dist: referencing<1,>=0.36
|
|
41
|
+
Requires-Dist: regex>=2024.11.6
|
|
39
42
|
Requires-Dist: requests<3,>=2.32
|
|
40
43
|
Requires-Dist: rich<14,>=13
|
|
41
44
|
Requires-Dist: safetensors<1,>=0.4
|
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
# SIE Server
|
|
2
|
+
|
|
3
|
+
GPU inference server for embeddings, reranking, and entity extraction.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- Multi-model serving with LRU eviction
|
|
8
|
+
- Token-based dynamic batching
|
|
9
|
+
- Hot reload model configs without restart
|
|
10
|
+
- Unified API: `encode()`, `score()`, `extract()`
|
|
11
|
+
- Prometheus metrics and OpenTelemetry tracing
|
|
12
|
+
- Reactive GPU OOM recovery + proactive idle eviction
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
pip install sie-server
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
`sie-server` ships several model bundles, and a single environment can only hold one
|
|
21
|
+
`transformers` version — install the one your bundle needs:
|
|
22
|
+
|
|
23
|
+
- **Default bundle** (embeddings, reranking, extraction) — verified on `transformers` 4.x:
|
|
24
|
+
|
|
25
|
+
```bash
|
|
26
|
+
pip install sie-server "transformers<5"
|
|
27
|
+
```
|
|
28
|
+
|
|
29
|
+
- **Transformers 5 bundle** (LightOnOCR, GLM-OCR, GLiGuard, the GLiNER2.5-Decide models, and the TopK-Embed-V1
|
|
30
|
+
multi-vector models) — requires `transformers` 5.x, and is served with `-b transformers5`. The GLiNER2.5-Decide
|
|
31
|
+
models also need `gliner2` 2.x. `sie-server` itself asks for `gliner2<2`, which the default bundle's GLiNER2
|
|
32
|
+
models need, so pip reports that conflict when the second command below installs 2.x; the transformers5
|
|
33
|
+
bundle's GLiNER2 models are verified on 2.0.0:
|
|
34
|
+
|
|
35
|
+
```bash
|
|
36
|
+
pip install sie-server "transformers>=5,<6"
|
|
37
|
+
pip install "gliner2==2.0.0" # only for the GLiNER2.5-Decide models
|
|
38
|
+
sie-server serve -b transformers5
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
## Quick Start
|
|
42
|
+
|
|
43
|
+
```bash
|
|
44
|
+
sie-server serve --port 8080 --device cuda:0
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
### TensorRT-LLM generation
|
|
48
|
+
|
|
49
|
+
TensorRT-LLM buffers completion token IDs and emits the final text together only
|
|
50
|
+
after generation finishes and the terminal stream is verified, even with
|
|
51
|
+
`stream=True`. This preserves context-sensitive spacing and punctuation and
|
|
52
|
+
removes matched stop sequences consistently from returned text, completion-token
|
|
53
|
+
usage, and logprobs. Long completions delay the first visible text; existing
|
|
54
|
+
request timeouts still apply. Other adapters are unaffected.
|
|
55
|
+
|
|
56
|
+
### GLiClass usage
|
|
57
|
+
|
|
58
|
+
The shipped GLiClass and Opir profiles read a 1,024-token window
|
|
59
|
+
(`max_sequence_length`) that holds the label prompt, the instruction and
|
|
60
|
+
examples, and the document. That is the default window of the gliclass
|
|
61
|
+
pipeline and of its training script. The encoders use relative (DeBERTa) or
|
|
62
|
+
rotary (ModernBERT) positions, so the window is not a position-table limit.
|
|
63
|
+
|
|
64
|
+
For GLiClass classification, `usage.input_tokens` counts each item's document
|
|
65
|
+
tokens plus the instruction and few-shot example texts sent with the request,
|
|
66
|
+
because the model encodes that text again for every item. Label names,
|
|
67
|
+
including the labels attached to examples, are not counted. With an
|
|
68
|
+
instruction or examples, an item's count is capped at the model's
|
|
69
|
+
`max_sequence_length` minus the label prompt, unless the document count alone
|
|
70
|
+
is already higher. An item refused because its document pushes the labels out
|
|
71
|
+
of the window returns a per-item `INPUT_TOO_LONG` error and counts nothing. A
|
|
72
|
+
request that sends no instruction or examples is counted exactly as before.
|
|
73
|
+
|
|
74
|
+
The models that read the labels before the document (`prompt_first` in the
|
|
75
|
+
checkpoint's config: every shipped GLiClass model except `gliclass-small-v1.0`,
|
|
76
|
+
`gliclass-base-v1.0` and `gliclass-large-v1.0`) cut the document to the room
|
|
77
|
+
the label prompt and instruction leave, and count only the part of the document
|
|
78
|
+
they read, as `truncate_text` would. When the labels leave fewer than 8 tokens
|
|
79
|
+
for the document (a margin for tokenization at the boundary), each item returns
|
|
80
|
+
a per-item `INPUT_TOO_LONG` error and counts nothing, rather than being scored
|
|
81
|
+
with little or none of its document. With `overflow_policy` `truncate_text` or
|
|
82
|
+
`error`, the document is cut to that room or checked against it instead, and a
|
|
83
|
+
request whose labels leave no room at all is refused with `INPUT_TOO_LONG`, as
|
|
84
|
+
before.
|
|
85
|
+
|
|
86
|
+
With `options={"overflow_policy": "error"}`, an item whose document does not
|
|
87
|
+
fit whole next to the labels returns a per-item `INPUT_TOO_LONG` error and
|
|
88
|
+
counts nothing, while the other items succeed. Concurrent requests that share
|
|
89
|
+
labels and options are batched into one model call, so an over-long document
|
|
90
|
+
fails only its own item, never another request's.
|
|
91
|
+
|
|
92
|
+
The instruction and each example text may be at most 2,048 characters, and
|
|
93
|
+
together with the example labels at most 8,192 characters. Up to 32 examples
|
|
94
|
+
are accepted, and they must leave room for the document in the model window.
|
|
95
|
+
Label names are refused when their total length exceeds 16 characters per
|
|
96
|
+
token of the window (16,384 characters for a 1,024-token model), more than any
|
|
97
|
+
label prompt can fit.
|
|
98
|
+
|
|
99
|
+
### GLiClass CUDA graphs
|
|
100
|
+
|
|
101
|
+
A GLiClass forward on a DeBERTa encoder launches about a thousand small GPU
|
|
102
|
+
kernels, so at small batch sizes the CPU that launches them is the bottleneck.
|
|
103
|
+
A CUDA graph records the kernel launches of one input shape once; a replay
|
|
104
|
+
launches them all in one call. Graphs are an operator setting, fixed when the
|
|
105
|
+
model loads, in the model profile:
|
|
106
|
+
|
|
107
|
+
```yaml
|
|
108
|
+
profiles:
|
|
109
|
+
default:
|
|
110
|
+
adapter_options:
|
|
111
|
+
loadtime:
|
|
112
|
+
cuda_graphs: bucketed
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
A graph records the encoder. The scoring head (label features, pooling and
|
|
116
|
+
scorer) runs eagerly on the graph's output with each forward's own number of
|
|
117
|
+
labels, so one graph serves every label count.
|
|
118
|
+
|
|
119
|
+
| Value | Shapes recorded | Scores |
|
|
120
|
+
|--|--|--|
|
|
121
|
+
| `off` (default) | none | eager |
|
|
122
|
+
| `exact` | each (batch size, sequence length) seen twice; the 64 most recently used are kept | bit-identical to eager |
|
|
123
|
+
| `bucketed` | sequence lengths padded up to a multiple of 64 tokens at a 1,024-token window (32 at 512), batch sizes up to a power of two: a fixed set of shapes, all kept | padding moves fp16 probabilities (see below) |
|
|
124
|
+
|
|
125
|
+
A request can send `options={"cuda_graphs": "off"}` to run eagerly on a model
|
|
126
|
+
loaded with graphs. It cannot turn graphs on: any other value is refused.
|
|
127
|
+
|
|
128
|
+
Padding is masked, and padded rows are dropped before scoring, but a longer
|
|
129
|
+
sequence or a larger batch rounds fp16 sums differently, the same kind of
|
|
130
|
+
change batching requests together makes. A small change can flip a near tie
|
|
131
|
+
between the top two labels, and eager execution flips some near ties too,
|
|
132
|
+
depending on which inputs share its batch.
|
|
133
|
+
|
|
134
|
+
**When a speed-up ships enabled.** A shipped GLiClass profile enables a
|
|
135
|
+
speed-up that changes scores, such as `bucketed` graphs, only when, on the
|
|
136
|
+
evaluation sets below, both of the first two conditions hold against eager
|
|
137
|
+
execution, or the third holds against float32:
|
|
138
|
+
|
|
139
|
+
1. no probability moves by more than 0.02;
|
|
140
|
+
2. every answer whose top label changes had an eager top-two margin smaller
|
|
141
|
+
than eager's own regrouping noise, δ_eager: the largest probability change
|
|
142
|
+
eager execution makes on the same inputs when they share a batch with other
|
|
143
|
+
inputs;
|
|
144
|
+
3. against a float32 reference of the same checkpoint, the speed-up is at
|
|
145
|
+
least as accurate as the current path: its largest change against float32
|
|
146
|
+
is no larger than the current path's, and it changes no more top labels (or,
|
|
147
|
+
for scores, reorders no more pairs) against float32 than the current path
|
|
148
|
+
does.
|
|
149
|
+
|
|
150
|
+
A top label that changes under the second condition was a near tie that eager
|
|
151
|
+
fp16 execution already flips under batching. The third condition admits a
|
|
152
|
+
speed-up that rounds differently from the current path, by more than eager's
|
|
153
|
+
own batching noise, but lands no farther from float32. The ModernBERT
|
|
154
|
+
adapters below apply the same rule to their scores.
|
|
155
|
+
|
|
156
|
+
**Evaluation sets.** The main set is the 384 CVE descriptions from
|
|
157
|
+
`examples/typed-decisions`, three questions each, asked one at a time, as
|
|
158
|
+
separate groups and as joint groups, plus 65 long documents: 4,041 answers per
|
|
159
|
+
model. The instruction set asks the same descriptions the three questions with
|
|
160
|
+
short labels and the question as the instruction: 1,152 answers. The rule
|
|
161
|
+
applies to each set on its own. The eager reference sends one input per
|
|
162
|
+
request. δ_eager is the largest change among four eager runs that batch each
|
|
163
|
+
input with others: in pairs, and in groups of eight in dataset order and in two
|
|
164
|
+
shuffled orders. `bucketed` sent the inputs one per request three times (long
|
|
165
|
+
documents twice), so graphs were recorded and then replayed. Measured on an L4
|
|
166
|
+
in fp16 at each model's 1,024-token window; each cell gives the main set, then
|
|
167
|
+
the instruction set:
|
|
168
|
+
|
|
169
|
+
| Model | Largest probability change | δ_eager | Top labels changed (largest eager margin) | Shipped profile |
|
|
170
|
+
|--|--|--|--|--|
|
|
171
|
+
| `gliclass-small-v1.0` | 0.0059 / 0.0034 | 0.0066 / 0.0039 | 2 (0.0000) / none | `bucketed` |
|
|
172
|
+
| `gliclass-base-v1.0` | 0.0054 / 0.0056 | 0.0061 / 0.0061 | none / none | `bucketed` |
|
|
173
|
+
| `gliclass-large-v1.0` | 0.0059 / 0.0088 | 0.0078 / 0.0107 | none / none | `bucketed` |
|
|
174
|
+
| `gliclass-base-v3.0` | 0.0054 / 0.0034 | 0.0063 / 0.0054 | 1 (0.0005) / none | `bucketed` |
|
|
175
|
+
| `gliclass-large-v3.0` | 0.0093 / 0.0107 | 0.0088 / 0.0122 | 2 (0.0020) / none | `bucketed` |
|
|
176
|
+
| `gliclass-instruct-base-v1.0` | 0.0066 / 0.0063 | 0.0095 / 0.0063 | 4 (0.0056) / none | `bucketed` |
|
|
177
|
+
| `gliclass-instruct-large-v1.0` | 0.0088 / 0.0039 | 0.0125 / 0.0054 | 7 (0.0017) / 1 (0.0006) | `bucketed` |
|
|
178
|
+
| `opir-multitask-large-v1.0` | 0.0144 / 0.0146 | 0.0247 / 0.0225 | none / none | `bucketed` |
|
|
179
|
+
| `opir-multitask-multilang-v1.0` | 0.0756 / 0.0093 | 0.0848 / 0.0122 | 15 (0.0260) / none | `off` |
|
|
180
|
+
| `gliclass-multilang-mini` | 0.0347 / 0.0479 | 0.0537 / 0.0376 | 6 (0.0056) / 3 (0.0618) | `off` |
|
|
181
|
+
|
|
182
|
+
A top label that changed did so in every pass; the table counts each answer
|
|
183
|
+
once.
|
|
184
|
+
|
|
185
|
+
Requests of several items pad their batch as well (3 items to 4, 5 to 8). Asked
|
|
186
|
+
in 3- and 5-item requests and compared with eager execution of the same
|
|
187
|
+
requests, the eight models that ship with graphs moved no probability by more
|
|
188
|
+
than 0.0190 (`opir-multitask-large-v1.0`) and 0.0115 for every other model,
|
|
189
|
+
and every top label that changed had an eager margin below the model's
|
|
190
|
+
δ_eager.
|
|
191
|
+
|
|
192
|
+
`exact` changed nothing. A forward whose batch size is already a bucket (one
|
|
193
|
+
item, for example) scores exactly as it did before batches were padded.
|
|
194
|
+
|
|
195
|
+
The DeBERTa-v3 models meet the rule and their shipped profiles load with
|
|
196
|
+
`bucketed` graphs. The two mDeBERTa models, `gliclass-multilang-mini` and
|
|
197
|
+
`opir-multitask-multilang-v1.0`, moved probabilities by more than 0.02 and
|
|
198
|
+
load with `off`. To run a model eagerly, set `cuda_graphs: off` in its
|
|
199
|
+
profile, or send `options={"cuda_graphs": "off"}` with a request.
|
|
200
|
+
|
|
201
|
+
Graphs apply on CUDA to the DeBERTa-based GLiClass models: the v1.0 models,
|
|
202
|
+
`gliclass-base-v3.0` and `gliclass-large-v3.0`, the base and large instruct
|
|
203
|
+
models, the Opir multitask models and `gliclass-multilang-mini`. The
|
|
204
|
+
ModernBERT-based models (the edge models, `gliclass-multilang-edge`, the Opir
|
|
205
|
+
edge models and `gliclass-modern-{base,large}-v3.0`), CPU and MPS run without
|
|
206
|
+
graphs with any value, and the load logs a warning. On CUDA, the
|
|
207
|
+
ModernBERT-based models can run their encoder on the flash-attention path
|
|
208
|
+
below instead.
|
|
209
|
+
|
|
210
|
+
**Shapes.** A graph holds at most 2,048 tokens (batch size times padded
|
|
211
|
+
length), or 1,024 for encoders wider than 768 such as DeBERTa-v3-large.
|
|
212
|
+
Larger forwards are bound by the GPU rather than by kernel launches and run
|
|
213
|
+
eagerly: on an L4, a `gliclass-large-v1.0` forward stops gaining from a graph
|
|
214
|
+
at about 1,000 tokens, a `gliclass-base-v1.0` forward at about 2,000. In
|
|
215
|
+
`bucketed` mode at the 1,024-token window that leaves a fixed set of shapes,
|
|
216
|
+
33 for the DeBERTa-v3-large models and 52 for the base and small ones (52 and
|
|
217
|
+
71 at a 512-token window), and the model keeps a graph for every one. Once
|
|
218
|
+
they are recorded, every forward under the token bound replays a graph,
|
|
219
|
+
whatever mix of label counts, batch sizes and lengths the traffic has, and no
|
|
220
|
+
request's shapes push out another's.
|
|
221
|
+
|
|
222
|
+
Nothing is recorded at load. A shape is recorded the first time a request
|
|
223
|
+
needs it (the second time in `exact` mode), and the new graph's first replay
|
|
224
|
+
answers that request, which takes 52 to 66 ms against 43 ms for an eager
|
|
225
|
+
forward on `gliclass-large-v1.0` on an L4. Recording is rationed (see below),
|
|
226
|
+
so traffic that needs every shape has them all recorded within about two
|
|
227
|
+
minutes.
|
|
228
|
+
|
|
229
|
+
**Memory, and other models on the same GPU.** Graph memory counts as device
|
|
230
|
+
memory in use, but it is not attributed to the model: under memory pressure
|
|
231
|
+
the server evicts whole models, least recently used first, which may be
|
|
232
|
+
another model. A model's graphs share one memory pool and write their output
|
|
233
|
+
into one shared buffer, and the driver keeps a copy of each graph: about 7 MB
|
|
234
|
+
for the `gliclass-large-v1.0` encoder. The runner adds up the device memory
|
|
235
|
+
its graphs hold (what each recording took, plus the tables and buffers they
|
|
236
|
+
read) against 4% of the device's memory (900 MB on an L4). On an L4, at the
|
|
237
|
+
1,024-token window, all of a model's `bucketed` shapes took 551 to 571 MB for
|
|
238
|
+
the large GLiClass models, 677 MB for `opir-multitask-large-v1.0`, 761 to
|
|
239
|
+
767 MB for the base models and 653 MB for `gliclass-small-v1.0`, plus about
|
|
240
|
+
150 MB cached on the recording stream (its cuBLAS workspace and one warm-up
|
|
241
|
+
row). Recorded while serving mixed traffic, the same shapes can take more, and
|
|
242
|
+
at the 1,024-token window the budget can fill with one to three shapes left
|
|
243
|
+
unrecorded; those shapes run eagerly. On a smaller GPU, where the shapes do not
|
|
244
|
+
all fit, recording stops at the budget and the graphs already recorded keep
|
|
245
|
+
replaying; the other shapes run eagerly. In `exact` mode, whose shapes are
|
|
246
|
+
unbounded, a model past its budget drops every graph, returns their memory to
|
|
247
|
+
the device and records again.
|
|
248
|
+
Graphs are also released when the model unloads, and when one of its forwards
|
|
249
|
+
runs out of memory.
|
|
250
|
+
|
|
251
|
+
While a graph records, PyTorch's caching allocator does not free cached blocks
|
|
252
|
+
to satisfy other allocations, so another model on the same GPU that needs
|
|
253
|
+
memory in that window (about one forward) can run out of memory where it
|
|
254
|
+
otherwise would not. Recording is kept rare to limit this: one recording at a
|
|
255
|
+
time in the process, none while less than a tenth of the device's memory is
|
|
256
|
+
free, and per model a budget of 16 recordings that refills at one every 2
|
|
257
|
+
seconds, so a model records at most 16 graphs in quick succession, one after
|
|
258
|
+
another, then about one every 2 seconds. If recording a graph runs out of
|
|
259
|
+
memory, the request still gets its eager answer; the model drops its graphs and
|
|
260
|
+
records nothing for a minute. If the new graph's first replay runs out of
|
|
261
|
+
memory, the model also drops its graphs and records nothing for a minute, but
|
|
262
|
+
the request fails with that error, as an eager forward that runs out of memory
|
|
263
|
+
does.
|
|
264
|
+
|
|
265
|
+
Both limits are approximate. The free-memory check reads the device once,
|
|
266
|
+
before recording, so a model loading at the same moment can still meet one
|
|
267
|
+
recording. The memory budget is checked after each recording, so a model's
|
|
268
|
+
graphs can exceed it by one recording. On a GPU shared with other models,
|
|
269
|
+
leave memory headroom, or enable graphs only where the model has the GPU to
|
|
270
|
+
itself. Usage and billing do not change.
|
|
271
|
+
|
|
272
|
+
**Failures and counters.** A shape that fails to record for a reason other
|
|
273
|
+
than memory runs eagerly from then on, and the failure is logged as a warning
|
|
274
|
+
with its traceback. After three such shapes, the model runs eagerly for the
|
|
275
|
+
rest of the process, logged as an error. The scoring head is not part of that
|
|
276
|
+
count: it reads the request's own inputs, so an error there fails that request
|
|
277
|
+
as it would in an eager forward. Each model counts the forwards it
|
|
278
|
+
replays, records, and runs eagerly (by reason: past the token bound, recording
|
|
279
|
+
paused, budget full, and so on), and logs the counts every ten minutes while it
|
|
280
|
+
serves requests.
|
|
281
|
+
|
|
282
|
+
### GLiClass ModernBERT flash attention
|
|
283
|
+
|
|
284
|
+
The GLiClass models built on ModernBERT or mmBERT (`gliclass-edge-v3.0`,
|
|
285
|
+
`gliclass-instruct-edge-v1.0`, `gliclass-multilang-edge`, `opir-edge-v1.0`,
|
|
286
|
+
`opir-edge-multilang-v1.0`, `gliclass-modern-base-v3.0` and
|
|
287
|
+
`gliclass-modern-large-v3.0`) can run their encoder through the
|
|
288
|
+
flash-attention layer stack that SIE's ModernBERT embedding, late-interaction,
|
|
289
|
+
cross-encoder and Laya adapters share. The rows of a forward are packed into
|
|
290
|
+
one token stream without padding, each row attends only to itself through
|
|
291
|
+
`flash_attn_varlen_func`, and the RoPE tables are built once, at load. The
|
|
292
|
+
gliclass scoring head (label-token features, pooling, projections and scorer)
|
|
293
|
+
runs unchanged on the encoder output. Label groups, instructions, examples,
|
|
294
|
+
overflow policies, usage and per-item errors behave as before. It is an
|
|
295
|
+
operator setting:
|
|
296
|
+
|
|
297
|
+
```yaml
|
|
298
|
+
profiles:
|
|
299
|
+
default:
|
|
300
|
+
adapter_options:
|
|
301
|
+
loadtime:
|
|
302
|
+
modernbert_flash: true
|
|
303
|
+
```
|
|
304
|
+
|
|
305
|
+
`modernbert_flash: single-label` limits it to single-label requests; a
|
|
306
|
+
request with `"classification_type": "multi-label"` then runs the gliclass
|
|
307
|
+
forward. It applies to float16 and bfloat16 weights on CUDA GPUs with flash-attn
|
|
308
|
+
(Ampere or newer). On CPU, MPS, older GPUs or without flash-attn, the model
|
|
309
|
+
runs the gliclass forward as before, and the load logs why. DeBERTa-based
|
|
310
|
+
models ignore the setting. If the flash path fails with an error other than
|
|
311
|
+
running out of memory, the gliclass forward answers that request, and the
|
|
312
|
+
model logs the error and stays on the gliclass forward until it is reloaded.
|
|
313
|
+
The shipped profiles enable it where the scores
|
|
314
|
+
met the margin rule below: for every request on `gliclass-modern-base-v3.0`,
|
|
315
|
+
and for single-label requests on `gliclass-multilang-edge` and
|
|
316
|
+
`gliclass-modern-large-v3.0`. The other four models keep the gliclass forward.
|
|
317
|
+
|
|
318
|
+
On a GPU with flash-attn, the gliclass forward already runs the Hugging Face
|
|
319
|
+
ModernBERT flash-attention path. That path unpads and repads every batch,
|
|
320
|
+
rotates queries and keys with one fused kernel per layer, and runs its MLPs
|
|
321
|
+
through `torch.compile`. Classification forwards are small, so the host
|
|
322
|
+
launching kernels, not the GPU, bounds most of them, and the flash path needs
|
|
323
|
+
less host time per forward. On an L4, a one-item `gliclass-edge-v3.0` forward
|
|
324
|
+
keeps the GPU busy for 2.4 ms of its 12.7 ms on the gliclass forward, and for
|
|
325
|
+
0.85 ms of 8.8 ms on the flash path. The flash path runs the rotation and the
|
|
326
|
+
MLP activation as several separate kernels, though, so larger forwards, which
|
|
327
|
+
the GPU bounds, are faster on the gliclass forward. A forward with more packed
|
|
328
|
+
tokens than a bound therefore runs the gliclass forward: 4,096 tokens for
|
|
329
|
+
encoders up to 384 wide, 2,048 up to 768, and 1,024 wider. On an L4,
|
|
330
|
+
`gliclass-modern-large-v3.0` is 1.13x faster on the flash path at 1,024
|
|
331
|
+
packed tokens and 0.90x at 1,289; `gliclass-modern-base-v3.0` is 1.27x at
|
|
332
|
+
2,048 and 0.96x at 2,560.
|
|
333
|
+
|
|
334
|
+
Latency is the median of 400 one-item requests on the CVE descriptions from
|
|
335
|
+
`examples/typed-decisions`: one question with eight labels, or three questions
|
|
336
|
+
as separate label groups. Each throughput request holds 64 items, one in eight
|
|
337
|
+
of them a long document, and one question. Both paths ran in one process on an
|
|
338
|
+
L4, from the gliclass forward to the flash path:
|
|
339
|
+
|
|
340
|
+
| Model | One item, one question | One item, three separate groups | 64 items per request |
|
|
341
|
+
|--|--|--|--|
|
|
342
|
+
| `gliclass-edge-v3.0` | 13.6 -> 11.1 ms | 15.1 -> 12.6 ms | 351 -> 397 items/s |
|
|
343
|
+
| `gliclass-instruct-edge-v1.0` | 14.2 -> 11.9 ms | 15.4 -> 13.1 ms | 334 -> 376 items/s |
|
|
344
|
+
| `gliclass-multilang-edge` | 25.8 -> 20.6 ms | 26.8 -> 21.6 ms | 235 -> 279 items/s |
|
|
345
|
+
| `opir-edge-v1.0` | 13.8 -> 11.3 ms | 14.9 -> 12.4 ms | 287 -> 313 items/s |
|
|
346
|
+
| `opir-edge-multilang-v1.0` | 28.4 -> 22.6 ms | 29.7 -> 24.0 ms | 207 -> 241 items/s |
|
|
347
|
+
| `gliclass-modern-base-v3.0` | 25.3 -> 19.9 ms | 26.7 -> 21.3 ms | 229 -> 253 items/s |
|
|
348
|
+
| `gliclass-modern-large-v3.0` | 32.3 -> 25.1 ms | 34.2 -> 27.1 ms | 173 -> 173 items/s |
|
|
349
|
+
|
|
350
|
+
**Scores.** The two paths round float16 sums differently. We compared them on
|
|
351
|
+
the 384 CVE descriptions from `examples/typed-decisions`, three questions
|
|
352
|
+
each: asked one at a time, with an instruction, with a few-shot example, as
|
|
353
|
+
separate and as joint groups, and in requests of eight, plus 65 long documents
|
|
354
|
+
under `truncate_text`. That is 7,497 answers per model. A shipped profile
|
|
355
|
+
enables the flash path only when the model meets the margin rule against the
|
|
356
|
+
gliclass forward: (i) no probability moves by more than 0.02, and (ii) every
|
|
357
|
+
answer whose top label changes had a top-two margin, on the gliclass forward,
|
|
358
|
+
smaller than the gliclass forward's own batching noise. The batching noise is
|
|
359
|
+
the largest probability change the gliclass forward shows between an item sent
|
|
360
|
+
alone and the same item in a request of eight with the same options, over the
|
|
361
|
+
same kinds of requests.
|
|
362
|
+
|
|
363
|
+
| Model | Largest probability change | Top label changed | Largest margin of a changed answer | Batching noise | Shipped profile |
|
|
364
|
+
|--|--|--|--|--|--|
|
|
365
|
+
| `gliclass-multilang-edge` | 0.015 | 18 | 0.0046 | 0.016 | on (single-label) |
|
|
366
|
+
| `gliclass-modern-base-v3.0` | 0.010 | 22 | 0.0029 | 0.0061 | on |
|
|
367
|
+
| `gliclass-modern-large-v3.0` | 0.015 | 4 | 0.0039 | 0.014 | on (single-label) |
|
|
368
|
+
| `gliclass-edge-v3.0` | 0.016 | 24 | 0.0098 | 0.0066 | off (2 answers over the noise) |
|
|
369
|
+
| `gliclass-instruct-edge-v1.0` | 0.012 | 5 | 0.0077 | 0.0062 | off (1 answer over the noise) |
|
|
370
|
+
| `opir-edge-v1.0` | 0.018 | 12 | 0.019 | 0.011 | off |
|
|
371
|
+
| `opir-edge-multilang-v1.0` | 0.037 | 30 | 0.028 | 0.032 | off |
|
|
372
|
+
|
|
373
|
+
Multi-label scores (independent sigmoids) were checked the same way, with the
|
|
374
|
+
rule read for the 0.5 threshold at which a multi-label group selects its
|
|
375
|
+
labels: (i) no score moves by more than 0.02, and (ii) every score that
|
|
376
|
+
crosses 0.5 was closer to 0.5 than the gliclass forward's own batching noise.
|
|
377
|
+
Each request kind was sent one item at a time and eight at a time, 59,220
|
|
378
|
+
scores per model:
|
|
379
|
+
|
|
380
|
+
| Model | Largest score change | Scores crossing 0.5 (largest distance from 0.5) | Batching noise | Multi-label |
|
|
381
|
+
|--|--|--|--|--|
|
|
382
|
+
| `gliclass-modern-base-v3.0` | 0.0088 | 18 (0.0020) | 0.0059 | flash |
|
|
383
|
+
| `gliclass-modern-large-v3.0` | 0.024 (joint groups) | 23 (0.0044) | 0.039 | gliclass forward |
|
|
384
|
+
| `gliclass-multilang-edge` | 0.039 (few-shot examples) | 18 (0.0073) | 0.032 | gliclass forward |
|
|
385
|
+
|
|
386
|
+
Usage and per-item errors were identical in every answer. Against the same
|
|
387
|
+
checkpoints in float32, the flash path is as accurate as the gliclass forward:
|
|
388
|
+
over the seven models, the gliclass forward's top label differs from float32
|
|
389
|
+
in 128 answers, the flash path's in 126. To run a model on the other path, set
|
|
390
|
+
`modernbert_flash` in its profile.
|
|
391
|
+
|
|
392
|
+
### GLiNER2.5-Decide usage and limits
|
|
393
|
+
|
|
394
|
+
The GLiNER2.5-Decide models (`fastino/GLiNER2.5-Decide`, `GLiNER2.5-multi-Decide`,
|
|
395
|
+
`GLiNER2.5-Decide-1B`) run on `gliner2` 2.x, which the transformers5 bundle
|
|
396
|
+
pins (the `transformers5` image, or a native install as described above). Each
|
|
397
|
+
item is one encoder row: every question's (or label group's) name,
|
|
398
|
+
instruction, and labels, then the document. One forward pass answers them all,
|
|
399
|
+
so the questions of a request are not independent: adding or changing one can
|
|
400
|
+
change another's probabilities and score. `usage.input_tokens` counts the
|
|
401
|
+
document tokens the model reads plus the tokens of the instructions and label
|
|
402
|
+
descriptions (criteria) sent with the item, as Laya and GLiClass count
|
|
403
|
+
instructions and criteria. Question ids, group names, and label names are not
|
|
404
|
+
counted, and an item that returns an error counts nothing.
|
|
405
|
+
|
|
406
|
+
A request takes at most 64 questions or label groups, 64 options per question,
|
|
407
|
+
and 1,024 options in total. Question ids and group names may have 128
|
|
408
|
+
characters, labels 256, and each instruction or description 2,048, with 65,536
|
|
409
|
+
characters in all. Strings that contain one of the model's prompt markers
|
|
410
|
+
(`[L]`, `[P]`, `[DESCRIPTION]`, ...) are refused. The questions may take at most
|
|
411
|
+
512 tokens, or half the model's window when that is less: 256 of
|
|
412
|
+
`GLiNER2.5-Decide`'s 512 tokens, 512 of the others' 2,048. This bounds the
|
|
413
|
+
uncounted question and label tokens read with each item; a request needing more
|
|
414
|
+
fails with `INPUT_TOO_LONG`. The
|
|
415
|
+
document is read up to the whole words that fit in the rest of the window; a
|
|
416
|
+
word longer than 4,096 characters, text past 64 characters per token of the
|
|
417
|
+
window, or 4 words per token of the window also ends what is read. Words are
|
|
418
|
+
split as gliner2 splits them, in linear time. A conversation (a list state) is
|
|
419
|
+
read from its newest turn back; a run of more than 4,096 characters without a
|
|
420
|
+
space is read only in its last 4,096 characters, and reading stops there. An item none of whose words fits, or that does
|
|
421
|
+
not fit whole with `options={"overflow_policy": "error"}`, returns a per-item
|
|
422
|
+
`INPUT_TOO_LONG` error while the other items succeed.
|
|
423
|
+
|
|
424
|
+
### ModernBERT CUDA graphs
|
|
425
|
+
|
|
426
|
+
The ModernBERT flash-attention adapters, for dense embeddings
|
|
427
|
+
(`modernbert_flash`), late interaction (`colbert_modernbert_flash`) and
|
|
428
|
+
reranking (`modernbert_flash_cross_encoder`), run a packed, unpadded token
|
|
429
|
+
stream through hundreds of small kernels per forward (about 500 for a
|
|
430
|
+
22-layer encoder). At the sizes of a query
|
|
431
|
+
or a few short documents, the host that launches those kernels is the
|
|
432
|
+
bottleneck: on an L4, a one-query forward of `GTE-ModernColBERT-v1` keeps the
|
|
433
|
+
GPU busy for about 2 ms of its 12. A CUDA graph records the launches of one
|
|
434
|
+
shape once and replays them in one call. Graphs are an operator setting,
|
|
435
|
+
fixed when the model loads:
|
|
436
|
+
|
|
437
|
+
```yaml
|
|
438
|
+
profiles:
|
|
439
|
+
default:
|
|
440
|
+
adapter_options:
|
|
441
|
+
loadtime:
|
|
442
|
+
cuda_graphs: bucketed
|
|
443
|
+
```
|
|
444
|
+
|
|
445
|
+
`off` (the default) runs every forward eagerly. With `bucketed`, a graph
|
|
446
|
+
records the encoder (token embeddings, layers and final norm) for one packed
|
|
447
|
+
shape: the token count padded up to 64, 128, 192, 256, 384, 512, 768, 1,024
|
|
448
|
+
tokens and so on, a fixed number of sequence slots, and `max_seqlen` 512 (or
|
|
449
|
+
the bucket, when a row is longer). Padding tokens belong to no sequence, so
|
|
450
|
+
real rows attend only to their own tokens, as eagerly. The adapter's head
|
|
451
|
+
(pooling, the late-interaction projection or the reranking head) runs
|
|
452
|
+
eagerly on the real rows. Forwards past a token bound run eagerly: 2,048
|
|
453
|
+
tokens for encoders up to 384 wide, 1,024 up to 768, 512 wider. Past that,
|
|
454
|
+
the GPU rather than kernel launches bounds a forward, and padding to the
|
|
455
|
+
bucket costs more than a graph saves. A model with LoRA adapters loaded runs
|
|
456
|
+
eagerly, because its forward depends on which adapter is active.
|
|
457
|
+
|
|
458
|
+
Speed on an NVIDIA L4 with 8 vCPUs, eager and graphs in one process with
|
|
459
|
+
their requests interleaved (median latency, and items per second over the
|
|
460
|
+
run). SciFact queries and abstracts; documents are cut at the profile's
|
|
461
|
+
length (300 tokens for `GTE-ModernColBERT-v1`, 512 for
|
|
462
|
+
`mxbai-edge-colbert-v0-32m`):
|
|
463
|
+
|
|
464
|
+
| Model | 1 query | 8 queries | 1 document | Larger requests |
|
|
465
|
+
|--|--|--|--|--|
|
|
466
|
+
| `GTE-ModernColBERT-v1` | 18.1 → 2.6 ms | 360 → 1,857/s | 22.3 → 5.1 ms | within 2% |
|
|
467
|
+
| `gte-modernbert-base` | 17.5 → 2.4 ms | 378 → 2,414/s | 21.4 → 4.3 ms | within 1% |
|
|
468
|
+
| `mxbai-edge-colbert-v0-32m` | 9.2 → 1.1 ms | 658 → 3,345/s | 12.1 → 2.8 ms | within 2% |
|
|
469
|
+
| `granite-embedding-small-english-r2` | 10.4 → 1.2 ms | 581 → 4,551/s | 14.0 → 2.4 ms | within 2% |
|
|
470
|
+
| `gte-reranker-modernbert-base` | 1 pair: 17.3 → 4.3 ms | 8 short pairs: 351 → 1,307/s | | within 2% |
|
|
471
|
+
|
|
472
|
+
"Larger requests" are 8 and 64 abstracts, 32 items of mixed lengths, and 8
|
|
473
|
+
or 32 (query, abstract) pairs: about 2,000 to 16,000 packed tokens, mostly
|
|
474
|
+
past the token bound. The eager side depends on the host's CPU: on another L4
|
|
475
|
+
host with faster cores, a one-query `GTE-ModernColBERT-v1` forward took
|
|
476
|
+
12.2 ms eagerly and 2.5 ms from a graph.
|
|
477
|
+
|
|
478
|
+
Padding changes how many rows a matrix multiply sees, so outputs can move by
|
|
479
|
+
floating-point rounding, as batching requests together does. We compared
|
|
480
|
+
graphs with eager forwards on SciFact: the 300 test queries, 500 abstracts
|
|
481
|
+
(every one relevant to those queries, and random others) and, for the
|
|
482
|
+
reranker, 20 abstracts per query. Items were encoded one per request, on
|
|
483
|
+
both paths, and the eager path was also run with 8 queries or 4 abstracts
|
|
484
|
+
(3 pairs) per request, which is its own batching noise. Scores are query–
|
|
485
|
+
document dot products for dense models and MaxSim for late interaction:
|
|
486
|
+
|
|
487
|
+
| Model | Graphs: largest score change | Graphs: pairs reordered in a top 10 (largest eager margin of any reordered pair) | Eager batching: largest score change (largest margin of a reordered pair) |
|
|
488
|
+
|--|--|--|--|
|
|
489
|
+
| `GTE-ModernColBERT-v1` | none (bit-identical) | none | 0.013 (0.018) |
|
|
490
|
+
| `mxbai-edge-colbert-v0-32m` | none (bit-identical) | none | 0.13 (0.23) |
|
|
491
|
+
| `gte-modernbert-base` | 0.006 | 12 (0.008) | 0.008 (0.012) |
|
|
492
|
+
| `granite-embedding-small-english-r2` | 0.004 | 16 (0.005) | 0.015 (0.014) |
|
|
493
|
+
| `gte-reranker-modernbert-base` | 0.015 | 21 (0.006) | 0.025 (0.019) |
|
|
494
|
+
| `modernbert-embed-base` | 0.004 | 10 (0.004) | 0.005 (0.006) |
|
|
495
|
+
| `granite-embedding-97m-multilingual-r2` | 0.006 | 57 (0.008) | 0.015 (0.015) |
|
|
496
|
+
| `Reason-ModernColBERT` | 0.007 | 1 (0.007) | 0.022 (0.021) |
|
|
497
|
+
| `mLateOn` | 0.020 | 17 (0.029) | 0.037 (0.046) |
|
|
498
|
+
| `Iso-ModernColBERT` | none (bit-identical) | none | 0.20 (0.21) |
|
|
499
|
+
|
|
500
|
+
Graphs meet the rule a GLiClass speed-up ships under (see "When a speed-up
|
|
501
|
+
ships enabled" above), read for scores instead of label probabilities: no
|
|
502
|
+
score moves by more than 0.02 (for MaxSim, which sums over a query's tokens,
|
|
503
|
+
0.02 per query token), and every pair that graphs reorder had an eager margin
|
|
504
|
+
smaller than the eager path's own batching noise, the largest score change
|
|
505
|
+
eager execution makes when the same items share a request with others. For
|
|
506
|
+
embeddings, the rule reads on the retrieval order the vectors give, and the
|
|
507
|
+
vectors stay as close to eager as eager batching keeps them (cosine at least
|
|
508
|
+
0.9997 for the dense models). Retrieval quality on the
|
|
509
|
+
full SciFact corpus (5,183 abstracts, nDCG@10, the same requests on both
|
|
510
|
+
paths) did not change beyond that noise: `gte-modernbert-base` 0.7632 eager
|
|
511
|
+
and 0.7644 with graphs, `GTE-ModernColBERT-v1` 0.7573 and 0.7558, and
|
|
512
|
+
`gte-reranker-modernbert-base` reranking the top 20 of `gte-modernbert-base`
|
|
513
|
+
0.7760 and 0.7767.
|
|
514
|
+
|
|
515
|
+
The eager batching noise is largest for `mxbai-edge-colbert-v0-32m` and
|
|
516
|
+
`Iso-ModernColBERT` because their profiles compute in bfloat16, whose
|
|
517
|
+
significand is three bits shorter than float16's (the other late-interaction
|
|
518
|
+
models compute in float16). With more packed rows, cuBLAS picks a different
|
|
519
|
+
matrix-multiply kernel; in the forward we traced, the first outputs to differ,
|
|
520
|
+
by one unit in the last place, were those of the first layer's attention output
|
|
521
|
+
projection. A few document tokens amplify that rounding: punctuation, `[SEP]`
|
|
522
|
+
or the `[D] ` marker, close to where the encoder turns a token into an attention
|
|
523
|
+
sink. The token builds a large activation in one forward and not in the other,
|
|
524
|
+
so its vector turns. Per-token cosine to the one-item forward went as low as
|
|
525
|
+
0.82 for `Iso-ModernColBERT` on the abstracts above, while more than 99.8% of
|
|
526
|
+
tokens stayed above 0.999 on a sample of mixed lengths. The reference
|
|
527
|
+
implementation behaves the same way. PyLate in bfloat16 moves such tokens as
|
|
528
|
+
much between a document encoded alone and in a batch; in float32 neither PyLate
|
|
529
|
+
nor the Hugging Face forward moves them. In float32 on the CPU, this adapter's
|
|
530
|
+
packed forward gives each item the same vectors alone and in any batch, equal
|
|
531
|
+
to the Hugging Face forward (`tests/adapters/test_colbert_modernbert_flash_batch_invariance.py`).
|
|
532
|
+
|
|
533
|
+
`Iso-ModernColBERT` serves the recipe its checkpoint publishes for PyLate, as
|
|
534
|
+
`GTE-ModernColBERT-v1` does:
|
|
535
|
+
|
|
536
|
+
- `[Q] ` and `[D] ` markers;
|
|
537
|
+
- queries cut at 32 tokens and documents at 300 (its `long_context` profile
|
|
538
|
+
keeps 8,192);
|
|
539
|
+
- the punctuation skiplist, which drops the document vectors that training
|
|
540
|
+
never scores.
|
|
541
|
+
|
|
542
|
+
Its row above was measured with that recipe. With it, SciFact nDCG@10 rose from
|
|
543
|
+
0.7326 to 0.7573 (PyLate: 0.7574 in bfloat16, 0.7584 in float32).
|
|
544
|
+
|
|
545
|
+
The shipped profiles of every model on these adapters load with `bucketed`
|
|
546
|
+
graphs: `GTE-ModernColBERT-v1`, `Reason-ModernColBERT`, `mLateOn`,
|
|
547
|
+
`Iso-ModernColBERT`, `mxbai-edge-colbert-v0-32m`, `gte-modernbert-base`,
|
|
548
|
+
`modernbert-embed-base`, `granite-embedding-small-english-r2`,
|
|
549
|
+
`granite-embedding-97m-multilingual-r2` and `gte-reranker-modernbert-base`.
|
|
550
|
+
To run one of them eagerly, set `cuda_graphs: off` in its profile. A Candle
|
|
551
|
+
profile of these models sets its own load-time options, so it does not
|
|
552
|
+
inherit the setting.
|
|
553
|
+
|
|
554
|
+
A graph is recorded the first time a request needs its shape (the dense
|
|
555
|
+
adapter's warm-up records the smallest at load), and that request is answered
|
|
556
|
+
by its first replay. Recording follows the rules of the GLiClass graphs above,
|
|
557
|
+
and shares their process-wide limits: one recording at a time in the process,
|
|
558
|
+
none while less than a tenth of the device's memory is free, a budget of 16
|
|
559
|
+
recordings per model that refills at one every 2 seconds (16 in quick
|
|
560
|
+
succession, one after another, then about one every 2 seconds), and a
|
|
561
|
+
model's graphs within 4% of the device's memory (900 MB on an L4). A model's graphs, which share
|
|
562
|
+
one memory pool and one output buffer, held 40 to 105 MB on an L4 once every
|
|
563
|
+
shape its traffic needed was recorded. A recording that runs out of memory
|
|
564
|
+
drops the model's graphs and pauses recording for a minute; a shape that
|
|
565
|
+
fails to record for another reason runs eagerly from then on, and after
|
|
566
|
+
three such shapes the model runs eagerly for the rest of the process. Each
|
|
567
|
+
model counts the forwards it replays, records and runs eagerly (by reason),
|
|
568
|
+
and logs the counts every ten minutes while it serves requests.
|
|
569
|
+
|
|
570
|
+
**Fused rotary embedding.** The dense and late-interaction adapters rotate
|
|
571
|
+
queries and keys with about ten small PyTorch kernels per layer. With
|
|
572
|
+
`adapter_options.loadtime.fused_rope: true`, one Triton kernel per layer does
|
|
573
|
+
it instead, with flash-attn's rotary arithmetic (float32, rounded once, as
|
|
574
|
+
the Hugging Face flash-attention forward rotates): on an L4, 26.5 µs instead
|
|
575
|
+
of 178 µs per layer at 2,048 tokens. For the models below that is 1.13-1.18x
|
|
576
|
+
the speed of one-query requests (with CUDA graphs on both sides) and
|
|
577
|
+
1.17-1.22x the throughput of 64-abstract requests. Outputs change by rounding, more than the eager path's own batching
|
|
578
|
+
noise, so the option ships under the third condition of the rule above.
|
|
579
|
+
Against a float32 reference of each checkpoint, on the SciFact sets of the
|
|
580
|
+
graphs comparison, it is at least as accurate as the unfused rotation for
|
|
581
|
+
`modernbert-embed-base`, `Reason-ModernColBERT` and `mLateOn`, and their
|
|
582
|
+
profiles enable it. The other models load without it.
|
|
583
|
+
|
|
584
|
+
## Configuration
|
|
585
|
+
|
|
586
|
+
`sie-server` reads its config from `SIE_*` environment variables (Pydantic
|
|
587
|
+
`BaseSettings`). Common knobs:
|
|
588
|
+
|
|
589
|
+
### Memory & OOM resilience
|
|
590
|
+
|
|
591
|
+
| Env var | Default | Effect |
|
|
592
|
+
|--|--|--|
|
|
593
|
+
| `SIE_MEMORY_PRESSURE_THRESHOLD_PERCENT` | `95` | VRAM utilisation that triggers reactive LRU eviction by the pressure monitor. |
|
|
594
|
+
| `SIE_OOM_RECOVERY__ENABLED` | `true` | Master switch for reactive OOM recovery in the worker dispatch path (`cache_clear → evict_lru → split_batch`). |
|
|
595
|
+
| `SIE_OOM_RECOVERY__STRATEGY` | `cache_clear,evict_lru,split_batch` | Ordered recovery actions. Earlier actions tried first. |
|
|
596
|
+
| `SIE_OOM_RECOVERY__MAX_SPLIT_DEPTH` | `4` | Cap on recursive batch halving (≤16 sub-batches). |
|
|
597
|
+
| `SIE_OOM_RECOVERY__EVICTION_LOCK_TIMEOUT_S` | `5.0` | Soft timeout when waiting for the registry's load-lock during recovery eviction. |
|
|
598
|
+
| `SIE_OOM_RECOVERY__RETRY_AFTER_S` | `5` | `Retry-After` header value on `RESOURCE_EXHAUSTED` responses. |
|
|
599
|
+
| `SIE_DISABLE_OOM_RECOVERY` | unset | Convenience kill switch (`1`/`true`/`yes`) for incident triage. Wins over `SIE_OOM_RECOVERY__ENABLED=true`. |
|
|
600
|
+
| `SIE_IDLE_EVICT_S` | unset (disabled) | Unload models that have been idle longer than this (seconds). Additive to the pressure monitor; helps free cold weights before pressure builds. |
|
|
601
|
+
| `SIE_OOM_NAK_DELAY_S` | `10.0` | Queue-mode only. NAK delay (seconds) for `RESOURCE_EXHAUSTED` work items so JetStream redelivers them after memory pressure has had a chance to clear. |
|
|
602
|
+
|
|
603
|
+
When OOM recovery is exhausted on a request, the server returns
|
|
604
|
+
`HTTP 503 RESOURCE_EXHAUSTED` with `Retry-After`. The Python SDK
|
|
605
|
+
auto-retries; see `packages/sie_sdk/README.md` for client-side controls.
|
|
606
|
+
|
|
607
|
+
### Batching & request handling
|
|
608
|
+
|
|
609
|
+
| Env var | Default | Effect |
|
|
610
|
+
|--|--|--|
|
|
611
|
+
| `SIE_MAX_BATCH_REQUESTS` | `64` | Maximum number of items per batched inference call. |
|
|
612
|
+
| `SIE_MAX_BATCH_WAIT_MS` | `15.0` | Initial value for the adaptive first-request batch timeout. At runtime the PI batching controller steers it between `SIE_ADAPTIVE_BATCHING__MIN_WAIT_MS` and `SIE_ADAPTIVE_BATCHING__MAX_WAIT_MS`, so it is a starting point rather than a fixed wait. |
|
|
613
|
+
| `SIE_MAX_CONCURRENT_REQUESTS` | `512` | Per-worker queue size; admission control returns `QUEUE_FULL` above this. |
|
|
614
|
+
| `SIE_MAX_LORAS_PER_MODEL` | `10` | Maximum concurrent LoRA adapters per base model. |
|
|
615
|
+
| `SIE_MAX_ITEM_TEXT_BYTES` | `2097152` (2 MiB) | Most bytes of UTF-8 one encode, score, or extract item may carry in its `text` and `metadata` together. A larger item is rejected with `INVALID_INPUT` (HTTP 400) before it is tokenized. Generation prompts are not items and are not affected. |
|
|
616
|
+
|
|
617
|
+
### Compute & precision
|
|
618
|
+
|
|
619
|
+
| Env var | Default | Effect |
|
|
620
|
+
|--|--|--|
|
|
621
|
+
| `SIE_DEFAULT_COMPUTE_PRECISION` | `float16` | One of `float16`, `bfloat16`, `float32`. |
|
|
622
|
+
| `SIE_ATTENTION_BACKEND` | `auto` | One of `auto`, `flash_attention_2`, `sdpa`, `eager`. |
|
|
623
|
+
|
|
624
|
+
### Diagnostics
|
|
625
|
+
|
|
626
|
+
| Env var | Default | Effect |
|
|
627
|
+
|--|--|--|
|
|
628
|
+
| `SIE_GRAMMAR_PREFLIGHT_DEBUG` | unset (off) | Enables the legacy worker-side Outlines preflight compile before each structured-output request. Off by default because SGLang is the production grammar authority. Use for diagnosing schema-rejection problems or slow compiles in a controlled environment; not recommended for production traffic. |
|
|
629
|
+
|
|
630
|
+
For nested settings (any field with `__`), the env-var format is
|
|
631
|
+
`SIE_<TOP>__<NESTED>=value`. The complete schema is in
|
|
632
|
+
`packages/sie_server/src/sie_server/config/engine.py`.
|
|
633
|
+
|
|
634
|
+
## Observability
|
|
635
|
+
|
|
636
|
+
The server emits the checked-in worker telemetry contract once through
|
|
637
|
+
OpenTelemetry/OTLP. The regional collector owns Prometheus exposition and
|
|
638
|
+
optional remote OTLP routing; the application does not expose `/metrics` or
|
|
639
|
+
maintain a second Prometheus registry. See `telemetry/contract.yaml` for exact
|
|
640
|
+
instrument names, dimensions, ownership, and histogram bounds.
|
|
641
|
+
|
|
642
|
+
## API
|
|
643
|
+
|
|
644
|
+
See the [API documentation](https://sie.dev/docs) for details.
|
|
645
|
+
|
|
646
|
+
## License
|
|
647
|
+
|
|
648
|
+
Apache 2.0
|