isage-middleware 0.2.4.3__cp311-none-any.whl
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.
- isage_middleware-0.2.4.3.dist-info/METADATA +266 -0
- isage_middleware-0.2.4.3.dist-info/RECORD +94 -0
- isage_middleware-0.2.4.3.dist-info/WHEEL +5 -0
- isage_middleware-0.2.4.3.dist-info/top_level.txt +1 -0
- sage/middleware/__init__.py +59 -0
- sage/middleware/_version.py +6 -0
- sage/middleware/components/__init__.py +30 -0
- sage/middleware/components/extensions_compat.py +141 -0
- sage/middleware/components/sage_db/__init__.py +116 -0
- sage/middleware/components/sage_db/backend.py +136 -0
- sage/middleware/components/sage_db/service.py +15 -0
- sage/middleware/components/sage_flow/__init__.py +76 -0
- sage/middleware/components/sage_flow/python/__init__.py +14 -0
- sage/middleware/components/sage_flow/python/micro_service/__init__.py +4 -0
- sage/middleware/components/sage_flow/python/micro_service/sage_flow_service.py +88 -0
- sage/middleware/components/sage_flow/python/sage_flow.py +30 -0
- sage/middleware/components/sage_flow/service.py +14 -0
- sage/middleware/components/sage_mem/__init__.py +83 -0
- sage/middleware/components/sage_sias/__init__.py +59 -0
- sage/middleware/components/sage_sias/continual_learner.py +184 -0
- sage/middleware/components/sage_sias/coreset_selector.py +302 -0
- sage/middleware/components/sage_sias/types.py +94 -0
- sage/middleware/components/sage_tsdb/__init__.py +81 -0
- sage/middleware/components/sage_tsdb/python/__init__.py +21 -0
- sage/middleware/components/sage_tsdb/python/_sage_tsdb.pyi +17 -0
- sage/middleware/components/sage_tsdb/python/algorithms/__init__.py +17 -0
- sage/middleware/components/sage_tsdb/python/algorithms/base.py +51 -0
- sage/middleware/components/sage_tsdb/python/algorithms/out_of_order_join.py +248 -0
- sage/middleware/components/sage_tsdb/python/algorithms/window_aggregator.py +296 -0
- sage/middleware/components/sage_tsdb/python/micro_service/__init__.py +7 -0
- sage/middleware/components/sage_tsdb/python/micro_service/sage_tsdb_service.py +365 -0
- sage/middleware/components/sage_tsdb/python/sage_tsdb.py +523 -0
- sage/middleware/components/sage_tsdb/service.py +17 -0
- sage/middleware/components/vector_stores/__init__.py +25 -0
- sage/middleware/components/vector_stores/chroma.py +483 -0
- sage/middleware/components/vector_stores/chroma_adapter.py +185 -0
- sage/middleware/components/vector_stores/milvus.py +677 -0
- sage/middleware/operators/__init__.py +56 -0
- sage/middleware/operators/agent/__init__.py +24 -0
- sage/middleware/operators/agent/planning/__init__.py +5 -0
- sage/middleware/operators/agent/planning/llm_adapter.py +41 -0
- sage/middleware/operators/agent/planning/planner_adapter.py +98 -0
- sage/middleware/operators/agent/planning/router.py +107 -0
- sage/middleware/operators/agent/runtime.py +296 -0
- sage/middleware/operators/agentic/__init__.py +41 -0
- sage/middleware/operators/agentic/config.py +254 -0
- sage/middleware/operators/agentic/planning_operator.py +125 -0
- sage/middleware/operators/agentic/refined_searcher.py +132 -0
- sage/middleware/operators/agentic/runtime.py +241 -0
- sage/middleware/operators/agentic/timing_operator.py +125 -0
- sage/middleware/operators/agentic/tool_selection_operator.py +127 -0
- sage/middleware/operators/context/__init__.py +17 -0
- sage/middleware/operators/context/critic_evaluation.py +16 -0
- sage/middleware/operators/context/model_context.py +565 -0
- sage/middleware/operators/context/quality_label.py +12 -0
- sage/middleware/operators/context/search_query_results.py +61 -0
- sage/middleware/operators/context/search_result.py +42 -0
- sage/middleware/operators/context/search_session.py +79 -0
- sage/middleware/operators/filters/__init__.py +26 -0
- sage/middleware/operators/filters/context_sink.py +387 -0
- sage/middleware/operators/filters/context_source.py +376 -0
- sage/middleware/operators/filters/evaluate_filter.py +83 -0
- sage/middleware/operators/filters/tool_filter.py +74 -0
- sage/middleware/operators/llm/__init__.py +18 -0
- sage/middleware/operators/llm/sagellm_generator.py +432 -0
- sage/middleware/operators/rag/__init__.py +147 -0
- sage/middleware/operators/rag/arxiv.py +331 -0
- sage/middleware/operators/rag/chunk.py +13 -0
- sage/middleware/operators/rag/document_loaders.py +23 -0
- sage/middleware/operators/rag/evaluate.py +658 -0
- sage/middleware/operators/rag/generator.py +340 -0
- sage/middleware/operators/rag/index_builder/__init__.py +48 -0
- sage/middleware/operators/rag/index_builder/builder.py +363 -0
- sage/middleware/operators/rag/index_builder/manifest.py +101 -0
- sage/middleware/operators/rag/index_builder/storage.py +131 -0
- sage/middleware/operators/rag/pipeline.py +46 -0
- sage/middleware/operators/rag/profiler.py +59 -0
- sage/middleware/operators/rag/promptor.py +400 -0
- sage/middleware/operators/rag/refiner.py +231 -0
- sage/middleware/operators/rag/reranker.py +364 -0
- sage/middleware/operators/rag/retriever.py +1308 -0
- sage/middleware/operators/rag/searcher.py +37 -0
- sage/middleware/operators/rag/types.py +28 -0
- sage/middleware/operators/rag/writer.py +80 -0
- sage/middleware/operators/tools/__init__.py +71 -0
- sage/middleware/operators/tools/arxiv_paper_searcher.py +175 -0
- sage/middleware/operators/tools/arxiv_searcher.py +102 -0
- sage/middleware/operators/tools/duckduckgo_searcher.py +105 -0
- sage/middleware/operators/tools/image_captioner.py +104 -0
- sage/middleware/operators/tools/nature_news_fetcher.py +224 -0
- sage/middleware/operators/tools/searcher_tool.py +514 -0
- sage/middleware/operators/tools/text_detector.py +185 -0
- sage/middleware/operators/tools/url_text_extractor.py +104 -0
- sage/middleware/py.typed +2 -0
|
@@ -0,0 +1,266 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: isage-middleware
|
|
3
|
+
Version: 0.2.4.3
|
|
4
|
+
Summary: SAGE Middleware - Streaming-Augmented Generative Execution
|
|
5
|
+
Author-email: IntelliStream Team <shuhao_zhang@hust.edu.cn>
|
|
6
|
+
License: MIT
|
|
7
|
+
Project-URL: Homepage, https://github.com/intellistream/SAGE
|
|
8
|
+
Project-URL: Repository, https://github.com/intellistream/SAGE.git
|
|
9
|
+
Project-URL: Documentation, https://intellistream.github.io/SAGE-Pub/
|
|
10
|
+
Project-URL: Issues, https://github.com/intellistream/SAGE/issues
|
|
11
|
+
Keywords: data,api,reasoning,dataflow,llm,ml,middleware,framework,rag,intellistream,ai,sage
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Developers
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Operating System :: OS Independent
|
|
16
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
17
|
+
Classifier: Topic :: Software Development :: Libraries :: Python Modules
|
|
18
|
+
Classifier: Topic :: System :: Distributed Computing
|
|
19
|
+
Requires-Python: >=3.10
|
|
20
|
+
Description-Content-Type: text/markdown
|
|
21
|
+
Requires-Dist: openai<1.91.0,>=1.52.0
|
|
22
|
+
Requires-Dist: httpx<1.0.0,>=0.28.0
|
|
23
|
+
Requires-Dist: aiohttp<4.0.0,>=3.12.0
|
|
24
|
+
Requires-Dist: beautifulsoup4<5.0.0,>=4.12.0
|
|
25
|
+
Requires-Dist: feedparser<7.0.0,>=6.0.11
|
|
26
|
+
Requires-Dist: json-repair<1.0.0,>=0.30.0
|
|
27
|
+
Requires-Dist: bm25s<1.0.0,>=0.2.13
|
|
28
|
+
Requires-Dist: rank-bm25<1.0.0,>=0.2.0
|
|
29
|
+
Requires-Dist: PyStemmer<4.0.0,>=3.0.0
|
|
30
|
+
Provides-Extra: all
|
|
31
|
+
Requires-Dist: isage-middleware[auth,compression,libs,llm-providers,ml,neuromem,queue,streaming,vdb]; extra == "all"
|
|
32
|
+
Provides-Extra: auth
|
|
33
|
+
Requires-Dist: python-jose[cryptography]<4.0.0,>=3.5.0; extra == "auth"
|
|
34
|
+
Requires-Dist: passlib[argon2]<2.0.0,>=1.7.4; extra == "auth"
|
|
35
|
+
Provides-Extra: compression
|
|
36
|
+
Requires-Dist: llmlingua<1.0.0,>=0.2.0; extra == "compression"
|
|
37
|
+
Provides-Extra: dev
|
|
38
|
+
Requires-Dist: pytest>=7.4.0; extra == "dev"
|
|
39
|
+
Requires-Dist: pytest-cov>=4.0.0; extra == "dev"
|
|
40
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
41
|
+
Requires-Dist: ruff==0.14.6; extra == "dev"
|
|
42
|
+
Requires-Dist: mypy>=1.7.0; extra == "dev"
|
|
43
|
+
Requires-Dist: pybind11>=2.10.0; extra == "dev"
|
|
44
|
+
Provides-Extra: libs
|
|
45
|
+
Requires-Dist: isage-libs; extra == "libs"
|
|
46
|
+
Requires-Dist: isage-agentic>=0.1.0.0; extra == "libs"
|
|
47
|
+
Requires-Dist: isage-eval>=0.1.0.0; extra == "libs"
|
|
48
|
+
Requires-Dist: isage-finetune>=0.1.0.0; extra == "libs"
|
|
49
|
+
Requires-Dist: isage-privacy>=0.1.0.0; extra == "libs"
|
|
50
|
+
Requires-Dist: isage-rag>=0.1.0.0; extra == "libs"
|
|
51
|
+
Requires-Dist: isage-safety>=0.1.0.0; extra == "libs"
|
|
52
|
+
Requires-Dist: isage-refiner>=0.1.0.0; extra == "libs"
|
|
53
|
+
Provides-Extra: llm-providers
|
|
54
|
+
Requires-Dist: ollama<1.0.0,>=0.5.0; extra == "llm-providers"
|
|
55
|
+
Requires-Dist: zhipuai<3.0.0,>=2.1.0; extra == "llm-providers"
|
|
56
|
+
Requires-Dist: cohere<6.0.0,>=5.16.0; extra == "llm-providers"
|
|
57
|
+
Requires-Dist: anthropic<1.0.0,>=0.25.0; extra == "llm-providers"
|
|
58
|
+
Provides-Extra: ml
|
|
59
|
+
Requires-Dist: transformers<4.54.0,>=4.52.0; extra == "ml"
|
|
60
|
+
Requires-Dist: tokenizers<0.24.0,>=0.21.0; extra == "ml"
|
|
61
|
+
Requires-Dist: sentence-transformers<4.0.0,>=3.1.0; extra == "ml"
|
|
62
|
+
Requires-Dist: InstructorEmbedding<2.0.0,>=1.0.0; extra == "ml"
|
|
63
|
+
Requires-Dist: accelerate<2.0.0,>=1.9.0; extra == "ml"
|
|
64
|
+
Requires-Dist: huggingface-hub<1.0.0,>=0.34.0; extra == "ml"
|
|
65
|
+
Requires-Dist: peft<1.0.0,>=0.18.0; extra == "ml"
|
|
66
|
+
Requires-Dist: scipy<2.0.0,>=1.15.0; extra == "ml"
|
|
67
|
+
Provides-Extra: neuromem
|
|
68
|
+
Requires-Dist: isage-neuromem>=0.2.1.1; extra == "neuromem"
|
|
69
|
+
Provides-Extra: queue
|
|
70
|
+
Requires-Dist: celery<6.0.0,>=5.5.0; extra == "queue"
|
|
71
|
+
Requires-Dist: flower<3.0.0,>=2.0.0; extra == "queue"
|
|
72
|
+
Provides-Extra: streaming
|
|
73
|
+
Requires-Dist: isage-flow>=0.1.1; extra == "streaming"
|
|
74
|
+
Requires-Dist: isage-tsdb>=0.1.5; extra == "streaming"
|
|
75
|
+
Provides-Extra: vdb
|
|
76
|
+
Requires-Dist: isage-vdb>=0.1.5; extra == "vdb"
|
|
77
|
+
Requires-Dist: faiss-cpu<2.0.0,>=1.7.0; extra == "vdb"
|
|
78
|
+
|
|
79
|
+
# SAGE Middleware(中间件)
|
|
80
|
+
|
|
81
|
+
## 📋 Overview
|
|
82
|
+
|
|
83
|
+
用于构建带有 AI 能力的流式数据应用的中间件层,集成了多家大模型提供商、异步任务、鉴权以及高性能的数据处理组件。
|
|
84
|
+
|
|
85
|
+
## 🧭 Governance / 团队协作制度
|
|
86
|
+
|
|
87
|
+
- `docs/governance/TEAM.md`
|
|
88
|
+
- `docs/governance/MAINTAINERS.md`
|
|
89
|
+
- `docs/governance/DEVELOPER_GUIDE.md`
|
|
90
|
+
- `docs/governance/PR_CHECKLIST.md`
|
|
91
|
+
- `docs/governance/SELF_HOSTED_RUNNER.md`
|
|
92
|
+
- `docs/governance/TODO.md`
|
|
93
|
+
|
|
94
|
+
## ✨ Key Features
|
|
95
|
+
|
|
96
|
+
- 🤖 **LLM 推理**:
|
|
97
|
+
- **sageLLM** ✅ 推荐:统一 LLM 推理引擎,支持 CUDA/Ascend/Mock 后端
|
|
98
|
+
- vLLM ⚠️ 已弃用:将在 v0.4.0 移除,请迁移至 sageLLM
|
|
99
|
+
- 🔎 检索与向量:RAG、BM25、FAISS 等
|
|
100
|
+
- 📋 任务调度:Celery 异步任务
|
|
101
|
+
- 🔐 安全鉴权:JWT、密码学工具
|
|
102
|
+
- ⚙️ 核心组件:
|
|
103
|
+
- `sage_db`:数据库/向量存储相关组件(含 C/C++ 扩展)
|
|
104
|
+
- `sage_flow`:高性能向量流处理(可能包含扩展或独立子模块)
|
|
105
|
+
|
|
106
|
+
## 🚀 Installation
|
|
107
|
+
|
|
108
|
+
```bash
|
|
109
|
+
pip install isage-middleware
|
|
110
|
+
|
|
111
|
+
# 可选:VLLM 支持(需要 CUDA)
|
|
112
|
+
pip install isage-common[vllm]
|
|
113
|
+
|
|
114
|
+
# 可选:与完整 SAGE 框架集成
|
|
115
|
+
pip install isage-middleware[sage]
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## 📖 Quick Start
|
|
119
|
+
|
|
120
|
+
### LLM 推理(推荐:sageLLM)
|
|
121
|
+
|
|
122
|
+
```python
|
|
123
|
+
from sage.middleware.operators.llm import SageLLMGenerator
|
|
124
|
+
|
|
125
|
+
# 自动选择最佳后端
|
|
126
|
+
generator = SageLLMGenerator(
|
|
127
|
+
model_path="Qwen/Qwen2.5-7B-Instruct",
|
|
128
|
+
backend_type="auto", # auto/cuda/ascend/mock
|
|
129
|
+
temperature=0.7,
|
|
130
|
+
max_tokens=2048,
|
|
131
|
+
)
|
|
132
|
+
|
|
133
|
+
result = generator.execute("你好,世界!")
|
|
134
|
+
print(result)
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### API 客户端
|
|
138
|
+
|
|
139
|
+
```python
|
|
140
|
+
from sage.middleware.api.client import APIClient
|
|
141
|
+
from sage.middleware.auth.jwt import JWTManager
|
|
142
|
+
|
|
143
|
+
client = APIClient()
|
|
144
|
+
jwt_manager = JWTManager()
|
|
145
|
+
|
|
146
|
+
resp = client.chat_completion(
|
|
147
|
+
provider="openai",
|
|
148
|
+
messages=[{"role": "user", "content": "Hello!"}],
|
|
149
|
+
)
|
|
150
|
+
print(resp)
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
> 📖 **迁移指南**:如果您正在使用 `VLLMGenerator`,请参阅
|
|
154
|
+
> [vLLM to sageLLM Migration Guide](../../docs-public/docs_src/dev-notes/migration/VLLM_TO_SAGELLM_MIGRATION.md)
|
|
155
|
+
|
|
156
|
+
## 配置示例
|
|
157
|
+
|
|
158
|
+
```yaml
|
|
159
|
+
# config.yaml
|
|
160
|
+
middleware:
|
|
161
|
+
auth:
|
|
162
|
+
secret_key: "your-secret-key" # pragma: allowlist secret
|
|
163
|
+
algorithm: "HS256"
|
|
164
|
+
providers:
|
|
165
|
+
openai:
|
|
166
|
+
api_key: "sk-..." # pragma: allowlist secret
|
|
167
|
+
base_url: "https://api.openai.com/v1"
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
## 开发与本地安装
|
|
171
|
+
|
|
172
|
+
```bash
|
|
173
|
+
git clone https://github.com/intellistream/SAGE.git
|
|
174
|
+
cd SAGE/packages/sage-middleware
|
|
175
|
+
pip install -e .
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
> 说明:中间件组件(sage_db/sage_flow/sage_tsdb 等)现已随源码直接提供或通过 pip 依赖分发,无需初始化任何子模块。
|
|
179
|
+
|
|
180
|
+
## 新增中间件组件的规范(重要)
|
|
181
|
+
|
|
182
|
+
当你添加新的中间件组件(例如 `sage_foo`)时,请务必在 `setup.py` 中接入其构建逻辑,这样在安装 `isage-middleware` 时会自动构建/准备该组件。
|
|
183
|
+
|
|
184
|
+
建议遵循以下约定:
|
|
185
|
+
|
|
186
|
+
### 1. 目录结构
|
|
187
|
+
|
|
188
|
+
- `src/sage/middleware/components/sage_foo/`
|
|
189
|
+
- `__init__.py`(Python 包)
|
|
190
|
+
- (如包含 C/C++ 部分)`cmake/`、`build.sh`、`CMakeLists.txt`
|
|
191
|
+
- 其他源码/资源文件
|
|
192
|
+
|
|
193
|
+
### 2. C++ 扩展与依赖要求
|
|
194
|
+
|
|
195
|
+
如果组件包含 C/C++ 扩展,**必须**遵守以下依赖约束,以与现有 `sage_db`、`sage_flow` 保持一致:
|
|
196
|
+
|
|
197
|
+
> **注意**: 以下代码示例中的 `SAGE_COMMON_DEPS_FILE` 等变量是 CMake 环境变量,非占位符。
|
|
198
|
+
|
|
199
|
+
1. **共享依赖入口:**
|
|
200
|
+
|
|
201
|
+
- 在 `CMakeLists.txt` 中优先加载共享依赖脚本(通过环境变量):
|
|
202
|
+
```cmake
|
|
203
|
+
set(_sage_foo_shared_deps FALSE)
|
|
204
|
+
# Check if shared deps file is defined
|
|
205
|
+
if(DEFINED SAGE_COMMON_DEPS_FILE AND EXISTS "$ENV(SAGE_COMMON_DEPS_FILE)")
|
|
206
|
+
include("$ENV(SAGE_COMMON_DEPS_FILE)")
|
|
207
|
+
set(_sage_foo_shared_deps TRUE)
|
|
208
|
+
endif()
|
|
209
|
+
```
|
|
210
|
+
- 共享脚本会提供 `pybind11::module`、统一的可见性编译选项、以及全部 gperftools 配置变量。
|
|
211
|
+
|
|
212
|
+
1. **本地回退脚本:**
|
|
213
|
+
|
|
214
|
+
- 请在组件目录的 `cmake/` 下提供 `pybind11_dependency.cmake` 和(如需要)`gperftools.cmake`,用于在独立构建或共享脚本缺失时下载依赖。
|
|
215
|
+
- 在 `CMakeLists.txt` 中检测 `_sage_foo_shared_deps`,若为 `FALSE` 再加载本地脚本:
|
|
216
|
+
```cmake
|
|
217
|
+
if(NOT _sage_foo_shared_deps)
|
|
218
|
+
include(cmake/pybind11_dependency.cmake)
|
|
219
|
+
endif()
|
|
220
|
+
```
|
|
221
|
+
|
|
222
|
+
1. **gperftools 约定:**
|
|
223
|
+
|
|
224
|
+
- 新增扩展应暴露 `ENABLE_GPERFTOOLS` 选项,并默认遵循 `SAGE_ENABLE_GPERFTOOLS` 环境变量。
|
|
225
|
+
- 只有在确认找到 `SAGE_GPERFTOOLS_LIBS`(或本地回退脚本成功解析)时才链接 gperftools;否则务必禁用该选项并给出清晰日志。
|
|
226
|
+
|
|
227
|
+
1. **环境变量约定:**
|
|
228
|
+
|
|
229
|
+
- 共享脚本会设置 `SAGE_COMMON_COMPILE_OPTIONS`、`SAGE_COMMON_COMPILE_DEFINITIONS` 等变量,请在目标上引用,避免重复配置。
|
|
230
|
+
- 新扩展若需要自定义变量,务必提供合理的默认值,并允许通过环境变量覆写。
|
|
231
|
+
|
|
232
|
+
1. **打包要求:**
|
|
233
|
+
|
|
234
|
+
- `pyproject.toml` 中需包含 `"sage.middleware.components.sage_foo" = ["cmake/*.cmake"]` 等条目,保证 CMake
|
|
235
|
+
脚本在发布包内。
|
|
236
|
+
- 如扩展存在 Python 侧绑定(`python/` 目录),确保 `pyproject.toml` 中的 `package-data` 同步更新。
|
|
237
|
+
|
|
238
|
+
### 3. 构建脚本
|
|
239
|
+
|
|
240
|
+
- 如果组件需要编译或额外准备工作,请提供标准的 `build.sh`,支持无交互执行:
|
|
241
|
+
- `bash build.sh --install-deps`
|
|
242
|
+
- `build.sh` 应读取相关环境变量(如依赖文件路径、gperftools 开关等),并在调用 `cmake` 时透传(参考 `sage_db`、`sage_flow`)。
|
|
243
|
+
|
|
244
|
+
### 4. 在 `setup.py` 中接入
|
|
245
|
+
|
|
246
|
+
- 在自定义的 `build_ext` 流程中:
|
|
247
|
+
- 新增 `build_sage_foo()` 方法(参照现有 `build_sage_db()` / `build_sage_flow()`)。
|
|
248
|
+
- 使用统一的 `_shared_env()` 帮助函数为子进程注入共享依赖环境。
|
|
249
|
+
- 在 `run()` 中调用 `self.build_sage_foo()`,并保证失败不阻断安装(打印清晰日志即可)。
|
|
250
|
+
|
|
251
|
+
### 5. 环境变量开关(可选)
|
|
252
|
+
|
|
253
|
+
- 通过设置 `SAGE_SKIP_C_EXTENSIONS=1` 可以跳过所有扩展构建(调试纯 Python 逻辑时常用)。
|
|
254
|
+
|
|
255
|
+
### 6. CI 与子模块提示
|
|
256
|
+
|
|
257
|
+
- CI 会递归检出子模块并按 `setup.py` 的逻辑尝试构建。
|
|
258
|
+
- 中间件组件不再通过 Git submodule 分发;请不要在 CI 或本地执行子模块初始化命令。
|
|
259
|
+
|
|
260
|
+
## 贡献
|
|
261
|
+
|
|
262
|
+
欢迎提交 PR!请先阅读仓库根目录的 [CONTRIBUTING.md](../../CONTRIBUTING.md)。
|
|
263
|
+
|
|
264
|
+
## 📄 License
|
|
265
|
+
|
|
266
|
+
MIT License - see [LICENSE](../../LICENSE) for details.
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
sage/middleware/__init__.py,sha256=0VLtoshNFWRzLHvE_wVq3DuYXwQrzyBJ9yfMa3Vaj-A,1972
|
|
2
|
+
sage/middleware/_version.py,sha256=kilIikRCA21kF-bP0fRc6XmTREV9gA8bIyf_HD5GJUk,177
|
|
3
|
+
sage/middleware/py.typed,sha256=42WLrVlzpn7jMsIIEdXWWE5YOGnCHXrlnm5sbY6TFmQ,96
|
|
4
|
+
sage/middleware/components/__init__.py,sha256=KwVxO1BJzE7vvrAEQRX9ZESizZyrfdy921cch9qmHUU,821
|
|
5
|
+
sage/middleware/components/extensions_compat.py,sha256=s84uXImqyM72VMp6Q3JoeR8ud6LjzlQKvnorPv5fObY,4706
|
|
6
|
+
sage/middleware/components/sage_db/__init__.py,sha256=rA1z9DGqYgxCY9UiRyRDrMLQxaGCHJTN0ySr7GEWMr0,3130
|
|
7
|
+
sage/middleware/components/sage_db/backend.py,sha256=0de4XsgALCEjS_WEGGz9BtD50ly8af5mHIdMLuAdiJM,3915
|
|
8
|
+
sage/middleware/components/sage_db/service.py,sha256=oQNveAXhiCcBXR5tusk3G67D3ON0RUXhpZxvLjvnYBI,463
|
|
9
|
+
sage/middleware/components/sage_flow/__init__.py,sha256=vs6wj9g5I5OArMgwnlFW_E4GXMshY0p54HL3r8lsmTY,2016
|
|
10
|
+
sage/middleware/components/sage_flow/service.py,sha256=jvsnap0QnznIHAHfYeucvfeW_O3Rrop-BFRZb6wai0c,361
|
|
11
|
+
sage/middleware/components/sage_flow/python/__init__.py,sha256=5hEJGXJSj9Dpo9n2VX5egr-e7dxgzgnMAUkVwtELde0,457
|
|
12
|
+
sage/middleware/components/sage_flow/python/sage_flow.py,sha256=DOvFJ5nvqgzBFwf1Xk-qNTQIXyqDEucySqW6JNvCT4M,571
|
|
13
|
+
sage/middleware/components/sage_flow/python/micro_service/__init__.py,sha256=gMNyW3GRLBIrP3qiAaKjAX_yLfBpcrFbW9rDVtqs-9Q,118
|
|
14
|
+
sage/middleware/components/sage_flow/python/micro_service/sage_flow_service.py,sha256=hwcnlPIbbsrnkl8g9XNdyDTKZXPtVOqFkrHymEWP6a0,2884
|
|
15
|
+
sage/middleware/components/sage_mem/__init__.py,sha256=0Vb2ZKzRo82danMZJl2Nxh7krj5mKZUCcLrY_UEk4MM,2903
|
|
16
|
+
sage/middleware/components/sage_sias/__init__.py,sha256=Ia1jCniFokDnKvCS6LFp1S1jh3E1VpDMMGHMeQGqrLk,1899
|
|
17
|
+
sage/middleware/components/sage_sias/continual_learner.py,sha256=LA_o2k81VO287jLvt7HmFvAhNtpJv-Zz7xjXqi0YPAo,6240
|
|
18
|
+
sage/middleware/components/sage_sias/coreset_selector.py,sha256=L8JJfUvFwQl0GQOSWVZ2bl9uxSB7q-WCuoQpiawU9TU,10756
|
|
19
|
+
sage/middleware/components/sage_sias/types.py,sha256=iAlEU2Obxp5F0iTxpwGXLoOA3LyiOKqY-Oqm133tfQw,2418
|
|
20
|
+
sage/middleware/components/sage_tsdb/__init__.py,sha256=BaY8TthTdkQ7oMWD6flAu_6cqw0CiErDU6t6A8P_2Rc,2081
|
|
21
|
+
sage/middleware/components/sage_tsdb/service.py,sha256=iPz2D4Lc6NPQhuLzL2mZmzTqOEKxlBVr4AZNd8C-tAA,428
|
|
22
|
+
sage/middleware/components/sage_tsdb/python/__init__.py,sha256=umH2E_KItHaRMG0pLzUhuEWhIWZYaLmYe1K3al3qKIY,553
|
|
23
|
+
sage/middleware/components/sage_tsdb/python/_sage_tsdb.pyi,sha256=jatBiI4eInV5z_g8aaqlKyXcz37-NV5dfTLtLsTSmXU,502
|
|
24
|
+
sage/middleware/components/sage_tsdb/python/sage_tsdb.py,sha256=CGbv9e9MNoQlCF37RCP4hdMswqdVqjfp3HlcBlRfjg8,16133
|
|
25
|
+
sage/middleware/components/sage_tsdb/python/algorithms/__init__.py,sha256=miozMiOag6xpJ0-g3zSMgnyAV9vXSqwtWAPNhdjh2K4,443
|
|
26
|
+
sage/middleware/components/sage_tsdb/python/algorithms/base.py,sha256=kNQmzmYjcCIQW7xDNqMlRReTkDzGFoy3P5aQjMS8gzs,1199
|
|
27
|
+
sage/middleware/components/sage_tsdb/python/algorithms/out_of_order_join.py,sha256=UV1l_B_oqdEYIb2njjjK8CcIir7Od-gB5RlCB7MYs3Y,8295
|
|
28
|
+
sage/middleware/components/sage_tsdb/python/algorithms/window_aggregator.py,sha256=hy8QIJVe8oI5_PCfVP1DOWvE_SIFvJvJ0qG_tb-U88w,10120
|
|
29
|
+
sage/middleware/components/sage_tsdb/python/micro_service/__init__.py,sha256=NPeT85nf9EHX4Feb2ITuAPRwp4NfcBOhbl0xiCekul4,169
|
|
30
|
+
sage/middleware/components/sage_tsdb/python/micro_service/sage_tsdb_service.py,sha256=w0jTnQkZzbpmBe9CywI9MGyexmIWguNa6x2euutl85Y,11356
|
|
31
|
+
sage/middleware/components/vector_stores/__init__.py,sha256=T97vJljRHvFjdEkU0vSUJyYF4VYLseoRBNVI5QR1wpE,809
|
|
32
|
+
sage/middleware/components/vector_stores/chroma.py,sha256=Xu5q3eMIup0CmexR1QnLV0amnQq6gcoMDgU3ucUKGZk,16298
|
|
33
|
+
sage/middleware/components/vector_stores/chroma_adapter.py,sha256=1VWf4jIksWsrBuscMZn6M8idMJUZ05DLlu0-4dIF3g8,5893
|
|
34
|
+
sage/middleware/components/vector_stores/milvus.py,sha256=vosZkNJVFerouv4mJm7I7_Kj0OVjVTjnXvpfTLgKfYo,26260
|
|
35
|
+
sage/middleware/operators/__init__.py,sha256=GrbDf99fsYzzaCQRaydi86g5pkPvvv697u1I3RCOGI4,1806
|
|
36
|
+
sage/middleware/operators/agent/__init__.py,sha256=F_2sQJNfCff6HhObi8WVjSwjzjNVAg1xIK4EZjYZFS0,607
|
|
37
|
+
sage/middleware/operators/agent/runtime.py,sha256=QLY2gu7eeTaBeXPOPFpljKSe-Y2U8mqXQeo41-0SLr8,11276
|
|
38
|
+
sage/middleware/operators/agent/planning/__init__.py,sha256=-b6-ti_HI8wfHvSTAurwMXXX8ARG0RL0_AfIPnizrJE,219
|
|
39
|
+
sage/middleware/operators/agent/planning/llm_adapter.py,sha256=sWLqglPfZSa9awXBopDJpYNNKiGeWupk6C78ZtwtqXY,1445
|
|
40
|
+
sage/middleware/operators/agent/planning/planner_adapter.py,sha256=ga_5K8et_1c5aOvhgpt2eirBMxKOrkzeBCf-klwMphE,3557
|
|
41
|
+
sage/middleware/operators/agent/planning/router.py,sha256=mW6Um0tk4-t9QnDSY-daObUHGK9Iyt8a5VCAzKyP41U,4220
|
|
42
|
+
sage/middleware/operators/agentic/__init__.py,sha256=LCUGAMu4pNtoH9PcpvgCpS4kzngj1xFdxitTsFlZEho,1303
|
|
43
|
+
sage/middleware/operators/agentic/config.py,sha256=Bj8NmW8pHOp3r4SaFdq8AkLJJ2zQY9CGTeXlwmZXLOc,7804
|
|
44
|
+
sage/middleware/operators/agentic/planning_operator.py,sha256=RZLoCGq9d1WjerH3Xty2MmVciiSHbPW5rDCY2jZHAVw,4068
|
|
45
|
+
sage/middleware/operators/agentic/refined_searcher.py,sha256=8VZGqDo83GqqBT_p3HdhDPYpweKG4WmWAxAbQY7zOEg,4961
|
|
46
|
+
sage/middleware/operators/agentic/runtime.py,sha256=9DjQGEqsEYZhaz3uLYCAfrsJSBHBkMlcCEg6qFmTxkc,8590
|
|
47
|
+
sage/middleware/operators/agentic/timing_operator.py,sha256=fmoMee8WI547dvmukwpceQKXYSETS9ILonRtW4dhKME,4138
|
|
48
|
+
sage/middleware/operators/agentic/tool_selection_operator.py,sha256=GlyqGc59zpDk7fw3TIVZN9bM4LYPUBFfVmvjQdCxW7A,4298
|
|
49
|
+
sage/middleware/operators/context/__init__.py,sha256=QReFA5qvVeKv3nRsoj8xyJHtvNQVSaAvnqTaXE0Ax4A,660
|
|
50
|
+
sage/middleware/operators/context/critic_evaluation.py,sha256=t6d4Kb_WpOIK8ADf-eIT5ocL-aOHcNLN3J0A-kGdBU4,419
|
|
51
|
+
sage/middleware/operators/context/model_context.py,sha256=gjKykFuy5Gnh9CiYc21ezv3ymVxQ36TeiLC8vJuJKis,23241
|
|
52
|
+
sage/middleware/operators/context/quality_label.py,sha256=tJlkK-LwTP5GbhpE_T-2ufM82kwuymd-TyY-Xj9iNHk,362
|
|
53
|
+
sage/middleware/operators/context/search_query_results.py,sha256=EZkhBoCwHj_7yvRhALnSG0U9h2y52LP4fBL52MNWyoc,2316
|
|
54
|
+
sage/middleware/operators/context/search_result.py,sha256=nOl3KpvnFx7wdJUxooTNEU-x3XWE3kPe1_0-B2ZAjGc,1326
|
|
55
|
+
sage/middleware/operators/context/search_session.py,sha256=cElX3KpwXs58CnQImuxxA8XgzCPPtd1HUFSoSXeqvm4,3138
|
|
56
|
+
sage/middleware/operators/filters/__init__.py,sha256=k5V5EMjWNXxi7XkKfnuv6IK9MTOZRM3QOnPHulGbzfI,689
|
|
57
|
+
sage/middleware/operators/filters/context_sink.py,sha256=mdnrExkaW1aTu-oMYivm6U1pF6hECgZiy7hUVWoGcR4,15274
|
|
58
|
+
sage/middleware/operators/filters/context_source.py,sha256=GgqnBCorU-_NqKl7s8tOY264SCiM00BLqr_5o1ENGTk,13238
|
|
59
|
+
sage/middleware/operators/filters/evaluate_filter.py,sha256=EntVTZ7RYXCPL-vXpMZrUGcZxA37jJvq3gYOMHzpHj4,2693
|
|
60
|
+
sage/middleware/operators/filters/tool_filter.py,sha256=wgODlItxK8RFPqIr6mnzGUL_WWw0CX6Y5mvIeMCjhq0,2354
|
|
61
|
+
sage/middleware/operators/llm/__init__.py,sha256=SuL-rKzWyElGjeQiz_C2xaD2gb1F90hyL1ko4BgUiEw,543
|
|
62
|
+
sage/middleware/operators/llm/sagellm_generator.py,sha256=PpEitNvVsIvKs9iS-QHPGImg85HHg9ELWlRn7gJRePo,15719
|
|
63
|
+
sage/middleware/operators/rag/__init__.py,sha256=MbkM0FOt1EUG12vs6mMueFGna9DfDjYhAZKpNCxdkoQ,5762
|
|
64
|
+
sage/middleware/operators/rag/arxiv.py,sha256=G3a74WWFxrsZmUT-wkWt4NXFxIa3-KELJr0HrS8eyU0,14404
|
|
65
|
+
sage/middleware/operators/rag/chunk.py,sha256=dh3Feu52H1pGa0xYzurBLXC9PRf8osZ6ehUh5rnNjeY,435
|
|
66
|
+
sage/middleware/operators/rag/document_loaders.py,sha256=ahfpEHMeiZmAjShizoiBCIFo6DhUHnAv8VPJzOI4pIA,496
|
|
67
|
+
sage/middleware/operators/rag/evaluate.py,sha256=pnToHK3T5OK6lug4CuMrCIkrr9pPIB6cPW3jEcg21lw,22319
|
|
68
|
+
sage/middleware/operators/rag/generator.py,sha256=hqaSD_SpLBb3v2zpKGRNsxHAUWUb5jc8RjreaTw8j_k,11887
|
|
69
|
+
sage/middleware/operators/rag/pipeline.py,sha256=sX_GPuY9AZbuetU62k8LAaD-ZZqThZZS0cBequHg32Q,1441
|
|
70
|
+
sage/middleware/operators/rag/profiler.py,sha256=iQGVoZS7aA3pSV7wuTH3qLggREnUQvadSYqpx6YPaxc,2138
|
|
71
|
+
sage/middleware/operators/rag/promptor.py,sha256=m38jRBUwkF7cYqwWu09B9c63e3Ho2QRlhGDNnkZFa74,15695
|
|
72
|
+
sage/middleware/operators/rag/refiner.py,sha256=Gd85_TS6HxXp6ENPQTzeLKeO-w0TBsYg0ytDOOE_fOY,8270
|
|
73
|
+
sage/middleware/operators/rag/reranker.py,sha256=m5wTeOZTs_PFTjgSPdVsYP-YBIYvBlZXRaFNpG-4ImQ,14501
|
|
74
|
+
sage/middleware/operators/rag/retriever.py,sha256=gwFwXUfVtMnBzzVLT6rrdvzolFmo0SrUVT-EHJHXCeg,49856
|
|
75
|
+
sage/middleware/operators/rag/searcher.py,sha256=ahdA8lUp0sThtR55-6gNwD4o-ukCMz6EyLMFGEEhkM4,1261
|
|
76
|
+
sage/middleware/operators/rag/types.py,sha256=11jfviVUWddDW0rVaaGXk2Fe5bnmv2k2kzIzS5oB-Lo,530
|
|
77
|
+
sage/middleware/operators/rag/writer.py,sha256=rq9j0_Fb6693xWDhZCyRhex-mme_Mu5hgWj7ZXE15k0,3374
|
|
78
|
+
sage/middleware/operators/rag/index_builder/__init__.py,sha256=b2RHIM-ob4ufhEwlaJ8qTjABRKrLn_vikZLwIb5Q7Sg,1617
|
|
79
|
+
sage/middleware/operators/rag/index_builder/builder.py,sha256=btE1u_-9DHjf6h0XzzAfbeNHCRBuFGFw86FIsEnxBxM,13058
|
|
80
|
+
sage/middleware/operators/rag/index_builder/manifest.py,sha256=Fur4n5rLy11mn1cb2NOvxVUdWb0k-F0qwsrgmD3MF3g,3476
|
|
81
|
+
sage/middleware/operators/rag/index_builder/storage.py,sha256=x0LRyRXkYpVi86U2gJ9LDAjnPf79Jx0C-NaBRr3Dzvk,4044
|
|
82
|
+
sage/middleware/operators/tools/__init__.py,sha256=t_UD661nXFUuKOeOFP-fn7AxTR7wBbu4FGyg-NFUbkA,2320
|
|
83
|
+
sage/middleware/operators/tools/arxiv_paper_searcher.py,sha256=PKhUfko1r_56n2kAjfUPw7jMiF9bcg5hRxgxjawyrnY,6339
|
|
84
|
+
sage/middleware/operators/tools/arxiv_searcher.py,sha256=U-yujbcXCAsJ1QZhozidYrsb5AJszGlUYQKs8ww8pZM,3422
|
|
85
|
+
sage/middleware/operators/tools/duckduckgo_searcher.py,sha256=j0vtY_T8xtg6usC9hcRf5cyrZYMRH-HLjt1I9nZ_ZmM,3499
|
|
86
|
+
sage/middleware/operators/tools/image_captioner.py,sha256=ql44Lmvr88lmXgkR9vO-Gh1GAmtU_fEYXQC26-B7KSM,4586
|
|
87
|
+
sage/middleware/operators/tools/nature_news_fetcher.py,sha256=_muGIZnPBeSpboWQM8xKt1bi8r2SyPIdWD7-1sqE2Xc,8369
|
|
88
|
+
sage/middleware/operators/tools/searcher_tool.py,sha256=fqWgJ_YnfO6F6vXEm-F0JgmaXwHDjyQT0zYwFfytRao,19534
|
|
89
|
+
sage/middleware/operators/tools/text_detector.py,sha256=xmpePKVxjU66y9WWM78eheJMyY9pDBh3xMRW11t4sPc,6643
|
|
90
|
+
sage/middleware/operators/tools/url_text_extractor.py,sha256=OAmkTbLUt2vFDuNEGwOKhtjpRwtk6hwm8n2SiNpyDR4,3281
|
|
91
|
+
isage_middleware-0.2.4.3.dist-info/METADATA,sha256=6d5i6ovLU6ZH3VTVR_XRqH90HqWG94Ay0uYz7mQtLbw,10225
|
|
92
|
+
isage_middleware-0.2.4.3.dist-info/WHEEL,sha256=ZJeWpR6hcCRGwxVKXlDk-HsGwijNyTq4fszaDj4Ycyo,93
|
|
93
|
+
isage_middleware-0.2.4.3.dist-info/top_level.txt,sha256=hibFyzQHiLOMK68qL1OWsNKaXOmSXqZjeLTBem6Yy7I,5
|
|
94
|
+
isage_middleware-0.2.4.3.dist-info/RECORD,,
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
sage
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SAGE Middleware - 中间件和领域算子层
|
|
3
|
+
|
|
4
|
+
Layer: L4 (Domain Components)
|
|
5
|
+
Dependencies: sage.libs (L3), sage.kernel (L3), sage.platform (L2), sage.common (L1)
|
|
6
|
+
|
|
7
|
+
提供:
|
|
8
|
+
- 领域算子:
|
|
9
|
+
* RAG operators: 检索增强生成 (pipeline, retriever, generator, profiler, document_loaders)
|
|
10
|
+
* RAG backends: 向量数据库集成 (Milvus, Chroma)
|
|
11
|
+
* LLM operators: 大语言模型算子
|
|
12
|
+
* LLM clients: LLM服务客户端 (OpenAI, HuggingFace)
|
|
13
|
+
* Tool operators: 领域工具 (arxiv_searcher, image_captioner, nature_news等)
|
|
14
|
+
* Filters: 业务过滤器 (tool_filter, evaluate_filter, context_source/sink)
|
|
15
|
+
- 业务上下文:Agent/RAG workflow 上下文管理 (ModelContext, SearchSession等)
|
|
16
|
+
- 中间件组件:
|
|
17
|
+
* sage_db: 数据库抽象
|
|
18
|
+
* sage_mem: 内存管理和缓存
|
|
19
|
+
* sage_refiner: 数据精炼工具 (仅保留service层,算法已下移到sage.libs.context.compression)
|
|
20
|
+
* sage_flow: 工作流编排
|
|
21
|
+
* sage_tsdb: 时序数据库
|
|
22
|
+
|
|
23
|
+
Architecture:
|
|
24
|
+
- L4 层提供领域特定的功能组件
|
|
25
|
+
- 依赖 L1-L3 的基础设施、核心引擎和通用算法
|
|
26
|
+
- 为 L5 (应用层) 提供可复用的领域组件
|
|
27
|
+
- 包含各种中间件和高级算子实现
|
|
28
|
+
|
|
29
|
+
子模块:
|
|
30
|
+
- operators/: 领域算子
|
|
31
|
+
* rag/: RAG operators + backends (Milvus, Chroma)
|
|
32
|
+
* llm/: LLM operators + clients (OpenAI, HuggingFace)
|
|
33
|
+
* tools/: 领域特定工具
|
|
34
|
+
* filters/: 业务过滤器
|
|
35
|
+
- context/: Agent/RAG业务上下文 (从sage.libs迁移)
|
|
36
|
+
- components/: 中间件组件(DB, Memory, Refiner等)
|
|
37
|
+
"""
|
|
38
|
+
|
|
39
|
+
# 直接从本包的_version模块加载版本信息
|
|
40
|
+
try:
|
|
41
|
+
from sage.middleware._version import __author__, __email__, __version__
|
|
42
|
+
except ImportError:
|
|
43
|
+
# 备用硬编码版本
|
|
44
|
+
__version__ = "0.1.4"
|
|
45
|
+
__author__ = "IntelliStream Team"
|
|
46
|
+
__email__ = "shuhao_zhang@hust.edu.cn"
|
|
47
|
+
|
|
48
|
+
# 导出子模块
|
|
49
|
+
__layer__ = "L4"
|
|
50
|
+
|
|
51
|
+
from . import components, operators
|
|
52
|
+
|
|
53
|
+
__all__ = [
|
|
54
|
+
"__version__",
|
|
55
|
+
"__author__",
|
|
56
|
+
"__email__",
|
|
57
|
+
"operators",
|
|
58
|
+
"components",
|
|
59
|
+
]
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SAGE Middleware Components
|
|
3
|
+
|
|
4
|
+
Core middleware components including databases, flow engines, and other services.
|
|
5
|
+
|
|
6
|
+
Note: sage_refiner has been migrated to the independent isage-refiner package.
|
|
7
|
+
Install with: pip install isage-refiner
|
|
8
|
+
Use: from sage_refiner import LongRefinerCompressor
|
|
9
|
+
"""
|
|
10
|
+
|
|
11
|
+
# Lazy imports to avoid loading heavy dependencies (FAISS, etc.) at module load time
|
|
12
|
+
from . import sage_db, sage_flow, sage_sias, sage_tsdb
|
|
13
|
+
from .extensions_compat import * # noqa: F403
|
|
14
|
+
|
|
15
|
+
# Import sage_mem - it's a namespace package that handles its own lazy loading
|
|
16
|
+
try:
|
|
17
|
+
from . import sage_mem
|
|
18
|
+
except ImportError:
|
|
19
|
+
# sage_mem namespace package might not be available
|
|
20
|
+
sage_mem = None
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
__all__ = [
|
|
24
|
+
"sage_db",
|
|
25
|
+
"sage_flow",
|
|
26
|
+
"sage_mem",
|
|
27
|
+
"sage_sias",
|
|
28
|
+
"sage_tsdb",
|
|
29
|
+
"extensions_compat",
|
|
30
|
+
]
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
"""
|
|
2
|
+
SAGE Middleware Components - 运行时兼容性检测
|
|
3
|
+
|
|
4
|
+
此模块处理C++扩展的可选导入,提供优雅的降级机制。
|
|
5
|
+
C++扩展模块(_sage_flow)在未编译时可能不存在,
|
|
6
|
+
此模块确保在扩展不可用时也能正常导入和运行。
|
|
7
|
+
|
|
8
|
+
注意:
|
|
9
|
+
- SageVDB 已独立为 PyPI 包 (PyPI: isage-vdb, Python: sagevdb),不再作为 SAGE C++ 扩展。
|
|
10
|
+
- SageTSDB 已独立为 PyPI 包 (isage-tsdb),不再作为 SAGE C++ 扩展。
|
|
11
|
+
"""
|
|
12
|
+
|
|
13
|
+
from typing import TYPE_CHECKING, Any
|
|
14
|
+
|
|
15
|
+
# 类型检查时导入,运行时通过try/except处理
|
|
16
|
+
if TYPE_CHECKING:
|
|
17
|
+
# 当扩展编译可用时,这些导入会成功
|
|
18
|
+
# stub文件(.pyi)提供类型提示
|
|
19
|
+
from sage.middleware.components.sage_flow.python import sage_flow as _sage_flow
|
|
20
|
+
else:
|
|
21
|
+
# 运行时动态导入,优雅处理缺失的扩展
|
|
22
|
+
_sage_flow: Any = None
|
|
23
|
+
|
|
24
|
+
# 尝试导入C++扩展,失败时使用纯Python实现
|
|
25
|
+
_SAGE_DB_AVAILABLE = False # 通过 isage-vdb 包检测 (Python: sagevdb)
|
|
26
|
+
_SAGE_FLOW_AVAILABLE = False
|
|
27
|
+
_SAGE_TSDB_AVAILABLE = False # 通过 isage-tsdb 包检测
|
|
28
|
+
|
|
29
|
+
if not TYPE_CHECKING:
|
|
30
|
+
# SageVDB 现在是独立的 PyPI 包 (PyPI: isage-vdb, Python: sagevdb)
|
|
31
|
+
try:
|
|
32
|
+
import sagevdb # noqa: F401
|
|
33
|
+
|
|
34
|
+
_SAGE_DB_AVAILABLE = True
|
|
35
|
+
except ImportError:
|
|
36
|
+
# Don't warn on import - only when trying to use the feature
|
|
37
|
+
pass
|
|
38
|
+
|
|
39
|
+
try:
|
|
40
|
+
# 只导入 Python wrapper 模块,避免重复加载 C++ 扩展
|
|
41
|
+
from sage.middleware.components.sage_flow.python import sage_flow as _sage_flow
|
|
42
|
+
|
|
43
|
+
_SAGE_FLOW_AVAILABLE = True
|
|
44
|
+
except ImportError:
|
|
45
|
+
_sage_flow = None
|
|
46
|
+
# Don't warn on import - only when trying to use the feature
|
|
47
|
+
pass
|
|
48
|
+
|
|
49
|
+
# SageTSDB 现在是独立的 PyPI 包
|
|
50
|
+
try:
|
|
51
|
+
import sage_tsdb # noqa: F401
|
|
52
|
+
|
|
53
|
+
_SAGE_TSDB_AVAILABLE = True
|
|
54
|
+
except ImportError:
|
|
55
|
+
# Don't warn on import - only when trying to use the feature
|
|
56
|
+
pass
|
|
57
|
+
|
|
58
|
+
|
|
59
|
+
def is_sage_db_available() -> bool:
|
|
60
|
+
"""检查SAGE DB扩展是否可用"""
|
|
61
|
+
return _SAGE_DB_AVAILABLE
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
def is_sage_flow_available() -> bool:
|
|
65
|
+
"""检查SAGE Flow扩展是否可用"""
|
|
66
|
+
return _SAGE_FLOW_AVAILABLE
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
def is_sage_tsdb_available() -> bool:
|
|
70
|
+
"""检查SAGE TSDB扩展是否可用"""
|
|
71
|
+
return _SAGE_TSDB_AVAILABLE
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
def get_extension_status() -> dict:
|
|
75
|
+
"""获取所有扩展的状态"""
|
|
76
|
+
return {
|
|
77
|
+
"sage_db": _SAGE_DB_AVAILABLE,
|
|
78
|
+
"sage_flow": _SAGE_FLOW_AVAILABLE,
|
|
79
|
+
"sage_tsdb": _SAGE_TSDB_AVAILABLE,
|
|
80
|
+
"total_available": sum([_SAGE_DB_AVAILABLE, _SAGE_FLOW_AVAILABLE, _SAGE_TSDB_AVAILABLE]),
|
|
81
|
+
"total_extensions": 3,
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def check_extensions_availability() -> dict:
|
|
86
|
+
"""检查扩展可用性,返回兼容格式用于CI"""
|
|
87
|
+
return {
|
|
88
|
+
"sage_db": _SAGE_DB_AVAILABLE,
|
|
89
|
+
"sage_flow": _SAGE_FLOW_AVAILABLE,
|
|
90
|
+
"sage_tsdb": _SAGE_TSDB_AVAILABLE,
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
|
|
94
|
+
def require_sage_db():
|
|
95
|
+
"""要求SageVDB可用,否则抛出异常"""
|
|
96
|
+
if not _SAGE_DB_AVAILABLE:
|
|
97
|
+
raise ImportError(
|
|
98
|
+
"此功能需要 SageVDB。请安装:\n"
|
|
99
|
+
" pip install isage-vdb\n"
|
|
100
|
+
"注意: PyPI 包名是 'isage-vdb',Python 导入名是 'sagevdb'"
|
|
101
|
+
)
|
|
102
|
+
import sagevdb
|
|
103
|
+
|
|
104
|
+
return sagevdb
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
def require_sage_flow():
|
|
108
|
+
"""要求SAGE Flow扩展可用,否则抛出异常"""
|
|
109
|
+
if not _SAGE_FLOW_AVAILABLE:
|
|
110
|
+
raise ImportError(
|
|
111
|
+
"此功能需要SAGE Flow C++扩展。请安装完整版本:\n"
|
|
112
|
+
"pip install --force-reinstall isage-middleware\n"
|
|
113
|
+
"或安装构建依赖后重新安装:\n"
|
|
114
|
+
"Ubuntu/Debian: sudo apt-get install build-essential cmake\n"
|
|
115
|
+
"macOS: brew install cmake"
|
|
116
|
+
)
|
|
117
|
+
return _sage_flow
|
|
118
|
+
|
|
119
|
+
|
|
120
|
+
def require_sage_tsdb():
|
|
121
|
+
"""要求SAGE TSDB可用,否则抛出异常"""
|
|
122
|
+
if not _SAGE_TSDB_AVAILABLE:
|
|
123
|
+
raise ImportError("此功能需要 SAGE TSDB。请安装: pip install isage-tsdb")
|
|
124
|
+
import sage_tsdb
|
|
125
|
+
|
|
126
|
+
return sage_tsdb
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
# 在模块导入时显示状态(仅在明确导入时)
|
|
130
|
+
# 避免在用户导入其他模块时显示无关警告
|
|
131
|
+
if __name__ == "__main__":
|
|
132
|
+
status = get_extension_status()
|
|
133
|
+
if status["total_available"] < status["total_extensions"]:
|
|
134
|
+
print(f"ℹ️ SAGE扩展状态: {status['total_available']}/{status['total_extensions']} 可用")
|
|
135
|
+
if not _SAGE_DB_AVAILABLE:
|
|
136
|
+
print(" ❌ SageVDB: 未安装 (pip install isage-vdb)")
|
|
137
|
+
if not _SAGE_FLOW_AVAILABLE:
|
|
138
|
+
print(" ❌ SAGE Flow: C++扩展不可用")
|
|
139
|
+
if not _SAGE_TSDB_AVAILABLE:
|
|
140
|
+
print(" ❌ SAGE TSDB: 未安装 (pip install isage-tsdb)")
|
|
141
|
+
print(" 💡 提示: 安装相应依赖可启用完整功能")
|