sdpy-kit 0.1.3__tar.gz → 0.1.4__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.
Files changed (42) hide show
  1. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/PKG-INFO +17 -6
  2. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/__init__.py +1 -1
  3. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/base_service.py +1 -1
  4. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/chat_service.py +4 -1
  5. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/embedding_service.py +2 -1
  6. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/pyproject.toml +18 -5
  7. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/.gitignore +0 -0
  8. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/README.md +0 -0
  9. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/__init__.py +0 -0
  10. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/exceptions.py +0 -0
  11. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/failover.py +0 -0
  12. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/image_service.py +0 -0
  13. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/model_builder.py +0 -0
  14. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/model_client.py +0 -0
  15. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/pool.py +0 -0
  16. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/profiles.py +0 -0
  17. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/rerank_service.py +0 -0
  18. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/runner.py +0 -0
  19. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/ai/types.py +0 -0
  20. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/common_kit.py +0 -0
  21. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/config/__init__.py +0 -0
  22. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/config/kit_config.py +0 -0
  23. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/config/log_config.py +0 -0
  24. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/__init__.py +0 -0
  25. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/base_db_kit.py +0 -0
  26. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/crud.py +0 -0
  27. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/engine.py +0 -0
  28. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/exceptions.py +0 -0
  29. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/models/__init__.py +0 -0
  30. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/models/base.py +0 -0
  31. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/mysql_kit.py +0 -0
  32. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/pg_kit.py +0 -0
  33. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/query.py +0 -0
  34. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/session.py +0 -0
  35. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/sqlite_kit.py +0 -0
  36. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/db/transaction.py +0 -0
  37. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/doc_kit.py +0 -0
  38. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/file_kit.py +0 -0
  39. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/mcp_kit.py +0 -0
  40. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/mineru_kit.py +0 -0
  41. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/redis_kit.py +0 -0
  42. {sdpy_kit-0.1.3 → sdpy_kit-0.1.4}/kit/zvec_kit.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: sdpy-kit
3
- Version: 0.1.3
3
+ Version: 0.1.4
4
4
  Summary: SDPY Kit——统一数据库访问层(PG/MySQL/SQLite)与 AI/MCP/Redis/文件/文档/向量工具集
5
5
  Author-email: Clark <changhongyuan@126.com>
6
6
  License-Expression: MIT
@@ -17,23 +17,34 @@ Classifier: Topic :: Database
17
17
  Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
18
18
  Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
19
  Requires-Python: >=3.13
20
- Requires-Dist: fastmcp>=4.0.3
21
20
  Requires-Dist: firecrawl-anydoc>=0.2.4
22
21
  Requires-Dist: httpx>=0.28.1
23
22
  Requires-Dist: markdown-it-py>=3.0
24
23
  Requires-Dist: numpy>=2.0
25
24
  Requires-Dist: pimd[pdfa]>=2.2.5
26
- Requires-Dist: psycopg2-binary>=2.9.12
27
25
  Requires-Dist: pydantic-settings>=2.0
28
26
  Requires-Dist: pydantic>=2.0
29
- Requires-Dist: pymysql>=1.2.0
30
27
  Requires-Dist: python-dotenv>=1.2.3
31
- Requires-Dist: redis>=5.0.0
32
28
  Requires-Dist: requests>=2.34.0
33
29
  Requires-Dist: sqlalchemy~=2.0.51
34
30
  Requires-Dist: sqliteai-vector>=1.0.0
35
31
  Requires-Dist: sqlmodel>=0.0.39
36
- Requires-Dist: zvec>=0.6.0
32
+ Provides-Extra: all
33
+ Requires-Dist: fastmcp>=4.0.3; extra == 'all'
34
+ Requires-Dist: psycopg2-binary>=2.9.12; extra == 'all'
35
+ Requires-Dist: pymysql>=1.2.0; extra == 'all'
36
+ Requires-Dist: redis>=5.0.0; extra == 'all'
37
+ Requires-Dist: zvec>=0.6.0; extra == 'all'
38
+ Provides-Extra: mcp
39
+ Requires-Dist: fastmcp>=4.0.3; extra == 'mcp'
40
+ Provides-Extra: mysql
41
+ Requires-Dist: pymysql>=1.2.0; extra == 'mysql'
42
+ Provides-Extra: pg
43
+ Requires-Dist: psycopg2-binary>=2.9.12; extra == 'pg'
44
+ Provides-Extra: redis
45
+ Requires-Dist: redis>=5.0.0; extra == 'redis'
46
+ Provides-Extra: zvec
47
+ Requires-Dist: zvec>=0.6.0; extra == 'zvec'
37
48
  Description-Content-Type: text/markdown
