synthesis-atlas-cli 0.1.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 (84) hide show
  1. synthesis_atlas_cli-0.1.0/PKG-INFO +110 -0
  2. synthesis_atlas_cli-0.1.0/README.md +95 -0
  3. synthesis_atlas_cli-0.1.0/atlas_sdk/__init__.py +117 -0
  4. synthesis_atlas_cli-0.1.0/atlas_sdk/auth.py +28 -0
  5. synthesis_atlas_cli-0.1.0/atlas_sdk/client.py +1146 -0
  6. synthesis_atlas_cli-0.1.0/atlas_sdk/errors.py +99 -0
  7. synthesis_atlas_cli-0.1.0/atlas_sdk/models/__init__.py +139 -0
  8. synthesis_atlas_cli-0.1.0/atlas_sdk/models/auth.py +25 -0
  9. synthesis_atlas_cli-0.1.0/atlas_sdk/models/benchmarks.py +40 -0
  10. synthesis_atlas_cli-0.1.0/atlas_sdk/models/dashboard.py +101 -0
  11. synthesis_atlas_cli-0.1.0/atlas_sdk/models/datasets.py +54 -0
  12. synthesis_atlas_cli-0.1.0/atlas_sdk/models/evaluation.py +122 -0
  13. synthesis_atlas_cli-0.1.0/atlas_sdk/models/executions.py +123 -0
  14. synthesis_atlas_cli-0.1.0/atlas_sdk/models/health.py +34 -0
  15. synthesis_atlas_cli-0.1.0/atlas_sdk/models/history.py +40 -0
  16. synthesis_atlas_cli-0.1.0/atlas_sdk/models/leaderboard.py +107 -0
  17. synthesis_atlas_cli-0.1.0/atlas_sdk/models/models.py +33 -0
  18. synthesis_atlas_cli-0.1.0/atlas_sdk/models/projects.py +29 -0
  19. synthesis_atlas_cli-0.1.0/atlas_sdk/models/reports.py +100 -0
  20. synthesis_atlas_cli-0.1.0/atlas_sdk/models/responses.py +38 -0
  21. synthesis_atlas_cli-0.1.0/atlas_sdk/models/search.py +24 -0
  22. synthesis_atlas_cli-0.1.0/cli/__init__.py +3 -0
  23. synthesis_atlas_cli-0.1.0/cli/agent/__init__.py +7 -0
  24. synthesis_atlas_cli-0.1.0/cli/agent/loop.py +185 -0
  25. synthesis_atlas_cli-0.1.0/cli/agent/prompt.py +73 -0
  26. synthesis_atlas_cli-0.1.0/cli/agent/provider.py +361 -0
  27. synthesis_atlas_cli-0.1.0/cli/agent/repl.py +221 -0
  28. synthesis_atlas_cli-0.1.0/cli/agent/router.py +151 -0
  29. synthesis_atlas_cli-0.1.0/cli/agent/state.py +111 -0
  30. synthesis_atlas_cli-0.1.0/cli/agent/tools/__init__.py +6 -0
  31. synthesis_atlas_cli-0.1.0/cli/agent/tools/authoring.py +317 -0
  32. synthesis_atlas_cli-0.1.0/cli/agent/tools/base.py +106 -0
  33. synthesis_atlas_cli-0.1.0/cli/agent/tools/datasets.py +328 -0
  34. synthesis_atlas_cli-0.1.0/cli/agent/tools/evaluation.py +355 -0
  35. synthesis_atlas_cli-0.1.0/cli/agent/tools/library.py +566 -0
  36. synthesis_atlas_cli-0.1.0/cli/agent/tools/registry.py +148 -0
  37. synthesis_atlas_cli-0.1.0/cli/app.py +241 -0
  38. synthesis_atlas_cli-0.1.0/cli/client.py +38 -0
  39. synthesis_atlas_cli-0.1.0/cli/commands/__init__.py +1 -0
  40. synthesis_atlas_cli-0.1.0/cli/commands/activity.py +152 -0
  41. synthesis_atlas_cli-0.1.0/cli/commands/auth.py +156 -0
  42. synthesis_atlas_cli-0.1.0/cli/commands/benchmark.py +179 -0
  43. synthesis_atlas_cli-0.1.0/cli/commands/dashboard.py +131 -0
  44. synthesis_atlas_cli-0.1.0/cli/commands/health.py +99 -0
  45. synthesis_atlas_cli-0.1.0/cli/commands/leaderboard.py +313 -0
  46. synthesis_atlas_cli-0.1.0/cli/commands/models.py +88 -0
  47. synthesis_atlas_cli-0.1.0/cli/commands/report.py +329 -0
  48. synthesis_atlas_cli-0.1.0/cli/commands/run.py +576 -0
  49. synthesis_atlas_cli-0.1.0/cli/config.py +168 -0
  50. synthesis_atlas_cli-0.1.0/cli/errors.py +61 -0
  51. synthesis_atlas_cli-0.1.0/cli/output/__init__.py +17 -0
  52. synthesis_atlas_cli-0.1.0/cli/output/errors.py +33 -0
  53. synthesis_atlas_cli-0.1.0/cli/output/json.py +41 -0
  54. synthesis_atlas_cli-0.1.0/cli/output/quiet.py +9 -0
  55. synthesis_atlas_cli-0.1.0/cli/output/schema.py +60 -0
  56. synthesis_atlas_cli-0.1.0/cli/output/table.py +89 -0
  57. synthesis_atlas_cli-0.1.0/packages/__init__.py +10 -0
  58. synthesis_atlas_cli-0.1.0/packages/llm/__init__.py +9 -0
  59. synthesis_atlas_cli-0.1.0/packages/llm/clients/__init__.py +5 -0
  60. synthesis_atlas_cli-0.1.0/packages/llm/clients/adapter.py +197 -0
  61. synthesis_atlas_cli-0.1.0/packages/llm/clients/base.py +41 -0
  62. synthesis_atlas_cli-0.1.0/packages/llm/clients/gemini.py +105 -0
  63. synthesis_atlas_cli-0.1.0/packages/llm/clients/grok.py +98 -0
  64. synthesis_atlas_cli-0.1.0/packages/llm/clients/groq.py +108 -0
  65. synthesis_atlas_cli-0.1.0/packages/llm/clients/mistral.py +98 -0
  66. synthesis_atlas_cli-0.1.0/packages/llm/clients/nvidia.py +105 -0
  67. synthesis_atlas_cli-0.1.0/packages/llm/clients/ollama.py +94 -0
  68. synthesis_atlas_cli-0.1.0/packages/llm/config.py +4 -0
  69. synthesis_atlas_cli-0.1.0/packages/llm/exceptions.py +28 -0
  70. synthesis_atlas_cli-0.1.0/packages/llm/models/__init__.py +5 -0
  71. synthesis_atlas_cli-0.1.0/packages/llm/models/model_types.py +9 -0
  72. synthesis_atlas_cli-0.1.0/packages/llm/models/prompt.py +11 -0
  73. synthesis_atlas_cli-0.1.0/packages/llm/models/response.py +16 -0
  74. synthesis_atlas_cli-0.1.0/packages/llm/prompt_builder.py +47 -0
  75. synthesis_atlas_cli-0.1.0/packages/llm/prompt_genealogy.py +33 -0
  76. synthesis_atlas_cli-0.1.0/packages/llm/registry.py +168 -0
  77. synthesis_atlas_cli-0.1.0/pyproject.toml +72 -0
  78. synthesis_atlas_cli-0.1.0/setup.cfg +4 -0
  79. synthesis_atlas_cli-0.1.0/synthesis_atlas_cli.egg-info/PKG-INFO +110 -0
  80. synthesis_atlas_cli-0.1.0/synthesis_atlas_cli.egg-info/SOURCES.txt +82 -0
  81. synthesis_atlas_cli-0.1.0/synthesis_atlas_cli.egg-info/dependency_links.txt +1 -0
  82. synthesis_atlas_cli-0.1.0/synthesis_atlas_cli.egg-info/entry_points.txt +2 -0
  83. synthesis_atlas_cli-0.1.0/synthesis_atlas_cli.egg-info/requires.txt +8 -0
  84. synthesis_atlas_cli-0.1.0/synthesis_atlas_cli.egg-info/top_level.txt +3 -0
