tamar-model-client 0.1.18__tar.gz → 0.1.19__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 (27) hide show
  1. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/PKG-INFO +1 -1
  2. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/setup.py +1 -1
  3. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/__init__.py +2 -0
  4. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/async_client.py +6 -6
  5. tamar_model_client-0.1.19/tamar_model_client/logging_icons.py +60 -0
  6. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/sync_client.py +3 -3
  7. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client.egg-info/PKG-INFO +1 -1
  8. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client.egg-info/SOURCES.txt +1 -0
  9. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/README.md +0 -0
  10. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/setup.cfg +0 -0
  11. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/auth.py +0 -0
  12. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/enums/__init__.py +0 -0
  13. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/enums/channel.py +0 -0
  14. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/enums/invoke.py +0 -0
  15. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/enums/providers.py +0 -0
  16. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/exceptions.py +0 -0
  17. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/generated/__init__.py +0 -0
  18. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/generated/model_service_pb2.py +0 -0
  19. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/generated/model_service_pb2_grpc.py +0 -0
  20. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/json_formatter.py +0 -0
  21. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/schemas/__init__.py +0 -0
  22. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/schemas/inputs.py +0 -0
  23. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/schemas/outputs.py +0 -0
  24. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client/utils.py +0 -0
  25. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client.egg-info/dependency_links.txt +0 -0
  26. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client.egg-info/requires.txt +0 -0
  27. {tamar_model_client-0.1.18 → tamar_model_client-0.1.19}/tamar_model_client.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tamar-model-client
3
- Version: 0.1.18
3
+ Version: 0.1.19
4
4
  Summary: A Python SDK for interacting with the Model Manager gRPC service
5
5
  Home-page: http://gitlab.tamaredge.top/project-tap/AgentOS/model-manager-client
6
6
  Author: Oscar Ou
@@ -2,7 +2,7 @@ from setuptools import setup, find_packages
2
2
 
3
3
  setup(
4
4
  name="tamar-model-client",
5
- version="0.1.18",
5
+ version="0.1.19",
6
6
  description="A Python SDK for interacting with the Model Manager gRPC service",
7
7
  author="Oscar Ou",
8
8
  author_email="oscar.ou@tamaredge.ai",
@@ -2,6 +2,7 @@ from .sync_client import TamarModelClient
2
2
  from .async_client import AsyncTamarModelClient
3
3
  from .exceptions import ModelManagerClientError, ConnectionError, ValidationError
4
4
  from .json_formatter import JSONFormatter
5
+ from . import logging_icons
5
6
 
6
7
  __all__ = [
7
8
  "TamarModelClient",
@@ -10,4 +11,5 @@ __all__ = [
10
11
  "ConnectionError",
11
12
  "ValidationError",
12
13
  "JSONFormatter",
14
+ "logging_icons",
13
15
  ]
@@ -183,7 +183,7 @@ class AsyncTamarModelClient:
183
183
  # 对于取消的情况进行指数退避重试
184
184
  if isinstance(e, grpc.aio.AioRpcError) and e.code() == grpc.StatusCode.CANCELLED:
185
185
  retry_count += 1
186
- logger.info(f" RPC cancelled, retrying {retry_count}/{self.max_retries}...",
186
+ logger.warning(f"⚠️ RPC cancelled, retrying {retry_count}/{self.max_retries}...",
187
187
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "error_code": "CANCELLED"}})
188
188
  if retry_count < self.max_retries:
189
189
  delay = self.retry_delay * (2 ** (retry_count - 1))
@@ -196,7 +196,7 @@ class AsyncTamarModelClient:
196
196
  elif isinstance(e, grpc.RpcError) and e.code() in {grpc.StatusCode.UNAVAILABLE,
197
197
  grpc.StatusCode.DEADLINE_EXCEEDED}:
198
198
  retry_count += 1
199
- logger.info(f" gRPC error {e.code()}, retrying {retry_count}/{self.max_retries}...",
199
+ logger.warning(f"⚠️ gRPC error {e.code()}, retrying {retry_count}/{self.max_retries}...",
200
200
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "error_code": str(e.code())}})
201
201
  if retry_count < self.max_retries:
