container-superposition 0.1.8 → 0.1.10
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.
- package/README.md +3 -0
- package/dist/tool/cli/args.d.ts.map +1 -1
- package/dist/tool/cli/args.js +1 -1
- package/dist/tool/cli/args.js.map +1 -1
- package/dist/tool/commands/adopt.d.ts.map +1 -1
- package/dist/tool/commands/adopt.js +15 -21
- package/dist/tool/commands/adopt.js.map +1 -1
- package/dist/tool/commands/doctor.d.ts +1 -0
- package/dist/tool/commands/doctor.d.ts.map +1 -1
- package/dist/tool/commands/doctor.js +1370 -73
- package/dist/tool/commands/doctor.js.map +1 -1
- package/dist/tool/questionnaire/composer.d.ts +3 -1
- package/dist/tool/questionnaire/composer.d.ts.map +1 -1
- package/dist/tool/questionnaire/composer.js +273 -20
- package/dist/tool/questionnaire/composer.js.map +1 -1
- package/dist/tool/questionnaire/presets.d.ts.map +1 -1
- package/dist/tool/questionnaire/presets.js +1 -0
- package/dist/tool/questionnaire/presets.js.map +1 -1
- package/dist/tool/questionnaire/questionnaire.d.ts.map +1 -1
- package/dist/tool/questionnaire/questionnaire.js +3 -1
- package/dist/tool/questionnaire/questionnaire.js.map +1 -1
- package/dist/tool/schema/project-config.d.ts.map +1 -1
- package/dist/tool/schema/project-config.js +174 -1
- package/dist/tool/schema/project-config.js.map +1 -1
- package/dist/tool/schema/types.d.ts +53 -2
- package/dist/tool/schema/types.d.ts.map +1 -1
- package/docs/README.md +1 -0
- package/docs/overlays.md +188 -147
- package/docs/specs/001-verbose-plan-graph/spec.md +5 -12
- package/docs/specs/002-superposition-config-file/spec.md +5 -12
- package/docs/specs/003-mkdocs2-overlay/spec.md +2 -9
- package/docs/specs/004-doctor-fix/spec.md +1 -8
- package/docs/specs/005-cuda-overlay/spec.md +2 -9
- package/docs/specs/006-rocm-overlay/spec.md +3 -10
- package/docs/specs/007-target-aware-generation/spec.md +4 -11
- package/docs/specs/008-project-file-canonical/spec.md +7 -8
- package/docs/specs/009-project-env/spec.md +3 -10
- package/docs/specs/010-compose-env-materialization/spec.md +3 -10
- package/docs/specs/011-overlay-parameters/spec.md +2 -9
- package/docs/specs/012-ollama-cli-overlay/spec.md +47 -0
- package/docs/specs/013-doctor-dependency-check/spec.md +250 -0
- package/docs/specs/014-doctor-compose-port-cross-validation/spec.md +276 -0
- package/docs/specs/015-doctor-env-example-drift/spec.md +248 -0
- package/docs/specs/016-doctor-reproducibility-check/spec.md +276 -0
- package/docs/specs/017-doctor-dry-run/spec.md +276 -0
- package/docs/specs/{007-init-project-file → 018-init-project-file}/spec.md +2 -9
- package/docs/specs/019-project-mounts/spec.md +176 -0
- package/docs/specs/taxonomy.md +186 -0
- package/docs/superposition-yml.md +467 -0
- package/overlays/.presets/full-observability.yml +113 -0
- package/overlays/.presets/k8s-dev.yml +174 -0
- package/overlays/.presets/local-llm.yml +105 -0
- package/overlays/.presets/vector-ai.yml +150 -0
- package/overlays/.shared/vscode/js-ts-settings.json +19 -0
- package/overlays/.shared/vscode/markdown-extensions.json +8 -0
- package/overlays/alertmanager/devcontainer.patch.json +0 -1
- package/overlays/alertmanager/docker-compose.yml +8 -0
- package/overlays/alertmanager/overlay.yml +1 -0
- package/overlays/amp/devcontainer.patch.json +4 -1
- package/overlays/ansible/README.md +163 -0
- package/overlays/ansible/devcontainer.patch.json +14 -0
- package/overlays/ansible/overlay.yml +18 -0
- package/overlays/argocd/README.md +158 -0
- package/overlays/argocd/devcontainer.patch.json +9 -0
- package/overlays/argocd/overlay.yml +17 -0
- package/overlays/argocd/setup.sh +29 -0
- package/overlays/argocd/verify.sh +14 -0
- package/overlays/bun/devcontainer.patch.json +1 -10
- package/overlays/bun/overlay.yml +8 -1
- package/overlays/claude-code/devcontainer.patch.json +6 -1
- package/overlays/codex/devcontainer.patch.json +5 -0
- package/overlays/comfyui/docker-compose.yml +1 -0
- package/overlays/comfyui/overlay.yml +4 -0
- package/overlays/commitlint/devcontainer.patch.json +1 -6
- package/overlays/docker-sock/overlay.yml +1 -0
- package/overlays/dotnet/overlay.yml +4 -1
- package/overlays/fuseki/.env.example +5 -0
- package/overlays/fuseki/README.md +173 -0
- package/overlays/fuseki/devcontainer.patch.json +18 -0
- package/overlays/fuseki/docker-compose.yml +29 -0
- package/overlays/fuseki/overlay.yml +42 -0
- package/overlays/fuseki/verify.sh +58 -0
- package/overlays/gemini-cli/devcontainer.patch.json +4 -1
- package/overlays/go/overlay.yml +6 -1
- package/overlays/grafana/devcontainer.patch.json +0 -1
- package/overlays/grafana/docker-compose.yml +8 -2
- package/overlays/grafana/overlay.yml +6 -1
- package/overlays/jaeger/.env.example +11 -0
- package/overlays/jaeger/README.md +33 -4
- package/overlays/jaeger/devcontainer.patch.json +9 -1
- package/overlays/jaeger/docker-compose.yml +17 -0
- package/overlays/jaeger/overlay.yml +1 -12
- package/overlays/java/overlay.yml +6 -1
- package/overlays/jupyter/docker-compose.yml +1 -0
- package/overlays/jupyter/overlay.yml +1 -0
- package/overlays/keycloak/devcontainer.patch.json +0 -1
- package/overlays/keycloak/docker-compose.yml +1 -0
- package/overlays/keycloak/overlay.yml +15 -0
- package/overlays/localstack/docker-compose.yml +1 -0
- package/overlays/localstack/overlay.yml +19 -1
- package/overlays/loki/devcontainer.patch.json +0 -1
- package/overlays/loki/docker-compose.yml +8 -0
- package/overlays/loki/overlay.yml +1 -0
- package/overlays/mailpit/docker-compose.yml +1 -0
- package/overlays/mailpit/overlay.yml +1 -0
- package/overlays/minio/devcontainer.patch.json +1 -1
- package/overlays/minio/docker-compose.yml +1 -0
- package/overlays/minio/overlay.yml +23 -2
- package/overlays/mkdocs/devcontainer.patch.json +1 -5
- package/overlays/mkdocs/overlay.yml +3 -1
- package/overlays/mkdocs2/devcontainer.patch.json +1 -5
- package/overlays/mkdocs2/overlay.yml +2 -0
- package/overlays/mongodb/docker-compose.yml +2 -0
- package/overlays/mongodb/overlay.yml +26 -2
- package/overlays/mysql/docker-compose.yml +2 -0
- package/overlays/mysql/overlay.yml +36 -2
- package/overlays/nats/docker-compose.yml +1 -0
- package/overlays/nats/overlay.yml +18 -2
- package/overlays/nodejs/devcontainer.patch.json +1 -12
- package/overlays/nodejs/overlay.yml +8 -1
- package/overlays/ollama/README.md +4 -3
- package/overlays/ollama/docker-compose.yml +1 -0
- package/overlays/ollama/overlay.yml +6 -1
- package/overlays/ollama/verify.sh +5 -28
- package/overlays/ollama-cli/README.md +90 -0
- package/overlays/ollama-cli/devcontainer.patch.json +3 -0
- package/overlays/ollama-cli/overlay.yml +19 -0
- package/overlays/{ollama → ollama-cli}/setup.sh +7 -10
- package/overlays/ollama-cli/verify.sh +49 -0
- package/overlays/open-webui/docker-compose.yml +1 -0
- package/overlays/open-webui/overlay.yml +8 -1
- package/overlays/opencode/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/README.md +4 -0
- package/overlays/otel-collector/devcontainer.patch.json +4 -1
- package/overlays/otel-collector/docker-compose.yml +8 -4
- package/overlays/otel-collector/overlay.yml +1 -0
- package/overlays/otel-demo-nodejs/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-nodejs/docker-compose.yml +1 -0
- package/overlays/otel-demo-nodejs/overlay.yml +9 -1
- package/overlays/otel-demo-python/devcontainer.patch.json +0 -1
- package/overlays/otel-demo-python/docker-compose.yml +1 -0
- package/overlays/otel-demo-python/overlay.yml +6 -1
- package/overlays/pandoc/README.md +10 -0
- package/overlays/pandoc/devcontainer.patch.json +0 -5
- package/overlays/pandoc/overlay.yml +2 -0
- package/overlays/pandoc/setup.sh +10 -0
- package/overlays/pgvector/devcontainer.patch.json +11 -5
- package/overlays/pgvector/docker-compose.yml +1 -0
- package/overlays/pgvector/overlay.yml +3 -0
- package/overlays/playwright/devcontainer.patch.json +0 -5
- package/overlays/playwright/overlay.yml +2 -1
- package/overlays/postgres/docker-compose.yml +1 -0
- package/overlays/postgres/overlay.yml +4 -1
- package/overlays/pre-commit/devcontainer.patch.json +1 -7
- package/overlays/prometheus/devcontainer.patch.json +0 -1
- package/overlays/prometheus/docker-compose.yml +8 -0
- package/overlays/prometheus/overlay.yml +1 -0
- package/overlays/promtail/devcontainer.patch.json +1 -2
- package/overlays/promtail/docker-compose.yml +8 -0
- package/overlays/promtail/overlay.yml +1 -0
- package/overlays/qdrant/docker-compose.yml +1 -0
- package/overlays/qdrant/overlay.yml +5 -1
- package/overlays/rabbitmq/docker-compose.yml +1 -0
- package/overlays/rabbitmq/overlay.yml +25 -2
- package/overlays/redis/docker-compose.yml +7 -0
- package/overlays/redis/overlay.yml +15 -1
- package/overlays/redpanda/docker-compose.yml +1 -0
- package/overlays/redpanda/overlay.yml +15 -3
- package/overlays/rocm/overlay.yml +2 -1
- package/overlays/rust/overlay.yml +3 -1
- package/overlays/sqlserver/docker-compose.yml +1 -0
- package/overlays/sqlserver/overlay.yml +17 -0
- package/overlays/task/README.md +47 -0
- package/overlays/task/devcontainer.patch.json +9 -0
- package/overlays/task/overlay.yml +16 -0
- package/overlays/task/setup.sh +29 -0
- package/overlays/task/verify.sh +14 -0
- package/overlays/tempo/devcontainer.patch.json +0 -1
- package/overlays/tempo/docker-compose.yml +8 -0
- package/overlays/tempo/overlay.yml +1 -0
- package/overlays/windsurf-cli/devcontainer.patch.json +4 -1
- package/package.json +1 -1
- package/tool/schema/config.schema.json +74 -1
- package/overlays/.shared/otel/otel-base-config.yaml +0 -30
|
@@ -0,0 +1,174 @@
|
|
|
1
|
+
# Kubernetes Development Preset
|
|
2
|
+
# Local Kubernetes cluster + dev loop tooling, language-agnostic
|
|
3
|
+
|
|
4
|
+
id: k8s-dev
|
|
5
|
+
name: Kubernetes Development
|
|
6
|
+
description: Local Kubernetes cluster with fast inner-loop tooling — choose your cluster provider and dev-loop tool
|
|
7
|
+
type: meta
|
|
8
|
+
category: preset
|
|
9
|
+
supports: [] # Works with both plain and compose
|
|
10
|
+
tags: [preset, kubernetes, k8s, kind, k3d, skaffold, tilt, devloop, kubectl, helm]
|
|
11
|
+
|
|
12
|
+
selects:
|
|
13
|
+
required:
|
|
14
|
+
- kubectl-helm
|
|
15
|
+
- docker-in-docker
|
|
16
|
+
- modern-cli-tools
|
|
17
|
+
|
|
18
|
+
userChoice: {}
|
|
19
|
+
|
|
20
|
+
parameters:
|
|
21
|
+
cluster:
|
|
22
|
+
description: 'Local Kubernetes cluster provider'
|
|
23
|
+
default: k3d
|
|
24
|
+
options:
|
|
25
|
+
- id: k3d
|
|
26
|
+
overlays: [k3d]
|
|
27
|
+
description: 'k3d (k3s in Docker) — fastest startup, lowest memory, ideal for CI'
|
|
28
|
+
- id: kind
|
|
29
|
+
overlays: [kind]
|
|
30
|
+
description: 'kind (Kubernetes in Docker) — official CNCF tool, most compatible'
|
|
31
|
+
|
|
32
|
+
devloop:
|
|
33
|
+
description: 'Inner-loop dev tool (watch → build → deploy on save)'
|
|
34
|
+
default: tilt
|
|
35
|
+
options:
|
|
36
|
+
- id: tilt
|
|
37
|
+
overlays: [tilt]
|
|
38
|
+
description: 'Tilt — live UI, smart rebuilds, port-forward management'
|
|
39
|
+
- id: skaffold
|
|
40
|
+
overlays: [skaffold]
|
|
41
|
+
description: 'Skaffold — declarative YAML, CI-compatible, multi-deployer support'
|
|
42
|
+
- id: none
|
|
43
|
+
overlays: []
|
|
44
|
+
description: 'No dev-loop tool — use kubectl directly'
|
|
45
|
+
|
|
46
|
+
glueConfig:
|
|
47
|
+
environment:
|
|
48
|
+
KUBECONFIG: '/home/vscode/.kube/config'
|
|
49
|
+
KUBECTL_CONTEXT: 'local'
|
|
50
|
+
|
|
51
|
+
portMappings:
|
|
52
|
+
app: 8080
|
|
53
|
+
tilt-ui: 10350
|
|
54
|
+
|
|
55
|
+
readme: |
|
|
56
|
+
## Kubernetes Development Stack
|
|
57
|
+
|
|
58
|
+
This devcontainer provides a complete local Kubernetes development environment.
|
|
59
|
+
|
|
60
|
+
### Tools
|
|
61
|
+
|
|
62
|
+
| Tool | Purpose |
|
|
63
|
+
|------|---------|
|
|
64
|
+
| kubectl + Helm | Kubernetes CLI and package manager |
|
|
65
|
+
| docker-in-docker | Run Docker inside the devcontainer to build images |
|
|
66
|
+
| k3d / kind | Provision a local Kubernetes cluster |
|
|
67
|
+
| Tilt / Skaffold | Watch → build → deploy inner loop |
|
|
68
|
+
| Modern CLI tools | `jq`, `yq`, `bat`, `fd`, `rg` for working with manifests |
|
|
69
|
+
|
|
70
|
+
### Cluster Management
|
|
71
|
+
|
|
72
|
+
#### k3d (default)
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
# Create cluster
|
|
76
|
+
k3d cluster create dev --port "8080:80@loadbalancer"
|
|
77
|
+
|
|
78
|
+
# List clusters
|
|
79
|
+
k3d cluster list
|
|
80
|
+
|
|
81
|
+
# Delete cluster
|
|
82
|
+
k3d cluster delete dev
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
#### kind
|
|
86
|
+
|
|
87
|
+
```bash
|
|
88
|
+
# Create cluster
|
|
89
|
+
kind create cluster --name dev
|
|
90
|
+
|
|
91
|
+
# List clusters
|
|
92
|
+
kind get clusters
|
|
93
|
+
|
|
94
|
+
# Delete cluster
|
|
95
|
+
kind delete cluster --name dev
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
### Inner-Loop Workflow
|
|
99
|
+
|
|
100
|
+
#### Tilt
|
|
101
|
+
|
|
102
|
+
Create a `Tiltfile` in your project root:
|
|
103
|
+
|
|
104
|
+
```python
|
|
105
|
+
# Tiltfile
|
|
106
|
+
docker_build('my-app', '.')
|
|
107
|
+
k8s_yaml('k8s/')
|
|
108
|
+
k8s_resource('my-app', port_forwards=8080)
|
|
109
|
+
```
|
|
110
|
+
|
|
111
|
+
Then run:
|
|
112
|
+
|
|
113
|
+
```bash
|
|
114
|
+
tilt up
|
|
115
|
+
# Open http://localhost:10350 for the Tilt UI
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
#### Skaffold
|
|
119
|
+
|
|
120
|
+
Create a `skaffold.yaml` in your project root:
|
|
121
|
+
|
|
122
|
+
```yaml
|
|
123
|
+
apiVersion: skaffold/v4beta11
|
|
124
|
+
kind: Config
|
|
125
|
+
build:
|
|
126
|
+
artifacts:
|
|
127
|
+
- image: my-app
|
|
128
|
+
manifests:
|
|
129
|
+
rawYaml:
|
|
130
|
+
- k8s/*.yaml
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
Then run:
|
|
134
|
+
|
|
135
|
+
```bash
|
|
136
|
+
skaffold dev
|
|
137
|
+
```
|
|
138
|
+
|
|
139
|
+
### Helm Quick Start
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
# Add a chart repository
|
|
143
|
+
helm repo add bitnami https://charts.bitnami.com/bitnami
|
|
144
|
+
helm repo update
|
|
145
|
+
|
|
146
|
+
# Install a chart
|
|
147
|
+
helm install my-release bitnami/postgresql
|
|
148
|
+
|
|
149
|
+
# Upgrade
|
|
150
|
+
helm upgrade my-release bitnami/postgresql --set auth.password=secret
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### kubectl Tips
|
|
154
|
+
|
|
155
|
+
```bash
|
|
156
|
+
# Watch all resources
|
|
157
|
+
kubectl get all -A -w
|
|
158
|
+
|
|
159
|
+
# Port-forward a service
|
|
160
|
+
kubectl port-forward svc/my-app 8080:80
|
|
161
|
+
|
|
162
|
+
# Inspect manifest with yq
|
|
163
|
+
kubectl get deployment my-app -o yaml | yq '.spec.template.spec.containers[0]'
|
|
164
|
+
|
|
165
|
+
# Live logs
|
|
166
|
+
kubectl logs -f -l app=my-app
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Next Steps
|
|
170
|
+
|
|
171
|
+
- Add a language overlay (`nodejs`, `go`, `python`, etc.) for your application runtime
|
|
172
|
+
- Add the `k8s-operator-dev` preset if you are building Kubernetes operators
|
|
173
|
+
- Configure image registry credentials for pushing built images
|
|
174
|
+
- Add Prometheus + Grafana overlays for in-cluster monitoring
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
# Local LLM Stack Preset
|
|
2
|
+
# Run local language models with a browser chat UI
|
|
3
|
+
|
|
4
|
+
id: local-llm
|
|
5
|
+
name: Local LLM Stack
|
|
6
|
+
description: Local inference with Ollama and Open WebUI — pull any model and chat without an API key
|
|
7
|
+
type: meta
|
|
8
|
+
category: preset
|
|
9
|
+
supports: [compose] # Requires Docker Compose for Ollama service
|
|
10
|
+
tags: [preset, ai, llm, ollama, open-webui, local-inference]
|
|
11
|
+
|
|
12
|
+
selects:
|
|
13
|
+
required:
|
|
14
|
+
- ollama
|
|
15
|
+
- ollama-cli
|
|
16
|
+
- open-webui
|
|
17
|
+
|
|
18
|
+
userChoice: {}
|
|
19
|
+
|
|
20
|
+
parameters:
|
|
21
|
+
gpu:
|
|
22
|
+
description: 'GPU acceleration (optional — CPU works without it)'
|
|
23
|
+
default: none
|
|
24
|
+
options:
|
|
25
|
+
- id: none
|
|
26
|
+
overlays: []
|
|
27
|
+
description: 'CPU only — works on any machine, slower for large models'
|
|
28
|
+
- id: nvidia
|
|
29
|
+
overlays: [cuda]
|
|
30
|
+
description: 'Nvidia GPU via CUDA'
|
|
31
|
+
- id: amd
|
|
32
|
+
overlays: [rocm]
|
|
33
|
+
description: 'AMD GPU via ROCm'
|
|
34
|
+
|
|
35
|
+
glueConfig:
|
|
36
|
+
environment:
|
|
37
|
+
OLLAMA_HOST: 'http://ollama:11434'
|
|
38
|
+
|
|
39
|
+
portMappings:
|
|
40
|
+
ollama-api: 11434
|
|
41
|
+
open-webui: 3000
|
|
42
|
+
|
|
43
|
+
readme: |
|
|
44
|
+
## Local LLM Stack
|
|
45
|
+
|
|
46
|
+
This devcontainer runs a full local LLM environment — no API key required.
|
|
47
|
+
|
|
48
|
+
### Services
|
|
49
|
+
|
|
50
|
+
- **Ollama** — LLM runtime serving models on port 11434
|
|
51
|
+
- **Open WebUI** — Browser-based chat UI at http://localhost:3000
|
|
52
|
+
- **ollama-cli** — `ollama` command available in the terminal
|
|
53
|
+
|
|
54
|
+
### Quick Start
|
|
55
|
+
|
|
56
|
+
1. Open http://localhost:3000 in your browser
|
|
57
|
+
2. Sign up with any email (local only — no data leaves your machine)
|
|
58
|
+
3. Pull a model via the terminal or the UI:
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
# Pull a model
|
|
62
|
+
ollama pull llama3.2
|
|
63
|
+
|
|
64
|
+
# Run interactively in the terminal
|
|
65
|
+
ollama run llama3.2
|
|
66
|
+
|
|
67
|
+
# List pulled models
|
|
68
|
+
ollama list
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
### Recommended Models
|
|
72
|
+
|
|
73
|
+
| Model | Size | Use case |
|
|
74
|
+
|-------|------|----------|
|
|
75
|
+
| `llama3.2` | 2–8 B | General purpose, fast |
|
|
76
|
+
| `mistral` | 7 B | Strong reasoning |
|
|
77
|
+
| `codellama` | 7–34 B | Code generation |
|
|
78
|
+
| `nomic-embed-text` | 137 M | Embeddings for RAG |
|
|
79
|
+
| `phi4` | 14 B | Microsoft research model |
|
|
80
|
+
|
|
81
|
+
### Using the API
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Chat completion
|
|
85
|
+
curl http://localhost:11434/api/chat -d '{
|
|
86
|
+
"model": "llama3.2",
|
|
87
|
+
"messages": [{"role": "user", "content": "Hello!"}]
|
|
88
|
+
}'
|
|
89
|
+
|
|
90
|
+
# Generate embeddings
|
|
91
|
+
curl http://localhost:11434/api/embeddings -d '{
|
|
92
|
+
"model": "nomic-embed-text",
|
|
93
|
+
"prompt": "Hello world"
|
|
94
|
+
}'
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### GPU Acceleration
|
|
98
|
+
|
|
99
|
+
If you selected a GPU option, ensure the relevant drivers are installed on the host.
|
|
100
|
+
CPU-only mode works on any machine — expect ~10–30 tokens/sec for 7 B models.
|
|
101
|
+
|
|
102
|
+
### Next Steps
|
|
103
|
+
|
|
104
|
+
- Add the `qdrant` overlay and `vector-ai` preset for a full RAG pipeline
|
|
105
|
+
- Add the `python` overlay to build LLM-powered apps
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
# Vector AI Stack Preset
|
|
2
|
+
# Full RAG pipeline: vector DB + local embeddings + Python client
|
|
3
|
+
|
|
4
|
+
id: vector-ai
|
|
5
|
+
name: Vector AI Stack
|
|
6
|
+
description: Full RAG pipeline — Qdrant vector database, Ollama for local embeddings, and Python for client code
|
|
7
|
+
type: meta
|
|
8
|
+
category: preset
|
|
9
|
+
supports: [compose] # Requires Docker Compose for Qdrant and Ollama services
|
|
10
|
+
tags: [preset, ai, rag, vector, embeddings, qdrant, ollama, python]
|
|
11
|
+
|
|
12
|
+
selects:
|
|
13
|
+
required:
|
|
14
|
+
- qdrant
|
|
15
|
+
- ollama
|
|
16
|
+
- ollama-cli
|
|
17
|
+
- python
|
|
18
|
+
|
|
19
|
+
userChoice: {}
|
|
20
|
+
|
|
21
|
+
parameters:
|
|
22
|
+
gpu:
|
|
23
|
+
description: 'GPU acceleration for embedding generation'
|
|
24
|
+
default: none
|
|
25
|
+
options:
|
|
26
|
+
- id: none
|
|
27
|
+
overlays: []
|
|
28
|
+
description: 'CPU only — adequate for embedding workloads (smaller models)'
|
|
29
|
+
- id: nvidia
|
|
30
|
+
overlays: [cuda]
|
|
31
|
+
description: 'Nvidia GPU via CUDA — significantly faster embedding throughput'
|
|
32
|
+
- id: amd
|
|
33
|
+
overlays: [rocm]
|
|
34
|
+
description: 'AMD GPU via ROCm'
|
|
35
|
+
|
|
36
|
+
chat_ui:
|
|
37
|
+
description: 'Browser chat UI (optional — useful for testing your RAG pipeline)'
|
|
38
|
+
default: none
|
|
39
|
+
options:
|
|
40
|
+
- id: none
|
|
41
|
+
overlays: []
|
|
42
|
+
description: 'No chat UI — use the API or your own frontend'
|
|
43
|
+
- id: open-webui
|
|
44
|
+
overlays: [open-webui]
|
|
45
|
+
description: 'Open WebUI — test RAG-augmented chat visually'
|
|
46
|
+
|
|
47
|
+
glueConfig:
|
|
48
|
+
environment:
|
|
49
|
+
OLLAMA_HOST: 'http://ollama:11434'
|
|
50
|
+
QDRANT_HOST: 'qdrant'
|
|
51
|
+
QDRANT_PORT: '6333'
|
|
52
|
+
QDRANT_URL: 'http://qdrant:6333'
|
|
53
|
+
EMBEDDING_MODEL: 'nomic-embed-text'
|
|
54
|
+
|
|
55
|
+
portMappings:
|
|
56
|
+
qdrant-rest: 6333
|
|
57
|
+
qdrant-grpc: 6334
|
|
58
|
+
ollama-api: 11434
|
|
59
|
+
|
|
60
|
+
readme: |
|
|
61
|
+
## Vector AI Stack
|
|
62
|
+
|
|
63
|
+
This devcontainer provides a complete local RAG (Retrieval-Augmented Generation) pipeline.
|
|
64
|
+
|
|
65
|
+
### Services
|
|
66
|
+
|
|
67
|
+
| Service | Port | Purpose |
|
|
68
|
+
|---------|------|---------|
|
|
69
|
+
| Qdrant | 6333 (REST), 6334 (gRPC) | Vector database |
|
|
70
|
+
| Ollama | 11434 | LLM and embedding model runtime |
|
|
71
|
+
| ollama-cli | — | `ollama` command in terminal |
|
|
72
|
+
|
|
73
|
+
### Quick Start
|
|
74
|
+
|
|
75
|
+
#### 1. Pull an embedding model
|
|
76
|
+
|
|
77
|
+
```bash
|
|
78
|
+
ollama pull nomic-embed-text
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
#### 2. Pull a chat model (for RAG generation)
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
ollama pull llama3.2
|
|
85
|
+
```
|
|
86
|
+
|
|
87
|
+
#### 3. Build your pipeline (Python example)
|
|
88
|
+
|
|
89
|
+
```python
|
|
90
|
+
from qdrant_client import QdrantClient
|
|
91
|
+
import ollama
|
|
92
|
+
import os
|
|
93
|
+
|
|
94
|
+
qdrant = QdrantClient(url=os.environ["QDRANT_URL"])
|
|
95
|
+
embedding_model = os.environ["EMBEDDING_MODEL"]
|
|
96
|
+
|
|
97
|
+
# Create a collection
|
|
98
|
+
from qdrant_client.models import Distance, VectorParams
|
|
99
|
+
qdrant.create_collection(
|
|
100
|
+
collection_name="docs",
|
|
101
|
+
vectors_config=VectorParams(size=768, distance=Distance.COSINE),
|
|
102
|
+
)
|
|
103
|
+
|
|
104
|
+
# Embed and index a document
|
|
105
|
+
text = "Container Superposition makes devcontainer composition easy."
|
|
106
|
+
response = ollama.embed(model=embedding_model, input=text)
|
|
107
|
+
vector = response["embeddings"][0]
|
|
108
|
+
|
|
109
|
+
qdrant.upsert(
|
|
110
|
+
collection_name="docs",
|
|
111
|
+
points=[{"id": 1, "vector": vector, "payload": {"text": text}}],
|
|
112
|
+
)
|
|
113
|
+
|
|
114
|
+
# Search
|
|
115
|
+
query = "How does devcontainer composition work?"
|
|
116
|
+
q_vec = ollama.embed(model=embedding_model, input=query)["embeddings"][0]
|
|
117
|
+
results = qdrant.search(collection_name="docs", query_vector=q_vec, limit=3)
|
|
118
|
+
for r in results:
|
|
119
|
+
print(r.payload["text"])
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
### Environment Variables
|
|
123
|
+
|
|
124
|
+
Already set in your devcontainer:
|
|
125
|
+
|
|
126
|
+
```bash
|
|
127
|
+
OLLAMA_HOST=http://ollama:11434
|
|
128
|
+
QDRANT_HOST=qdrant
|
|
129
|
+
QDRANT_PORT=6333
|
|
130
|
+
QDRANT_URL=http://qdrant:6333
|
|
131
|
+
EMBEDDING_MODEL=nomic-embed-text
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
### Qdrant Dashboard
|
|
135
|
+
|
|
136
|
+
Access the Qdrant web dashboard at http://localhost:6333/dashboard to inspect
|
|
137
|
+
collections, run queries, and monitor index health.
|
|
138
|
+
|
|
139
|
+
### Recommended Python Packages
|
|
140
|
+
|
|
141
|
+
```bash
|
|
142
|
+
pip install qdrant-client ollama openai langchain-community
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
### Next Steps
|
|
146
|
+
|
|
147
|
+
- Add the `local-llm` preset's Open WebUI to test your RAG pipeline through a chat interface
|
|
148
|
+
- Swap `nomic-embed-text` for `mxbai-embed-large` for higher-quality embeddings
|
|
149
|
+
- Use Qdrant's named vectors for hybrid dense + sparse retrieval
|
|
150
|
+
- Add `prometheus` and `grafana` overlays to monitor Qdrant query performance
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
{
|
|
2
|
+
"customizations": {
|
|
3
|
+
"vscode": {
|
|
4
|
+
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"],
|
|
5
|
+
"settings": {
|
|
6
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
7
|
+
"editor.formatOnSave": true,
|
|
8
|
+
"[typescript]": {
|
|
9
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
10
|
+
"editor.formatOnSave": true
|
|
11
|
+
},
|
|
12
|
+
"[javascript]": {
|
|
13
|
+
"editor.defaultFormatter": "esbenp.prettier-vscode",
|
|
14
|
+
"editor.formatOnSave": true
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
}
|
|
@@ -2,6 +2,7 @@ version: '3.8'
|
|
|
2
2
|
services:
|
|
3
3
|
alertmanager:
|
|
4
4
|
image: prom/alertmanager:${ALERTMANAGER_VERSION:-latest}
|
|
5
|
+
restart: unless-stopped
|
|
5
6
|
command:
|
|
6
7
|
- '--config.file=/etc/alertmanager/alertmanager.yml'
|
|
7
8
|
- '--storage.path=/alertmanager'
|
|
@@ -12,9 +13,16 @@ services:
|
|
|
12
13
|
- '${ALERTMANAGER_PORT:-9093}:9093'
|
|
13
14
|
networks:
|
|
14
15
|
- devnet
|
|
16
|
+
healthcheck:
|
|
17
|
+
test: ['CMD', 'wget', '-qO-', 'http://localhost:9093/-/ready']
|
|
18
|
+
interval: 10s
|
|
19
|
+
timeout: 5s
|
|
20
|
+
retries: 5
|
|
21
|
+
start_period: 10s
|
|
15
22
|
|
|
16
23
|
volumes:
|
|
17
24
|
alertmanager_data:
|
|
18
25
|
|
|
19
26
|
networks:
|
|
20
27
|
devnet:
|
|
28
|
+
name: devnet
|
|
@@ -1,3 +1,6 @@
|
|
|
1
1
|
{
|
|
2
|
-
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json"
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"postCreateCommand": {
|
|
4
|
+
"setup-amp": "bash .devcontainer/scripts/setup-amp.sh"
|
|
5
|
+
}
|
|
3
6
|
}
|
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
# Ansible Overlay
|
|
2
|
+
|
|
3
|
+
Adds [Ansible](https://www.ansible.com/) tooling for automation, configuration management, and infrastructure provisioning workflows inside your devcontainer.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Ansible CLI** — `ansible`, `ansible-playbook`, `ansible-galaxy`, `ansible-vault`, `ansible-doc`
|
|
8
|
+
- **ansible-lint** — Best-practice and style checks for playbooks, roles, and collections
|
|
9
|
+
- **VS Code Extension:** Red Hat Ansible (`redhat.ansible`) — syntax highlighting, autocomplete, and validation powered by the Ansible Language Server
|
|
10
|
+
|
|
11
|
+
## How It Works
|
|
12
|
+
|
|
13
|
+
Ansible and ansible-lint are installed via the shared `cross-distro-packages` feature during devcontainer creation:
|
|
14
|
+
|
|
15
|
+
- **Debian/Ubuntu**: installs `ansible` (or `ansible-core`) and `ansible-lint` (or `python3-ansible-lint`) via `apt`
|
|
16
|
+
- **Alpine**: installs `ansible` and `ansible-lint` via `apk`
|
|
17
|
+
|
|
18
|
+
No extra services are started — Ansible runs entirely inside the devcontainer and connects to remote hosts (or `localhost`) over SSH or WinRM.
|
|
19
|
+
|
|
20
|
+
**Dependencies:** None required. Combine with cloud CLI overlays (`aws-cli`, `azure-cli`, `gcloud`) for cloud target automation, or `terraform` for hybrid IaC workflows.
|
|
21
|
+
|
|
22
|
+
## Common Commands
|
|
23
|
+
|
|
24
|
+
### Inventory & Connectivity
|
|
25
|
+
|
|
26
|
+
```bash
|
|
27
|
+
# Ping all hosts in the default inventory
|
|
28
|
+
ansible all -m ping
|
|
29
|
+
|
|
30
|
+
# Ping using an explicit inventory file
|
|
31
|
+
ansible all -i inventory/hosts.ini -m ping
|
|
32
|
+
|
|
33
|
+
# Gather facts from a host group
|
|
34
|
+
ansible webservers -m gather_facts -i inventory/hosts.ini
|
|
35
|
+
|
|
36
|
+
# List all hosts in an inventory
|
|
37
|
+
ansible-inventory -i inventory/hosts.ini --list
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
### Running Playbooks
|
|
41
|
+
|
|
42
|
+
```bash
|
|
43
|
+
# Run a playbook against all hosts in inventory
|
|
44
|
+
ansible-playbook playbook.yml
|
|
45
|
+
|
|
46
|
+
# Run with an explicit inventory
|
|
47
|
+
ansible-playbook -i inventory/hosts.ini playbook.yml
|
|
48
|
+
|
|
49
|
+
# Run with extra variables
|
|
50
|
+
ansible-playbook playbook.yml -e "env=production db_host=db.example.com"
|
|
51
|
+
|
|
52
|
+
# Limit execution to a specific host group
|
|
53
|
+
ansible-playbook playbook.yml --limit webservers
|
|
54
|
+
|
|
55
|
+
# Dry-run (check mode) — show changes without applying them
|
|
56
|
+
ansible-playbook playbook.yml --check
|
|
57
|
+
|
|
58
|
+
# Verbose output for debugging
|
|
59
|
+
ansible-playbook playbook.yml -vvv
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
### Ansible Galaxy
|
|
63
|
+
|
|
64
|
+
```bash
|
|
65
|
+
# Install a collection from Galaxy
|
|
66
|
+
ansible-galaxy collection install community.general
|
|
67
|
+
|
|
68
|
+
# Install a role from Galaxy
|
|
69
|
+
ansible-galaxy role install geerlingguy.nginx
|
|
70
|
+
|
|
71
|
+
# Install from a requirements file
|
|
72
|
+
ansible-galaxy install -r requirements.yml
|
|
73
|
+
|
|
74
|
+
# List installed collections
|
|
75
|
+
ansible-galaxy collection list
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Vault (Secrets Management)
|
|
79
|
+
|
|
80
|
+
```bash
|
|
81
|
+
# Encrypt a file
|
|
82
|
+
ansible-vault encrypt secrets.yml
|
|
83
|
+
|
|
84
|
+
# Decrypt a file
|
|
85
|
+
ansible-vault decrypt secrets.yml
|
|
86
|
+
|
|
87
|
+
# View an encrypted file without decrypting on disk
|
|
88
|
+
ansible-vault view secrets.yml
|
|
89
|
+
|
|
90
|
+
# Edit an encrypted file in place
|
|
91
|
+
ansible-vault edit secrets.yml
|
|
92
|
+
|
|
93
|
+
# Run a playbook with an encrypted vault
|
|
94
|
+
ansible-playbook playbook.yml --ask-vault-pass
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
### Linting
|
|
98
|
+
|
|
99
|
+
```bash
|
|
100
|
+
# Lint a playbook
|
|
101
|
+
ansible-lint playbook.yml
|
|
102
|
+
|
|
103
|
+
# Lint all playbooks and roles in the current project
|
|
104
|
+
ansible-lint
|
|
105
|
+
|
|
106
|
+
# Show lint violations with profile info
|
|
107
|
+
ansible-lint --profile production playbook.yml
|
|
108
|
+
```
|
|
109
|
+
|
|
110
|
+
## Quick Start
|
|
111
|
+
|
|
112
|
+
Create a minimal localhost playbook:
|
|
113
|
+
|
|
114
|
+
```yaml
|
|
115
|
+
# playbook.yml
|
|
116
|
+
- name: Local test
|
|
117
|
+
hosts: localhost
|
|
118
|
+
connection: local
|
|
119
|
+
gather_facts: false
|
|
120
|
+
tasks:
|
|
121
|
+
- name: Ping localhost
|
|
122
|
+
ansible.builtin.ping:
|
|
123
|
+
|
|
124
|
+
- name: Print a message
|
|
125
|
+
ansible.builtin.debug:
|
|
126
|
+
msg: 'Ansible is working!'
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
Run and lint it:
|
|
130
|
+
|
|
131
|
+
```bash
|
|
132
|
+
ansible-playbook playbook.yml
|
|
133
|
+
ansible-lint playbook.yml
|
|
134
|
+
```
|
|
135
|
+
|
|
136
|
+
## Use Cases
|
|
137
|
+
|
|
138
|
+
- **Configuration management** — Enforce consistent state across servers (packages, files, services, users)
|
|
139
|
+
- **Application deployment** — Orchestrate multi-step deployments to remote hosts or cloud VMs
|
|
140
|
+
- **Cloud provisioning** — Combine with cloud modules (`amazon.aws`, `azure.azcollection`, `google.cloud`) to provision infrastructure
|
|
141
|
+
- **Kubernetes automation** — Use the `kubernetes.core` collection to manage cluster resources
|
|
142
|
+
- **Local development automation** — Run playbooks against `localhost` to set up or reset dev environments
|
|
143
|
+
|
|
144
|
+
**Integrates well with:**
|
|
145
|
+
|
|
146
|
+
- `aws-cli`, `azure-cli`, `gcloud` — cloud target automation via provider-specific modules
|
|
147
|
+
- `terraform` — use Terraform for infra provisioning, Ansible for configuration of provisioned resources
|
|
148
|
+
- `kubectl-helm` — manage Kubernetes workloads with the `kubernetes.core` Ansible collection
|
|
149
|
+
|
|
150
|
+
## References
|
|
151
|
+
|
|
152
|
+
- [Ansible Documentation](https://docs.ansible.com/)
|
|
153
|
+
- [ansible-lint Documentation](https://ansible.readthedocs.io/projects/lint/)
|
|
154
|
+
- [Ansible Galaxy](https://galaxy.ansible.com/)
|
|
155
|
+
- [Red Hat Ansible VS Code Extension](https://marketplace.visualstudio.com/items?itemName=redhat.ansible)
|
|
156
|
+
- [Ansible Collections Index](https://docs.ansible.com/ansible/latest/collections/index.html)
|
|
157
|
+
|
|
158
|
+
**Related Overlays:**
|
|
159
|
+
|
|
160
|
+
- [`aws-cli`](../aws-cli/README.md) — AWS CLI for cloud target automation
|
|
161
|
+
- [`azure-cli`](../azure-cli/README.md) — Azure CLI for cloud target automation
|
|
162
|
+
- [`gcloud`](../gcloud/README.md) — Google Cloud SDK for cloud target automation
|
|
163
|
+
- [`terraform`](../terraform/README.md) — Infrastructure provisioning to pair with Ansible configuration management
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://raw.githubusercontent.com/devcontainers/spec/main/schemas/devContainer.base.schema.json",
|
|
3
|
+
"features": {
|
|
4
|
+
"./features/cross-distro-packages": {
|
|
5
|
+
"apt": "ansible|ansible-core ansible-lint|python3-ansible-lint",
|
|
6
|
+
"apk": "ansible ansible-lint"
|
|
7
|
+
}
|
|
8
|
+
},
|
|
9
|
+
"customizations": {
|
|
10
|
+
"vscode": {
|
|
11
|
+
"extensions": ["redhat.ansible"]
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|