@@ -0,0 +1,110 @@
1
+ Metadata-Version: 2.4
2
+ Name: synthesis-atlas-cli
3
+ Version: 0.1.0
4
+ Summary: Atlas CLI — first-class programmatic interface to the Atlas control plane.
5
+ License-Expression: MIT
6
+ Requires-Python: >=3.11
7
+ Description-Content-Type: text/markdown
8
+ Requires-Dist: click>=8.1.0
9
+ Requires-Dist: httpx>=0.28.1
10
+ Requires-Dist: pydantic[email]>=2.0.0
11
+ Provides-Extra: dev
12
+ Requires-Dist: pytest>=7.0.0; extra == "dev"
13
+ Requires-Dist: ruff>=0.16.0; extra == "dev"
14
+ Requires-Dist: mypy>=2.0.0; extra == "dev"
15
+
16
+ # Atlas CLI
17
+
18
+ Command-line interface for the Atlas evaluation platform.
19
+
20
+ `atlas` talks to the Atlas control-plane API to manage benchmarks, models, runs, and
21
+ reports. The CLI distribution bundles the Atlas SDK (`atlas_sdk`) and the
22
+ internal LLM layer (`packages.llm`) that powers the agent brain, so a single
23
+ `pip install synthesis-atlas-cli` is fully self-contained.
24
+
25
+ ## Install
26
+
27
+ ```bash
28
+ pip install synthesis-atlas-cli
29
+ ```
30
+
31
+ - Python 3.11+ is required.
32
+ - No `atlas-sdk` dependency is pulled from PyPI — the SDK ships inside the wheel
33
+ (the PyPI `atlas-sdk` name belongs to an unrelated project).
34
+
35
+ ## Quick start
36
+
37
+ ```bash
38
+ # 1. Verify the install
39
+ atlas --version
40
+
41
+ # 2. Point at the Atlas API (defaults to http://localhost:8000)
42
+ export ATLAS_BASE_URL="https://api.example.com"
43
+
44
+ # 3. Authenticate (token is saved in %APPDATA%\Atlas\config.toml, never in the repo)
45
+ atlas login
46
+
47
+ # 4. Confirm your identity
48
+ atlas whoami
49
+
50
+ # 5. Browse the full command list
51
+ atlas --help
52
+ ```
53
+
54
+ ## Commands
55
+
56
+ - `atlas health` — check API health
57
+ - `atlas leaderboard` — model / benchmark leaderboards
58
+ - `atlas benchmark` — benchmark operations
59
+ - `atlas model` — model operations
60
+ - `atlas report` — execution reports
61
+ - `atlas run` — start executions
62
+ - `atlas dashboard` — dashboard summaries
63
+ - `atlas activity` — recent activity
64
+
65
+ These are deterministic, scriptable operations (human, JSON, or quiet output via
66
+ `--output`). Run `atlas --help` for the full command list.
67
+
68
+ ## Agent
69
+
70
+ The agentic side of the CLI runs an LLM brain directly in your terminal. It
71
+ comes in two shapes:
72
+
73
+ - **Interactive REPL** — run bare `atlas` in a terminal to start a
74
+ Gemini-CLI-style conversation:
75
+ ```bash
76
+ atlas
77
+ ```
78
+ - **One-shot task** — run a single quoted task non-interactively:
79
+ ```bash
80
+ atlas agent "List the available benchmarks"
81
+ ```
82
+
83
+ The agent brain uses an LLM provider. Set one of:
84
+
85
+ ```bash
86
+ export GEMINI_API_KEY="..."
87
+ export GROQ_API_KEY="..."
88
+ ```
89
+
90
+ With no key configured the agent refuses to start and points you at the missing
91
+ environment variable.
92
+
93
+ ## Development
94
+
95
+ ```bash
96
+ pip install -e ./sdk/python -e ./cli # editable install from the monorepo
97
+ ```
98
+
99
+ This installs the CLI and SDK as editable packages; `packages.llm` resolves to
100
+ the bundled copy inside the CLI layout (see `pyproject.toml`).
101
+
102
+ The CLI version is defined once in `cli/cli/__init__.py` (`__version__`) and is
103
+ picked up dynamically by `pyproject.toml`. See
104
+ [docs/guides/atlas-cli-release.md](../docs/guides/atlas-cli-release.md) for the
105
+ release-time staging build, offline artifact validation, and the (not yet enabled)
106
+ PyPI publishing workflow.
107
+
108
+ ## License
109
+
110
+ Copyright (c) 2026. All rights reserved.
@@ -0,0 +1,95 @@
1
+ # Atlas CLI
2
+
3
+ Command-line interface for the Atlas evaluation platform.
4
+
5
+ `atlas` talks to the Atlas control-plane API to manage benchmarks, models, runs, and
6
+ reports. The CLI distribution bundles the Atlas SDK (`atlas_sdk`) and the
7
+ internal LLM layer (`packages.llm`) that powers the agent brain, so a single
8
+ `pip install synthesis-atlas-cli` is fully self-contained.
9
+
10
+ ## Install
11
+
12
+ ```bash
13
+ pip install synthesis-atlas-cli
14
+ ```
15
+
16
+ - Python 3.11+ is required.
17
+ - No `atlas-sdk` dependency is pulled from PyPI — the SDK ships inside the wheel
18
+ (the PyPI `atlas-sdk` name belongs to an unrelated project).
19
+
20
+ ## Quick start
21
+
22
+ ```bash
23
+ # 1. Verify the install
24
+ atlas --version
25
+
26
+ # 2. Point at the Atlas API (defaults to http://localhost:8000)
27
+ export ATLAS_BASE_URL="https://api.example.com"
28
+
29
+ # 3. Authenticate (token is saved in %APPDATA%\Atlas\config.toml, never in the repo)
30
+ atlas login
31
+
32
+ # 4. Confirm your identity
33
+ atlas whoami
34
+
35
+ # 5. Browse the full command list
36
+ atlas --help
37
+ ```
38
+
39
+ ## Commands
40
+
41
+ - `atlas health` — check API health
42
+ - `atlas leaderboard` — model / benchmark leaderboards
43
+ - `atlas benchmark` — benchmark operations
44
+ - `atlas model` — model operations
45
+ - `atlas report` — execution reports
46
+ - `atlas run` — start executions
47
+ - `atlas dashboard` — dashboard summaries
48
+ - `atlas activity` — recent activity
49
+
50
+ These are deterministic, scriptable operations (human, JSON, or quiet output via
51
+ `--output`). Run `atlas --help` for the full command list.
52
+
53
+ ## Agent
54
+
55
+ The agentic side of the CLI runs an LLM brain directly in your terminal. It
56
+ comes in two shapes:
57
+
58
+ - **Interactive REPL** — run bare `atlas` in a terminal to start a
59
+ Gemini-CLI-style conversation:
60
+ ```bash
61
+ atlas
62
+ ```
63
+ - **One-shot task** — run a single quoted task non-interactively:
64
+ ```bash
65
+ atlas agent "List the available benchmarks"
66
+ ```
67
+
68
+ The agent brain uses an LLM provider. Set one of:
69
+
70
+ ```bash
71
+ export GEMINI_API_KEY="..."
72
+ export GROQ_API_KEY="..."
73
+ ```
74
+
75
+ With no key configured the agent refuses to start and points you at the missing
76
+ environment variable.
77
+
78
+ ## Development
79
+
80
+ ```bash
81
+ pip install -e ./sdk/python -e ./cli # editable install from the monorepo
82
+ ```
83
+
84
+ This installs the CLI and SDK as editable packages; `packages.llm` resolves to
85
+ the bundled copy inside the CLI layout (see `pyproject.toml`).
86
+
87
+ The CLI version is defined once in `cli/cli/__init__.py` (`__version__`) and is
88
+ picked up dynamically by `pyproject.toml`. See
89
+ [docs/guides/atlas-cli-release.md](../docs/guides/atlas-cli-release.md) for the
90
+ release-time staging build, offline artifact validation, and the (not yet enabled)
91
+ PyPI publishing workflow.
92
+
93
+ ## License
94
+
95
+ Copyright (c) 2026. All rights reserved.
@@ -0,0 +1,117 @@
1
+ """atlas-sdk: Python SDK for the Atlas control-plane API.
2
+
3
+ A thin HTTP client containing zero Atlas business logic.
4
+ CLI → atlas-sdk → HTTP → /api/v1.
5
+ """
6
+
7
+ from atlas_sdk.auth import StaticTokenSupplier, TokenSupplier
8
+ from atlas_sdk.client import AtlasClient
9
+ from atlas_sdk.errors import (
10
+ ApiError,
11
+ AuthError,
12
+ ConflictError,
13
+ ForbiddenError,
14
+ NetworkError,
15
+ NotFoundError,
16
+ RateLimitedError,
17
+ ServerError,
18
+ ValidationError,
19
+ )
20
+ from atlas_sdk.models.benchmarks import (
21
+ BenchmarkRead,
22
+ BenchmarkVersionRead,
23
+ PageResponse,
24
+ )
25
+ from atlas_sdk.models.dashboard import (
26
+ DashboardActivity,
27
+ DashboardCapability,
28
+ DashboardCapabilityScore,
29
+ DashboardHierarchy,
30
+ DashboardItem,
31
+ DashboardRuntime,
32
+ DashboardSnapshot,
33
+ DashboardSummary,
34
+ )
35
+ from atlas_sdk.models.executions import (
36
+ ArtifactResponse,
37
+ ExecutionAttemptResponse,
38
+ ExecutionCreateRequest,
39
+ ExecutionListResponse,
40
+ ExecutionPage,
41
+ ExecutionResponse,
42
+ ExecutionState,
43
+ )
44
+ from atlas_sdk.models.history import ExecutionHistoryRead, ModelActivityRead
45
+ from atlas_sdk.models.leaderboard import (
46
+ LeaderboardEntryRead,
47
+ LeaderboardRead,
48
+ LeaderboardType,
49
+ ModelBenchmarkHistory,
50
+ ModelBenchmarkVersionHistory,
51
+ ModelSummary,
52
+ TrendPoint,
53
+ )
54
+ from atlas_sdk.models.models import ModelRead, ModelStatus
55
+ from atlas_sdk.models.projects import OrganizationRead, ProjectRead
56
+ from atlas_sdk.models.reports import (
57
+ CapabilityScoreRead,
58
+ DownloadResult,
59
+ PaginatedReportRunsRead,
60
+ ReportRunEntryRead,
61
+ ReportRunStatus,
62
+ ReportSummaryRead,
63
+ )
64
+
65
+ __all__ = [
66
+ "AtlasClient",
67
+ "ApiError",
68
+ "AuthError",
69
+ "ArtifactResponse",
70
+ "BenchmarkRead",
71
+ "BenchmarkVersionRead",
72
+ "ConflictError",
73
+ "DashboardActivity",
74
+ "DashboardCapability",
75
+ "DashboardCapabilityScore",
76
+ "DashboardHierarchy",
77
+ "DashboardItem",
78
+ "DashboardRuntime",
79
+ "DashboardSnapshot",
80
+ "DashboardSummary",
81
+ "ExecutionAttemptResponse",
82
+ "ExecutionCreateRequest",
83
+ "ExecutionHistoryRead",
84
+ "ExecutionListResponse",
85
+ "ExecutionPage",
86
+ "ExecutionResponse",
87
+ "ExecutionState",
88
+ "ForbiddenError",
89
+ "LeaderboardEntryRead",
90
+ "LeaderboardRead",
91
+ "LeaderboardType",
92
+ "ModelActivityRead",
93
+ "ModelBenchmarkHistory",
94
+ "ModelBenchmarkVersionHistory",
95
+ "ModelRead",
96
+ "ModelStatus",
97
+ "ModelSummary",
98
+ "OrganizationRead",
99
+ "ProjectRead",
100
+ "TrendPoint",
101
+ "NetworkError",
102
+ "NotFoundError",
103
+ "PaginatedReportRunsRead",
104
+ "PageResponse",
105
+ "RateLimitedError",
106
+ "ReportRunEntryRead",
107
+ "ReportRunStatus",
108
+ "CapabilityScoreRead",
109
+ "ReportSummaryRead",
110
+ "DownloadResult",
111
+ "ServerError",
112
+ "StaticTokenSupplier",
113
+ "TokenSupplier",
114
+ "ValidationError",
115
+ ]
116
+
117
+ __version__ = "0.1.0"
@@ -0,0 +1,28 @@
1
+ """Token supply strategies for SDK authentication.
2
+
3
+ The SDK owns *attaching* credentials to HTTP requests.
4
+ The CLI owns credential *storage and configuration*.
5
+
6
+ A ``TokenSupplier`` is a zero-argument callable that returns a bearer token
7
+ string. The ``AtlasClient`` calls it before every request.
8
+ """
9
+
10
+ from __future__ import annotations
11
+
12
+ from typing import Protocol
13
+
14
+
15
+ class TokenSupplier(Protocol):
16
+ """Protocol for token supply — any callable ``() -> str``."""
17
+
18
+ def __call__(self) -> str: ... # pragma: no cover
19
+
20
+
21
+ class StaticTokenSupplier:
22
+ """Returns a fixed token. Useful for testing and CI environments."""
23
+
24
+ def __init__(self, token: str) -> None:
25
+ self._token = token
26
+
27
+ def __call__(self) -> str:
28
+ return self._token