202
202
  delay = self.retry_delay * (2 ** (retry_count - 1))
@@ -219,7 +219,7 @@ class AsyncTamarModelClient:
219
219
  # 对于取消的情况进行指数退避重试
220
220
  if isinstance(e, grpc.aio.AioRpcError) and e.code() == grpc.StatusCode.CANCELLED:
221
221
  retry_count += 1
222
- logger.info(f" RPC cancelled, retrying {retry_count}/{self.max_retries}...",
222
+ logger.warning(f"⚠️ RPC cancelled, retrying {retry_count}/{self.max_retries}...",
223
223
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "error_code": "CANCELLED"}})
224
224
  if retry_count < self.max_retries:
225
225
  delay = self.retry_delay * (2 ** (retry_count - 1))
@@ -232,7 +232,7 @@ class AsyncTamarModelClient:
232
232
  elif isinstance(e, grpc.RpcError) and e.code() in {grpc.StatusCode.UNAVAILABLE,
233
233
  grpc.StatusCode.DEADLINE_EXCEEDED}:
234
234
  retry_count += 1
235
- logger.info(f" gRPC error {e.code()}, retrying {retry_count}/{self.max_retries}...",
235
+ logger.warning(f"⚠️ gRPC error {e.code()}, retrying {retry_count}/{self.max_retries}...",
236
236
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "error_code": str(e.code())}})
237
237
  if retry_count < self.max_retries:
238
238
  delay = self.retry_delay * (2 ** (retry_count - 1))
@@ -310,7 +310,7 @@ class AsyncTamarModelClient:
310
310
 
311
311
  # 指数退避:延迟时间 = retry_delay * (2 ^ (retry_count - 1))
312
312
  delay = self.retry_delay * (2 ** (retry_count - 1))
313
- logger.info(f"🚀 Retrying connection (attempt {retry_count}/{self.max_retries}) after {delay:.2f}s delay...",
313
+ logger.warning(f"🔄 Retrying connection (attempt {retry_count}/{self.max_retries}) after {delay:.2f}s delay...",
314
314
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "delay": delay}})
315
315
  await asyncio.sleep(delay)
316
316
 
@@ -740,7 +740,7 @@ class AsyncTamarModelClient:
740
740
  else:
741
741
  loop.run_until_complete(self.close())
742
742
  except Exception as e:
743
- logger.info(f" gRPC channel close failed at exit: {e}",
743
+ logger.warning(f"⚠️ gRPC channel close failed at exit: {e}",
744
744
  extra={"log_type": "info", "data": {"status": "failed", "error": str(e)}})
745
745
 
746
746
  async def __aenter__(self):
@@ -0,0 +1,60 @@
1
+ """
2
+ 日志图标规范
3
+
4
+ 本模块定义了统一的日志图标标准,确保整个项目中日志消息的视觉一致性。
5
+ """
6
+
7
+ # 请求生命周期图标
8
+ REQUEST_START = "🔵" # 请求开始
9
+ RESPONSE_SUCCESS = "✅" # 响应成功
10
+ RESPONSE_ERROR = "❌" # 响应错误
11
+
12
+ # 连接和网络图标
13
+ SECURE_CONNECTION = "🔐" # 安全连接 (TLS)
14
+ INSECURE_CONNECTION = "🔓" # 不安全连接 (无TLS)
15
+ CONNECTION_SUCCESS = "✅" # 连接成功
16
+ CONNECTION_RETRY = "🔄" # 连接重试
17
+ CONNECTION_ERROR = "❌" # 连接错误
18
+
19
+ # 操作状态图标
20
+ SUCCESS = "✅" # 成功
21
+ ERROR = "❌" # 错误
22
+ WARNING = "⚠️" # 警告
23
+ INFO = "ℹ️" # 信息
24
+ RETRY = "🔄" # 重试
25
+ PROCESSING = "⚙️" # 处理中
26
+
27
+ # 流式响应图标
28
+ STREAM_SUCCESS = "✅" # 流完成
29
+ STREAM_ERROR = "❌" # 流错误
30
+ STREAM_CHUNK = "📦" # 流数据块
31
+
32
+ # 批量操作图标
33
+ BATCH_START = "🔵" # 批量开始
34
+ BATCH_SUCCESS = "✅" # 批量成功
35
+ BATCH_ERROR = "❌" # 批量错误
36
+
37
+ # 系统操作图标
38
+ INIT = "🚀" # 初始化
39
+ CLOSE = "🔚" # 关闭
40
+ CLEANUP = "🧹" # 清理
41
+
42
+ def get_icon_for_log_type(log_type: str, is_success: bool = True) -> str:
43
+ """
44
+ 根据日志类型和状态获取合适的图标
45
+
46
+ Args:
47
+ log_type: 日志类型 (request, response, info)
48
+ is_success: 是否成功
49
+
50
+ Returns:
51
+ 对应的图标字符串
52
+ """
53
+ if log_type == "request":
54
+ return REQUEST_START
55
+ elif log_type == "response":
56
+ return RESPONSE_SUCCESS if is_success else RESPONSE_ERROR
57
+ elif log_type == "info":
58
+ return INFO if is_success else WARNING
59
+ else:
60
+ return INFO
@@ -176,7 +176,7 @@ class TamarModelClient:
176
176
  except (grpc.RpcError) as e:
177
177
  if e.code() in {grpc.StatusCode.UNAVAILABLE, grpc.StatusCode.DEADLINE_EXCEEDED}:
178
178
  retry_count += 1
179
- logger.info(f" gRPC error {e.code()}, retrying {retry_count}/{self.max_retries}...",
179
+ logger.warning(f"⚠️ gRPC error {e.code()}, retrying {retry_count}/{self.max_retries}...",
180
180
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "error_code": str(e.code())}})
181
181
  if retry_count < self.max_retries:
182
182
  delay = self.retry_delay * (2 ** (retry_count - 1))
@@ -255,7 +255,7 @@ class TamarModelClient:
255
255
 
256
256
  # 指数退避:延迟时间 = retry_delay * (2 ^ (retry_count - 1))
257
257
  delay = self.retry_delay * (2 ** (retry_count - 1))
258
- logger.info(f"🚀 Retrying connection (attempt {retry_count}/{self.max_retries}) after {delay:.2f}s delay...",
258
+ logger.warning(f"🔄 Retrying connection (attempt {retry_count}/{self.max_retries}) after {delay:.2f}s delay...",
259
259
  extra={"log_type": "info", "data": {"retry_count": retry_count, "max_retries": self.max_retries, "delay": delay}})
260
260
  time.sleep(delay) # Blocking sleep in sync version
261
261
 
@@ -679,7 +679,7 @@ class TamarModelClient:
679
679
  try:
680
680
  self.close() # 直接调用关闭方法
681
681
  except Exception as e:
682
- logger.error(f" gRPC channel close failed at exit: {e}",
682
+ logger.warning(f"⚠️ gRPC channel close failed at exit: {e}",
683
683
  extra={"log_type": "info", "data": {"status": "failed", "error": str(e)}})
684
684
 
685
685
  def __enter__(self):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: tamar-model-client
3
- Version: 0.1.18
3
+ Version: 0.1.19
4
4
  Summary: A Python SDK for interacting with the Model Manager gRPC service
5
5
  Home-page: http://gitlab.tamaredge.top/project-tap/AgentOS/model-manager-client
6
6
  Author: Oscar Ou
@@ -5,6 +5,7 @@ tamar_model_client/async_client.py
5
5
  tamar_model_client/auth.py
6
6
  tamar_model_client/exceptions.py
7
7
  tamar_model_client/json_formatter.py
8
+ tamar_model_client/logging_icons.py
8
9
  tamar_model_client/sync_client.py
9
10
  tamar_model_client/utils.py
10
11
  tamar_model_client.egg-info/PKG-INFO