flare-kernel 0.1.0__py3-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.
@@ -0,0 +1,114 @@
1
+ from __future__ import annotations
2
+
3
+ import sys
4
+ from pathlib import Path
5
+
6
+ _RUNTIME_TESTS_DIR = Path(__file__).resolve().parent
7
+ _KERNEL_SRC = _RUNTIME_TESTS_DIR.parents[2]
8
+ _PACKAGES_DIR = _RUNTIME_TESTS_DIR.parents[4]
9
+ _ENGINES_SRC = _PACKAGES_DIR / "flare-engines" / "src"
10
+
11
+ for path in (str(_KERNEL_SRC), str(_ENGINES_SRC)):
12
+ if path not in sys.path:
13
+ sys.path.insert(0, path)
14
+
15
+ from flare_kernel.runtime.mode_runtime import build_kernel_runtime
16
+
17
+
18
+ def test_build_kernel_runtime_requirement_canvas_exposes_next_actions() -> None:
19
+ runtime_snapshot = build_kernel_runtime(
20
+ trace_id="trace-rc",
21
+ tenant_id="tenant-1",
22
+ instance_id="instance-1",
23
+ domain_pack_version="v1",
24
+ session_id="session-1",
25
+ intent="requirement_canvas",
26
+ payload={
27
+ "function_type": "requirement_canvas",
28
+ "message": "采购需求:需要3家供应商",
29
+ },
30
+ instance_profile=None,
31
+ )
32
+
33
+ assert runtime_snapshot["mode_runtime"] == {
34
+ "mode_key": "requirement_canvas",
35
+ "mode_state": "collecting",
36
+ }
37
+ assert runtime_snapshot["mode_key"] == "requirement_canvas"
38
+ assert runtime_snapshot["mode_state"] == "collecting"
39
+ assert [event["event_type"] for event in runtime_snapshot["mode_events"]] == [
40
+ "field_progress",
41
+ "requirement_draft",
42
+ "next_actions",
43
+ ]
44
+ assert runtime_snapshot["next_actions"] == [
45
+ {
46
+ "action_key": "continue_collection",
47
+ "label": "继续梳理",
48
+ "target_mode": "requirement_canvas",
49
+ "priority": 1,
50
+ "status": "blocked",
51
+ "reason": "字段已完整,当前可以直接进入下一步。",
52
+ "description": "继续补齐字段,提升需求结构化完整度。",
53
+ },
54
+ {
55
+ "action_key": "handoff_to_sourcing",
56
+ "label": "进入智能寻源",
57
+ "target_mode": "intelligent_sourcing",
58
+ "priority": 2,
59
+ "status": "available",
60
+ "reason": "必填字段已补齐,可以进入智能寻源。",
61
+ "description": "在必填字段完整后切换到候选匹配与风险摘要。",
62
+ },
63
+ ]
64
+ assert runtime_snapshot["agent_runtime"]["mode_key"] == "requirement_canvas"
65
+ assert runtime_snapshot["skill_runtime"]["mode_key"] == "requirement_canvas"
66
+ assert runtime_snapshot["context_usage"]["mode_key"] == "requirement_canvas"
67
+
68
+
69
+ def test_build_kernel_runtime_intelligent_sourcing_infers_report_ready() -> None:
70
+ runtime_snapshot = build_kernel_runtime(
71
+ trace_id="trace-is",
72
+ tenant_id="tenant-1",
73
+ instance_id="instance-1",
74
+ domain_pack_version="v1",
75
+ session_id="session-1",
76
+ intent="intelligent_sourcing",
77
+ payload={
78
+ "function_type": "intelligent_sourcing",
79
+ "message": "筛选供应商候选",
80
+ "base_fields": {
81
+ "category": {"value": "电子元件"},
82
+ "region": {"value": "华东"},
83
+ },
84
+ "report": {
85
+ "title": "评估报告",
86
+ "sections": [
87
+ {
88
+ "section_key": "overview",
89
+ "title": "概览",
90
+ "content": "已完成",
91
+ }
92
+ ],
93
+ },
94
+ },
95
+ instance_profile=None,
96
+ )
97
+
98
+ assert runtime_snapshot["mode_runtime"] == {
99
+ "mode_key": "intelligent_sourcing",
100
+ "mode_state": "collecting",
101
+ }
102
+ assert runtime_snapshot["mode_key"] == "intelligent_sourcing"
103
+ assert runtime_snapshot["mode_state"] == "report_ready"
104
+ assert [event["event_type"] for event in runtime_snapshot["mode_events"]] == [
105
+ "sourcing_candidates",
106
+ "risk_summary",
107
+ "shortlist_updated",
108
+ "evaluation_report_ready",
109
+ ]
110
+ assert runtime_snapshot["mode_events"][-1]["payload"]["mode_state"] == "report_ready"
111
+ assert runtime_snapshot["next_actions"] == []
112
+ assert runtime_snapshot["agent_runtime"]["mode_key"] == "intelligent_sourcing"
113
+ assert runtime_snapshot["skill_runtime"]["mode_key"] == "intelligent_sourcing"
114
+ assert runtime_snapshot["context_usage"]["mode_key"] == "intelligent_sourcing"
@@ -0,0 +1,11 @@
1
+ """trace_id helpers."""
2
+
3
+ from __future__ import annotations
4
+
5
+ from uuid import uuid4
6
+
7
+
8
+ def resolve_trace_id(trace_id: str | None) -> str:
9
+ if trace_id and trace_id.strip():
10
+ return trace_id.strip()
11
+ return uuid4().hex
@@ -0,0 +1,67 @@
1
+ Metadata-Version: 2.4
2
+ Name: flare-kernel
3
+ Version: 0.1.0
4
+ Summary: FLARE kernel runtime package
5
+ License: Proprietary
6
+ Classifier: Development Status :: 3 - Alpha
7
+ Classifier: Programming Language :: Python :: 3
8
+ Classifier: Programming Language :: Python :: 3.11
9
+ Requires-Python: >=3.11
10
+ Description-Content-Type: text/markdown
11
+ Requires-Dist: flare-engines<0.2.0,>=0.1.0
12
+ Requires-Dist: fastapi<1.0,>=0.115
13
+ Requires-Dist: pydantic<3,>=2
14
+ Requires-Dist: uvicorn<1.0,>=0.30
15
+
16
+ # flare-kernel
17
+
18
+ 通用编排与执行内核。
19
+
20
+ 职责:
21
+
22
+ 1. Decision 路由与策略入口。
23
+ 2. Execution 流程推进与状态管理。
24
+ 3. Runtime(含重试、超时、追踪)。
25
+ 4. 加载 domain pack 并执行。
26
+
27
+ ## Day 2 最小骨架
28
+
29
+ 目录:
30
+
31
+ 1. `src/flare_kernel/router`:接口路由
32
+ 2. `src/flare_kernel/runtime`:`trace_id` 与基础日志
33
+ 3. `src/flare_kernel/contracts`:请求/响应契约
34
+
35
+ 最小接口:
36
+
37
+ 1. `POST /kernel/run`
38
+ 2. `POST /kernel/stream`
39
+ 3. `GET /kernel/health`
40
+
41
+ kernel 现已输出 mode/context 运行时占位事件与字段。
42
+
43
+ ## Instance 注入(品牌信息)
44
+
45
+ 1. kernel 支持从 instance 的 domain-pack 读取品牌配置:
46
+ `branding/instance-branding.json`
47
+ 2. 读取优先级:
48
+ - 环境变量 `FLARE_DOMAIN_PACK_ROOT`
49
+ - 自动探测 `apps/<instance_id>/domain-pack`
50
+ 3. 注入位置:
51
+ - `POST /kernel/run` 响应 `result.instance_profile`
52
+ - `POST /kernel/stream` SSE 事件 `instance_profile`
53
+
54
+ 说明:品牌注入仅在 instance 层配置,core 不写死产品名、logo、标签。
55
+
56
+ 本地启动(示例):
57
+
58
+ ```bash
59
+ uvicorn flare_kernel.main:app --app-dir packages/flare-kernel/src --host 0.0.0.0 --port 8002
60
+ ```
61
+
62
+ ## 最小发布说明
63
+
64
+ 1. 当前包版本:`0.1.0`
65
+ 2. 发布元数据:`packages/flare-kernel/pyproject.toml`
66
+ 3. 本地构建:`python -m build`
67
+ 4. 本地安装:`pip install packages/flare-kernel`
@@ -0,0 +1,21 @@
1
+ flare_kernel/__init__.py,sha256=X2cn_jfyNHfrTi2XMm57dCdvnGtVLkzYAqByLVrHGJA,159
2
+ flare_kernel/app.py,sha256=Qy0mArv68_QnETVsee7vr6q6ZkjnGU-bq8GLN9tRYzI,598
3
+ flare_kernel/main.py,sha256=ZltPDNhgrlyE7znjk5y_nq_WSs-BJCocxRRyDB8vJLQ,84
4
+ flare_kernel/contracts/__init__.py,sha256=KsogV5ClgGeXY4e9buF2IUNBWSRuBVspHjQwGjpVRVE,187
5
+ flare_kernel/contracts/kernel_contract.py,sha256=dVLZTBhcfnKze1wBA77Uybu4zEUQ-BKaV7wxq7YUEf4,1026
6
+ flare_kernel/router/__init__.py,sha256=HAFYy4lcZdzLXDfeU2mJuV72QVCYExOm6KDLc_naBbI,115
7
+ flare_kernel/router/kernel.py,sha256=cn6Pmv1gpx3Mqv4XhT2w8dZ9Ryt7qQ4uVlNyayF-TjA,13197
8
+ flare_kernel/runtime/__init__.py,sha256=U_iY2XXZ-PjvEiJ9i1rBKC-So1fA0NeR_AfxKfenHmU,1060
9
+ flare_kernel/runtime/agent_runtime.py,sha256=QfmZK0JYkmwiXGGX2QNCwYj76Wssne-TP-q7SpEw6f4,3949
10
+ flare_kernel/runtime/domain_pack_loader.py,sha256=GO3_BRi0cVE7o4mgrIBTtc-LaNHUYsuQgXYZKU8-1r8,7549
11
+ flare_kernel/runtime/llm_provider.py,sha256=QG--XUjdixXhy1RXvwdSQv9q1TI2szw2soKf1uBoI-k,7513
12
+ flare_kernel/runtime/logging.py,sha256=0zQIVBfKv6ybKZxfZM-T0gBJmuempX2U9PQmDd9NkOo,458
13
+ flare_kernel/runtime/mode_orchestration.py,sha256=Ur79By21DUrsXptwtHAFfvmqeEDqsSIGWxZkuDM7ALk,12540
14
+ flare_kernel/runtime/mode_runtime.py,sha256=Z2US3p1OuKGsKYrbmEeCdyuTzObkYQaGbxMugLRFMGs,8339
15
+ flare_kernel/runtime/skill_runtime.py,sha256=SYZCpHMoslbjIW47TIGzxVZRVDMojZSqdlZkKyFOTbY,3444
16
+ flare_kernel/runtime/trace.py,sha256=HzyvPNBcDvbWV5egExvbCMp3yOEhIB2yyf7lrSWlqCE,230
17
+ flare_kernel/runtime/tests/test_kernel_runtime.py,sha256=QkRtnvhLvQZVlzqGH0X1tnvsrTLnmEqBVaTJgItCgMc,4269
18
+ flare_kernel-0.1.0.dist-info/METADATA,sha256=j9dOYQOf-tPMpr8ECHtaRaDODf-mOoCONGGfa2m0reE,1859
19
+ flare_kernel-0.1.0.dist-info/WHEEL,sha256=aeYiig01lYGDzBgS8HxWXOg3uV61G9ijOsup-k9o1sk,91
20
+ flare_kernel-0.1.0.dist-info/top_level.txt,sha256=cCpzWBwMKe6P14l5gAkOZujVeUrk_hVLI4ppzpcKgF8,13
21
+ flare_kernel-0.1.0.dist-info/RECORD,,
@@ -0,0 +1,5 @@
1
+ Wheel-Version: 1.0
2
+ Generator: setuptools (82.0.1)
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
5
+
@@ -0,0 +1 @@
1
+ flare_kernel