38
49
 
39
50
  # sdpy-kit
@@ -23,7 +23,7 @@ Author: Clark Chang
23
23
  数据库访问通过 kit.db 子包提供(基于 SQLModel)。
24
24
  """
25
25
 
26
- __version__ = "0.1.3"
26
+ __version__ = "0.1.4"
27
27
 
28
28
  from kit.db import (
29
29
  MYSQL,
@@ -127,7 +127,7 @@ class BaseAIService[RequestT, ResponseT](ABC):
127
127
  data = await self._client.post_json(payload)
128
128
  result = self._parse_response(data)
129
129
  except AIError as exc:
130
- logger.info(
130
+ logger.error(
131
131
  f"********** {desc} ********** "
132
132
  f"耗时 {time.perf_counter() - start:.1f}秒(失败:{exc})"
133
133
  )
@@ -116,6 +116,7 @@ class ChatService(BaseAIService[ChatRequest, str]):
116
116
  logger.info(f"请求参数: {params}")
117
117
  start = time.perf_counter()
118
118
  note = ""
119
+ failed = False
119
120
  try:
120
121
  async for parsed in self._client.stream_json(payload):
121
122
  if parsed is None:
@@ -130,12 +131,14 @@ class ChatService(BaseAIService[ChatRequest, str]):
130
131
  yield delta
131
132
  except AIError as exc:
132
133
  note = f"(失败:{exc})"
134
+ failed = True
133
135
  raise
134
136
  except BaseException: # noqa: BLE001 - 中断路径(提前 break/取消)也需收尾日志
135
137
  note = "(中断)"
136
138
  raise
137
139
  finally:
138
- logger.info(
140
+ log = logger.error if failed else logger.info
141
+ log(
139
142
  f"********** {desc} ********** "
140
143
  f"耗时 {time.perf_counter() - start:.1f}秒{note}"
141
144
  )
@@ -146,7 +146,8 @@ class EmbeddingService(BaseAIService[EmbeddingRequest, list[list[float]]]):
146
146
 
147
147
  return [vec for vec in results if vec is not None]
148
148
  finally:
149
- logger.info(
149
+ log = logger.error if failures else logger.info
150
+ log(
150
151
  f"********** {desc} ********** "
151
152
  f"耗时 {time.perf_counter() - start:.1f}秒{note}"
152
153
  )
@@ -34,21 +34,34 @@ dependencies = [
34
34
  "numpy>=2.0",
35
35
  "sqlalchemy~=2.0.51",
36
36
  "sqlmodel>=0.0.39",
37
- "pymysql>=1.2.0",
38
- "psycopg2-binary>=2.9.12",
39
- "redis>=5.0.0",
40
- "zvec>=0.6.0",
41
37
  "sqliteai-vector>=1.0.0",
42
38
  "firecrawl-anydoc>=0.2.4",
43
39
  "pimd[pdfa]>=2.2.5",
44
40
  "markdown-it-py>=3.0",
45
- "fastmcp>=4.0.3",
46
41
  "httpx>=0.28.1",
47
42
  "requests>=2.34.0",
48
43
  "python-dotenv>=1.2.3",
49
44
  ]
50
45
  dynamic = ["version"]
51
46
 
47
+ # 关键节点:可选后端按 extras 拆分(0.1.4)。fastmcp/zvec/redis/psycopg2/pymysql
48
+ # 仅在对应 Kit(mcp_kit/zvec_kit/redis_kit/pg_kit/mysql_kit)被实际使用时才需
49
+ # 安装,且均为延迟导入——不装 extras 时 import kit 与基础 Kit 全部可用。
50
+ # 单机 SQLite 场景安装基础版即可,避免拖入重依赖(原全量安装多占约 60MB)。
51
+ [project.optional-dependencies]
52
+ pg = ["psycopg2-binary>=2.9.12"]
53
+ mysql = ["pymysql>=1.2.0"]
54
+ redis = ["redis>=5.0.0"]
55
+ zvec = ["zvec>=0.6.0"]
56
+ mcp = ["fastmcp>=4.0.3"]
57
+ all = [
58
+ "psycopg2-binary>=2.9.12",
59
+ "pymysql>=1.2.0",
60
+ "redis>=5.0.0",
61
+ "zvec>=0.6.0",
62
+ "fastmcp>=4.0.3",
63
+ ]
64
+
52
65
  [tool.hatch.version]
53
66
  path = "kit/__init__.py"
54
67
 
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes