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.
Files changed (52) hide show
  1. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/PKG-INFO +1 -1
  2. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/pyproject.toml +1 -1
  3. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/__init__.py +15 -1
  4. acex_devkit-2.3.0/src/acex_devkit/models/ai_ops.py +78 -0
  5. acex_devkit-2.2.0/src/acex_devkit/models/ai_ops.py +0 -24
  6. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/README.md +0 -0
  7. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/__init__.py +0 -0
  8. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/__init__.py +0 -0
  9. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/command.py +0 -0
  10. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/configdiffer.py +0 -0
  11. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/diff.py +0 -0
  12. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/old_configdiffer.py +0 -0
  13. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/configdiffer/old_diff.py +0 -0
  14. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/drivers/__init__.py +0 -0
  15. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/drivers/base.py +0 -0
  16. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/drivers/base_driver.py +0 -0
  17. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/exceptions/__init__.py +0 -0
  18. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/acl_model.py +0 -0
  19. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/agent_manifest.py +0 -0
  20. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/asset.py +0 -0
  21. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/assignment.py +0 -0
  22. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/attribute_value.py +0 -0
  23. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/augment.py +0 -0
  24. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/auth_config.py +0 -0
  25. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/base.py +0 -0
  26. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/capability.py +0 -0
  27. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/collection_agent.py +0 -0
  28. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/compliance.py +0 -0
  29. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/composed_configuration.py +0 -0
  30. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/config_components.py +0 -0
  31. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/config_snapshot.py +0 -0
  32. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/contact.py +0 -0
  33. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/container_entry.py +0 -0
  34. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/credential.py +0 -0
  35. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/external_value.py +0 -0
  36. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/lldp_neighbor.py +0 -0
  37. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/lldp_topology.py +0 -0
  38. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/logging.py +0 -0
  39. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/logical_node.py +0 -0
  40. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/management_connection.py +0 -0
  41. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/ned.py +0 -0
  42. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/node_response.py +0 -0
  43. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/pagination.py +0 -0
  44. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/reference.py +0 -0
  45. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/region.py +0 -0
  46. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/site.py +0 -0
  47. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/spanning_tree.py +0 -0
  48. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/models/telemetry_agent.py +0 -0
  49. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/normalizer/__init__.py +0 -0
  50. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/normalizer/base.py +0 -0
  51. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/normalizer/engine.py +0 -0
  52. {acex_devkit-2.2.0 → acex_devkit-2.3.0}/src/acex_devkit/types/__init__.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acex-devkit
3
- Version: 2.2.0
3
+ Version: 2.3.0
4
4
  Summary: ACE-X DevKit - Development kit for building ACE-X drivers and plugins
5
5
  License: AGPL-3.0
6
6
  Keywords: automation,devkit,sdk,drivers,plugins
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "acex-devkit"
3
- version = "2.2.0"
3
+ version = "2.3.0"
4
4
  description = "ACE-X DevKit - Development kit for building ACE-X drivers and plugins"
5
5
  authors = ["Johan Lahti <johan.lahti@acebit.se>"]
6
6
  readme = "README.md"
@@ -6,7 +6,16 @@ from .agent_manifest import (
6
6
  CollectionAgentManifest,
7
7
  ManifestTarget,
8
8
  )
9
- from .ai_ops import AiAnalysisRequest, AiAnalysisTask, AiAskRequest
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