duoops 0.1.9 → 0.2.1

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 (55) hide show
  1. package/README.md +151 -63
  2. package/data/aws_machine_power_profiles.json +54 -0
  3. package/data/cpu_physical_specs.json +105 -0
  4. package/data/cpu_power_profiles.json +275 -0
  5. package/data/gcp_machine_power_profiles.json +1802 -0
  6. package/data/runtime-pue-mappings.json +183 -0
  7. package/dist/commands/autofix-ci.d.ts +13 -0
  8. package/dist/commands/autofix-ci.js +114 -0
  9. package/dist/commands/autofix.d.ts +5 -0
  10. package/dist/commands/autofix.js +11 -0
  11. package/dist/commands/init.js +104 -33
  12. package/dist/commands/mcp/deploy.d.ts +13 -0
  13. package/dist/commands/mcp/deploy.js +139 -0
  14. package/dist/commands/measure/calculate.js +2 -2
  15. package/dist/commands/portal.js +421 -6
  16. package/dist/lib/ai/agent.js +1 -0
  17. package/dist/lib/ai/tools/editing.js +28 -13
  18. package/dist/lib/ai/tools/gitlab.js +8 -4
  19. package/dist/lib/config.d.ts +10 -0
  20. package/dist/lib/gcloud.d.ts +7 -0
  21. package/dist/lib/gcloud.js +105 -0
  22. package/dist/lib/gitlab/pipelines-service.d.ts +23 -0
  23. package/dist/lib/gitlab/pipelines-service.js +146 -0
  24. package/dist/lib/gitlab/runner-service.d.ts +11 -0
  25. package/dist/lib/gitlab/runner-service.js +15 -0
  26. package/dist/lib/portal/settings.d.ts +3 -0
  27. package/dist/lib/portal/settings.js +48 -0
  28. package/dist/lib/scaffold.d.ts +5 -0
  29. package/dist/lib/scaffold.js +32 -0
  30. package/dist/portal/assets/HomeDashboard-DlkwSyKx.js +1 -0
  31. package/dist/portal/assets/JobDetailsDrawer-7kXXMSH8.js +1 -0
  32. package/dist/portal/assets/JobsDashboard-D4pNc9TM.js +1 -0
  33. package/dist/portal/assets/MetricsDashboard-BcgzvzBz.js +1 -0
  34. package/dist/portal/assets/PipelinesDashboard-BNrSM9GB.js +1 -0
  35. package/dist/portal/assets/allPaths-CXDKahbk.js +1 -0
  36. package/dist/portal/assets/allPathsLoader-BF5PAx2c.js +2 -0
  37. package/dist/portal/assets/cache-YerT0Slh.js +6 -0
  38. package/dist/portal/assets/core-Cz8f3oSB.js +19 -0
  39. package/dist/portal/assets/{index-C54ZhVUo.js → index-B9sNUqEC.js} +1 -1
  40. package/dist/portal/assets/index-BWa_E8Y7.css +1 -0
  41. package/dist/portal/assets/index-Bp4RqK05.js +1 -0
  42. package/dist/portal/assets/index-DW6Qp0d6.js +64 -0
  43. package/dist/portal/assets/index-Uc4Xhv31.js +1 -0
  44. package/dist/portal/assets/progressBar-C4SmnGeZ.js +1 -0
  45. package/dist/portal/assets/splitPathsBySizeLoader-C-T9_API.js +1 -0
  46. package/dist/portal/index.html +2 -2
  47. package/oclif.manifest.json +147 -2
  48. package/package.json +2 -1
  49. package/templates/.gitlab/duo/flows/duoops.yaml +114 -0
  50. package/templates/agents/agent.yml +45 -0
  51. package/templates/duoops-autofix-component.yml +52 -0
  52. package/templates/flows/flow.yml +283 -0
  53. package/dist/portal/assets/MetricsDashboard-Bnj-jtu6.js +0 -27
  54. package/dist/portal/assets/index-B1SGDQNX.css +0 -1
  55. package/dist/portal/assets/index-Bk8OVV7a.js +0 -106
package/README.md CHANGED
@@ -1,35 +1,50 @@
1
1
  # DuoOps
2
2
 
3
- > **Toolset for Explainable and Sustainable CI on GitLab.**
3
+ > **Sustainable and Explainable CI/CD for GitLab powered by AI.**
4
4
 
