flare-kernel 0.1.0__tar.gz → 0.2.0__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.
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/PKG-INFO +37 -8
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/README.md +30 -6
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/pyproject.toml +7 -2
- flare_kernel-0.2.0/src/flare_kernel/contracts/__init__.py +23 -0
- flare_kernel-0.2.0/src/flare_kernel/contracts/kernel_contract.py +96 -0
- flare_kernel-0.2.0/src/flare_kernel/router/kernel.py +2657 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/__init__.py +79 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/runtime/agent_runtime.py +38 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/decision_engine.py +410 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/domain_pack_loader.py +479 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/infrastructure.py +523 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/llm_provider.py +410 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/mode_orchestration.py +760 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/mode_runtime.py +446 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/model_router.py +443 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/runtime/skill_runtime.py +34 -0
- flare_kernel-0.2.0/src/flare_kernel/runtime/tests/test_kernel_runtime.py +319 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel.egg-info/PKG-INFO +37 -8
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel.egg-info/SOURCES.txt +10 -1
- flare_kernel-0.2.0/src/flare_kernel.egg-info/requires.txt +9 -0
- flare_kernel-0.2.0/tests/test_basics.py +42 -0
- flare_kernel-0.2.0/tests/test_decision_engine.py +175 -0
- flare_kernel-0.2.0/tests/test_domain_pack_loader.py +85 -0
- flare_kernel-0.2.0/tests/test_infrastructure_helpers.py +23 -0
- flare_kernel-0.2.0/tests/test_intent_resolution.py +645 -0
- flare_kernel-0.2.0/tests/test_llm_provider.py +227 -0
- flare_kernel-0.2.0/tests/test_model_router.py +261 -0
- flare_kernel-0.1.0/src/flare_kernel/contracts/__init__.py +0 -5
- flare_kernel-0.1.0/src/flare_kernel/contracts/kernel_contract.py +0 -36
- flare_kernel-0.1.0/src/flare_kernel/router/kernel.py +0 -342
- flare_kernel-0.1.0/src/flare_kernel/runtime/__init__.py +0 -26
- flare_kernel-0.1.0/src/flare_kernel/runtime/domain_pack_loader.py +0 -240
- flare_kernel-0.1.0/src/flare_kernel/runtime/llm_provider.py +0 -204
- flare_kernel-0.1.0/src/flare_kernel/runtime/mode_orchestration.py +0 -330
- flare_kernel-0.1.0/src/flare_kernel/runtime/mode_runtime.py +0 -262
- flare_kernel-0.1.0/src/flare_kernel/runtime/tests/test_kernel_runtime.py +0 -114
- flare_kernel-0.1.0/src/flare_kernel.egg-info/requires.txt +0 -4
- flare_kernel-0.1.0/tests/test_basics.py +0 -25
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/setup.cfg +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/__init__.py +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/app.py +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/main.py +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/router/__init__.py +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/runtime/logging.py +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel/runtime/trace.py +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel.egg-info/dependency_links.txt +0 -0
- {flare_kernel-0.1.0 → flare_kernel-0.2.0}/src/flare_kernel.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: flare-kernel
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.2.0
|
|
4
4
|
Summary: FLARE kernel runtime package
|
|
5
5
|
License: Proprietary
|
|
6
6
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -8,10 +8,15 @@ Classifier: Programming Language :: Python :: 3
|
|
|
8
8
|
Classifier: Programming Language :: Python :: 3.11
|
|
9
9
|
Requires-Python: >=3.11
|
|
10
10
|
Description-Content-Type: text/markdown
|
|
11
|
-
Requires-Dist: flare-engines<0.
|
|
11
|
+
Requires-Dist: flare-engines<0.3.0,>=0.2.0
|
|
12
12
|
Requires-Dist: fastapi<1.0,>=0.115
|
|
13
13
|
Requires-Dist: pydantic<3,>=2
|
|
14
14
|
Requires-Dist: uvicorn<1.0,>=0.30
|
|
15
|
+
Requires-Dist: httpx<1.0,>=0.27
|
|
16
|
+
Requires-Dist: sqlalchemy<3,>=2
|
|
17
|
+
Requires-Dist: psycopg2-binary<3,>=2.9
|
|
18
|
+
Requires-Dist: redis<6,>=5
|
|
19
|
+
Requires-Dist: qdrant-client<2,>=1.9
|
|
15
20
|
|
|
16
21
|
# flare-kernel
|
|
17
22
|
|
|
@@ -37,21 +42,22 @@ Requires-Dist: uvicorn<1.0,>=0.30
|
|
|
37
42
|
1. `POST /kernel/run`
|
|
38
43
|
2. `POST /kernel/stream`
|
|
39
44
|
3. `GET /kernel/health`
|
|
45
|
+
4. `POST /kernel/knowledge/ingest`
|
|
46
|
+
5. `POST /kernel/knowledge/search`
|
|
40
47
|
|
|
41
48
|
kernel 现已输出 mode/context 运行时占位事件与字段。
|
|
42
49
|
|
|
43
|
-
##
|
|
50
|
+
## 品牌注入(可选)
|
|
44
51
|
|
|
45
|
-
1. kernel 支持从
|
|
52
|
+
1. kernel 支持从 domain-pack 读取品牌配置:
|
|
46
53
|
`branding/instance-branding.json`
|
|
47
|
-
2.
|
|
48
|
-
-
|
|
49
|
-
- 自动探测 `apps/<instance_id>/domain-pack`
|
|
54
|
+
2. 读取方式:
|
|
55
|
+
- 仅通过环境变量 `FLARE_DOMAIN_PACK_ROOT` 显式指定
|
|
50
56
|
3. 注入位置:
|
|
51
57
|
- `POST /kernel/run` 响应 `result.instance_profile`
|
|
52
58
|
- `POST /kernel/stream` SSE 事件 `instance_profile`
|
|
53
59
|
|
|
54
|
-
|
|
60
|
+
说明:品牌注入通过外部 domain-pack 配置,core 不写死产品名、logo、标签。
|
|
55
61
|
|
|
56
62
|
本地启动(示例):
|
|
57
63
|
|
|
@@ -59,6 +65,29 @@ kernel 现已输出 mode/context 运行时占位事件与字段。
|
|
|
59
65
|
uvicorn flare_kernel.main:app --app-dir packages/flare-kernel/src --host 0.0.0.0 --port 8002
|
|
60
66
|
```
|
|
61
67
|
|
|
68
|
+
环境变量(真实链路):
|
|
69
|
+
|
|
70
|
+
1. `DASHSCOPE_API_KEY`(必填,真实百炼调用)
|
|
71
|
+
2. `LLM_PROVIDER_BACKEND`(默认 `dashscope`)
|
|
72
|
+
3. `FLARE_POSTGRES_DSN`
|
|
73
|
+
4. `FLARE_REDIS_URL`
|
|
74
|
+
5. `FLARE_QDRANT_URL`
|
|
75
|
+
|
|
76
|
+
健康检查会输出依赖状态:
|
|
77
|
+
|
|
78
|
+
1. `llm_ready`
|
|
79
|
+
2. `postgres_ready`
|
|
80
|
+
3. `redis_ready`
|
|
81
|
+
4. `qdrant_ready`
|
|
82
|
+
|
|
83
|
+
模式决策优先级(`/kernel/run` 与 `/kernel/stream`):
|
|
84
|
+
|
|
85
|
+
1. `intent_override`(外部业务侧注入)
|
|
86
|
+
2. 消息意图识别(内置关键词)
|
|
87
|
+
3. `manual_mode`
|
|
88
|
+
4. `current_mode`
|
|
89
|
+
5. fallback(`intent/default`)
|
|
90
|
+
|
|
62
91
|
## 最小发布说明
|
|
63
92
|
|
|
64
93
|
1. 当前包版本:`0.1.0`
|
|
@@ -22,21 +22,22 @@
|
|
|
22
22
|
1. `POST /kernel/run`
|
|
23
23
|
2. `POST /kernel/stream`
|
|
24
24
|
3. `GET /kernel/health`
|
|
25
|
+
4. `POST /kernel/knowledge/ingest`
|
|
26
|
+
5. `POST /kernel/knowledge/search`
|
|
25
27
|
|
|
26
28
|
kernel 现已输出 mode/context 运行时占位事件与字段。
|
|
27
29
|
|
|
28
|
-
##
|
|
30
|
+
## 品牌注入(可选)
|
|
29
31
|
|
|
30
|
-
1. kernel 支持从
|
|
32
|
+
1. kernel 支持从 domain-pack 读取品牌配置:
|
|
31
33
|
`branding/instance-branding.json`
|
|
32
|
-
2.
|
|
33
|
-
-
|
|
34
|
-
- 自动探测 `apps/<instance_id>/domain-pack`
|
|
34
|
+
2. 读取方式:
|
|
35
|
+
- 仅通过环境变量 `FLARE_DOMAIN_PACK_ROOT` 显式指定
|
|
35
36
|
3. 注入位置:
|
|
36
37
|
- `POST /kernel/run` 响应 `result.instance_profile`
|
|
37
38
|
- `POST /kernel/stream` SSE 事件 `instance_profile`
|
|
38
39
|
|
|
39
|
-
|
|
40
|
+
说明:品牌注入通过外部 domain-pack 配置,core 不写死产品名、logo、标签。
|
|
40
41
|
|
|
41
42
|
本地启动(示例):
|
|
42
43
|
|
|
@@ -44,6 +45,29 @@ kernel 现已输出 mode/context 运行时占位事件与字段。
|
|
|
44
45
|
uvicorn flare_kernel.main:app --app-dir packages/flare-kernel/src --host 0.0.0.0 --port 8002
|
|
45
46
|
```
|
|
46
47
|
|
|
48
|
+
环境变量(真实链路):
|
|
49
|
+
|
|
50
|
+
1. `DASHSCOPE_API_KEY`(必填,真实百炼调用)
|
|
51
|
+
2. `LLM_PROVIDER_BACKEND`(默认 `dashscope`)
|
|
52
|
+
3. `FLARE_POSTGRES_DSN`
|
|
53
|
+
4. `FLARE_REDIS_URL`
|
|
54
|
+
5. `FLARE_QDRANT_URL`
|
|
55
|
+
|
|
56
|
+
健康检查会输出依赖状态:
|
|
57
|
+
|
|
58
|
+
1. `llm_ready`
|
|
59
|
+
2. `postgres_ready`
|
|
60
|
+
3. `redis_ready`
|
|
61
|
+
4. `qdrant_ready`
|
|
62
|
+
|
|
63
|
+
模式决策优先级(`/kernel/run` 与 `/kernel/stream`):
|
|
64
|
+
|
|
65
|
+
1. `intent_override`(外部业务侧注入)
|
|
66
|
+
2. 消息意图识别(内置关键词)
|
|
67
|
+
3. `manual_mode`
|
|
68
|
+
4. `current_mode`
|
|
69
|
+
5. fallback(`intent/default`)
|
|
70
|
+
|
|
47
71
|
## 最小发布说明
|
|
48
72
|
|
|
49
73
|
1. 当前包版本:`0.1.0`
|
|
@@ -4,15 +4,20 @@ build-backend = "setuptools.build_meta"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "flare-kernel"
|
|
7
|
-
version = "0.
|
|
7
|
+
version = "0.2.0"
|
|
8
8
|
description = "FLARE kernel runtime package"
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
requires-python = ">=3.11"
|
|
11
11
|
dependencies = [
|
|
12
|
-
"flare-engines>=0.
|
|
12
|
+
"flare-engines>=0.2.0,<0.3.0",
|
|
13
13
|
"fastapi>=0.115,<1.0",
|
|
14
14
|
"pydantic>=2,<3",
|
|
15
15
|
"uvicorn>=0.30,<1.0",
|
|
16
|
+
"httpx>=0.27,<1.0",
|
|
17
|
+
"sqlalchemy>=2,<3",
|
|
18
|
+
"psycopg2-binary>=2.9,<3",
|
|
19
|
+
"redis>=5,<6",
|
|
20
|
+
"qdrant-client>=1.9,<2",
|
|
16
21
|
]
|
|
17
22
|
license = { text = "Proprietary" }
|
|
18
23
|
classifiers = [
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"""Kernel contracts."""
|
|
2
|
+
|
|
3
|
+
from flare_kernel.contracts.kernel_contract import (
|
|
4
|
+
HealthResponse,
|
|
5
|
+
IntentSuggestResponse,
|
|
6
|
+
KernelRequest,
|
|
7
|
+
KernelResponse,
|
|
8
|
+
KnowledgeIngestRequest,
|
|
9
|
+
KnowledgeIngestResponse,
|
|
10
|
+
KnowledgeSearchRequest,
|
|
11
|
+
KnowledgeSearchResponse,
|
|
12
|
+
)
|
|
13
|
+
|
|
14
|
+
__all__ = [
|
|
15
|
+
"KernelRequest",
|
|
16
|
+
"KernelResponse",
|
|
17
|
+
"HealthResponse",
|
|
18
|
+
"IntentSuggestResponse",
|
|
19
|
+
"KnowledgeIngestRequest",
|
|
20
|
+
"KnowledgeIngestResponse",
|
|
21
|
+
"KnowledgeSearchRequest",
|
|
22
|
+
"KnowledgeSearchResponse",
|
|
23
|
+
]
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"""Kernel API contracts."""
|
|
2
|
+
|
|
3
|
+
from __future__ import annotations
|
|
4
|
+
|
|
5
|
+
from typing import Any, Literal
|
|
6
|
+
|
|
7
|
+
from pydantic import BaseModel, Field
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class KernelRequest(BaseModel):
|
|
11
|
+
tenant_id: str = "default"
|
|
12
|
+
instance_id: str = "default"
|
|
13
|
+
domain_pack_version: str = "v1"
|
|
14
|
+
session_id: str = "default"
|
|
15
|
+
intent: str = "default"
|
|
16
|
+
intent_override: str | None = None
|
|
17
|
+
mode: str | None = None
|
|
18
|
+
manual_mode: str | None = None
|
|
19
|
+
current_mode: str | None = None
|
|
20
|
+
project_id: str | None = None
|
|
21
|
+
user_id: str | None = None
|
|
22
|
+
retrieval_config: dict[str, Any] = Field(default_factory=dict)
|
|
23
|
+
canvas_config: dict[str, Any] = Field(default_factory=dict)
|
|
24
|
+
plan_config: dict[str, Any] = Field(default_factory=dict)
|
|
25
|
+
payload: dict[str, Any] = Field(default_factory=dict)
|
|
26
|
+
context_refs: list[Any] = Field(default_factory=list)
|
|
27
|
+
knowledge_refs: list[str] = Field(default_factory=list)
|
|
28
|
+
action_key: str | None = None
|
|
29
|
+
target_mode: str | None = None
|
|
30
|
+
action_status: str | None = None
|
|
31
|
+
action_reason: str | None = None
|
|
32
|
+
trace_id: str | None = None
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class KernelResponse(BaseModel):
|
|
36
|
+
trace_id: str
|
|
37
|
+
state: Literal["RUNNING", "SUCCEEDED", "FAILED"]
|
|
38
|
+
events: list[dict[str, Any]] = Field(default_factory=list)
|
|
39
|
+
result: dict[str, Any] = Field(default_factory=dict)
|
|
40
|
+
next_actions: list[dict[str, Any]] = Field(default_factory=list)
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
class HealthResponse(BaseModel):
|
|
44
|
+
status: Literal["healthy"]
|
|
45
|
+
service: str
|
|
46
|
+
trace_id: str
|
|
47
|
+
llm_ready: bool
|
|
48
|
+
postgres_ready: bool
|
|
49
|
+
redis_ready: bool
|
|
50
|
+
qdrant_ready: bool
|
|
51
|
+
canvas_ready: bool
|
|
52
|
+
rag_ready: bool
|
|
53
|
+
plan_ready: bool
|
|
54
|
+
|
|
55
|
+
|
|
56
|
+
class KnowledgeIngestRequest(BaseModel):
|
|
57
|
+
project_id: str = "default"
|
|
58
|
+
user_id: str = "default"
|
|
59
|
+
session_id: str = "default"
|
|
60
|
+
source_id: str | None = None
|
|
61
|
+
title: str | None = None
|
|
62
|
+
content: str
|
|
63
|
+
metadata: dict[str, Any] = Field(default_factory=dict)
|
|
64
|
+
|
|
65
|
+
|
|
66
|
+
class KnowledgeIngestResponse(BaseModel):
|
|
67
|
+
trace_id: str
|
|
68
|
+
project_id: str
|
|
69
|
+
user_id: str
|
|
70
|
+
record_id: str
|
|
71
|
+
chunk_count: int
|
|
72
|
+
status: Literal["stored", "partial", "failed"]
|
|
73
|
+
details: dict[str, Any] = Field(default_factory=dict)
|
|
74
|
+
|
|
75
|
+
|
|
76
|
+
class KnowledgeSearchRequest(BaseModel):
|
|
77
|
+
project_id: str = "default"
|
|
78
|
+
user_id: str = "default"
|
|
79
|
+
query: str
|
|
80
|
+
top_k: int = 5
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
class KnowledgeSearchResponse(BaseModel):
|
|
84
|
+
trace_id: str
|
|
85
|
+
project_id: str
|
|
86
|
+
user_id: str
|
|
87
|
+
query: str
|
|
88
|
+
results: list[dict[str, Any]] = Field(default_factory=list)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
class IntentSuggestResponse(BaseModel):
|
|
92
|
+
trace_id: str
|
|
93
|
+
suggested_mode: str
|
|
94
|
+
confidence: float = 0.0
|
|
95
|
+
reason: str = ""
|
|
96
|
+
source: Literal["intent_override", "manual", "current", "llm", "keywords", "fallback"] = "fallback"
|