acex-devkit 2.2.0__tar.gz → 2.3.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.
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/PKG-INFO +1 -1
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/pyproject.toml +1 -1
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/__init__.py +15 -1
- acex_devkit-2.3.0/src/acex_devkit/models/ai_ops.py +78 -0
- acex_devkit-2.2.0/src/acex_devkit/models/ai_ops.py +0 -24
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/README.md +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/__init__.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/command.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/diff.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/drivers/__init__.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/drivers/base.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/drivers/base_driver.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/exceptions/__init__.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/acl_model.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/agent_manifest.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/asset.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/assignment.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/attribute_value.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/augment.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/auth_config.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/base.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/capability.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/collection_agent.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/compliance.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/composed_configuration.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/config_components.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/config_snapshot.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/contact.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/container_entry.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/credential.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/external_value.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/lldp_neighbor.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/lldp_topology.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/logging.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/logical_node.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/management_connection.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/ned.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/node_response.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/pagination.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/reference.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/region.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/site.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/spanning_tree.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/telemetry_agent.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/normalizer/__init__.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/normalizer/base.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/normalizer/engine.py +0 -0
- {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/types/__init__.py +0 -0
|
@@ -6,7 +6,16 @@ from .agent_manifest import (
|
|
|
6
6
|
CollectionAgentManifest,
|
|
7
7
|
ManifestTarget,
|
|
8
8
|
)
|
|
9
|
-
from .ai_ops import
|
|
9
|
+
from .ai_ops import (
|
|
10
|
+
AiAnalysisRequest,
|
|
11
|
+
AiAnalysisTask,
|
|
12
|
+
AiAskRequest,
|
|
13
|
+
AiChainLevel,
|
|
14
|
+
AiModelInfo,
|
|
15
|
+
AiModelsResponse,
|
|
16
|
+
AiProviderInfo,
|
|
17
|
+
AiProvidersResponse,
|
|
18
|
+
)
|
|
10
19
|
from .asset import (
|
|
11
20
|
Asset,
|
|
12
21
|
AssetClusterAssetResponse,
|
|
@@ -236,6 +245,11 @@ __all__ = [
|
|
|
236
245
|
"AiAskRequest",
|
|
237
246
|
"AiAnalysisTask",
|
|
238
247
|
"AiAnalysisRequest",
|
|
248
|
+
"AiChainLevel",
|
|
249
|
+
"AiModelInfo",
|
|
250
|
+
"AiModelsResponse",
|
|
251
|
+
"AiProviderInfo",
|
|
252
|
+
"AiProvidersResponse",
|
|
239
253
|
"TelemetryCapability",
|
|
240
254
|
"TelemetryAgentBase",
|
|
241
255
|
"TelemetryAgentCreate",
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
from pydantic import BaseModel
|
|
2
|
+
|
|
3
|
+
|
|
4
|
+
class AiAskRequest(BaseModel):
|
|
5
|
+
"""Body for `POST /ai_ops/ai/ask/`. Returns an SSE stream of str chunks."""
|
|
6
|
+
|
|
7
|
+
question: str
|
|
8
|
+
node_instance_id: int | None = None
|
|
9
|
+
site: str | None = None
|
|
10
|
+
# Explicit model override ("provider/model" or "model"). Omitted = failover chain.
|
|
11
|
+
model: str | None = None
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
class AiAnalysisTask(BaseModel):
|
|
15
|
+
"""Task type for AI config-diff analysis."""
|
|
16
|
+
|
|
17
|
+
name: str
|
|
18
|
+
description: str = ""
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
class AiAnalysisRequest(BaseModel):
|
|
22
|
+
"""Body for `POST /ai_ops/ai/config_analysis/`. Returns an SSE stream."""
|
|
23
|
+
|
|
24
|
+
task: str # "explain" | "risk_assessment" | "alignment"
|
|
25
|
+
diff: str
|
|
26
|
+
node_instance_id: int | None = None
|
|
27
|
+
model: str | None = None
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
class AiChainLevel(BaseModel):
|
|
31
|
+
"""One level in a failover chain, as exposed by `GET /ai_ops/providers`."""
|
|
32
|
+
|
|
33
|
+
provider: str
|
|
34
|
+
model: str
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
class AiModelInfo(BaseModel):
|
|
38
|
+
"""One available model with capability/cost metadata.
|
|
39
|
+
|
|
40
|
+
Fields are None when the provider does not report them and no
|
|
41
|
+
override is configured.
|
|
42
|
+
"""
|
|
43
|
+
|
|
44
|
+
id: str
|
|
45
|
+
is_chat_model: bool = True # False for embeddings/STT/rerank/image models
|
|
46
|
+
supports_tools: bool | None = None # function calling / tool use
|
|
47
|
+
supports_vision: bool | None = None
|
|
48
|
+
context_window: int | None = None
|
|
49
|
+
input_cost_per_mtok: float | None = None
|
|
50
|
+
output_cost_per_mtok: float | None = None
|
|
51
|
+
currency: str | None = None
|
|
52
|
+
extra: dict | None = None # provider-specific passthrough
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
class AiProviderInfo(BaseModel):
|
|
56
|
+
"""A configured AI provider enriched with health + available models."""
|
|
57
|
+
|
|
58
|
+
name: str
|
|
59
|
+
base_url: str
|
|
60
|
+
status: str # "ok" | "unreachable"
|
|
61
|
+
models: list[AiModelInfo] = []
|
|
62
|
+
has_static_models: bool = False
|
|
63
|
+
|
|
64
|
+
|
|
65
|
+
class AiProvidersResponse(BaseModel):
|
|
66
|
+
"""Response for `GET /ai_ops/providers`."""
|
|
67
|
+
|
|
68
|
+
providers: list[AiProviderInfo]
|
|
69
|
+
# Per-task failover chains: task name -> ordered levels. Tasks not
|
|
70
|
+
# explicitly configured inherit "default".
|
|
71
|
+
chains: dict[str, list[AiChainLevel]] = {}
|
|
72
|
+
|
|
73
|
+
|
|
74
|
+
class AiModelsResponse(BaseModel):
|
|
75
|
+
"""Response for `GET /ai_ops/models?provider=X`."""
|
|
76
|
+
|
|
77
|
+
provider: str
|
|
78
|
+
models: list[AiModelInfo]
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
from pydantic import BaseModel
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
class AiAskRequest(BaseModel):
|
|
5
|
-
"""Body for `POST /ai_ops/ai/ask/`. Returns an SSE stream of str chunks."""
|
|
6
|
-
|
|
7
|
-
question: str
|
|
8
|
-
node_instance_id: int | None = None
|
|
9
|
-
site: str | None = None
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class AiAnalysisTask(BaseModel):
|
|
13
|
-
"""Task type for AI config-diff analysis."""
|
|
14
|
-
|
|
15
|
-
name: str
|
|
16
|
-
description: str = ""
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
class AiAnalysisRequest(BaseModel):
|
|
20
|
-
"""Body for `POST /ai_ops/ai/config_analysis/`. Returns an SSE stream."""
|
|
21
|
-
|
|
22
|
-
task: str # "explain" | "risk_assessment" | "alignment"
|
|
23
|
-
diff: str
|
|
24
|
-
node_instance_id: int | None = None
|
|
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
|