5
- DuoOps is a developer-focused CLI and Web Portal designed to make GitLab CI/CD pipelines more transparent, debuggable, and environmentally sustainable. It leverages AI agents to explain failures and provides tools to measure and visualize the carbon footprint of your CI jobs.
5
+ DuoOps helps developers understand, debug, and reduce the environmental impact of their GitLab CI/CD pipelines. It combines AI-powered troubleshooting with carbon footprint measurement, giving teams actionable insights to build greener software.
6
6
 
7
7
  ![License](https://img.shields.io/badge/license-MIT-blue.svg)
8
- ![Version](https://img.shields.io/badge/version-0.0.0-green.svg)
8
+ ![GitLab Hackathon 2026](https://img.shields.io/badge/GitLab_Hackathon-2026-orange.svg)
9
+
10
+ ---
11
+
12
+ <p align="center">
13
+ <img src="hackathon-files/deliverables.png" alt="DuoOps Deliverables — CI Component, MCP Server, CLI Tool" width="700" />
14
+ </p>
15
+
16
+ | Deliverable | Description |
17
+ | :--- | :--- |
18
+ | **CI Component** | Drop-in GitLab CI component that measures carbon emissions per job using CPU/RAM timeseries, then persists results to BigQuery. |
19
+ | **MCP Server** | Model Context Protocol server that exposes emissions data to AI agents (GitLab Duo Chat, Claude, etc.) via standardized tools. |
20
+ | **CLI Tool** | Local command-line interface for pipeline inspection, AI-powered troubleshooting, carbon measurement, and launching the web portal. |
21
+
22
+ ---
9
23
 
10
24
  ## 🌟 Key Features
11
25
 
12
- * **🤖 AI-Powered Troubleshooting**: Ask questions about your pipelines in plain English. The AI agent (powered by GitLab Duo or Google Vertex AI) analyzes logs, identifies root causes, and suggests fixes.
13
- * **🔍 Deep Pipeline Inspection**: View pipeline status, job details, and logs directly from your terminal.
14
- * **🌱 Carbon Measurement**: Calculate the carbon emissions of your CI jobs based on CPU/RAM usage timeseries. Track your environmental impact over time.
15
- * **📊 Web Portal**: A local React-based dashboard to visualize pipeline metrics and chat with the AI assistant in a rich interface.
16
- * **🧠 Intelligent Summarization**: Automatically summarizes long job logs using sub-agents to provide concise failure analysis without token limit issues.
26
+ - **🤖 AI-Powered Troubleshooting** Ask questions about your pipelines in plain English. The AI agent (GitLab Duo or Vertex AI) analyzes logs, identifies root causes, and suggests fixes.
27
+ - **🌱 Carbon Measurement** Calculate CO₂ emissions of CI jobs based on CPU/RAM usage timeseries. Track your environmental impact over time.
28
+ - **🔌 MCP Integration** Connect DuoOps to GitLab Duo Chat so your AI assistant can query emissions data directly.
29
+ - **📊 Web Portal** A local React dashboard (built with [Palantir Blueprint.js](https://blueprintjs.com/)) to visualize metrics, manage budgets, and chat with the AI assistant.
30
+ - **🔍 Deep Pipeline Inspection** View pipeline status, job details, and logs from your terminal.
31
+ - **🧠 Intelligent Summarization** — Automatically summarizes long job logs using sub-agents for concise failure analysis.
32
+
33
+ ---
17
34
 
18
35
  ## 🚀 Quick Start
19
36
 
20
37
  ### Prerequisites
21
38
 
22
- * **Node.js** >= 18.0.0
23
- * **GitLab Account**: A Personal Access Token with `api` scope.
24
- * **(Optional) Google Cloud SDK**: Required only for BigQuery metrics.
25
- * Install the `gcloud` CLI.
26
- * Authenticate: `gcloud auth application-default login`
39
+ - **Node.js** >= 18.0.0
40
+ - **GitLab Account** with a Personal Access Token (`api` scope)
41
+ - *(Optional)* **Google Cloud SDK** for BigQuery metrics and MCP server deployment
27
42
 
28
43
  ### Installation
29
44
 
30
45
  ```bash
31
46
  # Clone the repository
32
- git clone https://github.com/youneslaaroussi/duoops.git
47
+ git clone https://gitlab.com/youneslaaroussi/duoops.git
33
48
  cd duoops
34
49
 
35
50
  # Install dependencies
@@ -44,59 +59,48 @@ npm link
44
59
 
45
60
  ### Configuration
46
61
 
47
- Run the interactive initialization command to set up your credentials:
62
+ Run the interactive setup:
48
63
 
49
64
  ```bash
50
65
  duoops init
51
66
  ```
52
67
 
53
- This will prompt you for:
54
- * GitLab URL (default: `https://gitlab.com`)
55
- * GitLab Personal Access Token
56
- * (Optional) BigQuery settings for sustainability tracking
68
+ This prompts you for your GitLab URL, Personal Access Token, and optional BigQuery settings.
57
69
 
58
- Alternatively, you can configure DuoOps using environment variables:
70
+ Or use environment variables:
59
71
 
60
72
  | Variable | Description |
61
73
  | :--- | :--- |
62
- | `GITLAB_TOKEN` | Your GitLab Personal Access Token |
74
+ | `GITLAB_TOKEN` | GitLab Personal Access Token |
63
75
  | `GITLAB_URL` | GitLab instance URL (default: `https://gitlab.com`) |
64
- | `DUOOPS_AI_PROVIDER` | AI Provider: `gitlab` (default) or `vertex` |
65
- | `GCP_PROJECT_ID` | Google Cloud Project ID (required for Vertex AI) |
66
- | `GCP_LOCATION` | Google Cloud Location (default: `us-central1`) |
76
+ | `DUOOPS_AI_PROVIDER` | AI provider: `gitlab` (default) or `vertex` |
77
+ | `GCP_PROJECT_ID` | Google Cloud Project ID (for Vertex AI / BigQuery) |
78
+ | `GCP_LOCATION` | Google Cloud location (default: `us-central1`) |
67
79
 
68
- ## 📖 Usage
80
+ ---
69
81
 
70
- ### 1. Inspect Pipelines
82
+ ## 📖 Usage
71
83
 
72
- List recent pipelines for a project:
84
+ ### Inspect Pipelines
73
85
 
74
86
  ```bash
75
87
  duoops pipelines list <project-id-or-path>
76
- # Example: duoops pipelines list my-group/my-project
77
88
  ```
78
89
 
79
- ### 2. Analyze Jobs & Logs
80
-
81
- Get details and logs for a specific job:
90
+ ### Analyze Jobs & Logs
82
91
 
83
92
  ```bash
84
93
  duoops job show <project-id> <job-id>
85
- # Example: duoops job show 12345 987654
86
94
  ```
87
95
 
88
- ### 3. Ask the AI Agent
89
-
90
- Troubleshoot failures or ask general CI questions:
96
+ ### Ask the AI Agent
91
97
 
92
98
  ```bash
93
99
  duoops ask "Why did the last pipeline fail?"
94
100
  duoops ask "How do I optimize my .gitlab-ci.yml for faster builds?"
95
101
  ```
96
102
 
97
- ### 4. Measure Carbon Footprint
98
-
99
- Calculate emissions for a job using CPU/RAM usage data (JSON timeseries):
103
+ ### Measure Carbon Footprint
100
104
 
101
105
  ```bash
102
106
  duoops measure calculate \
@@ -108,54 +112,138 @@ duoops measure calculate \
108
112
  --out-md report.md
109
113
  ```
110
114
 
111
- This will output a report to the console and save a Markdown summary to `report.md`.
115
+ ### Get AI Recommendations on Emissions
112
116
 
113
- **Persist from CI:** To save results to BigQuery when the measure component runs in GitLab CI, set these CI/CD variables (masked where appropriate):
114
-
115
- | Variable | Description |
116
- | :--- | :--- |
117
- | `DUOOPS_BQ_DATASET` | BigQuery dataset name |
118
- | `DUOOPS_BQ_TABLE` | BigQuery table name |
119
- | `GCP_PROJECT_ID` | Google Cloud project ID |
117
+ ```bash
118
+ duoops act [project-id] [--limit N]
119
+ ```
120
120
 
121
- The same GCP service account used for the measure component (e.g. `GCP_SA_KEY_BASE64`) is used for BigQuery; the component sets `GOOGLE_APPLICATION_CREDENTIALS` so the BigQuery client can authenticate. Ensure the table exists (e.g. run `duoops init` locally with BigQuery enabled to create it).
121
+ Fetches recent carbon metrics from BigQuery and gets the agent's recommendations for reducing emissions.
122
122
 
123
- #### Act on recent data
123
+ ### Launch the Web Portal
124
124
 
125
- Run `duoops act [project-id] [--limit N]` to fetch recent CI carbon metrics from BigQuery and get the agent's recommendations (e.g. set a budget, optimize jobs, suggest .gitlab-ci changes). Project ID can be omitted if set via `duoops init`.
125
+ ```bash
126
+ duoops portal
127
+ ```
126
128
 
127
- ### 5. Launch the Web Portal
129
+ Opens a local dashboard at `http://localhost:58327` for visualizing metrics and chatting with the AI assistant.
128
130
 
129
- Start the local dashboard to visualize metrics and chat:
131
+ For a guided fix workflow:
130
132
 
131
133
  ```bash
132
- duoops portal
134
+ duoops autofix
133
135
  ```
134
136
 
135
- Open your browser to `http://localhost:3000`.
137
+ This launches the portal, switches to the console tab, and preloads a request asking the agent to inspect the latest pipeline failure.
138
+
139
+ ---
136
140
 
137
- ## 🛠️ Development
141
+ ## 🔌 MCP Server
138
142
 
139
- ### Project Structure
143
+ The MCP server exposes DuoOps emissions data to AI agents via the [Model Context Protocol](https://modelcontextprotocol.io).
140
144
 
141
- * `bin/`: CLI entry point.
142
- * `src/commands/`: Oclif command implementations.
143
- * `src/lib/`: Core logic (AI agents, GitLab client, Measurement tools).
144
- * `portal/`: React frontend application.
145
+ ### Tools
145
146
 
146
- ### Running Tests
147
+ | Tool | Description |
148
+ | :--- | :--- |
149
+ | `get_job_emissions` | Retrieve emissions for a specific CI job |
150
+ | `get_pipeline_emissions` | Aggregated emissions for a pipeline |
151
+ | `get_project_emissions_summary` | Emissions trends for a project |
152
+ | `get_machine_profile` | Specs and power data for cloud instances |
153
+ | `get_region_carbon_intensity` | Grid carbon intensity for a region |
154
+
155
+ ### Deployment
147
156
 
148
157
  ```bash
149
- pnpm test
158
+ # Using the CLI (recommended)
159
+ duoops mcp deploy --gcp-project <PROJECT_ID> --region us-central1
160
+
161
+ # Or manually with gcloud
162
+ gcloud run deploy duoops-mcp \
163
+ --image registry.gitlab.com/youneslaaroussi/duoops/mcp-server:latest \
164
+ --set-env-vars "GCP_PROJECT_ID=<ID>,BQ_DATASET=<DATASET>,BQ_TABLE=<TABLE>" \
165
+ --allow-unauthenticated \
166
+ --region us-central1
150
167
  ```
151
168
 
152
- ### Building for Production
169
+ ### GitLab Duo Chat Integration
170
+
171
+ Add to your project's `.gitlab/duo/mcp.json`:
172
+
173
+ ```json
174
+ {
175
+ "mcpServers": {
176
+ "duoops-carbon": {
177
+ "type": "http",
178
+ "url": "https://<your-cloud-run-url>/mcp",
179
+ "approvedTools": true
180
+ }
181
+ }
182
+ }
183
+ ```
184
+
185
+ ---
186
+
187
+ ## 🔧 CI Component
188
+
189
+ Include the measurement component in your `.gitlab-ci.yml`:
190
+
191
+ ```yaml
192
+ include:
193
+ - component: gitlab.com/youneslaaroussi/duoops/duoops-measure-component@main
194
+ inputs:
195
+ provider: gcp
196
+ machine: e2-standard-4
197
+ region: us-central1
198
+ ```
199
+
200
+ CI/CD variables for BigQuery persistence:
201
+
202
+ | Variable | Description |
203
+ | :--- | :--- |
204
+ | `DUOOPS_BQ_DATASET` | BigQuery dataset name |
205
+ | `DUOOPS_BQ_TABLE` | BigQuery table name |
206
+ | `GCP_PROJECT_ID` | Google Cloud project ID |
207
+
208
+ ---
209
+
210
+ ## 🏗️ Architecture
211
+
212
+ <p align="center">
213
+ <img src="hackathon-files/architecture.png" alt="DuoOps Architecture — Interfaces, AI Core, Data" width="700" />
214
+ </p>
215
+
216
+ ---
217
+
218
+ ## 🛠️ Project Structure
219
+
220
+ ```
221
+ duoops/
222
+ ├── bin/ # CLI entry point
223
+ ├── src/ # CLI commands and core logic
224
+ │ ├── commands/ # Oclif command implementations
225
+ │ └── lib/ # AI agents, GitLab client, measurement
226
+ ├── mcp-server/ # MCP server (standalone, deployable)
227
+ ├── portal/ # React web dashboard (Blueprint.js)
228
+ ├── templates/ # GitLab CI component templates
229
+ ├── data/ # Sample data and fixtures
230
+ └── test/ # Test suite
231
+ ```
232
+
233
+ ## Development
153
234
 
154
235
  ```bash
236
+ # Run tests
237
+ pnpm test
238
+
239
+ # Build everything
155
240
  pnpm build
241
+
242
+ # Run the portal in dev mode
243
+ cd portal && pnpm dev
156
244
  ```
157
245
 
158
- This compiles the TypeScript CLI and builds the React frontend, copying assets to the `dist/` directory.
246
+ ---
159
247
 
160
248
  ## 📄 License
161
249
 
@@ -0,0 +1,54 @@
1
+ {
2
+ "m5.large": {
3
+ "vcpus": 2,
4
+ "memory_gb": 8,
5
+ "platform_cpu": "Intel Xeon Platinum 8175",
6
+ "matched_cpu_profile": "Intel Xeon Platinum 8175",
7
+ "cpu_power_profile": [
8
+ { "percentage": 0, "watts": 11.5 },
9
+ { "percentage": 10, "watts": 23.0 },
10
+ { "percentage": 50, "watts": 82.0 },
11
+ { "percentage": 100, "watts": 150.0 }
12
+ ],
13
+ "scope3_emissions_hourly": 18
14
+ },
15
+ "c5.xlarge": {
16
+ "vcpus": 4,
17
+ "memory_gb": 8,
18
+ "platform_cpu": "Intel Xeon Platinum 8275",
19
+ "matched_cpu_profile": "Intel Xeon Platinum 8275",
20
+ "cpu_power_profile": [
21
+ { "percentage": 0, "watts": 14.0 },
22
+ { "percentage": 10, "watts": 33.0 },
23
+ { "percentage": 50, "watts": 115.0 },
24
+ { "percentage": 100, "watts": 195.0 }
25
+ ],
26
+ "scope3_emissions_hourly": 22
27
+ },
28
+ "m6g.large": {
29
+ "vcpus": 2,
30
+ "memory_gb": 8,
31
+ "platform_cpu": "AWS Graviton2",
32
+ "matched_cpu_profile": "AWS Graviton2",
33
+ "cpu_power_profile": [
34
+ { "percentage": 0, "watts": 8.0 },
35
+ { "percentage": 10, "watts": 16.0 },
36
+ { "percentage": 50, "watts": 55.0 },
37
+ { "percentage": 100, "watts": 95.0 }
38
+ ],
39
+ "scope3_emissions_hourly": 15
40
+ },
41
+ "r6i.2xlarge": {
42
+ "vcpus": 8,
43
+ "memory_gb": 64,
44
+ "platform_cpu": "Intel Xeon Ice Lake",
45
+ "matched_cpu_profile": "Intel Xeon Ice Lake",
46
+ "cpu_power_profile": [
47
+ { "percentage": 0, "watts": 26.0 },
48
+ { "percentage": 10, "watts": 52.0 },
49
+ { "percentage": 50, "watts": 200.0 },
50
+ { "percentage": 100, "watts": 360.0 }
51
+ ],
52
+ "scope3_emissions_hourly": 42
53
+ }
54
+ }
@@ -0,0 +1,105 @@
1
+ {
2
+ "_metadata": {
3
+ "description": "Physical CPU specifications with vCPU counts for accurate power-per-vCPU calculations",
4
+ "last_updated": "2025-01-22",
5
+ "methodology": "Power per VM vCPU = (TDP / physical_vcpus) * vm_vcpus * utilization_ratio"
6
+ },
7
+ "Intel Xeon Gold 6268CL": {
8
+ "cores": 24,
9
+ "threads": 48,
10
+ "tdp_watts": 205,
11
+ "architecture": "Cascade Lake",
12
+ "source": "https://www.ebay.com/p/2321792675",
13
+ "source_name": "eBay Product Listing (SRF80)"
14
+ },
15
+ "Intel Xeon Gold 6253CL": {
16
+ "cores": 18,
17
+ "threads": 36,
18
+ "tdp_watts": 205,
19
+ "architecture": "Cascade Lake",
20
+ "source": "https://www.cpubenchmark.net/cpu.php?cpu=Intel+Xeon+Gold+6253CL+@+3.10GHz&id=4539",
21
+ "source_name": "PassMark CPU Benchmark"
22
+ },
23
+ "Intel Xeon Platinum 8481C": {
24
+ "cores": 56,
25
+ "threads": 112,
26
+ "tdp_watts": 350,
27
+ "architecture": "Sapphire Rapids",
28
+ "source": "https://www.techpowerup.com/cpu-specs/xeon-platinum-8481c.c3992",
29
+ "source_name": "TechPowerUp CPU Database"
30
+ },
31
+ "Intel Xeon Platinum 8373C": {
32
+ "cores": 36,
33
+ "threads": 72,
34
+ "tdp_watts": 300,
35
+ "architecture": "Ice Lake",
36
+ "source": "https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors_(Ice_Lake-based)",
37
+ "source_name": "Wikipedia - Intel Xeon Ice Lake"
38
+ },
39
+ "Intel Xeon Platinum 8280L": {
40
+ "cores": 28,
41
+ "threads": 56,
42
+ "tdp_watts": 205,
43
+ "architecture": "Cascade Lake",
44
+ "source": "https://ark.intel.com/content/www/us/en/ark/products/192472/intel-xeon-platinum-8280l-processor-38-5m-cache-2-70-ghz.html",
45
+ "source_name": "Intel ARK"
46
+ },
47
+ "Intel Xeon Platinum 8273CL": {
48
+ "cores": 28,
49
+ "threads": 56,
50
+ "tdp_watts": 165,
51
+ "architecture": "Cascade Lake",
52
+ "source": "https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors_(Cascade_Lake-based)",
53
+ "source_name": "Wikipedia - Intel Xeon Cascade Lake"
54
+ },
55
+ "Intel Xeon Scalable Platinum 8173M": {
56
+ "cores": 28,
57
+ "threads": 56,
58
+ "tdp_watts": 165,
59
+ "architecture": "Skylake",
60
+ "source": "https://en.wikipedia.org/wiki/List_of_Intel_Xeon_processors#702Skylake-based_703Xeon_Scalable",
61
+ "source_name": "Wikipedia - Intel Xeon Skylake"
62
+ },
63
+ "Intel Skylake": {
64
+ "cores": 28,
65
+ "threads": 56,
66
+ "tdp_watts": 150,
67
+ "architecture": "Skylake",
68
+ "source": "https://cloud.google.com/compute/docs/cpu-platforms",
69
+ "source_name": "Google Cloud CPU Platforms",
70
+ "note": "Generic Skylake profile for e2 instances, estimated from typical Skylake server CPUs"
71
+ },
72
+ "Intel Xeon E7-8880V4": {
73
+ "cores": 22,
74
+ "threads": 44,
75
+ "tdp_watts": 150,
76
+ "architecture": "Broadwell",
77
+ "source": "https://www.intel.com/content/www/us/en/products/sku/93792/intel-xeon-processor-e78880-v4-55m-cache-2-20-ghz/specifications.html",
78
+ "source_name": "Intel ARK"
79
+ },
80
+ "AMD EPYC 7B12": {
81
+ "cores": 64,
82
+ "threads": 128,
83
+ "tdp_watts": 240,
84
+ "architecture": "Rome (Zen 2)",
85
+ "source": "https://www.newegg.com/p/1FR-00G6-00026",
86
+ "source_name": "Newegg Product Listing"
87
+ },
88
+ "AMD EPYC 7B13": {
89
+ "cores": 64,
90
+ "threads": 128,
91
+ "tdp_watts": 225,
92
+ "architecture": "Milan (Zen 3)",
93
+ "source": "https://www.amd.com/en/products/cpu/amd-epyc-7b13",
94
+ "source_name": "AMD Product Page"
95
+ },
96
+ "Q64-30": {
97
+ "cores": 64,
98
+ "threads": 64,
99
+ "tdp_watts": 180,
100
+ "architecture": "ARM Neoverse N1",
101
+ "source": "https://amperecomputing.com/en/briefs/ampere-altra-family-product-brief",
102
+ "source_name": "Ampere Altra Family Product Brief",
103
+ "note": "ARM cores have no hyperthreading, threads = cores"
104
+ }
105
+ }