agstack 1.8.0__tar.gz → 1.8.2__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.
- {agstack-1.8.0 → agstack-1.8.2}/PKG-INFO +2 -2
- {agstack-1.8.0 → agstack-1.8.2}/agstack/events.py +13 -1
- {agstack-1.8.0 → agstack-1.8.2}/agstack/fastapi/__init__.py +3 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack.egg-info/PKG-INFO +2 -2
- {agstack-1.8.0 → agstack-1.8.2}/agstack.egg-info/requires.txt +1 -1
- {agstack-1.8.0 → agstack-1.8.2}/pyproject.toml +2 -2
- {agstack-1.8.0 → agstack-1.8.2}/LICENSE +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/README.md +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/config/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/config/logger.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/config/manager.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/config/types.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/contexts.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/decorators.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/exceptions.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/fastapi/exception.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/fastapi/middleware.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/fastapi/offline.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/fastapi/sse.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/infra/db/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/infra/es/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/infra/kg/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/infra/mq/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/client.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/agent.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/context.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/event.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/exceptions.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/factory.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/flow.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/loader.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/agent_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/base.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/detect_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/llm_chat_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/llm_embed_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/llm_rerank_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/python_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/nodes/tool_node.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/records.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/registry.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/sandbox.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/state.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/flow/tool.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/prompts.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/llm/token.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/schema.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/security/__init__.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/security/casbin.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/security/crypt.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack/status.py +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack.egg-info/SOURCES.txt +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack.egg-info/dependency_links.txt +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/agstack.egg-info/top_level.txt +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/setup.cfg +0 -0
- {agstack-1.8.0 → agstack-1.8.2}/tests/test_flow_io.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agstack
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.2
|
|
4
4
|
Summary: Production-ready toolkit for building FastAPI and LLM applications
|
|
5
5
|
Author-email: XtraVisions <gitadmin@xtravisions.com>, Chen Hao <chenhao@xtravisions.com>
|
|
6
6
|
Maintainer-email: XtraVisions <gitadmin@xtravisions.com>, Chen Hao <chenhao@xtravisions.com>
|
|
@@ -35,7 +35,7 @@ Requires-Dist: python-multipart>=0.0.20
|
|
|
35
35
|
Requires-Dist: requests>=2.32.5
|
|
36
36
|
Requires-Dist: RestrictedPython>=7.0
|
|
37
37
|
Requires-Dist: sqlalchemy[asyncio]>=2.0.48
|
|
38
|
-
Requires-Dist: sqlobjects>=1.
|
|
38
|
+
Requires-Dist: sqlobjects>=1.6.0
|
|
39
39
|
Requires-Dist: tiktoken>=0.12.0
|
|
40
40
|
Requires-Dist: uvicorn>=0.41.0
|
|
41
41
|
Dynamic: license-file
|
|
@@ -3,12 +3,16 @@
|
|
|
3
3
|
"""全局事件总线系统"""
|
|
4
4
|
|
|
5
5
|
import asyncio
|
|
6
|
+
import logging
|
|
6
7
|
from dataclasses import dataclass, field
|
|
7
8
|
from datetime import datetime
|
|
8
9
|
from enum import Enum
|
|
9
10
|
from typing import Any, Callable
|
|
10
11
|
|
|
11
12
|
|
|
13
|
+
logger = logging.getLogger(__name__)
|
|
14
|
+
|
|
15
|
+
|
|
12
16
|
class EventType(str, Enum):
|
|
13
17
|
"""事件类型定义"""
|
|
14
18
|
|
|
@@ -79,7 +83,15 @@ class EventBus:
|
|
|
79
83
|
tasks.append(asyncio.create_task(asyncio.to_thread(handler, event)))
|
|
80
84
|
|
|
81
85
|
if tasks:
|
|
82
|
-
await asyncio.gather(*tasks, return_exceptions=True)
|
|
86
|
+
results = await asyncio.gather(*tasks, return_exceptions=True)
|
|
87
|
+
for handler, result in zip(handlers, results, strict=True):
|
|
88
|
+
if isinstance(result, BaseException):
|
|
89
|
+
logger.exception(
|
|
90
|
+
"Event handler %r failed for event %r",
|
|
91
|
+
handler,
|
|
92
|
+
event_type,
|
|
93
|
+
exc_info=result,
|
|
94
|
+
)
|
|
83
95
|
|
|
84
96
|
def get_handlers(self, event_type: EventType) -> list[Callable]:
|
|
85
97
|
"""获取事件处理器"""
|
|
@@ -15,6 +15,9 @@ def setup_fastapi(title: str, version: str, debug: bool, static_url: str) -> Fas
|
|
|
15
15
|
version=version,
|
|
16
16
|
license_info={"name": "END USER LICENSE AGREEMENT"},
|
|
17
17
|
debug=debug,
|
|
18
|
+
docs_url="/docs" if debug else None,
|
|
19
|
+
redoc_url="/redoc" if debug else None,
|
|
20
|
+
openapi_url="/openapi.json" if debug else None,
|
|
18
21
|
)
|
|
19
22
|
|
|
20
23
|
# CORS 中间件(仅开发环境)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: agstack
|
|
3
|
-
Version: 1.8.
|
|
3
|
+
Version: 1.8.2
|
|
4
4
|
Summary: Production-ready toolkit for building FastAPI and LLM applications
|
|
5
5
|
Author-email: XtraVisions <gitadmin@xtravisions.com>, Chen Hao <chenhao@xtravisions.com>
|
|
6
6
|
Maintainer-email: XtraVisions <gitadmin@xtravisions.com>, Chen Hao <chenhao@xtravisions.com>
|
|
@@ -35,7 +35,7 @@ Requires-Dist: python-multipart>=0.0.20
|
|
|
35
35
|
Requires-Dist: requests>=2.32.5
|
|
36
36
|
Requires-Dist: RestrictedPython>=7.0
|
|
37
37
|
Requires-Dist: sqlalchemy[asyncio]>=2.0.48
|
|
38
|
-
Requires-Dist: sqlobjects>=1.
|
|
38
|
+
Requires-Dist: sqlobjects>=1.6.0
|
|
39
39
|
Requires-Dist: tiktoken>=0.12.0
|
|
40
40
|
Requires-Dist: uvicorn>=0.41.0
|
|
41
41
|
Dynamic: license-file
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "agstack"
|
|
3
|
-
version = "1.8.
|
|
3
|
+
version = "1.8.2"
|
|
4
4
|
description = "Production-ready toolkit for building FastAPI and LLM applications"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
license = "MIT"
|
|
@@ -54,7 +54,7 @@ dependencies = [
|
|
|
54
54
|
"requests>=2.32.5",
|
|
55
55
|
"RestrictedPython>=7.0",
|
|
56
56
|
"sqlalchemy[asyncio]>=2.0.48",
|
|
57
|
-
"sqlobjects>=1.
|
|
57
|
+
"sqlobjects>=1.6.0",
|
|
58
58
|
"tiktoken>=0.12.0",
|
|
59
59
|
"uvicorn>=0.41.0",
|
|
60
60
|
]
|
|
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
|
|
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
|