From 599f067423e97a5e58f92ee6e88cf8abc69141a1 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 18:03:30 +0900 Subject: [PATCH 01/23] MAF-19265: feat(helm): add MinIO, Loki, and Vector dependencies to the MoAI Inference Framework - Introduced MinIO as an S3-compatible object storage backend for Loki. - Added Loki for log aggregation and monitoring. - Included Vector as a log collector. - Updated Chart.yaml and values.yaml to configure new dependencies. - Created necessary ConfigMaps and Secrets for Loki and MinIO integration. - Enhanced README.md with new dependencies and configuration options. --- .../helm/moai-inference-framework/Chart.lock | 61 ++-- .../helm/moai-inference-framework/Chart.yaml | 12 + .../helm/moai-inference-framework/README.md | 132 ++++++++ .../charts/loki-6.30.0.tgz | Bin 0 -> 153188 bytes .../charts/minio-14.10.5.tgz | Bin 0 -> 59483 bytes .../charts/vector-0.39.0.tgz | Bin 0 -> 30254 bytes .../templates/grafana/datasource-loki.yaml | 26 ++ .../templates/loki/credentials.yaml | 30 ++ .../helm/moai-inference-framework/values.yaml | 295 +++++++++++++++++- 9 files changed, 529 insertions(+), 27 deletions(-) create mode 100644 deploy/helm/moai-inference-framework/charts/loki-6.30.0.tgz create mode 100644 deploy/helm/moai-inference-framework/charts/minio-14.10.5.tgz create mode 100644 deploy/helm/moai-inference-framework/charts/vector-0.39.0.tgz create mode 100644 deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml create mode 100644 deploy/helm/moai-inference-framework/templates/loki/credentials.yaml diff --git a/deploy/helm/moai-inference-framework/Chart.lock b/deploy/helm/moai-inference-framework/Chart.lock index cb00edb..a8b7deb 100644 --- a/deploy/helm/moai-inference-framework/Chart.lock +++ b/deploy/helm/moai-inference-framework/Chart.lock @@ -1,27 +1,36 @@ dependencies: -- name: common - repository: oci://registry-1.docker.io/bitnamicharts - version: 2.31.4 -- name: kube-prometheus-stack - repository: https://prometheus-community.github.io/helm-charts - version: 80.7.0 -- name: lws - repository: oci://registry.k8s.io/lws/charts - version: 0.7.0 -- name: odin - repository: https://moreh-dev.github.io/helm-charts - version: v0.6.0 -- name: odin-crd - repository: https://moreh-dev.github.io/helm-charts - version: v0.6.0 -- name: keda - repository: https://kedacore.github.io/charts - version: 2.18.0 -- name: kubernetes-replicator - repository: https://helm.mittwald.de - version: 2.12.2 -- name: node-feature-discovery - repository: oci://registry.k8s.io/nfd/charts - version: 0.18.3 -digest: sha256:d7f75e788dca4192775595637ec123afa390e09eebcaef9e9c0e40ff46c23e23 -generated: "2026-02-19T16:14:15.495286+09:00" + - name: common + repository: oci://registry-1.docker.io/bitnamicharts + version: 2.31.4 + - name: kube-prometheus-stack + repository: https://prometheus-community.github.io/helm-charts + version: 80.7.0 + - name: lws + repository: oci://registry.k8s.io/lws/charts + version: 0.7.0 + - name: odin + repository: https://moreh-dev.github.io/helm-charts + version: v0.6.0 + - name: odin-crd + repository: https://moreh-dev.github.io/helm-charts + version: v0.6.0 + - name: keda + repository: https://kedacore.github.io/charts + version: 2.18.0 + - name: kubernetes-replicator + repository: https://helm.mittwald.de + version: 2.12.2 + - name: node-feature-discovery + repository: oci://registry.k8s.io/nfd/charts + version: 0.18.3 + - name: minio + repository: oci://registry-1.docker.io/bitnamicharts + version: 14.10.5 + - name: loki + repository: https://moreh-dev.github.io/helm-charts + version: 6.30.0 + - name: vector + repository: https://moreh-dev.github.io/helm-charts + version: 0.39.0 +digest: sha256:3b635653eed827815cf738ecaaa717f15a008a98d6cdaae0692cf54beee3c43a +generated: "2026-02-20T18:09:04.847004395+09:00" diff --git a/deploy/helm/moai-inference-framework/Chart.yaml b/deploy/helm/moai-inference-framework/Chart.yaml index 43e39f0..8376a3f 100644 --- a/deploy/helm/moai-inference-framework/Chart.yaml +++ b/deploy/helm/moai-inference-framework/Chart.yaml @@ -42,3 +42,15 @@ dependencies: version: 0.18.3 repository: oci://registry.k8s.io/nfd/charts condition: nfd.enabled + - name: minio + version: 14.10.5 + repository: oci://registry-1.docker.io/bitnamicharts + condition: minio.enabled + - name: loki + version: 6.30.0 + repository: https://moreh-dev.github.io/helm-charts + condition: loki.enabled + - name: vector + version: 0.39.0 + repository: https://moreh-dev.github.io/helm-charts + condition: vector.enabled diff --git a/deploy/helm/moai-inference-framework/README.md b/deploy/helm/moai-inference-framework/README.md index 8abc6f9..a237a28 100644 --- a/deploy/helm/moai-inference-framework/README.md +++ b/deploy/helm/moai-inference-framework/README.md @@ -19,10 +19,13 @@ Moreh Inference Framework |------------|------|---------| | https://helm.mittwald.de | replicator(kubernetes-replicator) | 2.12.2 | | https://kedacore.github.io/charts | keda | 2.18.0 | +| https://moreh-dev.github.io/helm-charts | loki | 6.30.0 | | https://moreh-dev.github.io/helm-charts | odin | v0.6.0 | | https://moreh-dev.github.io/helm-charts | odin-crd | v0.6.0 | +| https://moreh-dev.github.io/helm-charts | vector | 0.39.0 | | https://prometheus-community.github.io/helm-charts | prometheus-stack(kube-prometheus-stack) | 80.7.0 | | oci://registry-1.docker.io/bitnamicharts | common | 2.31.4 | +| oci://registry-1.docker.io/bitnamicharts | minio | 14.10.5 | | oci://registry.k8s.io/lws/charts | lws | 0.7.0 | | oci://registry.k8s.io/nfd/charts | nfd(node-feature-discovery) | 0.18.3 | @@ -52,7 +55,99 @@ Moreh Inference Framework | global | object | `{"imagePullSecrets":[]}` | global values are shared across all sub-charts if the value's key matches. | | global.imagePullSecrets | list | `[]` | Image pull secrets. | | keda.enabled | bool | `true` | Enable kedacore/keda. Set to false if already deployed. | +| loki.backend.extraArgs[0] | string | `"-config.expand-env=true"` | | +| loki.backend.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | +| loki.backend.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | +| loki.backend.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | +| loki.backend.persistence.storageClass | string | `""` | StorageClass for Loki backend component (e.g. ceph-block, standard). | +| loki.backend.replicas | int | `1` | | +| loki.backend.resources.limits.cpu | string | `"500m"` | | +| loki.backend.resources.limits.memory | string | `"512Mi"` | | +| loki.backend.resources.requests.cpu | string | `"500m"` | | +| loki.backend.resources.requests.memory | string | `"512Mi"` | | +| loki.enabled | bool | `true` | Enable grafana/loki. | +| loki.fullnameOverride | string | `"loki"` | | +| loki.gateway.extraArgs[0] | string | `"-config.expand-env=true"` | | +| loki.gateway.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | +| loki.gateway.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | +| loki.gateway.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | +| loki.gateway.replicas | int | `1` | | +| loki.gateway.resources.limits.cpu | string | `"500m"` | | +| loki.gateway.resources.limits.memory | string | `"512Mi"` | | +| loki.gateway.resources.requests.cpu | string | `"500m"` | | +| loki.gateway.resources.requests.memory | string | `"512Mi"` | | +| loki.global.dnsService | string | `"coredns"` | | +| loki.loki.auth_enabled | bool | `false` | | +| loki.loki.commonConfig.replication_factor | int | `1` | | +| loki.loki.image.tag | string | `"3.5.1"` | | +| loki.loki.schemaConfig.configs[0].from | string | `"2024-06-24"` | | +| loki.loki.schemaConfig.configs[0].index.period | string | `"24h"` | | +| loki.loki.schemaConfig.configs[0].index.prefix | string | `"loki_index_"` | | +| loki.loki.schemaConfig.configs[0].object_store | string | `"s3"` | | +| loki.loki.schemaConfig.configs[0].schema | string | `"v13"` | | +| loki.loki.schemaConfig.configs[0].store | string | `"tsdb"` | | +| loki.loki.storage.bucketNames.admin | string | `"loki"` | | +| loki.loki.storage.bucketNames.chunks | string | `"loki"` | | +| loki.loki.storage.bucketNames.ruler | string | `"loki"` | | +| loki.loki.storage.s3.accessKeyId | string | `"${AWS_ACCESS_KEY_ID}"` | | +| loki.loki.storage.s3.endpoint | string | `"http://${BUCKET_HOST}:${BUCKET_PORT}"` | | +| loki.loki.storage.s3.region | string | `"${BUCKET_REGION}"` | | +| loki.loki.storage.s3.s3ForcePathStyle | bool | `true` | | +| loki.loki.storage.s3.secretAccessKey | string | `"${AWS_SECRET_ACCESS_KEY}"` | | +| loki.loki.storage_config.tsdb_shipper.active_index_directory | string | `"/var/loki/tsdb-index"` | | +| loki.loki.storage_config.tsdb_shipper.cache_location | string | `"/var/loki/tsdb-cache"` | | +| loki.loki.storage_config.tsdb_shipper.cache_ttl | string | `"168h"` | | +| loki.loki.structuredConfig.compactor.delete_request_store | string | `"s3"` | | +| loki.loki.structuredConfig.compactor.retention_enabled | bool | `true` | | +| loki.loki.structuredConfig.limits_config.ingestion_burst_size_mb | int | `60` | | +| loki.loki.structuredConfig.limits_config.ingestion_rate_mb | int | `30` | | +| loki.loki.structuredConfig.limits_config.max_entries_limit_per_query | int | `50000` | | +| loki.loki.structuredConfig.limits_config.max_query_series | int | `10000` | | +| loki.loki.structuredConfig.limits_config.per_stream_rate_limit | string | `"30MB"` | | +| loki.loki.structuredConfig.limits_config.per_stream_rate_limit_burst | string | `"60MB"` | | +| loki.loki.structuredConfig.limits_config.retention_period | string | `"2160h"` | | +| loki.loki.structuredConfig.limits_config.split_queries_by_interval | string | `"24h"` | | +| loki.read.extraArgs[0] | string | `"-config.expand-env=true"` | | +| loki.read.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | +| loki.read.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | +| loki.read.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | +| loki.read.replicas | int | `1` | | +| loki.read.resources.limits.cpu | string | `"500m"` | | +| loki.read.resources.limits.memory | string | `"1Gi"` | | +| loki.read.resources.requests.cpu | string | `"500m"` | | +| loki.read.resources.requests.memory | string | `"1Gi"` | | +| loki.write.extraArgs[0] | string | `"-config.expand-env=true"` | | +| loki.write.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | +| loki.write.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | +| loki.write.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | +| loki.write.persistence.storageClass | string | `""` | StorageClass for Loki write component (e.g. ceph-block, standard). | +| loki.write.replicas | int | `1` | | +| loki.write.resources.limits.cpu | string | `"500m"` | | +| loki.write.resources.limits.memory | string | `"512Mi"` | | +| loki.write.resources.requests.cpu | string | `"500m"` | | +| loki.write.resources.requests.memory | string | `"512Mi"` | | | lws.enabled | bool | `true` | Enable kubernetes-sigs/lws. Set to false if already deployed. | +| minio.auth.rootPassword | string | `""` | MinIO root password (required; set a strong password). | +| minio.auth.rootUser | string | `"minio"` | MinIO root user. | +| minio.enabled | bool | `true` | Enable bitnami/minio as the S3-compatible object storage backend for Loki. Set to false if MinIO is already deployed; in that case, set minio.fullnameOverride to the existing service name so the loki-bucket ConfigMap resolves the correct host. | +| minio.fullnameOverride | string | `"minio"` | | +| minio.mode | string | `"standalone"` | | +| minio.persistence.size | string | `"500Gi"` | | +| minio.persistence.storageClass | string | `""` | StorageClass for MinIO data volume (e.g. ceph-block, standard). | +| minio.provisioning.buckets[0].name | string | `"loki"` | | +| minio.provisioning.enabled | bool | `true` | | +| minio.provisioning.policies[0].name | string | `"loki"` | | +| minio.provisioning.policies[0].statements[0].actions[0] | string | `"s3:*"` | | +| minio.provisioning.policies[0].statements[0].effect | string | `"Allow"` | | +| minio.provisioning.policies[0].statements[0].resources[0] | string | `"arn:aws:s3:::loki/*"` | | +| minio.provisioning.users[0].password | string | `""` | Password for the loki MinIO user (required; set a strong password). | +| minio.provisioning.users[0].policies[0] | string | `"loki"` | | +| minio.provisioning.users[0].setPolicies | bool | `true` | | +| minio.provisioning.users[0].username | string | `"loki"` | | +| minio.resources.limits.cpu | string | `"1.5"` | | +| minio.resources.limits.memory | string | `"3072Mi"` | | +| minio.resources.requests.cpu | string | `"1"` | | +| minio.resources.requests.memory | string | `"2048Mi"` | | | nameOverride | string | `""` | Chart name override. | | namespaceOverride | string | `""` | Namespace override. | | nfd.enabled | bool | `true` | Enable kubernetes-sigs/node-feature-discovery. Set to false if already deployed. | @@ -81,6 +176,43 @@ Moreh Inference Framework | prometheus-stack.thanosRuler.enabled | bool | `false` | | | prometheus-stack.windowsMonitoring.enabled | bool | `false` | | | replicator.enabled | bool | `true` | Enable mittwald/kubernetes-replicator. Set to false if already deployed. | +| vector.customConfig.api.address | string | `"0.0.0.0:8686"` | | +| vector.customConfig.api.enabled | bool | `true` | | +| vector.customConfig.data_dir | string | `"/vector-data"` | | +| vector.customConfig.sinks.loki.encoding.codec | string | `"json"` | | +| vector.customConfig.sinks.loki.endpoint | string | `"http://loki-gateway"` | | +| vector.customConfig.sinks.loki.inputs[0] | string | `"mif_log_transform"` | | +| vector.customConfig.sinks.loki.labels.app | string | `"{{`{{ app }}`}}"` | | +| vector.customConfig.sinks.loki.labels.inference_service | string | `"{{`{{ inference_service }}`}}"` | | +| vector.customConfig.sinks.loki.labels.level | string | `"{{`{{ level }}`}}"` | | +| vector.customConfig.sinks.loki.labels.namespace | string | `"{{`{{ namespace }}`}}"` | | +| vector.customConfig.sinks.loki.labels.node_name | string | `"{{`{{ node_name }}`}}"` | | +| vector.customConfig.sinks.loki.labels.pool_name | string | `"{{`{{ pool_name }}`}}"` | | +| vector.customConfig.sinks.loki.labels.role | string | `"{{`{{ role }}`}}"` | | +| vector.customConfig.sinks.loki.type | string | `"loki"` | | +| vector.customConfig.sources.mif_logs.type | string | `"kubernetes_logs"` | | +| vector.customConfig.transforms.mif_log_transform.inputs[0] | string | `"mif_logs"` | | +| vector.customConfig.transforms.mif_log_transform.source | string | `".namespace = .kubernetes.pod_namespace\n.node_name = \"$VECTOR_SELF_NODE_NAME\"\n.app = get(.kubernetes.pod_labels, [\"app.kubernetes.io/name\"]) ?? \"\"\n.inference_service = get(.kubernetes.pod_labels, [\"app.kubernetes.io/instance\"]) ?? \"\"\n.pool_name = get(.kubernetes.pod_labels, [\"mif.moreh.io/pool\"]) ?? \"\"\n.role = get(.kubernetes.pod_labels, [\"mif.moreh.io/role\"]) ?? \"\"\n\nstructured, err = parse_json(.message)\nif err == null {\n . = merge!(., structured)\n msg, err = get(., [\"msg\"])\n if err == null {\n .message = msg\n del(.msg)\n }\n time, err = get(., [\"time\"])\n if err == null {\n .timestamp = time\n del(.time)\n }\n} else {\n .level = \"warn\"\n}\n\ndel(.file)\ndel(.source_type)\ndel(.stream)\ndel(.kubernetes)\n"` | | +| vector.customConfig.transforms.mif_log_transform.type | string | `"remap"` | | +| vector.enabled | bool | `true` | Enable vector/vector as a DaemonSet log collector. | +| vector.resources.limits.cpu | string | `"100m"` | | +| vector.resources.limits.memory | string | `"256Mi"` | | +| vector.resources.requests.cpu | string | `"100m"` | | +| vector.resources.requests.memory | string | `"256Mi"` | | +| vector.role | string | `"Agent"` | | +| vector.tolerations[0].effect | string | `"NoExecute"` | | +| vector.tolerations[0].key | string | `"node.kubernetes.io/unschedulable"` | | +| vector.tolerations[0].operator | string | `"Exists"` | | +| vector.tolerations[0].tolerationSeconds | int | `5` | | +| vector.tolerations[1].effect | string | `"NoSchedule"` | | +| vector.tolerations[1].key | string | `"node-role.kubernetes.io/compute"` | | +| vector.tolerations[1].operator | string | `"Equal"` | | +| vector.tolerations[1].value | string | `"true"` | | +| vector.tolerations[2].effect | string | `"NoSchedule"` | | +| vector.tolerations[2].key | string | `"amd.com/gpu"` | | +| vector.tolerations[2].operator | string | `"Exists"` | | +| vector.updateStrategy.rollingUpdate.maxUnavailable | int | `10` | | +| vector.updateStrategy.type | string | `"RollingUpdate"` | | ---------------------------------------------- Autogenerated from chart metadata using [helm-docs v1.14.2](https://github.com/norwoodj/helm-docs/releases/v1.14.2) diff --git a/deploy/helm/moai-inference-framework/charts/loki-6.30.0.tgz b/deploy/helm/moai-inference-framework/charts/loki-6.30.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..b5e7322cb36fe3823a29d6b365bed036de368ed9 GIT binary patch literal 153188 zcmV)8K*qlxiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0PMZ{cN@9UAex`~SKvx>uIwyHQIhR(n4R2}A2Xwk?9p2G%=c~f zI}+Fpk{C4`od#MG$MOE{_n-!Qk1GC-C3FU{L+<-uHX^f7*LG*gJS~@Z|fwXMY;(?e85t`4bu3NpC9u3aM!R zr@@West)ce`A0MUE6XJp>5yFRcW9Qmp9lS?{Xr*Y8B1f9Mx4oEr$=bQsT`6SPr2w2 z5{WeC3hF~qpQUt^u((4=N@uLBn6pesu0%c`lBrUe9PaK$df&d8K)gYVjLzp#QYLSB@hWNg@h$);xmh*V| zo%oq0GXhn~Smfj<#6^z91t&C(UBT;Au{_JUWaL;(B#}jyiCpn?qE|vBTuph@?GPgQ zEK3-X5l!@Hx`1WIqg+UqU-F1aG7~YA{mxYAL9R9m9_h|j>qcU>8;eNp0$EF_Vp8oU zVj|9H8lUM&>}TnuGow6Jl&36*Esc|_a&{^5t0`A0o4eBAnT)0voXHOU)`&Y&6nTWl z!Sw)psXJgg1AXvoczqPobg|`oZ44bX&)AUAEK7Jq^-6WzDn9EU4Elr4X6N6d|A~k$ zZkxQoza{j4@N9ptM*sH*5A^?Y{Hv1p+aTJXgP`6mLF5xA)sV<3-GBOQ`0V?5Z@m9> z@9B8&`-7*0{U>xx4`Mprj|R^Uo-j7rkJ#Sm`*`p?I(V`_c=|lrJNW+K+0((nVDv2B zi#ijQ>i)5KNVfI|`%im=r@g)X_j`lk{`bR!=l$o;p8n-8PY<5#{qL;}kMYL;;QU|G zq+s&S7{G<+|H+fV;NVI1{2zS(?BV=>j(^*v*CW4NvOMQ8lSECKJq@IgEG9~jm?@Ue zc*;m5W*Jp{#1pROM2tz!%vDIPxS9gAqWOd=^7mrI@{}niNt6^)vAo~eChwLCEmyB3M3&}Ljl)%R;o+QK+ktpFTRj#jMOfHHMi&R1= zj>7AJsnqRkldCC@resFvMC9kHD017^9Z58E!g34SC$F!m=3|Cr=W?&V z|D^w9r%z6q(i4;xNuvL2`(`_(rc^=KJKH2?mt1NlM|ab(*ml~7fT7cwBw|F9VTTYt zqZ6k8Af#b|UWw>}%7!2$#%(VWUZc;1a-XCDTSDzAWb==W6~kp;Er3Gv*Lw zBGzbX6+�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 literal 0 HcmV?d00001 diff --git a/deploy/helm/moai-inference-framework/charts/minio-14.10.5.tgz b/deploy/helm/moai-inference-framework/charts/minio-14.10.5.tgz new file mode 100644 index 0000000000000000000000000000000000000000..3bb59bac79a9a05950770bf0df7e35e348237c08 GIT binary patch literal 59483 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%0D^U293S&(k7my}cTlRm%T){$JD2 zbyXE`PX3oCo2&WwpS87(2mS9(o_nDGS@EB!%E5$SY>RONy1Fl_(n)8MDaOa>eJv-e zAkTlPI84ih`(sweRkztFu4BLhJ!C2GNw7Z8JcvMP)y5dy8VAJ3_5K?t2aEb>-cQJK z?oRrrcrk9R5s&%iadST}+mFt=SGI9njXBqJc#}89JhEbrx`q3xBbcLIbgEziwZFC9 zwYIa`w9DB$#iGgGUb$#@{nRs@IM1)(t0~ah+9oK=y*j#yfKHPR9C_ZPxhQ z&@IvTDG&`(6*I)uM6xP)9jg)iZ0(wf&H&stWl9U6I7^BH8pc9 z-`teKZ@L)%Y7=^KPbaiJ-@vpGdUM*w+U6BnUW9NKSk8%#w}r`7@q6suqTniZy?sqT zWHNSjl^bWL6z^EX@ggXed%$&rZ*2_i^yM{AyXMUYS3r|j3g}Z{j_9@)v%50>=F0AJ zWLyiA_e!SEk{p>_miLSCNuo?Jd&BYB-Ep1DZq(B)Dk|TcBr8Iv#**MN!*S#JO|xte zioe0YWXQR^Ah-$r@Z$ky9YBl>q6wZM^y4@}?eLqE2;j@Obs4TqVaj~<=i@|R@WE&j zmd(aD-_-Ozvd~P7zFH@B49qnDT)KF_>U{Ul);I6}_h0|~=C8lLYKkQbJ?34_MiALt zf%mC*@vr{OiT{u(5wDj3X5RU~_LH@I{O{^R{;#`v?oIrM5$!>@dSjAiroKi=beW_} zRWi%JT$*i}D;2YK&OZ57Xd^Gy<>iKMuGyCLMK+en%db=fiV8F<$?nOyX$t42vOF%v zK`GHZ1K#H*XS|9ltI4lMy<)p`30-Jrh_SNKmQ~@4-}+8>T2e_m+4R_1DCX`CACL1} z2w(k5X*_^tG_p!sz9=eOMmU^~maGnKEsa97GP|ng%`ihN$k@_h%IC2(@2NGD2*{el z8CBFQiqiJf{BfdmYwAkNXOm~wQ1fO@TVc9NLCRU#F5E#>B|D2+n?ydTUZ@a^Mw1ke z2C36f$poZ1-B*tLye?im?j|zZubI6U?cU^~XBU{kP3*+KvlxnzzCF)P8bA4>ABB(c zO7)PArVXQLEHK(sFfhs1WP%?Rz^m@v)cs5X3gS&4Q~29dUw)1;!2!ne0&nidzISe3 z0=`TaRm0R_?u)eNHhzdMF_XwL0}4i{EXjW909bCRrTkLn5SzhBTdK+HGWo@sb*mT+d=s2% zQLgjl>C9i!Ge`d?TkdxC|MuEudp)oJx7!c;|D8PdK>w#MoSencCA$vTQ!p8y#vVz> z3Ei>Gt}2!DFR_luAVBg!bmj4Kw_zrg_$oUCzmE;T?36h4vOT0u)XY#e3W>OV(psZmNZ8Od=1}}4Jlr`x{^`xp-m%y}I(l=oEq;zBydKAKbP)gm zx}3Z>i3tnY`pqqJPG`Z5H>(?cCY{9AOX!BkKd)I^1?J#W&QW<}&b(!PSwzFWfE7S2 z%o}2QoGB6jUZBpNRp`}Jy*>BGDJ51w1BcJlT|~nPC^@~M7mSh{>Gt=Nm{RfJE$s1# zsk7&W*nZSinR`-wjt_5Sce?@Jw;7<9W98Hj{n#6>oJE&T8m**pGy%gYIRoM4po!^_ zq<1(I$jYN^@D7uob9n|_+R^hO%gdQbt}w)}bCqP4K&x1hAS<(77OlmC!BPw!3>;KO=7q^Me+m;cQHRnnku@KDdOF1Q(`!bE)PQb+dm-K zO_hX%@+qa{tp|)PH$1QdV@lBhdNj%;X}N*L1(Osif4wQOs<>^CYf&=UK>b;HjFL(m z0S(m8a#_)&7Fa+LQ4e&)K7X;Y-^v1v=j!jNcY0d=opFA|;YyTJvpSgzk53jgq^hEX ztc|?yDa#e<*`rWtt5IGK{b6XGdk-7W$Htr??&apWXQe2+OMM%kN9YoIdg@Q zXIf1F+;NlyX*2_p4P={ulr-f6%58B#yMTHVs;o{9i7jg}7a>?(udJ(4X%kVF^f><| zH(aX|YFpFpiHWxP{jg}&?1uGWW-m&UAXT7gDK}YWXK|8Rv(cVkJZ6Wj59J-6!A~=9 z491L{;#GCPQS;N$600ritBEE2*qW7kNwLvZ86P#{Oyqv>FX1oY|NB4xR~+x}zCAiP z`C0t5bM*S)^^0wcObZ56N_|(!^KrX2IS&9osEct5=8%;G;L)`6NHUHJ_WdL{1sS_6 zFhw%{i@1=|iM^2{%(yik`bM@qHc&i)env2bdSvZ@hWVTYGr>6V!apWrXFMJTJr?V` zybYT5IB~`Cq?@EcIw8@+N%^wRsER5lV8rRYpu?o4^>tQ2Y7A5qQXj&ezbv|ObPlt` zgBm#`Q*a9y%67+7AHd{dahM4WjSAeMcA zmMF}?SSjIe82i2GGz|WrX@TyFJ#vGx(5B6DnpJdNVgn^R{3%4kIL%I z?Yd?Z(h_Of#TFj=FX6!etrt=o6PRTBLwWVVyy^KE)-Z#>mZ=76m&k$gyb0a<$S#;2 z-EdLSmz<`W zjVwS3T2joQg_2HHh{#+%+K$D7N{Zfgeqg#ydjTk;FnZ=gTWR7HQ0HVjg!ZR+_PU`KevG zS9<37|FhF&x0(NMeYKGPuf6r)|G$gp9{B&Q2w*R}>H%-U2IjUh3@}}&%n*xL4iS6v z8PU6eI*wce*A`}NUhdh!vA1qWf#74dp;$0cwN%>MSpt9;7*lZne3;By+ zLobY)v%`ssARM{*Ax`Mx6Bs3ToPD7*cnq}c#l9!KQk$z^izWX<4_%S|_{<-nv(J&2 z>(TH&3^94m${PPG5>OnImhRG53O_3L2>2ZLU5-au#ZA?G76&n&z%XHvjOdbx5m>7D z_uA7}0p3BM?+d)!T!l|91(1iA2e+96_uX10xV0A&8vds_3VLzfPOs%!S=-#YPN&zO zY+B&fpKjFbbTR^+t!Ae;bC}+2SEHszr=R3-@MNoc;&Pbw`@v*%#a_2p*Q$|og>JVu z*Q@8w?l;kYU9xspEdp8HxE@)%n-+nrKB-IAAFk2sna$LpYa85Fd!sI0uYJmHZ`t75 zYim#Ik#-h+B*Tj|bL300b$AkAr)7UErl>9)WEhC1G(-=nDuvY36<rnQPlrdpR^zDf4P(A9_WA6 zh5Zj>R9{f_p{pY0Jq<*d)qCb+~}i z9Zv>>-~(OzSiaS`3z}FeJH_23t6PS{dNO3SJI%Vz(UkKBAcK1I?BnaiA$DL6gnz3D z+>dHIQ#8MA(nXI~9+amMhkFK7@%sdL6wGTM_ZDcdE{3)eba`VNw1GWO^eLhwf-V|? z{DdMIw2RD*7&t(rP}d+4OA=LkuaB`Ts_5vNXt|ApfrasE?XfRGG>GweW7rh_Ax@{^2}&HTs$Dw-FRO=2G|7db@B3^HgX- z<8~Jzw%MEbbBT~|Ir78a^s}VJ>b-rY#%y>7VJbZbn~_0USveV*AtR9Kk9YDUgQA{% z;o6)3Gx}sM7NgM_D`sY?8(20PJ$6%dmriNubk_N@uh(8mrBH8rNs)4C##M>zj%ap$ zM2sGoV)B)c!`Qe;+BjB#4icb^E^Pv^vRFqb%iE?4lGz+Lw`DRsdUJg#?NtggI%zBS zSB}q&5&-N_y%Tk;Gpj62xxia=UU;}Mr-YxZEZ%VbxG8> z9b_HLP~&`XwS}9qA(RAI+tZMbuBK6zM^&Q>o9;1}$JkV_p%{Y-LiHX;fcGRX3*SB6 z7R}K#`F*J4otxAcqswfHFBJ2Ju6S+OhqBz|nJ@k3#dZ_HL9w9ht)M3eH%pC%9UYSF z$jPD(&=k#YpNq+{$u5%%Qp1D@H#JfYge;r29vtDR%NM{O7CO5L29)^Qf0rbu!##VRz?;s2Pw*|A~2j? zKGE?`jk{U6`4oL)igQSgk&C-kEmdKSDxF08;l(>I&f+vGyO9M!i<3y;9U|n2lV?w8 zAln#MqE1_UonVY(LHFjyx#u`@>a?&OgO){#SO**AsSa}V7uede7_%t`7KnK4IH(qV zoqU}<`|4{MyhYb|jz)kxmrO-X8rkd{?-T+Hn3&Cl4gGHc{eK)KDQ0~JzO&edz#RR5 zYolGz|JTBo&1w`bhaGXk~PyWXiL2 z1%qg1=}F?tP;{FM=9UzxaAS|dA?k6wRhG|j?MB0==@qPVnrqVn13{)#A8)T1B#6^fwH_pca@F5 z1&JVseC=wj=O3L9&(I7QQSYksg9QjQ-$(!vfgYZkQ9#qX=}e(6Uy3k^;xzZb71V zc64RDL@Y}2mi?_f@@W`GDm%kb-F(G``R9rfqo8xXKq8H?Jd8l(h-7vp1TN_`U z>0?8y6F^C?RMk@^EA0Q`2g-1ddYcb1)`a+n-av zq7UP`?H?6odVV-%Qa=whQvq}y3Nk`$%D~-?-wQ<6{0086*-{@Rxv*+fNTI(gwE)ez^o=!ilrOi734cso9UW4ew6EcZ8F!LGYOWuQ*KYd8S%=D7k}0x!3*P-^+- z!PNwF!yaZehy~{TioWG4DA#noD6se3t8B8T-j10ndf^UoTFUhYPTwwZ+G>XgP1et`Bhdno%WYcxf8X3{0Cb) zxKb{NdGderNk0F>`r7(K{)anxZdLx@q5>e4E5Ky0MS{JT+TRr% z@ivz3#t~0T?fJjQ{^@_*!g{OkjW-t56}<7cy7QG|A$PX(b-Pn@{p~L`Ww*cm^{K`C z+-DK}Z@T!=UwY>0e;bATKkI8x9`wIEdA@x8Z)zMpxMl5cdi;-)P4`udB~IlxCVcpmqED`>o7o zeYIV4!)u4oeAdsL{O=qve9a8-v-LmF_}Y2@UwduyA^*#rJoiQadm+<}sWVcXHhBie zQj}?>N-mrpQm2WH%aHR&Mr5W6Jg3F^R4EIb{+UnqX0o~*C`asDFIGzOpygA(DG+kp zNlD5#dC`%~Pd(wl0byTXM0ZH5V`eJ%Milz;j){bXL7?tD!g6@UgzVqaZa+l8oSh*oL%^}hXj;Q&Zj;rQK~qj%I!mE z|EmO(O`%GL=mggD(*oOv6qG0{L68OdSw8=;OmtnWw_s{zhwr+~FCbM?o$^7-I!Hii zph?qd)3W-ZnPFS?*)6na3FR6^&5mXmP{S`*rt(||)rUGv=iJyvyb90J38(0==>ucA z3&v8Jv&%f8i-oMjl=GK2&84PM1c3LA1qW$sc$$&4?mIZ1I&h9-G&j z%KdWe%QKb6tGd=#y3_fCS=nE67n=exf34|MoDqg`z@UL`BW2Oa&tVK?Hx)ffO{Dhcex*pG~yTxPj#uW3qO^$3uDBTpUHI8jfROD@*L3F%@*^M-m-N| zOdF;+1Z^jfH#Ok=vf88WB~iw3UIp6Kzl>=Dy2IqD%56ba@bt zg8`WU@Hdh7GGB;IcP=ODI))J7(M@MiDlfexuA$QNtqmV^miY}+LuSj^lV#wwRw@Q0 z9GRgNuNK|f0It=Gr{h#D2W;~n?AN?TljIpq^c^uUVw{XPn#en^%r#WP6|UZPwu0m( zrzTWVm(Rey!>m7X5Yc`2=^3;F|I1AQUa$(Rx=%NR1C0f}Grl-SyP;yb!IcQi=J3e0 z+OE)Ne^oEQH1rBO3Esz7f`Df<9+qlLFh~>>87oStEp?j@@I8B=j}3;P?)%Z*4iZj7 z9`rRk@=W$-b`CQVoOy}LTW+8?%WaMP2dhiY!(Y|JGmiW|UP8ErIuy$}jq3u#&PME& zaC007(GdK(?eGb}4>I)U@G>BN8HD3}Dx|WS$X6rmXdtU01 z$6^>o=aaE$UZ4`Jw@>F^U8Ld4`EI$G?%%k9)ojQ#jMUAn#%D583>zgQ4`t#MN`DmH zt&P6l%RrM~L8m48UAUP>L!7}%Uy>zuKioM!{^`xp-m#E3yPjm4#4lj~{L&Qt2=AJU zQpGd1vdrHx-@ML=&wbNZxt8xY7&auXsS1K{%h+5NF>T1j$=TIF>r=k!%?vSs}*S)6&} zKHr^v)TzrD#KpYZEUMGm|zF%wvxRdc|?Dc&^5)>|Vu^Mg8 z=+BIcX)ITUMOo62D^LoR-jg@k@SL~Ae^eJ_^1AdBfbT8XE=Nrq~!c={_@LD28u-Uf8yP+FdP`B z*sKrUKDnXrk(DskEr36p3w4EJ zm4oFPmfv6bi~UU0mO87;i<%)av$y$=e6ZycLn9o3L@zPRmPLdPhRXo2JS8_T{6E(q z)l+FS((zHlkH$iNQSX^-huCuF10PM9yMLzMEOSs5P(HO6YeDbLTt!^XzIJF|D220W zyu4k#&{%||@))fxRcM4}G?eUer8;P>S7S#_PID2CUBKdal7m#RBja|Z0#C3%&0+-X zRZ*t~Jv^Ox5k!-uXy$pQJ7MNoO*P$Ia^7P9WUF^U>Yhj3YP2~zzF8VBnl+i|(gy?Y zO=QuW_@7_|6m-q-pE>bAZ9D;(kN;WS*nEipxr^t%#Q!jxV`dOXs6G?v$vB{cf&4S| zPDv*810c&(XM~o5aT%}01BxbF0IjznZZp${0^3vGc>Io!EW2e~QBpho1B+jpb@V6Z zR4w1z=Z-biog2BkmzvV1b9bo&GXsz9<~5T74IkK6Jk2|`T-`BO6%k8Ivf-BeDnGPL zaN{TmfXQlr79jP}WRj?eq-<3-w~d~e*tX%|JQ;%0+zBTg-7aZ`YVu5(-UG9lXR?61 zqo*?8&|E9QXkF5g*;+Q-XJj=wGrCd$ll2$;ca*T$gFKmL={r-)6B{mi@jsoHB1q!S$AnQR2y}CBK+pbB?4Lt z#YZYLIHCPPrB}{azlBAAeatr!SYwomH@SjOVLsnL^J3+_{Mp4&kG_4wCKPr-bhV{m3sv$kW~#^i}@ z+qP}nPA0Z(+nCr+CUz#aZJoUDcdE|6@8`a&x>oJAYwccL)%VqDf5A1c)g?24+{+ZB z71FO_L)cgyHMk#CY$RZ%wvU0FVy9Exptwl@$z#0UH?e^u98=SI!>?tbuFdcDfqZcX)bJgoa> z@#lK*9euT*dELi6&fA`_UyE91r>(xVt#Q(Kh11at4Jt$xAVO>}%wL{+r~9m{sOqTe z+E!p(@rNjQJtmHEZ@tnt;{L00$=~9zuM5csYLPFxz#D@pPK(W4c^WH#-~Qh+$g zMA_15?({or$*M7;B^C=B8}Q2$Aawv;(KYG+v(d20+;z9J}+vM)MjTLmediGoXnZUC{J zGp!H7K|XExijga5FZ=H;?a^8>yO}uUu>I`)i(F-TutD{sH_<& zoH89f47ei|s5HQ6>TGt4h@024H8i`D@G&t3dU_*LInMdVIg+|1aT<^YJ{ zs+;H(zS}^A4aMR>l0||(Atr9W91%ZQZ5LBWj-oA)0ZC4h+t@G9$l_rvY9>uiujQqW z<*Fk9V_V$kY$l=^1cW9K(tRFC{zY_-%EB=)^p$08YD4N5>V55{Hz7mlGD&GudC zsKpO0=%U|(fsCN00bz28Cl=5YR7teepd{ZWP)2NR7UxVa zXcBOzGVA*Rf~=PdQzf4w7w3hg^9k9o=!qd`GIE$oV7EZ!+;@aV`UI+cDQ5@NeCbUe zM__(2B6I&Zl&V%kmLRQZwDB7G4-g>M?~G^5QF@2PcNG4;GZreod&4o%*t-*^E=HUnNOLXvp6wac<4V7&M648h+2mv$hF4bZu9*% z3Q@Mh>K;ky+wnvK4fI9sgd;3fdtx($Biti{D6fzV$od06`q0(9+45+=iw>;ep4U9CqD-UYbkW9HSV%yHMg# z=)e`RrY<5^@*GBmLO}76fDk3Gh2<;r0qnkoiY-;$(|D~whXIbR8YnrHEN()itHe;Y z?c}Zj*KUo`$>B6ZniBIW$*bpsuk!Qw7niI9qg=-!H^8lF_L;D1U?)Ub-Si|N)?u6Aw}1{_oE_}|5l*sMe-3Nl@H-1IACU%o2 zwR;BT%kJl?OkNsvF|4tSHQ{!Z?v@{f7zy#2BZ(6@fR6%8c>axmeW}$nInbj5l~6X z0hx~_Gmr_4fsRG~_%?a**jvxYHGX830_zMX+N)yY)bG_OZl>hq5GwHI>E-rJp^-i8 zl>^1ia!?@`pg@7#ul0M6xAcpdP%*%doH<=n&Lfu?g`4FQ7x} zxTZyX70@_@Lq9ZrlNu0H%O!OCf)T8`f;F5%eNS}nRjm0$}& z?s!Q(AsH%{;gREEBL;UT!<$9%LldtHXVPD2s{oaxdU4G+)RI=GEnzJ{@_=AdOEl`j zoLj4a!+isCAzRXKt6{8uEFm6iGlYVOzvTu6N8$Q=d?XaV{F0G4b(*uL)TJa}mMvjB z5mZVpnrz0e2reyU>)=+DE_(PQS3A7jX%NJUpes^68b=xQm3!So8^IAB0h+gi zDN)E?*x6{^aMXH7rVhpG1|dBhruu;PK8EgG(3=LYy?{9g4v7AXctfe@cTPt4`F=m_ zi6G%Hsgm?0nJ8w+KCLKUC*9!BsUetZ;KZu2#p#cmUjY-L{(s3cWj!o$$h=cEf?46R zjwfijCmf>`J=1a101o8h0-qR|NyHGo<@lVjVeu-BVNw#aImIs9>f2#oaw#!wQ%^w8 zO7GaSlg3!t7xH4!_aQODE|R|hX%}uL+9z-FljmL6$Lli|NhgWTgf)WLA^6Kt0?m)p z&^^vvz_gXBBZSSKE%12o>mFu(r^%g-6W&?ZH0-Uw55Mh}YQ=QeTqH%C11!}E$P=Q> z2`Ulbh#vdFfUcs%2OW4X3(uRATyu00he(AVM&wOFl>i4mtn#q7$p$11Ic%O&ER|l5 z7nDt+tYR8-a|7wZUJ1~}-$0Rbdd?TSPzqSlhP2PdvqgPGkH$DNMjRSR9DVEl@p(MK z?v0Fg7PQ*~s*H_hzJ+W~*KGyD{C+V4D>jgrQm<&q-35YxM)M4Of2lXOsR&T^6Shcb z8PafXLO{OwuQtp_%9qplb~q_##BNbt*C822!Xj>Vuhbm?*WpB*kQ-bl_#sZp7RNC6 zSwLH)eXcO1bll#p!j5++K_fWIKtk`_6BuOlG(HqayxR8jA>-YTg zHP1cMN54_37r$hCj-s)mBTB|On6v4glqo!?$}JtBU*YY&q2NQbwGnPW){e9XQ9kG< zh=iJ3^RUWNTXl9U)FaMcn7$T5OU=&mDVTEqH@^?_>L?x$S4)EYT_3#bL3EyaEuQZg!S#3BmG!w7i>>;eruk@7zjgNU5_*r~*MUr>nEC(+TR;`ctuBWAAoLK?0d8erl6KJs>O)(I3d?6FC}$R!2C4BIYLDEE z-Sl2#5ea*9MLC}IvE7yksEY`2E^^c~&gX^U0ZQ^HPW`=p&W*i)y|D>s=+BIZzYi`7 zsL`}@!BW{dR!w0LO(=!mH%pm?*CHT?hlz$aJ)sfp-QZSa0`FPErw9C*Y%N(t}w1?LtioH>b_`?y+Lu5 zUkx0CWW8^}gYD(GHfBKJ&IBE{U^feE?!zb%Y7>_mma0@rI_Im#g!2)Wlr(63`*c#W z2v?sx9@UsU0YlMfwfBaLdoDAmM=#1w4ZbKDX2btWJF;6lA*UnxN?2iF=%ES`3T(|{ zXd#u>NN`{Nuu63G#1T0^2wXS@`ZV!?g$2v_ZvJ^MeuZ~(5+!)~-j8~6d0Z$-JyHp9 z?@Rd3y9E(M%CaMi`2p)?88ILI%%B->uX<)p#^=bm53ssYY79>8GK8r*Q8{y9+5vfn zo#SM%oiiEkfpaiH*O`E9AsOOx@Kxyxk6PrND}YhLoD~a!WqsDPGK_b}OWe(t?Zh^T zFy$PWEo7xeK)r`ohT|WcXZ(;J-1!HoXd4WlO1HP2|EFSw`ws|&8@Vfb|Vu>U@1A?SOZ^Tv%nD9ZW! z_2{cAX9=@&w6~Xo@1*wn)A;-K>Tn}Ref#^v@HsB$+sp6mO?S|BbHskM`(=;E4NHx5zFE$`dW?WeZu{PVU=9#kejkNM5v_4YPOjw#>f z{$BSS=}Ypr9RbA9s#QA7+og*HAr4^+SmJj7YsPEreU1{&^>}nM$N%D5r|YAgJ%rJnrgy9ginQ?~89MpICpSw?_BM)&1G6 zmk{0$G4A_(<0}sG9CN!D@9MjuA>pFS`)%V}i}Tw4qw8^-{F?)}=i=+1cPe~Kvp$Os zRO~ivK?z>ij?0rQkKAkwnG&*2AMcWo@cV5rYajLBZzqX{ znu!|ujriWu&TUa>>9=P z^J#j5-TTtSD3VNq^bv_fM?>^Y9atGT>}UxH+#R-6*t$5H^mTX_({{F19g+v?RiY(PW#j)e0 z8V8cpVjW&I-&H%{r?dYPWfS4@yd6#GQSNsr3}E|}>hruv%1j$nmQ6i7!NA39dS)n| z&gjYF3O(XAfqOP|FHa8aTdX?&6Hb)Jj>l#!2%y_yAqRI(Wmi2Nx~TiWgL?}`7dZyj$xPL zq%7-6c>O~HX0^(T;HMw{62F`i9WdNhoLEn=sg2(_Z?)oV6iJPRJO`L|kTJavJ;-Dr z`M49zxD2k3WzKHUFc3NZT(K=K0;>AP%1E{H3YPg(a+BilEq0h9;Yg?(`qcL#Q@IHw zQp7xczjahbZKY9b`PP~@9kWlZ+d0?N*#|^XRTr3P0VvOe;P=M_$x>#Jc9{THV9{1S zW8y9|AyZCFAE6kzfAcZ0P$5#t%b+stUw5BkH25(-HkCfbW< zvwse)sVIw8%zn0z;M5c>_-*a5Uc@kS794{7#H237(8K*c?cq-J!^WRJ&B2Lr`veV& zp%HJN-2Nw{ifq7`59~Q9g71s*q`ElgkvQ@=qQa7I7md?K`^BKY3t^zL;Rb_U#kcC@ z2{ikJ9S;=njQQ{gda*T#imsNx9(;^{54y4XjN!4$( z!;Be#`*70FwluMbXL(gL!?or~Dsys|$|E08;bkR{KdUKO=_g>-S zxk@ed2*v3zyF_FXXB{(;Jh_Wpuy)(=fKsn%IUZq=a~3HQxX|GVT*$ zSseqBqca8EAjf)l)S&<=++6GuCWDc1e+rjOZz~VK*GT$w@P8A_fgA@r!vO@`=n-3K z$2tJg#u+F*#nFw!gL%5*0;UNxLuW4-SgU}K1hV9P*W^V=!#%@DL>cBnIj-^>sP>T2 zX^kpX=EdYJj;ZhpA92Lj6bx0FFnSKqyH$_Rgr+>24<9hr6kA0dam1NR9zyVK2cTYq z((Edpy~sy`T+v*(Nfu>%IczKQkE^LX+jap{F7=c)1p)?d54(fFHA^<`2Woz0F_g(^ zJgg^~Q%)v3Rr#r!_YJ~j%$L54u5a@&KWt{w6vPTE<+qG!8Z4*MMMJSBf;9?oQD-$iBp3C+}PqU4}pO%oKo6!5EY5^x(0qW zB_H_&IpN>9Gm#o81*47-CEt-1LiEPoE=Ai!b!r3#oc?wV)E^7(#*G!4ZhUt~QkU$k zQc)iLo`lx`#K?8Q!{jcumP z<9$+_v1kpBIk5~UX?iP!RM0nyH+fv)$$K}X+XC)o|FYWmKx4jM)m6parqV%oteyf_ zvMyys#iI{`@pbRKjeaPKc_8%6I&xgl-N<^zrCcg2bfg}OyI@x*2gu@X^4gHVn-#=?HU z*UP?+M(D3DJ$-oBGro>@Qd4vtQ!^Zj zyg@J+LYCl7X_0rT+$7c4dv#3`MEvbHi#edv)Ih&>YP-+bleojH_5!$14xHW6@rdiF zo*0jNT5=I}FOE+yC=Z#8^0fHvPfx`SSk)N;(sLJv|5~|#y4)c}C(MSj%jH56)!DCuB>m7gMeni04E8N(qI)2d}$)HxzpB1-t6 zj*W!mzsxlr9a^E3pxr$`WaH}kIwc7Rv}%9r8FB0;CEdQ#+LbR-8dz;iv$J2h)^bxQ zj0St0iCtQ62eHVt!HlBH2@oV&Obe08fh}T6#&X5-@2_BO27X1aB(Jf&(VF<+a`ZS8 zST;@!m7wyzJmBP{Htl*Xohr8M)NrtUV`1|^xgaXubY1$Uk3;o z^^p`ih|vm)J-ivJc5(gB{z`JO6qdsv9T2Nh1bcuL3}a_r2DEGYpT&W>lPo6aXlu_w zy53W&Hw~)1k{IN<092jMjE75fhsJKgbLCEqa*bF)?(OXWtjo}`Ls0pD1$P#4$2=&F z*ioO~W`9*FptX2et2uNhteQ{VAw8LAyBN1d6}&vQ_Cr!2S#G;wfR>~+0PlJ^%mCVT~gMp_a|0EmZb{jPN zdel3GNo=x2sA7;yf@G~v&)Yk&7=hRVy;EL z7Um|--3iHfnfv)OJ?yWz{QH7wa;9m*AD?uP@tE`x{BfNI_aoVE1f$4tcg(^kjOFl> z+GL_*b>L;QlwmTa{|fWN6FI2}AMlHr<@@K>4~SLq(ZtnadJW=fm^!w*p&%x0C|haN zoU(wbae5g1^slV9IFQ&^sUJ;W+~m*c@X$0bgHu7c(!(f98S8MVI;nx%N98|xdtR%& zELV?-bAwo{%17R}#2RS$J}g3R81qcx{Pr&ci>g1;J544U=3RhkBg6RHY;*RZa)H>5 zm|V^g`R)UxV@^Drbl(4y)?(>Z#P%hzKKOuPS$Am=&MHBRax)TOoGElY2J_`*1|_V7 z-aCLHpnCdKKfe;LA76hH@F0V4;?c#5swx|n28eRw+UvH}xnihe1t$cicC)qfhWJ?N zbbXR;07Uhq>|T2LQE^?p9nuhqXtwJ>Fer)b%Br7e+ORPy{A4dS7u&9$fP-7O+tod3 zv?znQO%*0~dZx|Mj`sI`a+7?EU5dY@`|Qv$Y8Eg zxL%V(5YqiYfkRm?SW5L>xnWGK za6wxkTzBSS4P}}tdJ;0nM6RWSF%AXOukXj79-S(f6)9gZ2Kjo8^KCI6HF@LDbisrb ze&;x6Yq{$2Xnv2t`p#vDurh>@8J-b1%=J<=VDu_GxkhTGnMY}Pb+xM&VYHg4}qCp#Pw9*z#Hr5EV zfPEyi@vbJZ@Tt6hZp_G@C`ZWwN=FC}5AhmMGbAIbEx-ziaJqcU6&!N&X^Er*8&#GL zW5{UKY>{y8-*DbehS6yn*nGc(qmlfWwp3sn0G-H+_0nx=52f_@EE!zE#yCo;hxPVq z*olF`iPxbFlaEr1KPnDA$^w!pr~)ni z*W_F$?+POt684y<-F`+@oh6h5j&iXNw}%3G7hKB(S4--g{<574<1q3n8HBVgoAS&+ zerwaCER6Q*t^f06N!41qLq+WV<$My0RQGKp2Rp7;gHicMGh)2ehuA#;m2?%eAd=|Gz&hmC(W;m)$C?Nj@wu&LQI2jriZhRM}y zJ3o8C@QR`bnrO&i9R>zrnn^i3_4Z-B{cbyfKHg|QI0bW=D6leUl;&Y4?iDR>OJPo> z<=pd|{lG5T_^EdduA2z27ER4Z#EnDuu~)N%Hy|vs^eHKqy?7@~4xdI%^-HC^ZN!;Z zi$xi^fk|Jm}78juIF1m z1ntDc3B%xep4kWc{SG#0*RjdLWO%$BHbz(vrrZd3&|+LK;s6on{kyY|@r0Y?5S==i zu!8D{#5(VJ6 zT!>X;9@ca>ANiiw$#RT9JeYqkCeE>8NVZ;0R;@grifzh4>rCLyX!erGt#6#)dJ+l{ zy;_}8$k1HZ;cBUqZub72&zM24m&hFmst57Kxr%kfr%C}g7A4aZSX_5`&ERkOh$7Xf zF6@W90>$8TdvM^EmtPLG6wog63)Kx=>4EFSLjOZwCA;-udLOJV`r&{ok)h|$PN)X z1x|H^w`I##iTg9DV7q3$@@L0(X8<^KE>Bj5G*?cz?7Rb=9#~PNU&F)fcg_xkZjaIp z9QLqWkk5wv9e7dBt@%IVQ_=s4UKkkE!p=?(-@|(@TeDwtRYcgHmef98aeJ{cD;IIL6JQX_5jtJ>MSrrN|y33ps=<;p}NR8nv*a zgB`x1)2Tiq*Z&oHXr|Ti2=`o$j2l>3$RVGJ<;)>4s{XU;k7zb$WcvRLmho+%`hP)T zG<~8AoQFFYPTXr7nt4tA>K;@@`fUOh29MNIc!*rKN!9OMUca@_qVJ(>;YGWlMWC4zEkn)dm zFUzh%?cJgt`=WZYLOb|0CdeZOiHy=-0T#76BWR47&sXSD_%_WiQDD~7T&9Pvzk|Ex zuQUOor7?2Y$xLk!80|-x(PI-9-tu}>_?1(@Y`&zS2M z>8u7~l+q+GCn$1&JH7jaz~PSHjH|#xLQ0PT&+?!VQ$bQZtl@3?`A3yO!@~#}OaE_c zC`;NRTLJd<=l6S+@e@1@OpN&^lZUjh)k^f7!My>YpI@rK=Sh;hEDaq^@ucZPTI5Kk zkE0>6E@@G(49{}$a7c(tO7xdegN7@+X|~*mI%^R#wk=3Uzu$IU8I{@8z}}wOgADfP zAu$G$*>ND{;Lo#5d-T`cEIDE1`PFJ2jE2s?=-T)>eJY%);;4|};lC$R*q^3*2~OOu z7wX_NbarCu6DRZ-Q6)^7b%)-TZwOqbk5#)p?Kk@zC+}xMnwQ}M{@-cALX7(t=!Umr z^H*FYNR>Mn_2sI=^oTJ{4IVbty>gbHR&C%k6T=^eyAI1&DP4m{VH8}wN+OL?F8R+{ zP5AvK#iFMh4F1V!Z+Bm5(4$4=+?@p-VbBn)PuI7~A;Z)<;u%5SsP4*sbhq28$Yknm zu}qN9rB|iR6fe1asv06i_Ud^QKY2O_9@BXXJ6tGW1Y0%b?aH~hYwsr<>_BLy6Xpx; zA07s2A3bV9iG~f2*Mmg%5SIK#kSRwj3X9N)-bIYh&a-3@aZrX8YyB~KHwTt~2Zx@G@xlsRZ>eJcQwg7pSM4*f z*J4G@w+BOkgnJeZ03%FK487gAk3X3_%;0z&;K^bfb7DLpeo1f&XNhOt&qszyBxB_u zm?lJ#=a+GaQ7e7WLv#=IVbdVquGE97yIj}WXo5KbhuVJIX4%lua^6%z_N$&h)Oo&< z#Bc&pr79_Fsy6R4lRbcG@TKdoe7Bs6m=g=-o&^UB$XZiHN6JtqX=hvs3Gnz=EWHdJ z{!gy<6_M6K05k3EGSH-vtW%sVLZ63BDoArm=8++R7~Kvx<%@%@N*MF6nzr>(FF9aRFz1ReFX>tlvN`e?N@CX=!XnyY_`MGdzJE zy(c6>+Y|y$)e)FutzX@gR2*k+vA+H8R=!+r4rQHwUkH#3^6AqTU*OB z6l0vfIqMpgusNWjT|>fgB~J?t;=f)gCPw5a(~TFf80Ba-4<*7ovI`sS?rYl<8J({@ zNDB{%{ut>vf+_A$COzav< zT4nA9`5!aH_>gh@`GfvhOo}1@EZk`pVm>(gS>9CklFo~9&qJeK&cNXVO~5mYu&nn$ zvVQxSA%DBb(H+=h!%r2AM-Z`Lz@q1jO~fBLz(dt4*fom_$I;r}t~a1V*Cs|4(SCFQ zr+noBtF5D9eq_mTChK7HG<60&);9_d_Rd-I)+r&y6y=W1TY-Af3sSLlBAH|GjV|#h zCVvL@UMEn=?xjS&>JP5ey^uuJ|3w{t7L&UO{iL6$qTeG!aa)V?e_E8(qh4rZx&i;F z-~WcRkFG#H=?AJ@KNSnrf5Q}e{UJyH{i#m0qEJ4O_9s7Q80$dweo`7MAeu#|ID$a7-PUvtHBIXTDCrA>7Q?C;mBcivwE%ixQmo^1%Q z1f9EzJ>^5yCq^;BJ(v@A0^%suIlMuUa{J(T6~&q|=rMH%AtA^S6C{KMFfpv*Ixkxz z8h>iB)Knr5` zc*;&SrxgD2W94mnd^GW}Vw^L(7mKo|^1mr>*z4&{O~EPI5&Ru!17q^F)2JJGwRhgr zbjVLr>(9nj9|^+8tV(PU_$FP?9I?!fH+vE)JKV^kZn@3jV|`;)WG%mia!X;mARe1HG>mkHyX)3yo>pV91_kK3}ew+(=Z17VUwIl$YsUukS zgir60W!A>y`&v^6DoIo(L4$VVI0{LME3@|WxI5$=3~u}t9C01fOn6bY48 zibzV(I)}z<8cs@AsWg||Ycx|!!lWW8c=;Qo*>b)bqWMz(S3*!SrhLpE$*!=_DT?%an6<%ny6=Ll0rV%*W)jZ*B53sDuS%@)RgC>EYk#(ILWw zsO{vMCE*h&$70K=TEo1!b{^TO+DcmhTuOIr@O}(HiNea4cEuxJVbUxWWyEQRO-orj zBB&>I{5R5fV}DNBbG_e=r}{V=N5^>pQJ7| zdD<;nKOjp*S30?`_QxFQ<{1FnUWHxI5RAW`_=1oB*&o?Y-5pFcr}wTSbdNs1AuUf%r{iTajo0_T?!NNEY7=+Mr~b1S-$dO z!4ZrVx-S=oIWWDl&>4?+=VW)bO)Cj(O497Oa76Ev)!lg<`=lIKMJDm`R+5T)VYMgI z4puvPGA6QBgX|B{X!{%(uDoa;%f-G?<2m%ry(f`mI89RqWb29Y!dtLdS~Q-T4Xd@1 zG|piUEUPareL$+Wl#Nlw=8|zE{jx4SL9~xbdX=XIbTdLBe@X|K4!}*Dk-4xZW+m}Z zRSJR8wA8n$w#nhzF_(B*51qNn>p=vXOORt`(f}x6ws^Gq@9lFlK@8%l2}cmJko$*ZlvXMzz-r*0Kv ziz^Mc6AU0fd!D<5?I`>-RsM#q8Mrl_xZ1C1YZJ>8@nq_?D5CBT=S!SzZf|vSbR;fX zuFg0dI$;|F7=HW8LfO$~%hhgZX3E`YorXNb;`jCTFqIkR`b#tg(v1Fj>DTBf!4WF{ z^r%~Ch>ql{WrbT37g<^UlJ1fupCjNjvo5=^L_FvocNvhvbcz}_!NEdYV^#mvy5HAp z@Pr3)U3jj=cb#zeyNmOE#gL5>t{q9lFu(+{tTFd=zrMfyj&wuE{ufIOeJ;SZOOIlw z-z_VKaNY4t{3(QGpRD*U>S-M(*LaYCMyjKKl#8=tnbR=;7Aj7CiGe;G2>0!@U4V+w zOu4~)yGz$*&z4Q$7|;_D`X`|8D;}@#g+07@&;GqmKVmXH*`QC;L_ylpZ0rdva}vYK zXgF|nCjOV~h)Ju&L-|^HK@YDv1;~9Qu2qJfY0D~mA*&|Q|OFqPJj+p{?T-&p?ja$`FP4!xn;(HYv ze%l`t5Js(&fM5tu1Y`D)fmA4ii5UdpYPXtXeme^s(!OP=qmVNUReo*T9(0v4eQl^E zJzlG-rJDnf+=;tObiQ-qhK7Z8)C$K)kOj&J5nJE<*WtUz-C#3$IjZbYy7$J~=G%P} z?N!s+Vd~W(#Rt0AY*y?@s_&g?`YJt{#M3l z7WCMGeo3Y--k{SLgcljVEcwE@5GKBP-=oIZ7FB33AwD!E0=)4oUKd?rRDufJkrZA* z)JY$lBEpBatfc!QUVe{gou58>&p5kuFxh*gm?|%UHO$a{B@U?3#OR2i9W4<%AY;4} z%g|RW(1?dU;%Qf|*u)R6p6up|Mq{bH)8b-+)C2k(l@E@y62lkECN69)FIwl?)pZ0lSt7fGQRmPQIaYSzLoXsw zc8Ez<{SFy+yXkBY7&)6_0z1Wap*#_8P9=kHBN|B%AA|T8mTp?oC#cku|b#3r-aGbeqe|kKyk3YP+KA-GdoMh{Z zkIQD4Ku0998)A?EBgq#R%9)}1_+xMN-JsiM=VWL1dT;P@HD%`iDSO|%njtq2lMux- z6YvSAm}jAz))rotEkqPO&#LE0-#tJ}=X&Ef3Xl(?JVP>=O$ZYkp8be3b0%D8PYyLm zM77=IBmTz$6pm2+0b7m3beom$tConcP^E3I9I#SfH}SU`k^)p?6%!3}9}(DwZ1&|q zP0XPm`8q$}?88o9UTjcY2ao>{IMNwcAdfQwnX?u$OBJV^VvMq@s~Fk1b)3$hU+j-9 z?VjM8jv_&BDx}pg=D;^NBStFxaYYpZxK6LdJIcQIX`Bo-xXZEiT#DuIMABNg%}CwU zOhq~~n?N{}3vjq?U_7G?-NQEEF}8}QtP{}YOnnXM*;5&8vTi!iY2SEhq2}Txe)eM3 zX}grdG>Tj5c1631_7Z%^w(}W9`7U0&ELBG@fmjhsR{_&#d-|pa&|G*H*ED8+8zplr zJI1A{Tm^gBPV#xYTJf&;+M>U|^HdT_GYSTXs_~xaIrnpI@TB;g$Qj;;Lw}Ll*TPm^ zu-T_(=H#fgTA^21FH>o3S7*KM7S?vk6~b0U9WEk6ZAX?4lXF{FNd3;wU?0@Oh7^q9 zOM={vcjEEV4V=&(#uq{imU?WnH2E2qSd~GENScob7{-Fa#M%Kyq*~w`^bI66;Vutw znNaDd2mx93T~g&`@&Jo=9-g4B;?2eY-mwc0JNsSISvuDp6wTiUHC;;Ww zw#x3T{R9H+I2CpL56#ksm)VWi-IOg`p&NsKB-v<{&M>Lu9Xs_LOFjoM9v?j5q&^%w z`Nu&q-BB&Pf~y-%_;!jJ?ZPb^UVvx1r4HF8Y{{8nXVk1Yw)F+uuxfh$8ELqxssP!x z8coVJGCQ*9QM9Li0Kh6W+o8)P2yzJc?Sn71^p`{DAfWMX*DF#;m-SHRWC1P5kX~W! zZj#~3)X;76cuDA?kHn0-mkha>S#s2)jxMSvDXc+U!z_r$NUtMUCa~VG-@qjb|FK;>?qDXs9|FaYkIJ5cuvvEXVN3kiG1yT3 ztfEUXZ}6W9!2(LEH*`$)p*e9P?{$(}AEiXhL(PY@B$2Mbmf+AtBX4)q84&HPYTULp zMQgP1v}Da}7f@)*-dKn&#=f~!&>N`bK9fwyQ&XUFh`u{NaFn&x1LW2?qB|hK9|gv{5#$ly+a*#0h`G5uhl@U-FmiW&Wt4i!?t!hF{yDznQ6Ohi=~3t( z@enxLxuv7&4x=CDwylNIs-J;b;(0mn$pZUUHVc1ls0P^s4OA?lrEoF0PcT%R)%K-> z3sm)f7|=p&d#Riw{b%5y95~S&0wk`;Qn`9(^_(5DKU1A?1)W{f@zcTHd3H`G%H_c; z{9_V}^>+P$nlu>N652jH!sv=2z0#a(ff1CAyGS5~4>fHqgmDfr9<#d?vtC z)miN00^R>J*^9V0B! z7RRn08$rbTj|p#@w=w!kaDBnG7AjNgU}u)EX2+XBD19sdpGrAOivy94zJG$3y2-hfGT5R79CyxbahOQg7cv*7y* z!WaqscVU){C~)=i2?_qv_vBFLc)BO`0}?MCDmaH;HE+)vG+D)mGp1GH+Y9;w(Rfiy zOOT6C*0A~t>Mfz~%RPOYJMZv5ejL_lS#)E9MTI+UDd;c4M}(mYKU~VHAT4ep+OE5B zNXB?h$`uo5P?86-F=1aBmQj7SkVdFAOZx~{n%TrWEnI)iPSv@TS2?N5p?G*v!uL6k zfh~WMbQ-3tIqq1nIX&gwj0J+orarLxCab9A5)lqf?IOVt#?PBw(Cl=iVYf`(Kpqj% zyXmU^pd$9oBB0se1fMK8&aa|>#(^!;iGpJMaQq6tE#sk0tL-#2h(tg+gQn8;ke=!JyTRb{M#1dxLsEcwU~9^ ztxmzeD@F3|9u&~jrlB@~P2K_U`r`~g5ak3{$M@c#so1q8>W@&qw6+Y|ez z`v*S|Go@YWf8`P1U42j2P^M=Xe3dT`>Hb+o&9F+SLtmlTkx};DSR-y_ych2erzBsR z=fF*^O(<^0u|8juv2FkxK9H*Y!vF267TG<1b0%-qH~Hsj5&A;vxr!i!JU#?L!fsn2 zyrZLT?JMe-Q(bz zjNO5GGt8IChPSbib!0pYCwKHx(D^}PSnk_EY5~t>Lmm548%Ow*J2-EN+V=P zxysxqS8`%;>CD%^?}-_VbkBxT^3+(PDh7=ZL2?5rTyzf(_T&w%(D4^GMPZFVtNzmX zdngr)YA_W8iZh*MS1qpN!@Mm{Q;@_E4;71r9MIR<0U}ntkZEs}hFkjAps1-a-`Es% z3nkV;zN410YB4>~Je=oqD5mcE#rhy6`CL^f3UBCnl7IN-fpN8Vfdd(5#_$g=rW#q& ziQ?(qNhVbTsAXll0?qJQL&(OwZ8$0pNfA7WMmVa_L)sot#Yjg3)|tr*0w{->GLH{zhY~EtpDPu|m+SFpG@YMtiT>a_(Y!-|^3J1i76mwru+Q@=CG->%u_w%cc-$n1 zw4&WASIDV|b+GtdfwHXyM4BrK_(8EZk}1JZp>8CB=}o2Gtb>yR80+VG2g8`IJCdwh8 zO|WIIX+geA=DB9zu>dQQBWiP`?e@;L$&q$#j#P{R1voK!owJuVcIuGrIXk zi9nSVVVvq!ZBz&t+kZ~u{(G{a3CJ=X2LM~!6GdYPxrxOi*2Rxif%JHP-YW8%!xpW#=!q z1(_|*nhDvivHeTbTv%9x*{-rHjgOy?%i zVLQjtwqcka@gYtg<=FNLPpeu4hI!~b>aq1Np<}dY46zDrH6#}RU~>r#n}JFpMYj!bQ0WC8L~sw> z6W^Vj@C(7(QoyGdW-YBrQMHsRrHtmmYnia-bvR~?OjM1x3-{o4%>YPx>8d%J541rT zwi*t(t5R7NHpS`-a$vNiVS6juVq_K`KGSZrNkrn~DN?1<&Ov2ol)?<;{&Gw7dZA{p zW}Q;2P|bJHU=kZZ3h}FsF|5X5I*c+}k6p{@*!o8F98aF)B8i8%&E=$R40Is`I`c$L zQY~I{Wr5WF8HelYZEXx);4NnT(#`zWM}Z#V5sP`-HbkRoUKN3%FD zRYk?97>V6Y3hg}N)&to}EH@ZKnPQ`-^eKo89Pm@}cYjMoS;C&K0CcIkNbiCL?nPZ(E^oVTpRot>y+g{JR+%sx7LsC$=ja z8Dy|6<-q^nAX_LJ!0A38D!MSw?+Kwdj{xS@{0=8TK}I&{s8{!Hm@IhuQThgT0;=XoNEHW+ZSK2UI~Y6eBMe zJKLf2vApskzJ;E5eRTg}*!}A?HewZ`mR082q9}}Ug0eiGY*CZi=YL7Qo6W7q z5dpi+WT>TUiOePlhW%?q0JkP&HErdaG)T3VRG~Z9)usve*Kzr0@I&3MfNK;5qWa6W!L{lXf*xIFWU}&|GMKlyw@k>d$o< z(0EW@J6?lc<*?(M+Z(1mpKoqQZJl}NokpWQ84n-5+J06DqSlDRK8~YQvzHegy7!!F zjMNdwP}_4zU!U6)BE>;Y^v6>;s1?7tO%TntcV5TpHRJ5o+AY`G-r9L8tC<5hYa8a% zlAU5nzAMXazIZewD;Pol0u`i)?~ggyjByk)tf}=`P4z};UwPA$7aM_cFftER)O9*7 z5c4s{2ceXQU+8bGFiZBr5BXlcySKNeFH~A~$&ihEef6Q<_mR9}d6n{Uu;nlJ3bu%s zKJeuNuSuqbmGgE?WYt=_N1bn+Mjx@6x50o~^r9tx7p=o6xh<7HG~+8%32h50^`Zm2 zN}p8_ue_nE%8RS|~W`UGZz({9fo6f|zd+##WBES)jh z-bLVyxv?fN&sv6N1lnSYDi~cuH#;5t)`Ot5O+h;j<+(cuCn4&`LAKFh1as8;&FqS&PgN+Mi(viO2 z=-9`2kOc_piiyBNb_r+K2Q{4VA3MN@@!@@p$9kRs<244|LzMT7cS4CRHFLuyS?_)_ z4*xlgjMq7B7KbIUisNnXiQlac#itiu*68rZ7hd-0@W>Yyi*)$p3(XlfO=h_1;eTbG z^TJ{|E^XIxpeyutvNkgLW`)8jL3EcPH{%MXG>%63+C64OF@M}GrfMr|ydixZy9ER&uI$mf|MI*JzS;&Ww14a8rUe;OAaH}%8OU3 z)g@rXLsrp={|E7&iB&a?^0+XpbL{!zIH6TD!TCuK@ed?cEpwq#L4Ru7nOsOg~1B!yfw69 z<-zu+nll?S=mr&qmT{cA`hxL7wgczm_Y`?7n?^J7b%;)${tI*rvMXSzR`yD5%t1J- z96rsg98Mm?25}D5e@dsmZwF@)MY&F`1BDQLC{za;`e7HS+-~rRK91w;wsfK#glOXW zt@|3t9X^OZot*ti7={PNcQQQ?t(~o%?O+@KcfPf?NB{eOODE+dP4LQygB=`Fi@RUI ze9(?zjmRTbh+c=;K&C`SWuEq28^##CY&xOnIx6z@U<0*+Fsos<{+}WpVd!y?^EOPl zEZpTLXA@Kkm2=<6FN@c>cUdTbqzf`0F$rXTihI`Xo_wZoj2!XJ+@cXXl?2uyrL@=z z-p=Jptev@d(JL8$-0CNnH2J&)rh95BA_qmh1L+9Pg_gT+Ri6Cx3Sf2~!JJV5MfXc^ znPx#4sGFp!n@q=9-M#;>?ngs-(&_(z_A6z9gZ?Kv;Q)(U%HG}7lQwJu!1U3Ax=Y6{ z7|tOQG75UR5kQ?w3Cfv?QSat!Vmb!tfx^HIzh@!d=>*@anUeQ>10?vr$A|htt8~v+ zuFM8e+5kiDB0_iueGeoI3~WH(<%mhj6{6fd{YipCHn6o_BJ<+1;)@`5d&sIdk2mhG zL-Bke9*x(m7LD)>D96R$LL{Hr#Dx}jNQ1G|KyQD*L*cVHl z4i!;57Hx*fw^=*i7l+XK8+wx_n6Sid>PcSFlq|hKW9SPE%Nuil%xtPCyGXCRX;>Qc z&s%Q+1n6q_RCVDf2Wgo7d}g9hRdWF(%%Bx*Ob{YoNgD+#oCT|5Wdf0fmSG=HJEvKS zyjvRD&g!PDgiT;A#gD5Rsp85u3y_zaqF8#G#|mSaxGyC^8(<6KE5vG1K^;c5s<|_P zm_x5(65-gx?$FwQ^{ORz4{JP+Im|HJa^vGmNtVHW_)SSlZe`&4;5y zZpG~7%JJa&))u4nCYoS_Lds#5&^#yNDp+igFiaT1j{GxFTDZa#kUvOCgpjM41goSg zjFNGF%z^*km<5X~W(m7u1vYAw7RJ#>O6WH{;$Zruosk+wj_E^LTPSjJMsh0|HfIx3 zd2qlVR5cb>fEp_g_<1oTS@T%N`TvD1>i&T_O?A8oBX@w(eOlwCnvw?o{I>yAzr+&~ zS;ZS~gnkRWX=nGT`30|AJVgiE4%Gg}-+>eKuchH-`8$_^l>yv@93-P;uuuy}92Zud z>%7gpN6%?&%U^&(v{B~YJ#m~=m60mEs?XSt(-9_Da{`q3-JBkd?tmPQmZOGA`alay z(85tc3I!RE$`Y+CWj33A*n8pEdHOy|q?^6Ub0a^&G~l;5A*)gjYf%ZJ>`aacL-tXx zEuBE z11oWBv~?UuiEHn=e|lUEQQjfW5A{IiXC>!S6C{!c;K^x|Sg_2A#xVzv>(=2@$b25P zlEIr6(<9XaSWv4|4|6^>PA#kkdYdNo=T(gT5ys5wGhN~S_-7qN4et#w%4YvM{XmA= z+F42(&XY5fR~6<8e72gaQpx42xV+l4)(M@vUdK6YAg(KKjUw!Gs=+)=Y$?5019;0T zx*9aHkY=kX-1${mO(8F)yJ`S^L1k4FyjQE8YS7{xsG}ORx{&^<(Q;UU!pW2vn(#fJ zqN%KA@+g_SDkh(TX@+`fwsNVgT5=UjKDAPXQpwtMs$2#3+`YAbA{@Os6#qoA=SJ z;fjs=1CFK-;^GWc81j*}QXths%O2ur2Zrlk0a_un6lU)|f&M&*Ndqnew<2TwBIp%L z4XG4j+_v2pI|@%V!nP(uO_{=WKHv3u2+~q?mr1d9wZO2U9Z`vQZ2H*+yKa^zp%gEZ ztcfTD6ECkd)uzLfSL5lw>gB5ztmWWeAU#QkI?Lg?@%KH=FiJ`jn#}?cLfOE}p~gu% zro{E#F^V>*ssZsKM&ICb`9<(2VSe-M-A3O;&Nae*mgYJ73}-ruemF`o_g@$f@xaG1 z_2-jG%7Li@)ro)`rex6)RX8-3-qCSU2d}Cc0B4{;8ca$4#N;j%V8a=JC*>j>f5ds| zY`z)GbOl&5c!&H5qlfu#SO_QAh~90f`FZI^g*=yS1k?smi;I#cgqL|jRF_ab$K54} znWOTM0rQk%lgq0vLqmYj@5t5u(cL-PKe|gd`$u=+WN#4bSK(D(cBF6aJOAiDJ?C+) zmAvMu|1IC3e+EDKM~0XDBg;pgB%Z=U{*mG7zN3EG-tqKO`No^○RFWwv;wb33Z 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 E04j~bm;e9( literal 0 HcmV?d00001 diff --git a/deploy/helm/moai-inference-framework/charts/vector-0.39.0.tgz b/deploy/helm/moai-inference-framework/charts/vector-0.39.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..9c71305ae26dbb1f623d1aa4e408fc1eaee41672 GIT binary patch literal 30254 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ЛfwOk@I6y-33J&T&o8TIiaTqTDh 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 F0stZHuFwDg literal 0 HcmV?d00001 diff --git a/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml b/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml new file mode 100644 index 0000000..ba692eb --- /dev/null +++ b/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml @@ -0,0 +1,26 @@ +{{- $ps := index .Values "prometheus-stack" }} +{{- if and .Values.loki.enabled $ps.enabled $ps.grafana.enabled }} +--- +# Grafana datasource ConfigMap for Loki. +# The grafana-sidecar discovers ConfigMaps labelled grafana_datasource=1 and +# provisions them as datasources automatically. +apiVersion: v1 +kind: ConfigMap +metadata: + name: {{ include "common.names.name" . }}-datasource-loki + namespace: {{ include "common.names.namespace" . }} + labels: + grafana_datasource: "1" + {{- include "mif.labels" . | nindent 4 }} +data: + loki-datasource.yaml: | + apiVersion: 1 + datasources: + - name: Loki + type: loki + access: proxy + url: http://loki-gateway.{{ include "common.names.namespace" . }}.svc.cluster.local + isDefault: false + jsonData: + maxLines: 5000 +{{- end }} diff --git a/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml b/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml new file mode 100644 index 0000000..64e6bbf --- /dev/null +++ b/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml @@ -0,0 +1,30 @@ +{{- if .Values.loki.enabled }} +{{- $minioHost := .Values.minio.fullnameOverride | default "minio" }} +--- +# ConfigMap consumed by Loki components via extraEnvFrom. +# The values are referenced in loki.storage.s3 as ${BUCKET_HOST} etc., +# which Loki resolves at startup because each component runs with -config.expand-env=true. +apiVersion: v1 +kind: ConfigMap +metadata: + name: loki-bucket + namespace: {{ include "common.names.namespace" . }} + labels: + {{- include "mif.labels" . | nindent 4 }} +data: + BUCKET_HOST: {{ $minioHost | quote }} + BUCKET_PORT: "9000" + BUCKET_REGION: "" + BUCKET_NAME: "loki" +--- +apiVersion: v1 +kind: Secret +metadata: + name: loki-bucket + namespace: {{ include "common.names.namespace" . }} + labels: + {{- include "mif.labels" . | nindent 4 }} +stringData: + AWS_ACCESS_KEY_ID: {{ (index .Values.minio.provisioning.users 0).username | quote }} + AWS_SECRET_ACCESS_KEY: {{ (index .Values.minio.provisioning.users 0).password | quote }} +{{- end }} diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index d9c19e3..00cd92a 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -86,7 +86,7 @@ replicator: nfd: # -- Enable kubernetes-sigs/node-feature-discovery. Set to false if already deployed. enabled: true - + worker: # -- NFD Worker Tolerations to allow NFD workers to deploy to GPU nodes tolerations: @@ -104,6 +104,299 @@ nfd: operator: "Exists" effect: "NoSchedule" +minio: + # -- Enable bitnami/minio as the S3-compatible object storage backend for Loki. + # Set to false if MinIO is already deployed; in that case, set minio.fullnameOverride + # to the existing service name so the loki-bucket ConfigMap resolves the correct host. + enabled: true + + # fullnameOverride fixes the service name to "minio" regardless of the Helm release + # name. The credentials template uses this value as BUCKET_HOST. + fullnameOverride: minio + + mode: standalone + + auth: + # -- MinIO root user. + rootUser: minio + # -- MinIO root password (required; set a strong password). + rootPassword: "" + + persistence: + # -- StorageClass for MinIO data volume (e.g. ceph-block, standard). + storageClass: "" + size: 500Gi + + provisioning: + enabled: true + # S3 policy granting the loki user access to the loki bucket only. + policies: + - name: loki + statements: + - resources: + - "arn:aws:s3:::loki/*" + effect: Allow + actions: + - "s3:*" + # Dedicated loki user with restricted S3 access (not the root user). + # AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY in the loki-bucket Secret are + # set from this user's credentials. + users: + - username: loki + # -- Password for the loki MinIO user (required; set a strong password). + password: "" + policies: + - loki + setPolicies: true + buckets: + - name: loki + + resources: + requests: + cpu: "1" + memory: 2048Mi + limits: + cpu: "1.5" + memory: 3072Mi + +loki: + # -- Enable grafana/loki. + enabled: true + + # fullnameOverride makes all Loki service names predictable regardless of the + # Helm release name (e.g. loki-gateway instead of -loki-gateway). + fullnameOverride: loki + + global: + dnsService: coredns + + loki: + auth_enabled: false + commonConfig: + replication_factor: 1 + image: + tag: "3.5.1" + schemaConfig: + configs: + - from: "2024-06-24" + store: tsdb + object_store: s3 + schema: v13 + index: + prefix: loki_index_ + period: 24h + storage: + bucketNames: + chunks: loki + ruler: loki + admin: loki + s3: + s3ForcePathStyle: true + # ${...} references are resolved by Loki at startup via -config.expand-env=true. + endpoint: "http://${BUCKET_HOST}:${BUCKET_PORT}" + region: "${BUCKET_REGION}" + accessKeyId: "${AWS_ACCESS_KEY_ID}" + secretAccessKey: "${AWS_SECRET_ACCESS_KEY}" + storage_config: + tsdb_shipper: + active_index_directory: /var/loki/tsdb-index + cache_location: /var/loki/tsdb-cache + cache_ttl: 168h + structuredConfig: + compactor: + retention_enabled: true + delete_request_store: s3 + limits_config: + max_entries_limit_per_query: 50000 + split_queries_by_interval: 24h + ingestion_rate_mb: 30 + ingestion_burst_size_mb: 60 + per_stream_rate_limit: 30MB + per_stream_rate_limit_burst: 60MB + max_query_series: 10000 + retention_period: 2160h # 90 days + + # Each component runs with -config.expand-env=true so that ${BUCKET_HOST} etc. + # in the Loki config are expanded from the loki-bucket ConfigMap and Secret. + gateway: + replicas: 1 + extraArgs: + - -config.expand-env=true + extraEnvFrom: + - secretRef: + name: loki-bucket + - configMapRef: + name: loki-bucket + nodeSelector: + node-role.kubernetes.io/control-plane: "" + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 500m + memory: 512Mi + + read: + replicas: 1 + extraArgs: + - -config.expand-env=true + extraEnvFrom: + - secretRef: + name: loki-bucket + - configMapRef: + name: loki-bucket + nodeSelector: + node-role.kubernetes.io/control-plane: "" + resources: + requests: + cpu: 500m + memory: 1Gi + limits: + cpu: 500m + memory: 1Gi + + write: + replicas: 1 + extraArgs: + - -config.expand-env=true + extraEnvFrom: + - secretRef: + name: loki-bucket + - configMapRef: + name: loki-bucket + nodeSelector: + node-role.kubernetes.io/control-plane: "" + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 500m + memory: 512Mi + persistence: + # -- StorageClass for Loki write component (e.g. ceph-block, standard). + storageClass: "" + + backend: + replicas: 1 + extraArgs: + - -config.expand-env=true + extraEnvFrom: + - secretRef: + name: loki-bucket + - configMapRef: + name: loki-bucket + nodeSelector: + node-role.kubernetes.io/control-plane: "" + resources: + requests: + cpu: 500m + memory: 512Mi + limits: + cpu: 500m + memory: 512Mi + persistence: + # -- StorageClass for Loki backend component (e.g. ceph-block, standard). + storageClass: "" + +vector: + # -- Enable vector/vector as a DaemonSet log collector. + enabled: true + + role: Agent + + tolerations: + - key: node.kubernetes.io/unschedulable + operator: Exists + effect: NoExecute + tolerationSeconds: 5 + - key: node-role.kubernetes.io/compute + operator: Equal + value: "true" + effect: NoSchedule + - key: amd.com/gpu + operator: Exists + effect: NoSchedule + + updateStrategy: + type: RollingUpdate + rollingUpdate: + maxUnavailable: 10 + + resources: + requests: + cpu: 100m + memory: 256Mi + limits: + cpu: 100m + memory: 256Mi + + customConfig: + data_dir: /vector-data + api: + enabled: true + address: "0.0.0.0:8686" + sources: + mif_logs: + type: kubernetes_logs + transforms: + mif_log_transform: + type: remap + inputs: + - mif_logs + source: | + .namespace = .kubernetes.pod_namespace + .node_name = "$VECTOR_SELF_NODE_NAME" + .app = get(.kubernetes.pod_labels, ["app.kubernetes.io/name"]) ?? "" + .inference_service = get(.kubernetes.pod_labels, ["app.kubernetes.io/instance"]) ?? "" + .pool_name = get(.kubernetes.pod_labels, ["mif.moreh.io/pool"]) ?? "" + .role = get(.kubernetes.pod_labels, ["mif.moreh.io/role"]) ?? "" + + structured, err = parse_json(.message) + if err == null { + . = merge!(., structured) + msg, err = get(., ["msg"]) + if err == null { + .message = msg + del(.msg) + } + time, err = get(., ["time"]) + if err == null { + .timestamp = time + del(.time) + } + } else { + .level = "warn" + } + + del(.file) + del(.source_type) + del(.stream) + del(.kubernetes) + sinks: + loki: + type: loki + # Vector and Loki are co-located in the same namespace, so the short + # service name resolves correctly without a namespace suffix. + endpoint: "http://loki-gateway" + inputs: + - mif_log_transform + encoding: + codec: json + labels: + # {{`{{ field }}`}} is Go raw-string escaping required because the + # Vector chart renders customConfig through Helm's tpl function. + # tpl sees {{`{{ namespace }}`}} → evaluates raw string → outputs {{ namespace }} + # which is Vector's own field-template syntax. + namespace: "{{`{{ namespace }}`}}" + inference_service: "{{`{{ inference_service }}`}}" + pool_name: "{{`{{ pool_name }}`}}" + role: "{{`{{ role }}`}}" + node_name: "{{`{{ node_name }}`}}" + app: "{{`{{ app }}`}}" + level: "{{`{{ level }}`}}" + ecrTokenRefresher: # -- Enable ECR token refresher. enabled: true From a91acbc9d642548bb865a3291f6f2951fdda6621 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 18:04:00 +0900 Subject: [PATCH 02/23] MAF-19265: feat(website): Update package-lock.json and enhance prerequisites documentation - Added "peer": true to multiple dependencies in package-lock.json to indicate peer dependencies. - Reformatted import statements in prerequisites.mdx for consistency. - Expanded instructions in prerequisites.mdx to clarify required values for configuration files. - Introduced a new log collection documentation file detailing the setup of Loki and Vector for centralized log management. --- .../docs/getting-started/prerequisites.mdx | 49 +++- website/docs/operations/log-collection.mdx | 274 ++++++++++++++++++ website/package-lock.json | 32 +- 3 files changed, 343 insertions(+), 12 deletions(-) create mode 100644 website/docs/operations/log-collection.mdx diff --git a/website/docs/getting-started/prerequisites.mdx b/website/docs/getting-started/prerequisites.mdx index 67293a5..a1ac6f5 100644 --- a/website/docs/getting-started/prerequisites.mdx +++ b/website/docs/getting-started/prerequisites.mdx @@ -4,8 +4,8 @@ sidebar_label: Prerequisites sidebar_position: 1 --- -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; This document introduces the prerequisites for the MoAI Inference Framework and provides instructions on how to install them. @@ -65,16 +65,43 @@ The container images for the MoAI Inference Framework are distributed through a **The AWS credentials (`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`) should have been provided to you along with your purchase or trial issuance of the MoAI Inference Framework**. If you did not receive this information, please contact your point of purchase separately. ::: -Create a `moai-inference-framework-values.yaml` file as follows. **You need to replace `` and `` with your own values**. +Create a `moai-inference-framework-values.yaml` file as follows. Fill in all values marked as required. -```yaml title="moai-inference-framework-values.yaml" {3-4} +```yaml title="moai-inference-framework-values.yaml" {4-5,10,12,16,22,25} +# ECR credentials — provided by Moreh at purchase or trial issuance. ecrTokenRefresher: aws: - accessKeyId: - secretAccessKey: + accessKeyId: # required + secretAccessKey: # required + +# MinIO: object storage backend for Loki log data. +minio: + auth: + rootPassword: # required; set a strong password (≥ 8 chars) + persistence: + storageClass: # required; e.g. ceph-block + provisioning: + users: + - username: loki + password: # required; set a strong password (≥ 8 chars) + +# Loki: log aggregation system. Uses MinIO as its object storage backend. +loki: + write: + persistence: + storageClass: # required; same StorageClass as above + backend: + persistence: + storageClass: # required; same StorageClass as above ``` -In addition, if dependencies such as keda, kube-prometheus-stack, lws are already installed in your cluster, you should skip their installation by setting the corresponding values to `false` in the `moai-inference-framework-values.yaml` file. Refer to [moai-inference-framework README](https://github.com/moreh-dev/mif/tree/main/deploy/helm/moai-inference-framework) to see the full list of dependencies. +:::info +The `` must match a StorageClass available in your cluster. Run `kubectl get storageclass` to list the available StorageClasses. +::: + +:::info +If dependencies such as `keda`, `kube-prometheus-stack`, or `lws` are already installed in your cluster, skip their installation by setting the corresponding values to `false`. Refer to [moai-inference-framework README](https://github.com/moreh-dev/mif/tree/main/deploy/helm/moai-inference-framework) for the full list of dependencies. +::: Then, deploy the `moai-inference-framework` chart using the following command: @@ -136,7 +163,7 @@ deviceConfig: spec: driver: enable: true - version: '6.4.3' + version: "6.4.3" blacklist: true image: /amdgpu-driver imageRegistrySecret: @@ -279,7 +306,7 @@ spec: app.kubernetes.io/instance: rdma-shared-device-plugin updateStrategy: rollingUpdate: - maxUnavailable: '30%' + maxUnavailable: "30%" template: metadata: labels: @@ -415,8 +442,8 @@ Create a `istiod-values.yaml` file and install the Istio control plane. ```yaml title="istiod-values.yaml" pilot: env: - PILOT_ENABLE_ALPHA_GATEWAY_API: 'true' - ENABLE_GATEWAY_API_INFERENCE_EXTENSION: 'true' + PILOT_ENABLE_ALPHA_GATEWAY_API: "true" + ENABLE_GATEWAY_API_INFERENCE_EXTENSION: "true" ``` ```shell diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx new file mode 100644 index 0000000..2878820 --- /dev/null +++ b/website/docs/operations/log-collection.mdx @@ -0,0 +1,274 @@ +--- +title: Log Collection (Loki + Vector) +sidebar_label: Log Collection +sidebar_position: 3 +--- + +This document explains how to enable centralized log collection for the MoAI Inference Framework using [Loki](https://grafana.com/oss/loki/) (log aggregation) and [Vector](https://vector.dev/) (log collection agent). + +## Overview + +``` +Inference Service Pods + │ (container logs) + ▼ + Vector DaemonSet ← runs on every node + │ transforms + labels logs + │ (namespace, inference_service, pool_name, …) + ▼ + Loki Gateway ← stores logs in MinIO (S3) + │ + ▼ + Grafana (LogQL) ← search and visualize logs +``` + +### Labels available for log search + +| Label | Source | Example value | +| :------------------ | :-------------------------------------------------- | :--------------------- | +| `namespace` | `kubernetes.pod_namespace` | `default` | +| `inference_service` | pod label `app.kubernetes.io/instance` | `llama-3-2-1b` | +| `pool_name` | pod label `mif.moreh.io/pool` | `heimdall` | +| `role` | pod label `mif.moreh.io/role` | `prefill`, `decode` | +| `app` | pod label `app.kubernetes.io/name` | `vllm` | +| `node_name` | `VECTOR_SELF_NODE_NAME` env var (injected by Vector)| `gpu-node-01` | +| `level` | parsed from JSON log field `level` | `info`, `warn`, `error`| + +--- + +## Prerequisites + +- The `moai-inference-framework` Helm chart installed (or being installed). + +:::info +MinIO, Loki, and Vector are all **enabled by default** in the `moai-inference-framework` chart. The only required configuration steps are setting the MinIO credentials and StorageClass. +::: + +--- + +## Installation + +### 1. Prepare the values file + +Add the following block to your `moai-inference-framework-values.yaml`. + +```yaml title="moai-inference-framework-values.yaml" +minio: + auth: + rootPassword: # required; set a strong password + persistence: + storageClass: # e.g. ceph-block + provisioning: + users: + - username: loki + password: # required; set a strong password + +loki: + write: + persistence: + storageClass: + backend: + persistence: + storageClass: +``` + +:::info +`minio.persistence.storageClass`, `loki.write.persistence.storageClass`, and `loki.backend.persistence.storageClass` must be set to a StorageClass available in your cluster. The value used in the reference p-cluster is `ceph-block`. +::: + +:::info +MinIO provisioning creates a dedicated `loki` user with a policy scoped to the `loki` bucket. Loki uses these restricted credentials (not root) to access object storage. Both `minio.auth.rootPassword` and `minio.provisioning.users[0].password` are required. +::: + +### 2. Install (or upgrade) the chart + +```shell +helm upgrade -i mif moreh/moai-inference-framework \ + --version v0.3.0 \ + -n mif \ + --create-namespace \ + -f moai-inference-framework-values.yaml +``` + +The chart will: + +1. Create a `loki-bucket` ConfigMap and Secret in the `mif` namespace from the provided MinIO credentials. +2. Install the Loki Helm chart (v6.30.0) with TSDB storage and 90-day log retention. +3. Install the Vector Helm chart (v0.39.0) as a DaemonSet that collects container logs from all nodes, transforms them, and ships them to Loki. +4. Create a Grafana datasource ConfigMap so that Grafana automatically discovers Loki. + +--- + +## Verifying the installation + +Check that all Loki components are running. + +```shell +kubectl get pods -n mif -l app.kubernetes.io/name=loki +``` + +Expected output (all pods `Running`): + +``` +NAME READY STATUS RESTARTS AGE +loki-backend-0 1/1 Running 0 2m +loki-gateway-xxxxxxxxx-xxxxx 1/1 Running 0 2m +loki-read-xxxxxxxxx-xxxxx 1/1 Running 0 2m +loki-write-0 1/1 Running 0 2m +``` + +Check that Vector is running on all nodes. + +```shell +kubectl get pods -n mif -l app.kubernetes.io/name=vector +``` + +Expected output (one pod per node, all `Running`): + +``` +NAME READY STATUS RESTARTS AGE +vector-xxxxx 1/1 Running 0 2m +vector-yyyyy 1/1 Running 0 2m +``` + +Check Vector logs to confirm it is shipping to Loki without errors. + +```shell +kubectl logs -n mif -l app.kubernetes.io/name=vector --tail=50 +``` + +--- + +## Searching logs in Grafana + +Open Grafana → **Explore** → select the **Loki** datasource. + +### By namespace + +```logql +{namespace="default"} +``` + +### By inference service name + +```logql +{inference_service="llama-3-2-1b"} +``` + +### By pool name + +```logql +{pool_name="heimdall"} +``` + +### By role + +```logql +{role="decode"} +``` + +### Combined filter + +```logql +{namespace="default", inference_service="llama-3-2-1b", role="prefill"} |= "error" +``` + +### Filter by log level + +```logql +{namespace="default", level="error"} +``` + +--- + +## Architecture details + +### Loki + +| Property | Value | +| :------------------ | :----------------------------------------- | +| Helm chart | `moreh/loki` v6.30.0 (upstream grafana/loki) | +| App version | 3.5.1 | +| Storage backend | S3 (MinIO), TSDB index | +| Retention | 90 days (2160 h) | +| Ingestion limit | 30 MB/s, 60 MB burst | +| Max entries/query | 50 000 | +| Deployment | Distributed (gateway / read / write / backend) | + +### Vector + +| Property | Value | +| :------------------ | :------------------------------------------ | +| Helm chart | `moreh/vector` v0.39.0 | +| Deployment | DaemonSet (Agent mode, one pod per node) | +| Log source | All container logs (`kubernetes_logs`) | +| Resource limits | 100m CPU / 256Mi memory | +| Tolerations | unschedulable, compute, `amd.com/gpu` | + +### MinIO + +| Property | Value | +| :------------------ | :----------------------------------------------------------- | +| Helm chart | `bitnami/minio` v14.10.5 | +| Mode | Standalone | +| Bucket | `loki` (created via provisioning on startup) | +| Loki credentials | Dedicated `loki` user with S3 policy scoped to `loki` bucket | +| Resources | 1 CPU / 2 Gi memory (requests), 1.5 CPU / 3 Gi (limits) | +| Persistence | 500 Gi | +| Deployment | Single pod | + +### Component naming + +`fullnameOverride` is set for both MinIO and Loki so that service names are predictable regardless of the Helm release name: + +| Service | Short name (same-namespace access) | +| :------------------ | :--------------------------------- | +| MinIO | `minio` | +| Loki gateway | `loki-gateway` | +| Loki read | `loki-read` | +| Loki write | `loki-write` | + +Vector connects to Loki using the short service name `http://loki-gateway` since all components are co-located in the same namespace. + +--- + +## Using an external MinIO + +If MinIO is already deployed outside this chart, set `minio.enabled: false`. The `loki-bucket` ConfigMap and Secret are generated from `minio.fullnameOverride` and `minio.provisioning.users[0].*` values regardless of whether the sub-chart is enabled. + +**Same namespace** — set `fullnameOverride` to the existing service name: + +```yaml title="moai-inference-framework-values.yaml" +minio: + enabled: false + fullnameOverride: # e.g. minio + provisioning: + users: + - username: + password: +``` + +**Different namespace** — set `fullnameOverride` to the FQDN so that Loki can resolve it cross-namespace. When `minio.enabled` is `false`, the sub-chart is not deployed and the value is only used as `BUCKET_HOST` in the ConfigMap: + +```yaml title="moai-inference-framework-values.yaml" +minio: + enabled: false + fullnameOverride: minio.minio.svc.cluster.local # FQDN for cross-namespace access + provisioning: + users: + - username: + password: +``` + +--- + +## Disabling log collection + +```yaml title="moai-inference-framework-values.yaml" +minio: + enabled: false +loki: + enabled: false +vector: + enabled: false +``` diff --git a/website/package-lock.json b/website/package-lock.json index fa9aa1f..e032ba0 100644 --- a/website/package-lock.json +++ b/website/package-lock.json @@ -278,6 +278,7 @@ "resolved": "https://registry.npmjs.org/@algolia/client-search/-/client-search-5.48.0.tgz", "integrity": "sha512-RB9bKgYTVUiOcEb5bOcZ169jiiVW811dCsJoLT19DcbbFmU4QaK0ghSTssij35QBQ3SCOitXOUrHcGgNVwS7sQ==", "license": "MIT", + "peer": true, "dependencies": { "@algolia/client-common": "5.48.0", "@algolia/requester-browser-xhr": "5.48.0", @@ -444,6 +445,7 @@ "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.29.0.tgz", "integrity": "sha512-CGOfOJqWjg2qW/Mb6zNsDm+u5vFQ8DxXfbM09z69p5Z6+mE1ikP2jUXw+j42Pf1XTYED2Rni5f95npYeuwMDQA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/code-frame": "^7.29.0", "@babel/generator": "^7.29.0", @@ -2479,6 +2481,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" }, @@ -2501,6 +2504,7 @@ } ], "license": "MIT", + "peer": true, "engines": { "node": ">=18" } @@ -2610,6 +2614,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3031,6 +3036,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -3830,6 +3836,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/core/-/core-3.9.2.tgz", "integrity": "sha512-HbjwKeC+pHUFBfLMNzuSjqFE/58+rLVKmOU3lxQrpsxLBOGosYco/Q0GduBb0/jEMRiyEqjNT/01rRdOMWq5pw==", "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/babel": "3.9.2", "@docusaurus/bundler": "3.9.2", @@ -4011,6 +4018,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/plugin-content-docs/-/plugin-content-docs-3.9.2.tgz", "integrity": "sha512-C5wZsGuKTY8jEYsqdxhhFOe1ZDjH0uIYJ9T/jebHwkyxqnr4wW0jTkB72OMqNjsoQRcb0JN3PcSeTwFlVgzCZg==", "license": "MIT", + "peer": true, "dependencies": { "@docusaurus/core": "3.9.2", "@docusaurus/logger": "3.9.2", @@ -5047,6 +5055,7 @@ "resolved": "https://registry.npmjs.org/@mdx-js/react/-/react-3.1.1.tgz", "integrity": "sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==", "license": "MIT", + "peer": true, "dependencies": { "@types/mdx": "^2.0.0" }, @@ -5519,6 +5528,7 @@ "resolved": "https://registry.npmjs.org/@svgr/core/-/core-8.1.0.tgz", "integrity": "sha512-8QqtOQT5ACVlmsvKOJNEaWmRPmcojMOzCz4Hs2BGG/toAp/K38LcsMRyLp349glq5AzJbCEeimEoxaX6v/fLrA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/core": "^7.21.3", "@svgr/babel-preset": "8.1.0", @@ -6140,6 +6150,7 @@ "resolved": "https://registry.npmjs.org/@types/react/-/react-19.2.13.tgz", "integrity": "sha512-KkiJeU6VbYbUOp5ITMIc7kBfqlYkKA5KhEHVrGMmUUMt7NeaZg65ojdPk+FtNrBAOXNVM5QM72jnADjM+XVRAQ==", "license": "MIT", + "peer": true, "dependencies": { "csstype": "^3.2.2" } @@ -6488,6 +6499,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", "license": "MIT", + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -6555,6 +6567,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.3", "fast-uri": "^3.0.1", @@ -6600,6 +6613,7 @@ "resolved": "https://registry.npmjs.org/algoliasearch/-/algoliasearch-5.48.0.tgz", "integrity": "sha512-aD8EQC6KEman6/S79FtPdQmB7D4af/etcRL/KwiKFKgAE62iU8c5PeEQvpvIcBPurC3O/4Lj78nOl7ZcoazqSw==", "license": "MIT", + "peer": true, "dependencies": { "@algolia/abtesting": "1.14.0", "@algolia/client-abtesting": "5.48.0", @@ -7076,6 +7090,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "baseline-browser-mapping": "^2.9.0", "caniuse-lite": "^1.0.30001759", @@ -8088,6 +8103,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -8407,6 +8423,7 @@ "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.33.1.tgz", "integrity": "sha512-iJc4TwyANnOGR1OmWhsS9ayRS3s+XQ185FmuHObThD+5AeJCakAAbWv8KimMTt08xCCLNgneQwFp+JRJOr9qGQ==", "license": "MIT", + "peer": true, "engines": { "node": ">=0.10" } @@ -8828,6 +8845,7 @@ "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", "license": "ISC", + "peer": true, "engines": { "node": ">=12" } @@ -10019,6 +10037,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -14602,6 +14621,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -15190,6 +15210,7 @@ } ], "license": "MIT", + "peer": true, "dependencies": { "nanoid": "^3.3.11", "picocolors": "^1.1.1", @@ -16093,6 +16114,7 @@ "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.1.tgz", "integrity": "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg==", "license": "MIT", + "peer": true, "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -16918,6 +16940,7 @@ "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0" }, @@ -16930,6 +16953,7 @@ "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "license": "MIT", + "peer": true, "dependencies": { "loose-envify": "^1.1.0", "scheduler": "^0.23.2" @@ -16986,6 +17010,7 @@ "resolved": "https://registry.npmjs.org/@docusaurus/react-loadable/-/react-loadable-6.0.0.tgz", "integrity": "sha512-YMMxTUQV/QFSnbgrP3tjDzLHRg7vsbMn8e9HAa8o/1iXoiomo48b7sk/kkmWEuWNDPJVlKSJRB6Y2fHqdJk+SQ==", "license": "MIT", + "peer": true, "dependencies": { "@types/react": "*" }, @@ -17014,6 +17039,7 @@ "resolved": "https://registry.npmjs.org/react-router/-/react-router-5.3.4.tgz", "integrity": "sha512-Ys9K+ppnJah3QuaRiLxk+jDWOR1MekYQrlytiXxC1RyfbdsZkS5pvKAzCCr031xHixZwpnsYNT5xysdFHQaYsA==", "license": "MIT", + "peer": true, "dependencies": { "@babel/runtime": "^7.12.13", "history": "^4.9.0", @@ -18826,7 +18852,8 @@ "version": "2.8.1", "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", - "license": "0BSD" + "license": "0BSD", + "peer": true }, "node_modules/tsyringe": { "version": "4.10.0", @@ -18907,6 +18934,7 @@ "integrity": "sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==", "devOptional": true, "license": "Apache-2.0", + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -19262,6 +19290,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "license": "MIT", + "peer": true, "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -19509,6 +19538,7 @@ "resolved": "https://registry.npmjs.org/webpack/-/webpack-5.105.1.tgz", "integrity": "sha512-Gdj3X74CLJJ8zy4URmK42W7wTZUJrqL+z8nyGEr4dTN0kb3nVs+ZvjbTOqRYPD7qX4tUmwyHL9Q9K6T1seW6Yw==", "license": "MIT", + "peer": true, "dependencies": { "@types/eslint-scope": "^3.7.7", "@types/estree": "^1.0.8", From 05cd757f45571db3530a7d41b0a4842050639145 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 18:04:14 +0900 Subject: [PATCH 03/23] MAF-19265: docs(AGENTS): expand agent self-improvement and design principles sections - Added guidelines for agent self-improvement to encourage documentation of recurring patterns, mistakes, and design decisions. - Introduced design principles focusing on minimum necessary complexity, documentation over code for edge cases, and rejecting flawed designs before implementation. - Enhanced Helm chart development practices, including sub-chart integration, predictable service names, and separation of concerns in values.yaml. - Provided detailed instructions for MinIO provisioning patterns and YAML anchor usage to improve configuration management. --- AGENTS.md | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) diff --git a/AGENTS.md b/AGENTS.md index 62f3e98..9672d34 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -99,3 +99,137 @@ The commit message should be structured as follows: - **Makefile and workflow integration**: - Provide separate Make targets per test purpose (for example `e2e-performance`, `e2e-quality`) so that CI can run them independently. - GitHub Actions and other workflows should invoke these targets directly, and new test categories should follow the same pattern when adding additional targets and workflows. + +## Agent Self-Improvement + +After completing any non-trivial task, evaluate whether the work involved: +- A recurring pattern that will likely appear again in future tasks, or +- A mistake that was corrected through user feedback, or +- A design decision that required deliberate reasoning to reach the right answer. + +If any of the above applies, **record it in this file** (`AGENTS.md`) before closing the task. Entries should be concise, actionable, and placed under the most relevant existing section. If no section fits, create one. + +The goal is to make every repeated task faster and every repeated mistake impossible. + +## Design Principles + +### Minimum Necessary Complexity + +- **Do not add configuration options, fields, or abstractions for hypothetical future use cases.** Only add what the current task concretely requires. +- Before introducing a new value field, ask: "Is there a real, current use case that cannot be handled without it?" If the answer is no, omit the field and handle the edge case through documentation instead. +- Example: when considering whether to add a `minio.externalHost` field to support cross-namespace MinIO, the right answer was to document that users can set `minio.fullnameOverride` to a FQDN when `minio.enabled: false` — no new field needed. + +### Documentation over Code for Edge Cases + +- When a behavior difference only arises in a non-default, edge-case configuration, prefer documenting the workaround over adding a dedicated code path or configuration key. +- Reserve code changes for cases where the default path is broken or the workaround is genuinely error-prone. + +### Reject Designs Before They Are Built + +- If an initial design is heading in the wrong direction (e.g., standalone prerequisites instead of sub-chart dependencies, `enabled: false` defaults, nested config instead of top-level sections), raise the issue and redesign before writing code. Retrofitting a wrong structure is always more costly. + +## Helm Chart Development + +### Sub-chart Integration + +- **All infrastructure components belong as sub-chart dependencies** of `moai-inference-framework`. Do not design them as standalone prerequisites that users install separately. +- **Enablement convention**: Every sub-chart dependency must have both a `condition:` entry in `Chart.yaml` AND `enabled: true` in the default `values.yaml`. Setting `enabled: false` as the default breaks the "install everything in one chart" philosophy. Follow the same pattern as existing components (`keda`, `lws`, `odin`, etc.). + + ```yaml + # Chart.yaml — always add condition: + - name: vector + version: 0.39.0 + repository: https://moreh-dev.github.io/helm-charts + condition: vector.enabled + + # values.yaml — always default to true + vector: + enabled: true + ``` + +### Predictable Service Names + +- Set `fullnameOverride` on every sub-chart so that service names are deterministic regardless of the Helm release name. Without this, service names vary with the release name and break cross-component references. + + ```yaml + minio: + fullnameOverride: minio # service is always "minio" + loki: + fullnameOverride: loki # gateway is always "loki-gateway" + ``` + +### Separation of Concerns in values.yaml + +- **Large infrastructure components must be top-level sections**, not nested under their consumers. For example, MinIO configuration belongs at `minio:`, not at `loki.minio:`. This allows MinIO to be independently enabled/disabled and reused by other components in the future. + +### MinIO Provisioning Pattern + +- Use `provisioning` (not `defaultBuckets`) to create buckets, users, and policies. This allows fine-grained access control. +- Create a **dedicated user per consuming service** with a policy scoped to only its bucket — do not use root credentials for service-to-service access. + + ```yaml + minio: + provisioning: + enabled: true + policies: + - name: loki + statements: + - resources: ["arn:aws:s3:::loki/*"] + effect: Allow + actions: ["s3:*"] + users: + - username: loki + password: "" + policies: [loki] + setPolicies: true + buckets: + - name: loki + ``` + +- Templates that read MinIO credentials must reference the **provisioned user**, not root: + + ```yaml + # credentials.yaml + stringData: + AWS_ACCESS_KEY_ID: + { { (index .Values.minio.provisioning.users 0).username | quote } } + AWS_SECRET_ACCESS_KEY: + { { (index .Values.minio.provisioning.users 0).password | quote } } + ``` + +### Helm `tpl` Passthrough — Vector Label Syntax + +- The moreh/vector chart renders `customConfig` through Helm's `tpl` function (`{{ tpl (toYaml .Values.customConfig) . | indent 4 }}`). This means any `{{ }}` expression in `customConfig` is evaluated as a Go template at render time. +- To pass **Vector's own field-template syntax** (`{{ field }}`) through `tpl` without evaluation, use Go raw string literals: + + ```yaml + # values.yaml — correct + labels: + namespace: "{{`{{ namespace }}`}}" + + # values.yaml — WRONG: tpl evaluates {{ namespace }} as a Go template function + labels: + namespace: "{{ namespace }}" + ``` + +- **Before using `customConfig` with any sub-chart, always verify whether the chart applies `tpl` to it** by running `helm pull --version --untar` and inspecting the ConfigMap template. + +### YAML Anchors + +- **Do not use YAML anchors at the root level of `values.yaml`** (e.g., `_defaults: &defaults`). Helm treats unknown root-level keys as invalid and may emit warnings or errors. Instead, duplicate shared configuration explicitly for each component. + +### MIF Pod Label Keys + +When filtering or labeling logs, metrics, or other signals by MIF-specific pod attributes, use these label keys: + +| Concept | Label key | Example value | +| :---------------- | :--------------------------- | :------------------ | +| Pool | `mif.moreh.io/pool` | `heimdall` | +| Role | `mif.moreh.io/role` | `prefill`, `decode` | +| App name | `app.kubernetes.io/name` | `vllm` | +| Inference service | `app.kubernetes.io/instance` | `llama-3-2-1b` | + +### Avoiding Unnecessary Environment Variables + +- Prefer static values or short DNS names over dynamically-injected environment variables when components are co-located in the same namespace. +- For example, a Vector sink targeting a Loki gateway in the same namespace should use `http://loki-gateway` (short name), not `http://loki-gateway.${VECTOR_NAMESPACE}.svc.cluster.local` with an injected namespace variable. From 2581b86633d2a4f5bdcd2dcd4eb38a45077a6669 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 18:37:56 +0900 Subject: [PATCH 04/23] MAF-19265: feat(deploy): Update Helm chart dependencies for MoAI Inference Framework - Changed Loki and Vector repository URLs to official Grafana and Vector Helm chart repositories. - Updated Chart.lock and Chart.yaml to reflect the new repository locations and ensure consistency. - Revised README.md to include updated repository information for Loki and Vector. --- .../helm/moai-inference-framework/Chart.lock | 70 +++++++++---------- .../helm/moai-inference-framework/Chart.yaml | 4 +- .../helm/moai-inference-framework/README.md | 4 +- 3 files changed, 39 insertions(+), 39 deletions(-) diff --git a/deploy/helm/moai-inference-framework/Chart.lock b/deploy/helm/moai-inference-framework/Chart.lock index a8b7deb..2d297ee 100644 --- a/deploy/helm/moai-inference-framework/Chart.lock +++ b/deploy/helm/moai-inference-framework/Chart.lock @@ -1,36 +1,36 @@ dependencies: - - name: common - repository: oci://registry-1.docker.io/bitnamicharts - version: 2.31.4 - - name: kube-prometheus-stack - repository: https://prometheus-community.github.io/helm-charts - version: 80.7.0 - - name: lws - repository: oci://registry.k8s.io/lws/charts - version: 0.7.0 - - name: odin - repository: https://moreh-dev.github.io/helm-charts - version: v0.6.0 - - name: odin-crd - repository: https://moreh-dev.github.io/helm-charts - version: v0.6.0 - - name: keda - repository: https://kedacore.github.io/charts - version: 2.18.0 - - name: kubernetes-replicator - repository: https://helm.mittwald.de - version: 2.12.2 - - name: node-feature-discovery - repository: oci://registry.k8s.io/nfd/charts - version: 0.18.3 - - name: minio - repository: oci://registry-1.docker.io/bitnamicharts - version: 14.10.5 - - name: loki - repository: https://moreh-dev.github.io/helm-charts - version: 6.30.0 - - name: vector - repository: https://moreh-dev.github.io/helm-charts - version: 0.39.0 -digest: sha256:3b635653eed827815cf738ecaaa717f15a008a98d6cdaae0692cf54beee3c43a -generated: "2026-02-20T18:09:04.847004395+09:00" +- name: common + repository: oci://registry-1.docker.io/bitnamicharts + version: 2.31.4 +- name: kube-prometheus-stack + repository: https://prometheus-community.github.io/helm-charts + version: 80.7.0 +- name: lws + repository: oci://registry.k8s.io/lws/charts + version: 0.7.0 +- name: odin + repository: https://moreh-dev.github.io/helm-charts + version: v0.6.0 +- name: odin-crd + repository: https://moreh-dev.github.io/helm-charts + version: v0.6.0 +- name: keda + repository: https://kedacore.github.io/charts + version: 2.18.0 +- name: kubernetes-replicator + repository: https://helm.mittwald.de + version: 2.12.2 +- name: node-feature-discovery + repository: oci://registry.k8s.io/nfd/charts + version: 0.18.3 +- name: minio + repository: oci://registry-1.docker.io/bitnamicharts + version: 14.10.5 +- name: loki + repository: https://grafana.github.io/helm-charts + version: 6.30.0 +- name: vector + repository: https://helm.vector.dev + version: 0.39.0 +digest: sha256:4876629af1e182a8bbba444d098e9d82fd77d1fab46dca1dd3044059f7c129f3 +generated: "2026-02-20T18:36:14.669980012+09:00" diff --git a/deploy/helm/moai-inference-framework/Chart.yaml b/deploy/helm/moai-inference-framework/Chart.yaml index 8376a3f..ad657a1 100644 --- a/deploy/helm/moai-inference-framework/Chart.yaml +++ b/deploy/helm/moai-inference-framework/Chart.yaml @@ -48,9 +48,9 @@ dependencies: condition: minio.enabled - name: loki version: 6.30.0 - repository: https://moreh-dev.github.io/helm-charts + repository: https://grafana.github.io/helm-charts condition: loki.enabled - name: vector version: 0.39.0 - repository: https://moreh-dev.github.io/helm-charts + repository: https://helm.vector.dev condition: vector.enabled diff --git a/deploy/helm/moai-inference-framework/README.md b/deploy/helm/moai-inference-framework/README.md index a237a28..eb9b5ac 100644 --- a/deploy/helm/moai-inference-framework/README.md +++ b/deploy/helm/moai-inference-framework/README.md @@ -17,12 +17,12 @@ Moreh Inference Framework | Repository | Name | Version | |------------|------|---------| +| https://grafana.github.io/helm-charts | loki | 6.30.0 | | https://helm.mittwald.de | replicator(kubernetes-replicator) | 2.12.2 | +| https://helm.vector.dev | vector | 0.39.0 | | https://kedacore.github.io/charts | keda | 2.18.0 | -| https://moreh-dev.github.io/helm-charts | loki | 6.30.0 | | https://moreh-dev.github.io/helm-charts | odin | v0.6.0 | | https://moreh-dev.github.io/helm-charts | odin-crd | v0.6.0 | -| https://moreh-dev.github.io/helm-charts | vector | 0.39.0 | | https://prometheus-community.github.io/helm-charts | prometheus-stack(kube-prometheus-stack) | 80.7.0 | | oci://registry-1.docker.io/bitnamicharts | common | 2.31.4 | | oci://registry-1.docker.io/bitnamicharts | minio | 14.10.5 | From 31ed7fd833346546761200c6552f396c3300c70b Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 18:43:09 +0900 Subject: [PATCH 05/23] MAF-19265: chore(deploy): replace bitnami minio chart with official minio/minio chart MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Switch from bitnami/minio (v14.10.5) to the official minio/minio chart (v5.4.0) from charts.min.io. Update values structure accordingly: auth.rootUser/rootPassword → rootUser/rootPassword, and provisioning.{policies,users,buckets} → top-level policies/users/buckets with accessKey/secretKey field names. Set default passwords (minio123!, loki123!) so users can deploy without mandatory password configuration, while still being able to override them. Also switch loki and vector to their official chart repositories: - loki: grafana/helm-charts instead of moreh-dev - vector: helm.vector.dev instead of moreh-dev Co-authored-by: Cursor --- .../helm/moai-inference-framework/Chart.lock | 8 +-- .../helm/moai-inference-framework/Chart.yaml | 4 +- .../charts/minio-14.10.5.tgz | Bin 59483 -> 0 bytes .../charts/minio-5.4.0.tgz | Bin 0 -> 22261 bytes .../templates/loki/credentials.yaml | 4 +- .../helm/moai-inference-framework/values.yaml | 59 +++++++++--------- 6 files changed, 36 insertions(+), 39 deletions(-) delete mode 100644 deploy/helm/moai-inference-framework/charts/minio-14.10.5.tgz create mode 100644 deploy/helm/moai-inference-framework/charts/minio-5.4.0.tgz diff --git a/deploy/helm/moai-inference-framework/Chart.lock b/deploy/helm/moai-inference-framework/Chart.lock index 2d297ee..a899860 100644 --- a/deploy/helm/moai-inference-framework/Chart.lock +++ b/deploy/helm/moai-inference-framework/Chart.lock @@ -24,13 +24,13 @@ dependencies: repository: oci://registry.k8s.io/nfd/charts version: 0.18.3 - name: minio - repository: oci://registry-1.docker.io/bitnamicharts - version: 14.10.5 + repository: https://charts.min.io + version: 5.4.0 - name: loki repository: https://grafana.github.io/helm-charts version: 6.30.0 - name: vector repository: https://helm.vector.dev version: 0.39.0 -digest: sha256:4876629af1e182a8bbba444d098e9d82fd77d1fab46dca1dd3044059f7c129f3 -generated: "2026-02-20T18:36:14.669980012+09:00" +digest: sha256:85af11696c630ed9ac9ef85a7a18c8b821187a76e949e535019fc5b91d929ee8 +generated: "2026-02-20T18:51:13.630416372+09:00" diff --git a/deploy/helm/moai-inference-framework/Chart.yaml b/deploy/helm/moai-inference-framework/Chart.yaml index ad657a1..538d7b0 100644 --- a/deploy/helm/moai-inference-framework/Chart.yaml +++ b/deploy/helm/moai-inference-framework/Chart.yaml @@ -43,8 +43,8 @@ dependencies: repository: oci://registry.k8s.io/nfd/charts condition: nfd.enabled - name: minio - version: 14.10.5 - repository: oci://registry-1.docker.io/bitnamicharts + version: 5.4.0 + repository: https://charts.min.io condition: minio.enabled - name: loki version: 6.30.0 diff --git a/deploy/helm/moai-inference-framework/charts/minio-14.10.5.tgz b/deploy/helm/moai-inference-framework/charts/minio-14.10.5.tgz deleted file mode 100644 index 3bb59bac79a9a05950770bf0df7e35e348237c08..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 59483 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%0D^U293S&(k7my}cTlRm%T){$JD2 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○RFWwv;wb33Z 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 E04j~bm;e9( diff --git a/deploy/helm/moai-inference-framework/charts/minio-5.4.0.tgz b/deploy/helm/moai-inference-framework/charts/minio-5.4.0.tgz new file mode 100644 index 0000000000000000000000000000000000000000..22f8d733e63f37c1bc0ff0e75ab2a6cdfec9505b GIT binary patch literal 22261 zcmV)hK%>7OiwG0|00000|0w_~VMtOiV@ORlOnEsqVl!4SWK%V1T2nbTPgYhoO;>Dc zVQyr3R8em|NM&qo0POvHd)qd$IF9eX;j6&PJ{!A7q-^K5t6ldT*LGW-Cbk~SX+Qm? z{lyRoNvJ7;1wbd-#OJkt9}EBzyh*a-xR+z@K8-~Jg8?uY%nW7*bDB`rJDg!Ig9V<) zfB6j0&d$!x^QTYY-<_SE>c2bBo<04`?$Z}fo;`o@H+u3{S@9z1#e?Q-S;_p85 zpFaKnc@YsIr>TUJ-_q#}4GEtxKF3K&(CPRW5=u0ZjN>WsW^7LSXeMPU`n}$qCIMw0 z4OP|h%N{3!WjrLJN9WUC%%-gOYH%_*efy5_XpZ@1kS0^_k}TA3(f51=1nl`pn6`Yx zpmD!=A)a_X3gb*j!o4}BiNrJ^9IBH!rg0xdt^b6gV z!BEw<*iWgPW#b@Z^PXN%y5yA|%4fmTV8{Ed=ep_9=w9JCBjR&0faUA|>9eQ1we|n( z`HP43e;?1r1{!j9MI(YRkUgRaN@E-n#3q{H(S&hyfzz~qfnq!+vG6uFU`3o>5zc8u z`l!?KygDe!kjTbDQkh8tVC0OTNfyWOU8pAV6|aD*PmO>Dk?1lT6P^%Bgk8)iVrn^~ zcQe9?L6!={vm~L(Q~@*vkDy%N)(c`5;urvrh(r;Y;4GGi&heCV^*`r$+C?~t^siwS z$3qs=a1o$6i->9^6C_eSq)9|WEQ#uyY7#2+J%l((nV^#KMIZf|;YDEig5eGbNjzP_ zW)VvBru%3xIbm|hi6Dveyd1L;2|1CXkKX+3Z6M!puMT|oRefJTiO#KhoX^|EJiI_# z>MxD|#s&&wN)nk5MaYR72%N(oXW=E0+kqOFc{o^OWWwfQ+4c8!&v#$=d%OO#6~nTz zVJJaOR2R{J1V~7nL^x&%L5!n_3d!j>lO*y~p}zYDZEPSWXM`h>r77d;m1d6!bAmbr zC_S79QAE`)h-0%jG);tY77_H0${C7C8neY*4HV-F6-g#pEQs`QUiT$b?V}IZRiHRY zn8fPG?I0f%^>gs&iKzbn zg0dtbArS)eg)J#imPCZ3Z>T&?)o`(xCQ~G`aE7pAFlZ8I@4HAaU?`HIj^r8XsJ|jA z@Hkehmm{HtkkOcTr(9(gZ0 zKHyWkR>^xjPh-s*NrK0K?$_tTzPEu8@{#XPWV-)T2S*VnLhSedzO%RcQ>XG(HASz8 zuc+1MYUKBK)gI*U?(FRD{8XdUD;8&p`{vk%%!ou9!SD5Vz_GFFE0&pFE~&2zH31Pc zA|d8QHKFSr=D+h=gG3Up>ZrbjYn68Y{x@qaFQjl<_I) zqurgI|7dM+WY+44Na2a%N6};ke~nC~YU3a)un47`GEU_}Ek{X{DXdXWCWT&5Z2D@G zh*$`$CnRakgE9`>t(UUMxA6Rw6EX+wq^I^C`~EP-LY(OBv6ExLvqaK4L81BzyQe{8 zT`UaM_6#5&071j%O}$-r7v_w~*Mjga{58ZvDD4JtFkfI_c0VfiI3)>D!y9SNn=pwC z?>ut0GfkqBIeJC z(<>6p#I2KtDA zAFB_@eLkWf!V(Anx+IG))gED>s!vd_?>9be@6{*WUOo|(_L|@4?Um=OQm_8r)B|=I z$4D(=$`TMj%m|=&G>*}jAiXU`s*^@Knb4RhLCcImiFArrd8100nJZC7iD9shgVZC` zmQ0dJ?cJ~=kq88f40ivJaZW_ak_h%y5(2dZo}ETL-uVn4QBFbyUqMsby(Y$#O}vnB zDTY|i`l!<*GBkt;uX`O&FKzXG9+peY!=72WSk8>(Kl~oOV_6)jftjmqheYKThfGO& zSt9cm-z$dOQE;rT0mao2p(scD-He7al#9HusVK>C2Ccy_G~sLx<35<6m`o&6jAzkB zG+*GbQz{@ZQ)(PPd_ckXTIbHuLf6*@N<=0!ArXL>XF{rOfgI%*n6U{!OjSjZl8{cQ zriOOVo|eYX7_&2kPV|n(CI}X zIGe=Ap08CQzj$YKFb^R`9&^!Vil^eVoae+FL1T@aU^7iDH6aM^KWj zG*$^=>ymj0*V#ot6#<< zC>jbpGZTtnM1@ZuLt7{%Tu>oN5)v~mL;FS|E!3mK7}I%KOly{pGC{aM&1gh=Ib7)* z)k6zqMRTQ9tyD4(xr(n=Tw$Fbs7)&a-Bk-EQ3H}{7y(gT=ZyTCQBH*0!Jyh)h4l`< zKg@ZrCZeclc}ylsLeZVcx8yO)l1O#LY=(e=9%BHnw-B`xH=t}x2%GWX4GAQqD6w|G(;(9S5#02+}lD^>NH@W?LKBd+XiccZYar= zDxa`gW3VeBYWjjy`7R1)i~(Ue(2AA`4-nd#rh97hKKNnOHFg`Wc5@5oo9~Xh>LdCa zI!#G3k~qBFhL5_09Y`(AvxyQ8Bq-offWBH3rZ0(N#x6Cl%-a!e?I0fqh3@cslnJ$G zpomT;gsaIb74Mpjc;T=y50wVSFnmooxjujp4nrcuE7)Mq2#$W>RFcyqRD>z$zeyiG z+u8Ysdc`znW7ycKfQf*eUdsqdZjSU;i!FsJzCmzgg$59E%-_0%=_y!Q6z_qK0IAP# z5^0^!z)It6N)yAXBbGdtD8Z6mk$7P(W`G8uq^5c+rk4aw^*%ol+ku@d(}#i!y-%4S zj?`vUc$hw7#)w3k%dt!fE3{c_@YYL)qpxs`lTZn1x;7Xe6~XHIYTf~WV$X(Q=k*Wu zAA@0085A{DC`V?IY6b&5*l6=w5~P~Jug@3_OwA6>k3wJ1u~9OE{kxC;S4jr0p#p)N zrVRy8_I7rZ9v?d+VJlf%!(gcGD{U;+T25RTBe2n*;bck#I?&cAVu(O#5?JYKRui>D zMFnzaL_=SqQcEl@MNiL@k5dpJ6>`4meXj5;4Vz_3-G}1_?oTKu?{FOVHaJnLZzz2O zX2Q6yIx;p$_y)P0W3=^B&4V_x?d}Bn|2w_Crm0x)4gClm=vt5VsvLE&kXhU?hAy6upg<6Tl*w`f{cQm8v~jpU3z#wPV!Si<~}T z?H<~hL4#zfhy#tWD73JMgf%)cae`*!P zg{58T+Z(WWe9mGLlrgcOQ5s`8VSL`OU^IlrdO@feeln%W`^JJY7CsJP4*)ClQfRQi zd>{qXfgUa|KaJTK$G%eCY3S3`Pm0|Jdack3Z0Rx#K|;00#yGqrNhB)xEvsp&sD&w6 z$l^Zge0zRA9IaFL-Hb{SQ;`!OShD+QCxHL;6kAJSzvy`g&6tod?P`T;gOo9*o5MY% z1Zl(PHdG-k_-jG{aoSe!Wh~5MFTieSbBtduY7Y*}M%^2-?AULA@Hm8^(d=B#W*63%aG&M?&Sod`wx)ri)R^362g~A|%JOaC%JK5t2$sq;8}vO0E3SLn_27ql(Q^FC#UDf{T$Yz2Blav zOX5Wij!v4a9Q$D8sMKvTy6`MH5c=3=S8EdR<{O1U{%X?vTOW8@w$eFG&KQ%gsF-6J z&N{$f^vI0rc&MR0P2z>B@->Z#SO`hx#W}k^KE~z%83>}_8(zwyx|@T0;;bqd*QJz2 z6=#b=cD24ph?8G4BBVAD$8=8R4NYDlo2Qv1e&NpuXJRDx9YlE>dd1Dj9Nb}cpDQ(g zV*|aU0+e*vMyNimcWhC3qBK_H@}$jz=HzIQAnW}Beht>jV&S||W36cBqx$0=r;>bx z|H3=7?hm3lO+H2xPZK624aLt2^nzvJgrSW>2)hGppo7&j%!Fif$AJdxgCc#5nLB*h zO4=D>0|6F>9q8TDY@%q&aUzB8yy_R@C?YY@e@~2?k!jqX--1U7O{V&-Wq5P&dCa^NL+ssRhq@wuw^09-YIIl%F}cI;5hk4z>clznudb|J+Sr7^xZ zrZH0(A%}1_@}oi@J;prg<9DJjp7i^D)9x3&FCOQm%)pncb;OhY!I*LR3as>)%h#zA zDLS=M-w>%?dF!8!)cBLOufwdhq9W`{!$Zua=;T9lqu#F3SA91070hE>N7}xAL!|!n zl4+r=xkGK$i*J=Ki;iX}dMPd=dSkaz%fCwIEi_)?0yQ#Mt*%AoO(fokax0bJJ>k|! z^6u&7^Uit55Ar=mi7J)pLhSU7wkU&d!Th95FMPkt)X_4d2Jc+rIYHT$KpxfDN$fho|cj1G?^a% znqjqZKkm3A(CMRm3?7$i4N{}=_R&Y@gL(jhRssiUr;pxLz9ZBrhOX0X_*xptPNl%l z-bTgg%@I&?kJ|4FkLLejV>HK?Mtu4oHug%tl#tLMzBQ<5O)^}g6ju^Ps^W+vknH{a z6$PpNkj>{{_-0yC1qlRvBQQ-+Xuh%pk@r;Ub1-S@1~SeXU2oHdEe( z<6`Z{l0A5}#m%*n0AA$=MdMJOTf9Ebvu_i2pb%nW=}+K=7~ z39^@^LUMxVJ**m{;A^L}6&jI5Qn|235q;#T)}lU?uf5i2X;lFP3Q#O2n8r#oczJX% zbk3F$O_WGyy%`J7L33V-F9{M#F0Q)A(g}!yYWVayu>u@;YRPGgz-7UV9nh235Z%|i zdr#m?YV-wnq=DQ{c`k2qGSMgS#?vK4xiiH^sYz?%80DXf<5+v zK>>@PrIV^R>zWH&k*;0V=I=k-qPC_m9EQ1r@apv~u0kA!GB+q}6cgGl=*IYna1(C8 zTNZm2h4M13A$V`gRm1Q>L#!@hgO%^%+_;i_GgQWg(zd45w+twySb-aBuP3x}L9JR* ztCv(0dOs?L5(@?hf-{iOA`3g}oexUEesZ&vE9~T^sh0QC zQ%OhsZTei+%9=_znpxB5cI^x}mobVTXj1(X@-V9ht;M=b;ldP(HW2u}80QN8-H@&p zvGuFny!g-+T?CQl#5DhI#Qrx4OUTEFy-U=Le9T~CK57@RpUb3-RM7%{#-~JW*ai@+ zO{HU~?QCIdYM1}qof2v)WK007+TtgS*N~DtBOjrb#i6KRz#*mN&e@fb94^ViN)HhO zm-TlzDYrwg%y=0Mt+>W4yj%klBmFoa9f@b`H~?uhGC`1mY@n7}b4R5-hkNbA-Y}l- zz*vv7-&6l?C)8*)*NQdyuRj}82%BJ4xj`;<6EqL=D(44h-yEN-DZ=qPyb!1}UqH={ zr}sD0rr8*LTd|KiAY548MmuIBQ@JE9Bj1M;g8j!~vd>b{4U>I%A-YkxZ}ubgXUOJ{ zYr$Y^%ybD+HQCh{zk~U13vk0xE*qvyNdFf$4)j@QInE6scZI`e-)eQ{BUmRUbovUX z{rr{96)<1;D8qRB)4ubEPr0NG(wSz!}sz-qcl@0@K+!AbN6H4O9&Lc^# zC}(g&>4fWW5|b;n!%5~iH4+}6a|o0L5Jgmvl6#HU6syKoY>90+B$<)Kgg;SXbaoPX zPV>fAGK>ip#K`(;Wru8@axx={pjQONinpzb3xLWb35n5PH1ee%I^YXh)R{U)ufIAu zK7adiaCm$&I_{&+OB#|y5ZL?KSZZYpd@ybEA{!?}1{#Zw3+$`2(;r61XMNORlZhs& z^BK{`Z}4z65d_AQQ>gb&o&d-)km8USuV*uuww8{Z@~r2p(mcjsFq&jB3>g?qtnSi9 zM1~dv5M)fF8kqGKf2_GgK$5G+N=SqyWmTpBg)W??BpDo`fl(LHtHOR`z!$-9Cdevx zp%X2XRth1`ol&etiVCIEm~3!j(KuvDLPCkQP6tPa+rA3I4IC|_sJ9|ysoGIHdKkMYXA>HeE~MG%z`m|y*j{t$OpDd!NfM=uCK6_a z;Y`lnhB%JLIK0$@dx#Sh6EzSJFk|r;ax$UsEoN*EY*7D-s7PbHD1vW|E9o#-{OjRl zXk;Slgkral3_|a@#>#8eLd&-E@PQKzTWfWy?S7r3F-N*2u>Qp~gHZ z@S)LpP_?LVDYeB3H~?v9pK56v0n%Qfhj%Es`q>;{3EN2z&&q|%$6%i0UOsr}ZuxPFVr1k#du8e>UB z@8tCScofL@@($Zrk^k}8-m@2#{BKWpo;-cX|8^hGhYvn@qyC!54cpiy2z2Y@5e*&G zIWaK{9dv!|8SPZ7OnGeH6~#Iz&PhX1%EWVhZDWE873b(=q<26!Fb@u<4PWkiA3h*U zqh`wrY_7Nt3efd+pc*_Qpz{VNx!Pww7)(mp;8Z8Pb7oy_bbkN?@I;<5A-iDs082iJ z*}L32)Au}tb_1ldNTA{A(c6=QSI7ICTS^KFWsH=lq~r|b`-KkLh9dG~)ZzNWezg#~ zzV0BOp9=U`4GhSVOak?YR3!fP);77IuSHDUanl1(=)n&=-p zJ3DJ3=6PoXM`+GCL3qqEspr-}R8v=ka;xKWA3D5mdS9k7qaUtCWep7#j{CZ)DxsA!$y|5PM+obC z{uKFsL_!vk?f!3rk436-Wf@I1vXNfN30t2n0{LG|ez z6DNgHXD~!2AzXmIse~st6hh-g-z!bhRk$`^!fCp{a&$cJgh2vKEZx);gCUyZ1(NuZ zAdEtmDQQz@70qPs(Vi=G!A+RJzpUcx4~AbpFao>q)>>0*P5s?4g3q_c%LH&&>)i7W zVgM^iyy)f*GnpV-AQ_vCe5@^) zM*VD~t%OO`T&83_+E#GY8t$VJO+sRgQpP*MO-BRPB@k_3@qqHWT0ApBiTgV0%~~V0 zo>y9)p!JzEPLr(H?fY*nF8}GCs{Z$OM&gw4x7twjR{I}(qCU7n|9k%8Nj3lXi>FVY zJm`P-@ofCHH>OEX%sipwHi96*Pe5cD@ZgvK^Pp0No4h*z_Y?ou4p;w z`#|(Le0z9$^7Y`Gw?~7s{f?`Wl}mQKSBLwZUM4u8HCKWPO?31u^3AD?A5o4rKa_x8 zcQl)b14xP!=j@eEY7NJ`SSLO9MNCNQ!`~=oEL9xp9j4OB0b5B@V}%*7 z40mfAeefQQ4!=ECYT~Z<=-~YP_|@=yw7=s$dO3JCIN#s<2ih>vU{7`smTFB(;XN|* z0;Wpi$Ni3|UFosZkvvi#M~c9EbZ~fhJR0q9ZiQGPbL!T!+xE8iXmosdc6{FO-R`y9 zy1oBYbZ|Z+c64m^Y0a43yaAE{R)P13gfoUZ<}eXX>dL}aA8qRXE7?V#?jD~U4NnIr z=Y8{gczSl;@gBj%zIt_Vaq4p?$Q2e*PzlnD?ldtIaL)KILfBzCizpcDKDpy6Zo6zSgV4 zPF=q!_*2Jw^oULr{JgF|m1q;DUNt0VB=H_SdISq@*L(D6LcK?ifd0@P+CaNXqGCyu z+ja#S6Zwvi#37Y(@7(T1EFn25Z6Hq6pBLl;VF7mNE8;!kL}oleJDy$_is-dR*Rl2) z+}bqh+`SD1sjw9(7H*ElwXloEi{hwOGY}=QDaLUDQrLx8gRPgxSFaDhQ`EWZJvw}K zw7Bee!Qqeln|t1);p?++j`ug8c#pn6J{t{APX;I7 z>~B8x9-V&mKgWmXFHaA@gE!AS?~!%UECv$7!`1x!%^;%+X|W6do683{qDh)TQZ+Rf zLNy9Xo5q3xt7WUALhZ&~Frr6^^k#@l}bVe|} zZA^@t45qOn&PRGW`5gHi`Tm6QkW}Z@!fL0|M~cN4Xnj>d2Stnsa4dzf>mqSU(^Mf2 z^9|Ulr8S{2_9ktpL&bCgnOjRxbYxx4QPYXy->NxfS{YXX(aF9cIKM;z_TX_$LabB_ zDh)v4LNXp=Um4G2bA-1IbNkmdCJ;#AugL#5+AO#3upLb%<M=~eQq z`(Qg{S|LVZW3(a!=bt(oc+1RI2h^dFf@ReS#QD}r9mm!Qse*Xp+?X=<%x?)vl$vg% zhfyX{qLWkKq;;XIwUUYYkD14oX>?l460_XZWSV(AkeU_3(Ph_VHzt*|!>sg*ws^w_ zl7s{{0V1tGFiYGB1KWLlESr~^)TkAF95(e<1+3f1R|!iNbCzj#WWLvi1NPN(zR0CQ zSI7fLXoY7*6_By8_6Q|$i*QEf1Z-HMB(XamTnW7_Mx#w#%-TR~BQ|OS%(7@xXX-)y zeQnceVDq|d9U|QTq$E6i_<&>@BRFHpVQc$!U`G05?seZuSVB7JBl&tN%ZF@#J|;|9}2){(CP^P5=Mrg9YI8SpX0! zOaKTKHURWblp6v5*=PoU1j=@PR@ng%T5bqH|3s@T0qCEm(f`zq-pm|;&|TRB0FTdS z5&-ay-VDEU%^7|*+6Fv?A_i_!`7~bCtpgVTzzoK63xO%Q+Df2($h4urRGLuphcy`d zb4`Xe`UD}jAn5(1W|eWGWcjO5rxgygO|tp z*Pf?6n+p*|U&Gj-hZd{KiikG&a1$ImwrG;Cbo`f01X%WsD7YGb` z5RYx{Qh;oyIFy8oz%x+`rMD%Y>^^$j?R5Xu{j&R^d+llQMGG$99sl@Ni!SP~^H;0}=-bQ{x z(B3-DQ-Nr5g<~3-rsu1>)rjNh`@@67L&f9PoYtz=krPR?;!!9MWg>6a8!W)bn+CVX zHfMRhCX5tpM?&WnE*OLVZicHEn^mlajsR&@)V)z{URzbZjW8xSL0MW8reNP*i`aj^YM;$qx6ZMH zEnC+F#Z~C4fi6%OZ+rZZGe-9e;>%T|XUC)B!-hWAwO*y|8q%z5l&_seKC3S2*^H~!@W8meAHeZ|G)KTb z&j0-DKI)(j`Wcm(6Ci&OMWs_x<6LLF4xNE3?K3v5r|GOo?`ebwNYMhD4csYQHzYJC z1)XFuaj6q4TpjazJED@`&POCnCiB( zA2?o+Wu^DFdiWC9zp<|TXM9@qf5=Ds*6Mek^ZbAB#m;W+{Qv3hgZ_UX&x8K|pcy}C z#t)kDXV8p!me>^HTbuu_)Z()&v5C%$6!~6J&a4qV!JWT7Z*#Gb4QIxb$xVThe$xKUTZS6X0RFwi&cx-nX?y>^ta(Y2KiU{{0oE7k4Y z#UIfxj3%h_Q>Xh=@>2(@o7z8XcHmUXudhJY*LfRf=4DeWMTHgZRF5cg2*uTz_WNf3 zN==8I(;HTSi7mg~wL_0k-nT_V?ck@aCYHimotP{vH-rdwOZ&2~7Xb3r-8F;3gZ!d>8X~1*}Fdx=|`3gKZfGbRNhSNMj8J?5V zE5bRA2>OU5&yo;5e*%Bf`6!!A=zG-hJNZ_mR+z6dqV>M;jF}G?;jvj9FVL?Ujv-|` z!f6Va2i^}vLx=KGwV`?;@4#B@%jy>*fbv^CcG=S?PC@P124 zxE*+d2{M^oH4t+HiO|DlLVaW@Z9It7fV{!BWoU~GYsK(7LaF_nkEm}q%nyEhp;g1K ztAo_+!h`T9#jMw!U$-`$6yu^Hl~dsQIZp=MOW#%_+<>xvm2#TM3F`cZ@c%<}DsVL( zYeP4bSpL;Yqt4{3C1vvvV1caHK)$kchP_rIfHLmXR6FI)gZ|qHV(25{B#m)MQ0G58 zsPndSi#2zqwKKR2Ax$|;IfXTqQrik7@iI+U$pfH?h!oTQ&F^9wk78U%y)2ExxW7J zLHj|hz4}wY9v!jpl5jMb<0(OBWJ-nP3wu=^xQ+@@-7Zed+c4EOoy+P>;XX{J>reWAu7mxXmYh0)U=f{@E)wK=`Ql4uXCa&`SBxFn0uLqtVq z`}^)yDUJ2i_DZNjqt(77+*Cm7H zo^sVq-)zCwZ^dlBAnX$k*Cm_Fj^PfP^2M}U+KEv6>TY*ECTE1dqdJ%Elq7^>Nd&@b zgNoQ(!)}#Or$oXme9hTh4_BuUF*nVD)Rr|d?mkDsOE`K_GMW;l3n_1tjemi{F=Llm ziaJW9?pT=4RVVQ0He5PV7K#BvNuZ6$d;K<0E9oN|KYtpLaG8LwI(-nQGklWGHU90g zub!0Zh;YUvIHxW#^jfzb)F7|t-##MAMv|+kE92WPvp3DgRzyRII{El@ny!!OXqkJd zP~Fip*Fk$bsPi3JbWq3Qs`*DF75hs@$zIdFWR$FLQ`<=8-+#BG^|Ulv7T*;kw(R_; zdj6*`2`(FK7kK_jXMwByKc3h8KVCd}@sR)XULLbb*1Al{*-gtu^bOOfqlrgT<0Va^ zzPaPNbeoV@*n;ex)L`@2^XzSg{rq;~)%P_aeLiCLN}Q&Rl}Z(mK3HiiXpU3zlIHBL zU%M#F7MKxEC7xDFjEqa@^|dEb61o@Hjz~=;Zq zn;+*F0-L@y3@KVZp5}6@KI-V}sVX9ry)eD+A=g!fB$CQf2EWR>Dc!Peb#KW^_pT!! z1Umz(jfsE8*oGSa2T$NRPCuFJ7tbpH|0hqX{QueB?u!The;<#_jIVYr*9IbZh0{ML zOST=N36&Jb^xve9KKeDmZcE$eH-mG7QScQO1Pm3O_IuJg+bBREQKIyPM53n}D;z}- zl=sOE*@PVJ&DfN%pV&~5`MtTR4>!wbiqHlc8qDemO+8dkX$mQcZr_cL;g1^`L zvLq)@p&%C7VQdFS-yiDUsZT}lAbf315_6}0%%Ao z-F@TG{t4~XBGa1M`>pxvALVJ-|CPw*+wllKxXA&(4r|Pq+{gR-Il>w}w~_V=P2XBhKHJ57gFyQ0s9!3et|GjPvu#TJ%>-6{Qx=m?%_qrz*U6 z10sBVl3Uz3Xy5AVcE(VCw56o>8lfbc zkClD^;-kYK8^*!4M6ZYK$r`vhjjo4yeQMhNG`=jFS)!jaQaGVG-v1%o|WpB0;Ceap|r*g3l9)scbcD+Z-X{ubZVKP$p z0IU$!4D%}-YOMUTOe-x)HynqVaoSpIpd6aqYAczTGImfvTr}^Np=!%iM6QzbC^4TB zS%cJYeAgtkE$4xDxeSJ)yx<1Inl7l#l zs@nR5?2Ium`Kj%FvwZQg`n2u5&3%NotCD8J!fgp7bZmJ?d5J&gp{A>an-MIcOPHJqd|4YBA$LSb=V9!IvmX~;5BbAI zHZP$QnwK_pEOcc64)CDrR`^*>jQ28(Yv`KZJf4- z9+WO*(%a!d7%JHzFt-ak=((S3CqR|jNomk)Et`ZTggcAc4XtzXZj?wEV${l02Co86 zQYNTme1Wd7`?b#!PfI?O2GTH#;|9Zpu9M~;%Q#pcjFL^?M;((2wo`rYhotr{&#f9k zoTyI{$rs>>8Hkz545|}-qKf!;eU1E4TPz#$eH=xc2!Z8fmW^;!jsY;LmFo08jic^sQeVfM*c zU9*{}SeC0HI|lw6w9sgXQV&V4n!BSD{+^wlp1*Z&L9ox24b-Wh;^xWf&&Z_yb%_+~ zW>*NBPJWS&!wQEGq z;6}^1Kygkar(wS5zha5nc}?Kwa-@f6r>~CBzde3EdVBEt{M)zZKMvb4*Whl0AEQxN zm#>=885|v-oDa@_e0w@PJ{cU@F@1gZvKc97Z9yY?9AESJhRwVj9G{%O9UL|F!rf(b zPfXb8Ap}~C3dfTrr3O(cV7b(dPh0@&;nuzomV;f3_JL zITwBW;byHB`CHChGyl8g>>UhVy*)X2)xu}$2w*yI8jN+C8J-<~J@|h&Xh^$G-K?q6 z;py;rv|b~S;H4%atzv?&ULBvDugd}FkpJaIEu0-64bF}a&)>d28?4t1ClTc&l&?9x zSyM-Y(eUNLk2fHIh>A4EizX6SQ}C8y6xfKx6=Q#Vet48$wa`ANI;nNH)7D1KJ**uu zy}%AhyUgieW?0|h@mUKw)O56-YUHhMf1EWyEZAJ7Qc0^ zE{-a8#8S1YHPTHORq8>lvD&z_SglJ)f!1@FTLl}3h5U-Pyu4K_+Sb@$N3NOvswWexR!&|(YQxc?64=T@b}lTII9~~J zE+=C;cdpS`8tbzLt%5t)5miL925GLgFRU;Ly7`&P?`pkoX`lhKrN-bjT3p){v&sxv zS|PQAu4dz7jYlmpIj(cu`QWzy$9t;&Uw0YzX`fa8|2r?9)$adz^6bI?>pq?eccAM8 zey+&v`(a6lr?^RMC%s`%XH$Og|3lH7^s|I<(tC;Dq_+>;TwZmV%No5wsAjF~A1p?b zJ_Khz1ZU=N9)dF;9{p71zq`%+sGn8&AD=#dQoH~2#ghm5?>?RncbWh3GQTm+%>mh- z{jo`?YP|#s*w>%Zb>GTFDT{uK?2xsDkVQtvHC%n#ina!i-8{{sPV`vDt};^gX-xiT z+rD86$o~_&UX}l+EQ+Y$8C+U1&Y~&#^gyr`{D0@gPCftcvxoSvdwJ^4_ec5kf2F72 zu`JutC2{^>I513F1m9wTI$C(JS0MF=r=oH{TH~ zhh7q=(=>8Tp*nXFjdO?0sJ{M%^nYRFyEFi0e7Ac4@3Wn~y@&OGAJ2!{RUg_@ zU*x|tLAY?p+~oAk&tf4R7KVgGB6yVL{`tr$IYZ}n~#`e{k(qq{c!?r3C zwx#|$$H;B~8z+jXNgEe*ntY9EoN;nD2kuUPZ|V_H>1L_=El=cg^8L&w|F)ga;sMY? zMs1!muDQ78;!+B6)T!XaPWL7U-XH|WiE6d8T8vV%aqmLy_Tyt*;GA-W}@CIC4eD+p+ zFte09#;EzI3qt>Aro$Ik;cqh~AC}(WS9G!MCO>~3-pqZ+ZK;08+tT4)`=Y<_FS#?YD*p?eYkAJ34JK>`TXpyjN2R zq*|_(-#+lBh<5Lyjvsc=&rUJSr@}3ROt@jMxM1U-==l5n&Hwsm3Fjq9puhbMsW)iz z`1^8W&8NmKnAQ<#09NhwiZEFlyis8|jyL)GvQQ;f^0Y1LqP~o^Pf(+``s!f(2H_Kx zL%@4PhB}J0SK{(*0%^5+_3L`FX%&htS1PdHriE^>aiP`(0lInhdLE+dYkfm*6`31G z1(bW=_t|)Iag9?OPi{lv zj(Ku{$OBJ);K{!=PcDdlb==l!PHgg+n-1_cVGOsW)8X?6Rv^z^Ks$^!`WwI z$7M=rV#+IUxns^;#^-@QKk(^=qgQOS`1X(D|c)}L=nY3}D8?JJE^z9EV>L4Or8x8GRWBz}WX=V4EI*i(L6nZHi^ zH)7VmabQ8s|Mx1q)7byNtP%h9;`#Gx{Qu7Lod^Hl`*=RAd;iN?>7%#Y$ez|5GPMg` za(CciQ@)x%XVBNuWIi{(J+Q6vI-&SD42cl0SVZ!0u$D|fMalABRWM02IKO7ZiHsML zaXf8LFeK=|N&ObRmZ34gAk4p1c#HgsI(}zmCF6(XzB0EcbiArO(om?a4`sAEO{oXk z@({Ri^qy8wQt`XJ?NXge%d2*pD*tz{3b`vDvx@&e*{Rx9O|uL zQd6KE%!f77qB@t$?1{jqtWsC>w)>>o57Jc5#Ml@ zrNtfTuQDOevgAOh-B@3b?J1pSj^9^IbLC}V0NI(F(`4P^T(t&rLn9Iyjg~^ntAo-; zUeY9c@7%Cf1t_vKjmexO632joC`v(zgJj|5QCvE@Qari$xW@oJYJTR_E~$BwM$=JF~P>>S3Kkc1D0o$XqQ(05qL7J(KvFs6(KI)v~$%KXt$E~)0W69Ne@A3hx z;9V^gJD*2jH9Z3%#87|B*GBZ0gZl8{(+~$+{uampOIsccZKQGeEud^eVmqA`FqVwE zlbdYWZH2WoWTms!q8MkAg)Hu)^TVN6I)>a@K0XeeZPkh-=A#>RZQnIwWj~^FXiVuS zTw*>Ya?M*8msx141V0#x@>&@TYnfv=De9t4nl`0xuE8;f2CBIE-ERFZXFyt$$1mmF zzx5{i2Yy=QKWt)Z??en-mH%yTua^IF@5RIU@4Y6f@^pN?5A$jY4mNOVyYNLN@PJ zxrqUEOZBnpDcOvqsv=TsRl59VS&)x^5OfYMTaCu4C4HrT?wGsOL}YjQ0SO>KW& zo`PoWTr+Br2yeZgs=@oUsJ=+EJd`#`vgS?e)x@^^}%WR?=3oA4&L?n>*UR zS!Zq6Yp+Tp(*j6@9H-=*&I!w$@h!bx2cZ@?x5SDQU{IRcMAad6y=7B@QLLQjtI>14 zOxC=CeM~SX{G45qWK>xOYv&5(Y)<5iWQDsgEC;E8HesA|_=arkYGve(ZGMdv>y4oS znHFa0WXo7P;cvwgJKo(3voO=y3qAjUrWeX+tg=Lvbzbi5JTh7=gZ+Q=b z&JwKdUmo~#Tc&FEABiQIWU;t|dq3>6-2Suo^!d|j{Li!J5BGoG&(jwF6Hy^K9cPk6 zCIAR+ri{ghEK5o^da9QKa)nDCAIyj6sJPM_Ze=Z1HK^d7DGn&e6=q)n-c3CFZl8 z2#bG9@zRYgXwwPXX{q3pun4*FENxg-LU8~!2du9?nR3DYAJ9ozT3r(UB!{-B!w#ys;Uan*j>G!h*nd-6@4rcD5m$ zOU&@zv*#k4H@2X?vDa@vm!IQwWfQ9t#I)U7(>@<7FR7_D>t0h+ZJtvGe(&WQy!DP% z`BVvpZK&CBhht-_JWC{p>$b*b^0YE_p&E#C?;t&4RSn9iF9W1VJ(XUAU;{@)E68geqB?{C)B=ebF*b$IX zZ>mF$w;tSWM(SE)>m;PEAqBEnasOrGu#jKTmRzLdbb^9y)De)atJ5?!aKS6gUZYjG zomqZZd3*Mf4lTdJ`=+;*-^4U}`|H$8D1Po+%s=Pt(C&^<6e5 z<^VT%g@0ijb#^-|3(^D%{-d+Kw09|s*>o{VIl+;W8_Ml#OOadme7)PzwN_HOA#05r zhS%1>*3+z37(;Gw<#9^`ZKq62>>{PbQ9CFWW)Mmpp<$Y9fmC<-FOO~ulRF8mB-3Dq9s1NsMqlZxQ!C>3T|4JCn z{{j^JbS)V@&Da>w)c?#>t3D>G{jO8 zo(Lov(jFOi_x%OFSha@HWu-j0z;O6wU{bn2|U})0mC5a}!ObUBpR@ zCA}gLn&Q02N#t#ygiL`Apsf_F0VL8Q++Vi?behBq#1g2fP(mr;D5ePsyx?f`b|e`m z-Ud2k^Epe<_lF}CQ7*h-N@WlJtI_v@@xOTw{%c>%rako^`%_#cy#mk}hnHE3CNw6( z`yvqUQtyjkj4!<}0y$5;FaFotK;L6dStiin=va7x$$IDoG$OdC%W?LLw}DQ7I5|EW z0W36O94Q%=CqxqA=}*7)d{-a6{?CpNj$R!H^XRj*vBLlV+4E;FD(ipu`HP4A@AvX- zpjR{*oWfejK=b^T#B&5bHJ%4ljS+0{8fSuP4;cU`~^OGX3Mf6;J@RTjeBz}B;mc6gTv#K(ebwD>5fr>F#48GXG%<(Fh0jgNYLq6Enqa#o3eFW zj8K+DgrjdxUZaD_gm8wwAqn9)Mniqx^HO7ouAT%t0UAgJ{$MyjA)BXI(s4{QJ3E-; zf3pOQo}e&hS!8#A>lhWF*MgXlmrS!-G*d{X4w5vPa4aOxLYZ;RPv%&0Q-WfGd1BZq zju(=K0`za3g6a(%R*8M+9pjfV!;uI)?;{$#8lIk=ADo<{kKRY*w?6P0cs)=9I5VrR zhB=ielw}vqmF|pbLLy-Bc55I}V0srZBEZ*jnqiI;Nr){2{lUosP3aYEH`6Yf5DZ;4 zB2*VKZd`y7ClkU+5~>|ZD$D?>0R3ysdtbtTOpC_7o~U^jB*k3Sextt?>=>PlVHhShnb45pI9@md)I2^ya+XZv1>!_omm`5P zp*v|QqzP*^cqwO57V5bsY0MULl1LGt5h3W!5xglX{GiBEb+G7~S;Y|xh3VU6-cm11 zh2#X!O@Ec--lK_-IF5bYnm-43>Yn*!$HiA;5zOQ~{x41@`+EGg^=#*U;3#5Y204n= z?*M)Dyp0VsNMzn6&pXd&8I2i}LUNo6%dSk+Cri+qVt91d`aP!~z<`PYeN!F*Kvm4P zt&D?omv{i^3^{?s(}Jq~+w;w0h^b!V&a{|_4P>uEBT?Y_X!yOFqARMDHo|kdrwO0} ztR`M4%*qQrKwCeMf*uU^|7s;jeOTa!f_}N}`M_Bm)ULGBh^}^n-G2ZL##o`M=3`8R zRGJ{+6tpzx^`Y&98EWV>Cn@v1i;Igf7Bg>VUx9z1_CmDi!GsCBL#QeWs+wD%9Xko9?o7C0>9O#5bjPKW}Z6es3c|^h%DYkOF`y)-@-R zaG@DXh!Zp>4vnEGQoTFUIgXKJ3k2_gA|!!>PLyUmWkPjO zH>$^hM5|^8=E5q)fz^bAIhixQ*nhUW_loAFw2^p!*Su&jxa~t?c=LVEBC=mxOZFKi zUJcyqbjop5q0%2&1_O}^qL+hYc3aYfVHX)q5Js_5evCvBpaUVYxq`P~8Mm+1CZTYM z5EkfSzVOZai!PcH2~ERUn7bEPXX47(tMaC70SA4FSRB38?;$cEC+$Qnvt&vD=0pi# z=puJ~zEC~5s8qes>J0EaBU7pJNMh&|dZ)HdH6p6JC+wXa8bG>O(iOZj7-)k0NflMM zAGJ9;GAqnh7dpm=s_mW=Fd5MaC6Qf`7qyNA=yi^tFhd{^ov6M%j!;Z5iRlf(D54V( zJEU!BVHVh7>C#K@Oi3qthtbwAXzJ&!py#x2HbG!_1f@&}5E%7>Hi!fTwduYr5W(TB zUcGv~b`&xiQmN+5^u!h#^c@l6cVtl2gM2TWh2y>Boat zFExz_7d>s}y$H~cEPEWsC?O<5>1-irh~r!3io4r+t^CHkUskmT1@*b$*> z5pp4sj!ucRSqq~fi$E(Bf=-oOE*Zk;ghfQFFyQQ?KBJf=Q}r)Um8r$EMCn~x6u=Tr zj|22W2{I>hc10pI;cSjD6v>qxPOxA}S4#^@K{F$sBTog2NK6#I6UNCE;X&sMO-RSa z4XMT8?+qp;LPGi@GNcr9f}@4$UN`41RJMo_y8$}XVLb}JYLnjH($5;BCjlx1JhRZ& zpLF-i(EZ`}hv3%Iyu{2!H#!E#^UfL4B!d$D0i`-RN6i8-psr^deuHfxSXXelj#1?1 z<{lMMSrcBVIT*=8r6{Q$TDOu|T#6o!6w+!f*>qREh=eib#5V}|8q19_Q8Vu^Smr|j z%y!oU-H}Lik+@CUg>eBqUh<4w1fKVG$?m8G|7YlL>YwMDdCoH-5sn2zGUJJ&fiG%VWmxpiv!%rQWOgRzar%qq}5KI&GPo4fx9j7}#b*`^F znuuTl>z(!Dkj6BdU#OLj(c#HJVGP2XnYJ!UHS;GC)w0^fB*s^aUl@5xO-87J1fBSd?Ch9noik2Q%1KCt9o}veUBCrQ$0kYp zz9tN9&rvOTEQuEg%IGP9ZCG{03dj-Cu8BGrSfLZLBq1RP6R>~+y_4zh7JcJQR!Cng zlW8UqQ;bPua9TIXV!P;r3R^So2%r=a9I0wEd{s917-kO8b$Ot#1P%kh*X+F`(bFoE&DpyiJS?k%da3iZE;VrG@};2r)owKkfD@)j zOtoNyY$c(S_bFT$Wl1D&{38m~h8XG{=}Yz9xR-oHhb7_X3UdnF{UbUeBIGm$ zX$K+n5uKTv!q7+WW53P3+4`mS!Fln~`-m>=d|jZ@)B5Ejg7`kAmf(Y}?0<_b6 zQ3F{2VgTA3LW43u?;wsVlA;|fk*`vH3I-E!Rp=@ey@sIkmm_y4J%2eWwofM}w~KHH zLk=ZE!X=&15UZWX$Ulb%i1A{1#1r2LUT$F}Ln+xDiYdH%2Cn+M1eGL0p{G@1x2F-C zW18rFLo0(sDkh#9%}m=4c!b^@os3j50L_vsl7M-0=^h@kBqXU6z1*O#UP;d4nDA2C ztlmb-BA-SIs$6Vqn}D+)JBdor7Knw&Nw$>hM>0#d!E%(?p~IH9RMhF^3`oYp7b5np zwG5bxn(+M;%UMsdUdrhemL#|&i{|fe^bv$yej3YBMHP*#!)}};O|X4+%jq2V%e`up z2^|wyohs#w@<{22a)AyHggq=$yN9#WG0#ZkY7Qqbt>)ZO5YHv{XZVxF^T0EG}D-|huo0H9H36GepbL^DnPj|-diC>(S+_a z>^1qAF9GOGObK`qH3i!qc$g4jC2C!L8CW~`C7>3$Dfom$C8}1+(#WU-(B)y+TVVW|80U&Tk4t?8G$jo|i*uNul3ne3O9>}m;B-|BtEH>bfnre@uQ zgT0!-{D*=E;Ve$c98Xm;|6xn!{dB98yIj=M3rC-OYh6<~=7N^?%fJjCU}aZ=A5AJ& zjC`Bd4OmLbn{YuF{JnWa>(d0I>hKah8=o&^?$oqkK$V!)w=~+3BO*bMEmaN3Icm~yaw{7mMw$I{8Z|-FA7`8T^CNpPg)ww zarz7k#etrI8LYBWV2U(vFD;iUqTa>^dY#ZlZ=sv|Qs{#;rQoe}qcBB_>Y8|zAYOJ` zu&C9Fx^6@I1W@E>{qA`xo2M*+Qza|}3#mSuv=(@6 Date: Fri, 20 Feb 2026 19:02:07 +0900 Subject: [PATCH 06/23] MAF-19265: refactor(deploy): update service names for Loki and MinIO in Helm chart - Removed fullnameOverride for MinIO and Loki to allow dynamic naming based on release name. - Updated Loki endpoint in Vector configuration to use release-prefixed service name. - Adjusted BUCKET_HOST in Loki credentials to reflect the new naming convention. --- .../templates/grafana/datasource-loki.yaml | 2 +- .../templates/loki/credentials.yaml | 3 +-- deploy/helm/moai-inference-framework/values.yaml | 14 +++----------- 3 files changed, 5 insertions(+), 14 deletions(-) diff --git a/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml b/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml index ba692eb..87852f5 100644 --- a/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml +++ b/deploy/helm/moai-inference-framework/templates/grafana/datasource-loki.yaml @@ -19,7 +19,7 @@ data: - name: Loki type: loki access: proxy - url: http://loki-gateway.{{ include "common.names.namespace" . }}.svc.cluster.local + url: http://{{ .Release.Name }}-loki-gateway.{{ include "common.names.namespace" . }}.svc.cluster.local isDefault: false jsonData: maxLines: 5000 diff --git a/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml b/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml index c0db2ca..a026a04 100644 --- a/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml +++ b/deploy/helm/moai-inference-framework/templates/loki/credentials.yaml @@ -1,5 +1,4 @@ {{- if .Values.loki.enabled }} -{{- $minioHost := .Values.minio.fullnameOverride | default "minio" }} --- # ConfigMap consumed by Loki components via extraEnvFrom. # The values are referenced in loki.storage.s3 as ${BUCKET_HOST} etc., @@ -12,7 +11,7 @@ metadata: labels: {{- include "mif.labels" . | nindent 4 }} data: - BUCKET_HOST: {{ $minioHost | quote }} + BUCKET_HOST: {{ printf "%s-minio" .Release.Name | quote }} BUCKET_PORT: "9000" BUCKET_REGION: "" BUCKET_NAME: "loki" diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index a246b76..a8a7c7e 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -110,10 +110,6 @@ minio: # to point to the existing MinIO service. enabled: true - # fullnameOverride fixes the service name to "minio" regardless of the Helm release - # name. The credentials template uses this value as BUCKET_HOST. - fullnameOverride: minio - mode: standalone # -- MinIO root user. @@ -160,10 +156,6 @@ loki: # -- Enable grafana/loki. enabled: true - # fullnameOverride makes all Loki service names predictable regardless of the - # Helm release name (e.g. loki-gateway instead of -loki-gateway). - fullnameOverride: loki - global: dnsService: coredns @@ -374,9 +366,9 @@ vector: sinks: loki: type: loki - # Vector and Loki are co-located in the same namespace, so the short - # service name resolves correctly without a namespace suffix. - endpoint: "http://loki-gateway" + # {{ .Release.Name }} is evaluated by the vector chart's tpl rendering, + # producing the correct release-prefixed Loki gateway service name. + endpoint: "http://{{ .Release.Name }}-loki-gateway" inputs: - mif_log_transform encoding: From 24669acb6efe25867ff06ca585a449eeb48c71cd Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 19:06:39 +0900 Subject: [PATCH 07/23] MAF-19265: feat(deploy): Update MinIO configuration in values.yaml and prerequisites.mdx for clarity - Revised comments in values.yaml to emphasize the need for strong passwords in production. - Adjusted the example configuration in prerequisites.mdx to reflect the updated structure and optional password overrides for MinIO and Loki users. --- deploy/helm/moai-inference-framework/values.yaml | 4 ++-- website/docs/getting-started/prerequisites.mdx | 13 ++++++------- 2 files changed, 8 insertions(+), 9 deletions(-) diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index a8a7c7e..cdd4e22 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -114,7 +114,7 @@ minio: # -- MinIO root user. rootUser: minio - # -- MinIO root password (required; set a strong password). + # -- MinIO root password. Override with a strong password in production. rootPassword: "minio123!" persistence: @@ -137,7 +137,7 @@ minio: # set from this user's credentials. users: - accessKey: loki - # -- Password for the loki MinIO user (required; set a strong password). + # -- Password for the loki MinIO user. Override with a strong password in production. secretKey: "loki123!" policy: loki diff --git a/website/docs/getting-started/prerequisites.mdx b/website/docs/getting-started/prerequisites.mdx index a1ac6f5..d414b14 100644 --- a/website/docs/getting-started/prerequisites.mdx +++ b/website/docs/getting-started/prerequisites.mdx @@ -67,7 +67,7 @@ The container images for the MoAI Inference Framework are distributed through a Create a `moai-inference-framework-values.yaml` file as follows. Fill in all values marked as required. -```yaml title="moai-inference-framework-values.yaml" {4-5,10,12,16,22,25} +```yaml title="moai-inference-framework-values.yaml" {4-5,10,21,24} # ECR credentials — provided by Moreh at purchase or trial issuance. ecrTokenRefresher: aws: @@ -76,14 +76,13 @@ ecrTokenRefresher: # MinIO: object storage backend for Loki log data. minio: - auth: - rootPassword: # required; set a strong password (≥ 8 chars) persistence: storageClass: # required; e.g. ceph-block - provisioning: - users: - - username: loki - password: # required; set a strong password (≥ 8 chars) + rootPassword: "minio123!" # Optional: override the default passwords. + users: + - accessKey: loki + secretKey: "loki123!" # Optional: override the default passwords. + policy: loki # Loki: log aggregation system. Uses MinIO as its object storage backend. loki: From c310d61a72a6b62f470a714cc41bc2d161c50e89 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 19:13:34 +0900 Subject: [PATCH 08/23] MAF-19265: feat(docs): create AGENTS.md files for test and helm directories - Introduced `AGENTS.md` files in the `test/` and `deploy/helm/` directories to document agent rules and design principles specific to each domain. - Updated the root `AGENTS.md` to reference the new files and clarify where to record task-related insights. - Added guidelines for E2E testing practices and Helm chart development, emphasizing minimum necessary complexity and separation of concerns. --- AGENTS.md | 177 +++++------------------------------------- deploy/helm/AGENTS.md | 130 +++++++++++++++++++++++++++++++ deploy/helm/CLAUDE.md | 1 + test/AGENTS.md | 48 ++++++++++++ test/CLAUDE.md | 1 + website/AGENTS.md | 2 +- website/CLAUDE.md | 1 + 7 files changed, 203 insertions(+), 157 deletions(-) create mode 100644 deploy/helm/AGENTS.md create mode 120000 deploy/helm/CLAUDE.md create mode 100644 test/AGENTS.md create mode 120000 test/CLAUDE.md create mode 120000 website/CLAUDE.md diff --git a/AGENTS.md b/AGENTS.md index 9672d34..35cb411 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -57,48 +57,7 @@ The commit message should be structured as follows: ### E2E Test -- **Version scope**: - - E2E tests cover only `vX.Y.Z` (release) and `vX.Y.Z-rc.N` (release candidate) version formats. - - Other version formats (e.g. dev builds, custom tags) are out of scope and should not be tested in E2E. - -- **Do not test resource specifications**: - - Do not validate individual fields of the YAML file declaring the resource (resource spec). - - Instead, create the resource and verify that its status reaches the expected state. - -- **Assume fully controlled cluster**: - - Do not check if components are already installed. - - Assume the cluster is fully controlled by the test and installed components are safe to overwrite or delete. - -- **Test suite layout**: - - Split tests by purpose under `test/e2e`, for example `test/e2e/performance` and `test/e2e/quality`. - - In each directory, define shared Ginkgo configuration (labels, timeouts, common hooks) in `suite_test.go`, and keep scenarios in separate `*_test.go` files. - - Shared configuration values must come from the `test/utils/settings` package instead of hard-coded constants in test files. - -- **Environment variable management**: - - Manage all E2E environment variables centrally in `test/e2e/envs/env_vars.go`. - - When a new environment variable is required: - - Add it to the `envVars` slice with default value, description, category, and type. - - Expose it via public variables (for example `TestModel`, `HFToken`) and access it only through those variables. - - Do not call `os.Getenv` directly in test code. - - Keep the documentation consistent: changes must pass the `validateEnvVars()` check. - -- **Resource templates and settings**: - - Manage Kubernetes resource specifications for Gateway, InferenceService, Jobs, and similar resources as Go templates (`.yaml.tmpl`) under `test/config/**`. - - Tests must read template paths and default values from constants in `test/utils/settings/constants.go`. - - When adding a new benchmark or performance test Job: - - Add the template file under an appropriate `test/config/` subdirectory. - - Define the corresponding path and default parameters in the `settings` package. - -- **Utility reuse**: - - Implement all cluster manipulation logic (namespace creation, Gateway create/delete, Heimdall install/uninstall, InferenceService(Template) create/delete, etc.) in the `test/utils` package and call only those helpers from tests. - - Follow this pattern for scenario flow: - - `BeforeAll`: create namespace → install Gateway → install Heimdall → create InferenceServiceTemplates → create InferenceServices → wait until they are Ready. - - `AfterAll`: if `envs.SkipCleanup` is `false`, clean up the above resources in reverse order. - - `It(...)`: render the Job template → create the Job with `kubectl create -f -` → wait for completion with `kubectl wait` → collect logs and perform domain-specific assertions. - -- **Makefile and workflow integration**: - - Provide separate Make targets per test purpose (for example `e2e-performance`, `e2e-quality`) so that CI can run them independently. - - GitHub Actions and other workflows should invoke these targets directly, and new test categories should follow the same pattern when adding additional targets and workflows. +See [`test/AGENTS.md`](test/AGENTS.md). ## Agent Self-Improvement @@ -107,129 +66,35 @@ After completing any non-trivial task, evaluate whether the work involved: - A mistake that was corrected through user feedback, or - A design decision that required deliberate reasoning to reach the right answer. -If any of the above applies, **record it in this file** (`AGENTS.md`) before closing the task. Entries should be concise, actionable, and placed under the most relevant existing section. If no section fits, create one. +If any of the above applies, **record it in the most relevant `AGENTS.md`** before closing the task — this file for general patterns, [`test/AGENTS.md`](test/AGENTS.md) for test-specific patterns, [`deploy/helm/AGENTS.md`](deploy/helm/AGENTS.md) for Helm chart patterns, and [`website/AGENTS.md`](website/AGENTS.md) for documentation patterns. Entries should be concise, actionable, and placed under the most relevant existing section. If no section fits, create one. The goal is to make every repeated task faster and every repeated mistake impossible. -## Design Principles +### Creating Sub-directory AGENTS.md Files -### Minimum Necessary Complexity +When a directory accumulates enough domain-specific rules to warrant separation, create a dedicated `AGENTS.md` in that directory. Follow this checklist: -- **Do not add configuration options, fields, or abstractions for hypothetical future use cases.** Only add what the current task concretely requires. -- Before introducing a new value field, ask: "Is there a real, current use case that cannot be handled without it?" If the answer is no, omit the field and handle the edge case through documentation instead. -- Example: when considering whether to add a `minio.externalHost` field to support cross-namespace MinIO, the right answer was to document that users can set `minio.fullnameOverride` to a FQDN when `minio.enabled: false` — no new field needed. +1. **Create `AGENTS.md`** in the target directory with a header that links back to this root file: + ```markdown + # — Agent Rules -### Documentation over Code for Edge Cases + Rules specific to the `

/` directory. General contribution guidelines are in the root [`AGENTS.md`](/AGENTS.md). + ``` -- When a behavior difference only arises in a non-default, edge-case configuration, prefer documenting the workaround over adding a dedicated code path or configuration key. -- Reserve code changes for cases where the default path is broken or the workaround is genuinely error-prone. +2. **Create a `CLAUDE.md` symlink** pointing to `AGENTS.md` in the same directory. Cursor reads `CLAUDE.md` as context; the symlink ensures both tools see the same content: + ```shell + cd && ln -s AGENTS.md CLAUDE.md + ``` -### Reject Designs Before They Are Built +3. **Move the relevant sections** from the root `AGENTS.md` (or parent `AGENTS.md`) into the new file. Replace the moved content in the parent with a one-line reference: + ```markdown + ### E2E Test -- If an initial design is heading in the wrong direction (e.g., standalone prerequisites instead of sub-chart dependencies, `enabled: false` defaults, nested config instead of top-level sections), raise the issue and redesign before writing code. Retrofitting a wrong structure is always more costly. + See [`test/AGENTS.md`](test/AGENTS.md). + ``` -## Helm Chart Development +4. **Update the Agent Self-Improvement section** in the parent to mention the new file as a recording target. -### Sub-chart Integration +## Helm Charts -- **All infrastructure components belong as sub-chart dependencies** of `moai-inference-framework`. Do not design them as standalone prerequisites that users install separately. -- **Enablement convention**: Every sub-chart dependency must have both a `condition:` entry in `Chart.yaml` AND `enabled: true` in the default `values.yaml`. Setting `enabled: false` as the default breaks the "install everything in one chart" philosophy. Follow the same pattern as existing components (`keda`, `lws`, `odin`, etc.). - - ```yaml - # Chart.yaml — always add condition: - - name: vector - version: 0.39.0 - repository: https://moreh-dev.github.io/helm-charts - condition: vector.enabled - - # values.yaml — always default to true - vector: - enabled: true - ``` - -### Predictable Service Names - -- Set `fullnameOverride` on every sub-chart so that service names are deterministic regardless of the Helm release name. Without this, service names vary with the release name and break cross-component references. - - ```yaml - minio: - fullnameOverride: minio # service is always "minio" - loki: - fullnameOverride: loki # gateway is always "loki-gateway" - ``` - -### Separation of Concerns in values.yaml - -- **Large infrastructure components must be top-level sections**, not nested under their consumers. For example, MinIO configuration belongs at `minio:`, not at `loki.minio:`. This allows MinIO to be independently enabled/disabled and reused by other components in the future. - -### MinIO Provisioning Pattern - -- Use `provisioning` (not `defaultBuckets`) to create buckets, users, and policies. This allows fine-grained access control. -- Create a **dedicated user per consuming service** with a policy scoped to only its bucket — do not use root credentials for service-to-service access. - - ```yaml - minio: - provisioning: - enabled: true - policies: - - name: loki - statements: - - resources: ["arn:aws:s3:::loki/*"] - effect: Allow - actions: ["s3:*"] - users: - - username: loki - password: "" - policies: [loki] - setPolicies: true - buckets: - - name: loki - ``` - -- Templates that read MinIO credentials must reference the **provisioned user**, not root: - - ```yaml - # credentials.yaml - stringData: - AWS_ACCESS_KEY_ID: - { { (index .Values.minio.provisioning.users 0).username | quote } } - AWS_SECRET_ACCESS_KEY: - { { (index .Values.minio.provisioning.users 0).password | quote } } - ``` - -### Helm `tpl` Passthrough — Vector Label Syntax - -- The moreh/vector chart renders `customConfig` through Helm's `tpl` function (`{{ tpl (toYaml .Values.customConfig) . | indent 4 }}`). This means any `{{ }}` expression in `customConfig` is evaluated as a Go template at render time. -- To pass **Vector's own field-template syntax** (`{{ field }}`) through `tpl` without evaluation, use Go raw string literals: - - ```yaml - # values.yaml — correct - labels: - namespace: "{{`{{ namespace }}`}}" - - # values.yaml — WRONG: tpl evaluates {{ namespace }} as a Go template function - labels: - namespace: "{{ namespace }}" - ``` - -- **Before using `customConfig` with any sub-chart, always verify whether the chart applies `tpl` to it** by running `helm pull --version --untar` and inspecting the ConfigMap template. - -### YAML Anchors - -- **Do not use YAML anchors at the root level of `values.yaml`** (e.g., `_defaults: &defaults`). Helm treats unknown root-level keys as invalid and may emit warnings or errors. Instead, duplicate shared configuration explicitly for each component. - -### MIF Pod Label Keys - -When filtering or labeling logs, metrics, or other signals by MIF-specific pod attributes, use these label keys: - -| Concept | Label key | Example value | -| :---------------- | :--------------------------- | :------------------ | -| Pool | `mif.moreh.io/pool` | `heimdall` | -| Role | `mif.moreh.io/role` | `prefill`, `decode` | -| App name | `app.kubernetes.io/name` | `vllm` | -| Inference service | `app.kubernetes.io/instance` | `llama-3-2-1b` | - -### Avoiding Unnecessary Environment Variables - -- Prefer static values or short DNS names over dynamically-injected environment variables when components are co-located in the same namespace. -- For example, a Vector sink targeting a Loki gateway in the same namespace should use `http://loki-gateway` (short name), not `http://loki-gateway.${VECTOR_NAMESPACE}.svc.cluster.local` with an injected namespace variable. +See [`deploy/helm/AGENTS.md`](deploy/helm/AGENTS.md) for design principles and chart development rules. diff --git a/deploy/helm/AGENTS.md b/deploy/helm/AGENTS.md new file mode 100644 index 0000000..e0c386f --- /dev/null +++ b/deploy/helm/AGENTS.md @@ -0,0 +1,130 @@ +# Helm Charts — Agent Rules + +Rules specific to the `deploy/helm/` directory. General contribution guidelines are in the root [`AGENTS.md`](/AGENTS.md). + +## Design Principles + +### Minimum Necessary Complexity + +- **Do not add configuration options, fields, or abstractions for hypothetical future use cases.** Only add what the current task concretely requires. +- Before introducing a new value field, ask: "Is there a real, current use case that cannot be handled without it?" If the answer is no, omit the field and handle the edge case through documentation instead. +- Example: when considering whether to add a `minio.externalHost` field to support cross-namespace MinIO, the right answer was to document that users can point `loki.storage.s3.endpoint` to the external host directly — no new field needed. + +### Documentation over Code for Edge Cases + +- When a behavior difference only arises in a non-default, edge-case configuration, prefer documenting the workaround over adding a dedicated code path or configuration key. +- Reserve code changes for cases where the default path is broken or the workaround is genuinely error-prone. + +### Reject Designs Before They Are Built + +- If an initial design is heading in the wrong direction (e.g., standalone prerequisites instead of sub-chart dependencies, `enabled: false` defaults, nested config instead of top-level sections), raise the issue and redesign before writing code. Retrofitting a wrong structure is always more costly. + +## Helm Chart Development + +### Sub-chart Integration + +- **All infrastructure components belong as sub-chart dependencies** of `moai-inference-framework`. Do not design them as standalone prerequisites that users install separately. +- **Enablement convention**: Every sub-chart dependency must have both a `condition:` entry in `Chart.yaml` AND `enabled: true` in the default `values.yaml`. Setting `enabled: false` as the default breaks the "install everything in one chart" philosophy. Follow the same pattern as existing components (`keda`, `lws`, `odin`, etc.). + + ```yaml + # Chart.yaml — always add condition: and use the official repository + - name: vector + version: 0.39.0 + repository: https://helm.vector.dev + condition: vector.enabled + + # values.yaml — always default to true + vector: + enabled: true + ``` + +- **Official repositories**: Always use the chart's official upstream repository, not a mirror. + - loki: `https://grafana.github.io/helm-charts` + - vector: `https://helm.vector.dev` + - minio: `https://charts.min.io` + +### Dynamic Service Name References + +- **Do not use `fullnameOverride`** to fix service names. Instead, build references using `.Release.Name` so that names are always consistent with whatever release name the user chooses. + + ```yaml + # templates/grafana/datasource-loki.yaml + url: http://{{ .Release.Name }}-loki-gateway.{{ include "common.names.namespace" . }}.svc.cluster.local + + # templates/loki/credentials.yaml + BUCKET_HOST: {{ printf "%s-minio" .Release.Name | quote }} + ``` + +- In sub-chart `customConfig` values rendered through `tpl`, use `{{ .Release.Name }}` directly — it is evaluated by the sub-chart's `tpl` call and resolves to the parent release name. + + ```yaml + # values.yaml (vector customConfig) — .Release.Name evaluated by tpl + endpoint: "http://{{ .Release.Name }}-loki-gateway" + ``` + +### Separation of Concerns in values.yaml + +- **Large infrastructure components must be top-level sections**, not nested under their consumers. For example, MinIO configuration belongs at `minio:`, not at `loki.minio:`. This allows MinIO to be independently enabled/disabled and reused by other components in the future. + +### MinIO Provisioning Pattern + +- Use the `minio/minio` chart (`https://charts.min.io`), not the bitnami chart. +- Create buckets, users, and policies directly via the chart's top-level `buckets`, `users`, and `policies` fields (not under a `provisioning` key). +- Create a **dedicated user per consuming service** with a policy scoped to only its bucket — do not use root credentials for service-to-service access. + + ```yaml + minio: + policies: + - name: loki + statements: + - resources: ["arn:aws:s3:::loki/*"] + effect: Allow + actions: ["s3:*"] + users: + - accessKey: loki + secretKey: "loki123!" + policy: loki + buckets: + - name: loki + ``` + +- Templates that read MinIO credentials must reference the `users` array directly: + + ```yaml + # credentials.yaml + stringData: + AWS_ACCESS_KEY_ID: {{ (index .Values.minio.users 0).accessKey | quote }} + AWS_SECRET_ACCESS_KEY: {{ (index .Values.minio.users 0).secretKey | quote }} + ``` + +### Helm `tpl` Passthrough — Vector Label Syntax + +- The vector chart renders `customConfig` through Helm's `tpl` function (`{{ tpl (toYaml .Values.customConfig) . | indent 4 }}`). This means any `{{ }}` expression in `customConfig` is evaluated as a Go template at render time. +- To pass **Vector's own field-template syntax** (`{{ field }}`) through `tpl` without evaluation, use Go raw string literals: + + ```yaml + # values.yaml — correct + labels: + namespace: "{{`{{ namespace }}`}}" + + # values.yaml — WRONG: tpl evaluates {{ namespace }} as a Go template function + labels: + namespace: "{{ namespace }}" + ``` + +- **Before using `customConfig` with any sub-chart, always verify whether the chart applies `tpl` to it** by running `helm pull --version --untar` and inspecting the ConfigMap template. + +### YAML Anchors + +- **Do not use YAML anchors at the root level of `values.yaml`** (e.g., `_defaults: &defaults`). Helm treats unknown root-level keys as invalid and may emit warnings or errors. Instead, duplicate shared configuration explicitly for each component. + +### MIF Pod Label Keys + +When filtering or labeling logs, metrics, or other signals by MIF-specific pod attributes, use these label keys: + +| Concept | Label key | Example value | +| :---------------- | :--------------------------- | :------------------ | +| Pool | `mif.moreh.io/pool` | `heimdall` | +| Role | `mif.moreh.io/role` | `prefill`, `decode` | +| App name | `app.kubernetes.io/name` | `vllm` | +| Inference service | `app.kubernetes.io/instance` | `llama-3-2-1b` | diff --git a/deploy/helm/CLAUDE.md b/deploy/helm/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/deploy/helm/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/test/AGENTS.md b/test/AGENTS.md new file mode 100644 index 0000000..1bcb608 --- /dev/null +++ b/test/AGENTS.md @@ -0,0 +1,48 @@ +# Test — Agent Rules + +Rules specific to the `test/` directory. General contribution guidelines are in the root [`AGENTS.md`](/AGENTS.md). + +## E2E Test + +- **Version scope**: + - E2E tests cover only `vX.Y.Z` (release) and `vX.Y.Z-rc.N` (release candidate) version formats. + - Other version formats (e.g. dev builds, custom tags) are out of scope and should not be tested in E2E. + +- **Do not test resource specifications**: + - Do not validate individual fields of the YAML file declaring the resource (resource spec). + - Instead, create the resource and verify that its status reaches the expected state. + +- **Assume fully controlled cluster**: + - Do not check if components are already installed. + - Assume the cluster is fully controlled by the test and installed components are safe to overwrite or delete. + +- **Test suite layout**: + - Split tests by purpose under `test/e2e`, for example `test/e2e/performance` and `test/e2e/quality`. + - In each directory, define shared Ginkgo configuration (labels, timeouts, common hooks) in `suite_test.go`, and keep scenarios in separate `*_test.go` files. + - Shared configuration values must come from the `test/utils/settings` package instead of hard-coded constants in test files. + +- **Environment variable management**: + - Manage all E2E environment variables centrally in `test/e2e/envs/env_vars.go`. + - When a new environment variable is required: + - Add it to the `envVars` slice with default value, description, category, and type. + - Expose it via public variables (for example `TestModel`, `HFToken`) and access it only through those variables. + - Do not call `os.Getenv` directly in test code. + - Keep the documentation consistent: changes must pass the `validateEnvVars()` check. + +- **Resource templates and settings**: + - Manage Kubernetes resource specifications for Gateway, InferenceService, Jobs, and similar resources as Go templates (`.yaml.tmpl`) under `test/config/**`. + - Tests must read template paths and default values from constants in `test/utils/settings/constants.go`. + - When adding a new benchmark or performance test Job: + - Add the template file under an appropriate `test/config/` subdirectory. + - Define the corresponding path and default parameters in the `settings` package. + +- **Utility reuse**: + - Implement all cluster manipulation logic (namespace creation, Gateway create/delete, Heimdall install/uninstall, InferenceService(Template) create/delete, etc.) in the `test/utils` package and call only those helpers from tests. + - Follow this pattern for scenario flow: + - `BeforeAll`: create namespace → install Gateway → install Heimdall → create InferenceServiceTemplates → create InferenceServices → wait until they are Ready. + - `AfterAll`: if `envs.SkipCleanup` is `false`, clean up the above resources in reverse order. + - `It(...)`: render the Job template → create the Job with `kubectl create -f -` → wait for completion with `kubectl wait` → collect logs and perform domain-specific assertions. + +- **Makefile and workflow integration**: + - Provide separate Make targets per test purpose (for example `e2e-performance`, `e2e-quality`) so that CI can run them independently. + - GitHub Actions and other workflows should invoke these targets directly, and new test categories should follow the same pattern when adding additional targets and workflows. diff --git a/test/CLAUDE.md b/test/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/test/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file diff --git a/website/AGENTS.md b/website/AGENTS.md index 4135368..44bee54 100644 --- a/website/AGENTS.md +++ b/website/AGENTS.md @@ -1,6 +1,6 @@ # Website (Docusaurus) — Agent Rules -This file defines rules for contributors and automation agents working in `website/`. +Rules specific to the `website/` directory. General contribution guidelines are in the root [`AGENTS.md`](/AGENTS.md). ## 1. Structure & Metadata diff --git a/website/CLAUDE.md b/website/CLAUDE.md new file mode 120000 index 0000000..47dc3e3 --- /dev/null +++ b/website/CLAUDE.md @@ -0,0 +1 @@ +AGENTS.md \ No newline at end of file From 97427bfe72c0f239c27bc2078ef603b3925dac64 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 19:21:36 +0900 Subject: [PATCH 09/23] MAF-19265: refactor(helm): improve helm-lint command to handle multiple charts - Updated the helm-lint target in the Makefile to iterate over each chart directory and lint only those containing a Chart.yaml file, enhancing the linting process for multiple Helm charts. --- Makefile | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 14e9cbd..dcd9ef2 100644 --- a/Makefile +++ b/Makefile @@ -19,7 +19,11 @@ help: ## Display this help. .PHONY: helm-lint helm-lint: ## Lint Helm charts. - @helm lint ./deploy/helm/* + @for chart in ./deploy/helm/*; do \ + if [ -d "$$chart" ] && [ -f "$$chart/Chart.yaml" ]; then \ + helm lint "$$chart"; \ + fi; \ + done .PHONY: helm-docs helm-docs: ## Generate Helm chart documentation. From 67bc88b09ea232b443e846cc1e2a55d32f6e9581 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 19:21:46 +0900 Subject: [PATCH 10/23] MAF-19265: chore(docs): update README.md for MinIO configuration and dependencies - Added MinIO version (5.4.0) to the dependencies table. - Revised MinIO configuration options, including root user and password settings. - Updated Loki endpoint in Vector configuration to use release-prefixed service name for better deployment flexibility. --- .../helm/moai-inference-framework/README.md | 30 ++++++++----------- 1 file changed, 13 insertions(+), 17 deletions(-) diff --git a/deploy/helm/moai-inference-framework/README.md b/deploy/helm/moai-inference-framework/README.md index eb9b5ac..3c92237 100644 --- a/deploy/helm/moai-inference-framework/README.md +++ b/deploy/helm/moai-inference-framework/README.md @@ -17,6 +17,7 @@ Moreh Inference Framework | Repository | Name | Version | |------------|------|---------| +| https://charts.min.io | minio | 5.4.0 | | https://grafana.github.io/helm-charts | loki | 6.30.0 | | https://helm.mittwald.de | replicator(kubernetes-replicator) | 2.12.2 | | https://helm.vector.dev | vector | 0.39.0 | @@ -25,7 +26,6 @@ Moreh Inference Framework | https://moreh-dev.github.io/helm-charts | odin-crd | v0.6.0 | | https://prometheus-community.github.io/helm-charts | prometheus-stack(kube-prometheus-stack) | 80.7.0 | | oci://registry-1.docker.io/bitnamicharts | common | 2.31.4 | -| oci://registry-1.docker.io/bitnamicharts | minio | 14.10.5 | | oci://registry.k8s.io/lws/charts | lws | 0.7.0 | | oci://registry.k8s.io/nfd/charts | nfd(node-feature-discovery) | 0.18.3 | @@ -66,7 +66,6 @@ Moreh Inference Framework | loki.backend.resources.requests.cpu | string | `"500m"` | | | loki.backend.resources.requests.memory | string | `"512Mi"` | | | loki.enabled | bool | `true` | Enable grafana/loki. | -| loki.fullnameOverride | string | `"loki"` | | | loki.gateway.extraArgs[0] | string | `"-config.expand-env=true"` | | | loki.gateway.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | | loki.gateway.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | @@ -127,27 +126,24 @@ Moreh Inference Framework | loki.write.resources.requests.cpu | string | `"500m"` | | | loki.write.resources.requests.memory | string | `"512Mi"` | | | lws.enabled | bool | `true` | Enable kubernetes-sigs/lws. Set to false if already deployed. | -| minio.auth.rootPassword | string | `""` | MinIO root password (required; set a strong password). | -| minio.auth.rootUser | string | `"minio"` | MinIO root user. | -| minio.enabled | bool | `true` | Enable bitnami/minio as the S3-compatible object storage backend for Loki. Set to false if MinIO is already deployed; in that case, set minio.fullnameOverride to the existing service name so the loki-bucket ConfigMap resolves the correct host. | -| minio.fullnameOverride | string | `"minio"` | | +| minio.buckets[0].name | string | `"loki"` | | +| minio.enabled | bool | `true` | Enable minio/minio as the S3-compatible object storage backend for Loki. Set to false if MinIO is already deployed; in that case, configure loki storage to point to the existing MinIO service. | | minio.mode | string | `"standalone"` | | | minio.persistence.size | string | `"500Gi"` | | | minio.persistence.storageClass | string | `""` | StorageClass for MinIO data volume (e.g. ceph-block, standard). | -| minio.provisioning.buckets[0].name | string | `"loki"` | | -| minio.provisioning.enabled | bool | `true` | | -| minio.provisioning.policies[0].name | string | `"loki"` | | -| minio.provisioning.policies[0].statements[0].actions[0] | string | `"s3:*"` | | -| minio.provisioning.policies[0].statements[0].effect | string | `"Allow"` | | -| minio.provisioning.policies[0].statements[0].resources[0] | string | `"arn:aws:s3:::loki/*"` | | -| minio.provisioning.users[0].password | string | `""` | Password for the loki MinIO user (required; set a strong password). | -| minio.provisioning.users[0].policies[0] | string | `"loki"` | | -| minio.provisioning.users[0].setPolicies | bool | `true` | | -| minio.provisioning.users[0].username | string | `"loki"` | | +| minio.policies[0].name | string | `"loki"` | | +| minio.policies[0].statements[0].actions[0] | string | `"s3:*"` | | +| minio.policies[0].statements[0].effect | string | `"Allow"` | | +| minio.policies[0].statements[0].resources[0] | string | `"arn:aws:s3:::loki/*"` | | | minio.resources.limits.cpu | string | `"1.5"` | | | minio.resources.limits.memory | string | `"3072Mi"` | | | minio.resources.requests.cpu | string | `"1"` | | | minio.resources.requests.memory | string | `"2048Mi"` | | +| minio.rootPassword | string | `"minio123!"` | MinIO root password. Override with a strong password in production. | +| minio.rootUser | string | `"minio"` | MinIO root user. | +| minio.users[0].accessKey | string | `"loki"` | | +| minio.users[0].policy | string | `"loki"` | | +| minio.users[0].secretKey | string | `"loki123!"` | Password for the loki MinIO user. Override with a strong password in production. | | nameOverride | string | `""` | Chart name override. | | namespaceOverride | string | `""` | Namespace override. | | nfd.enabled | bool | `true` | Enable kubernetes-sigs/node-feature-discovery. Set to false if already deployed. | @@ -180,7 +176,7 @@ Moreh Inference Framework | vector.customConfig.api.enabled | bool | `true` | | | vector.customConfig.data_dir | string | `"/vector-data"` | | | vector.customConfig.sinks.loki.encoding.codec | string | `"json"` | | -| vector.customConfig.sinks.loki.endpoint | string | `"http://loki-gateway"` | | +| vector.customConfig.sinks.loki.endpoint | string | `"http://{{ .Release.Name }}-loki-gateway"` | | | vector.customConfig.sinks.loki.inputs[0] | string | `"mif_log_transform"` | | | vector.customConfig.sinks.loki.labels.app | string | `"{{`{{ app }}`}}"` | | | vector.customConfig.sinks.loki.labels.inference_service | string | `"{{`{{ inference_service }}`}}"` | | From 53aa0a889055ff58b4ff2fda487c94d59d756bf0 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 19:33:40 +0900 Subject: [PATCH 11/23] MAF-19265: feat(deploy): enhance log collection configuration in Helm chart - Added `extra_label_selector` to `mif_logs` in values.yaml to only collect logs from pods that opt into MIF log collection. - Updated the log transformation logic in the README.md to handle JSON log formats more effectively, ensuring proper parsing and merging of structured logs. --- .../helm/moai-inference-framework/README.md | 3 +- .../helm/moai-inference-framework/values.yaml | 30 +++++++++++-------- 2 files changed, 19 insertions(+), 14 deletions(-) diff --git a/deploy/helm/moai-inference-framework/README.md b/deploy/helm/moai-inference-framework/README.md index 3c92237..b348ebf 100644 --- a/deploy/helm/moai-inference-framework/README.md +++ b/deploy/helm/moai-inference-framework/README.md @@ -186,9 +186,10 @@ Moreh Inference Framework | vector.customConfig.sinks.loki.labels.pool_name | string | `"{{`{{ pool_name }}`}}"` | | | vector.customConfig.sinks.loki.labels.role | string | `"{{`{{ role }}`}}"` | | | vector.customConfig.sinks.loki.type | string | `"loki"` | | +| vector.customConfig.sources.mif_logs.extra_label_selector | string | `"mif.moreh.io/log.collect=true"` | | | vector.customConfig.sources.mif_logs.type | string | `"kubernetes_logs"` | | | vector.customConfig.transforms.mif_log_transform.inputs[0] | string | `"mif_logs"` | | -| vector.customConfig.transforms.mif_log_transform.source | string | `".namespace = .kubernetes.pod_namespace\n.node_name = \"$VECTOR_SELF_NODE_NAME\"\n.app = get(.kubernetes.pod_labels, [\"app.kubernetes.io/name\"]) ?? \"\"\n.inference_service = get(.kubernetes.pod_labels, [\"app.kubernetes.io/instance\"]) ?? \"\"\n.pool_name = get(.kubernetes.pod_labels, [\"mif.moreh.io/pool\"]) ?? \"\"\n.role = get(.kubernetes.pod_labels, [\"mif.moreh.io/role\"]) ?? \"\"\n\nstructured, err = parse_json(.message)\nif err == null {\n . = merge!(., structured)\n msg, err = get(., [\"msg\"])\n if err == null {\n .message = msg\n del(.msg)\n }\n time, err = get(., [\"time\"])\n if err == null {\n .timestamp = time\n del(.time)\n }\n} else {\n .level = \"warn\"\n}\n\ndel(.file)\ndel(.source_type)\ndel(.stream)\ndel(.kubernetes)\n"` | | +| vector.customConfig.transforms.mif_log_transform.source | string | `".namespace = .kubernetes.pod_namespace\n.node_name = \"$VECTOR_SELF_NODE_NAME\"\n.app = get(.kubernetes.pod_labels, [\"app.kubernetes.io/name\"]) ?? \"\"\n.inference_service = get(.kubernetes.pod_labels, [\"app.kubernetes.io/instance\"]) ?? \"\"\n.pool_name = get(.kubernetes.pod_labels, [\"mif.moreh.io/pool\"]) ?? \"\"\n.role = get(.kubernetes.pod_labels, [\"mif.moreh.io/role\"]) ?? \"\"\n\nlog_format = get(.kubernetes.pod_labels, [\"mif.moreh.io/log.format\"]) ?? \"\"\n\nif log_format == \"json\" {\n structured, err = parse_json(.message)\n if err == null {\n . = merge!(., structured)\n msg, err = get(., [\"msg\"])\n if err == null {\n .message = msg\n del(.msg)\n }\n time, err = get(., [\"time\"])\n if err == null {\n .timestamp = time\n del(.time)\n }\n }\n}\n\ndel(.file)\ndel(.source_type)\ndel(.stream)\ndel(.kubernetes)\n"` | | | vector.customConfig.transforms.mif_log_transform.type | string | `"remap"` | | | vector.enabled | bool | `true` | Enable vector/vector as a DaemonSet log collector. | | vector.resources.limits.cpu | string | `"100m"` | | diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index cdd4e22..ba8e7cb 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -329,6 +329,8 @@ vector: sources: mif_logs: type: kubernetes_logs + # Only collect logs from pods that explicitly opt in to MIF log collection. + extra_label_selector: "mif.moreh.io/log.collect=true" transforms: mif_log_transform: type: remap @@ -342,21 +344,23 @@ vector: .pool_name = get(.kubernetes.pod_labels, ["mif.moreh.io/pool"]) ?? "" .role = get(.kubernetes.pod_labels, ["mif.moreh.io/role"]) ?? "" - structured, err = parse_json(.message) - if err == null { - . = merge!(., structured) - msg, err = get(., ["msg"]) - if err == null { - .message = msg - del(.msg) - } - time, err = get(., ["time"]) + log_format = get(.kubernetes.pod_labels, ["mif.moreh.io/log.format"]) ?? "" + + if log_format == "json" { + structured, err = parse_json(.message) if err == null { - .timestamp = time - del(.time) + . = merge!(., structured) + msg, err = get(., ["msg"]) + if err == null { + .message = msg + del(.msg) + } + time, err = get(., ["time"]) + if err == null { + .timestamp = time + del(.time) + } } - } else { - .level = "warn" } del(.file) From 0eb18f023ff4fd586b2d15f5d3897afbe24066ef Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 19:37:45 +0900 Subject: [PATCH 12/23] MAF-19265: docs(log-collection): enhance log collection documentation and configuration details - Updated log collection labels and their descriptions for clarity. - Revised YAML configuration examples for MinIO and Loki to emphasize required fields. - Added instructions for enabling log collection in pods with specific labels. - Clarified JSON log parsing behavior and its implications for log collection. --- website/docs/operations/log-collection.mdx | 175 ++++++++++++--------- 1 file changed, 105 insertions(+), 70 deletions(-) diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index 2878820..0d5aef9 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -24,15 +24,15 @@ Inference Service Pods ### Labels available for log search -| Label | Source | Example value | -| :------------------ | :-------------------------------------------------- | :--------------------- | -| `namespace` | `kubernetes.pod_namespace` | `default` | -| `inference_service` | pod label `app.kubernetes.io/instance` | `llama-3-2-1b` | -| `pool_name` | pod label `mif.moreh.io/pool` | `heimdall` | -| `role` | pod label `mif.moreh.io/role` | `prefill`, `decode` | -| `app` | pod label `app.kubernetes.io/name` | `vllm` | -| `node_name` | `VECTOR_SELF_NODE_NAME` env var (injected by Vector)| `gpu-node-01` | -| `level` | parsed from JSON log field `level` | `info`, `warn`, `error`| +| Label | Source | Example value | +| :------------------ | :--------------------------------------------------------------------------------- | :---------------------- | +| `namespace` | `kubernetes.pod_namespace` | `default` | +| `inference_service` | pod label `app.kubernetes.io/instance` | `llama-3-2-1b` | +| `pool_name` | pod label `mif.moreh.io/pool` | `heimdall` | +| `role` | pod label `mif.moreh.io/role` | `prefill`, `decode` | +| `app` | pod label `app.kubernetes.io/name` | `vllm` | +| `node_name` | `VECTOR_SELF_NODE_NAME` env var (injected by Vector) | `gpu-node-01` | +| `level` | parsed from JSON log field `level` (pods with `mif.moreh.io/log.format=json` only) | `info`, `warn`, `error` | --- @@ -52,32 +52,26 @@ MinIO, Loki, and Vector are all **enabled by default** in the `moai-inference-fr Add the following block to your `moai-inference-framework-values.yaml`. -```yaml title="moai-inference-framework-values.yaml" +```yaml title="moai-inference-framework-values.yaml" {3,8,11} minio: - auth: - rootPassword: # required; set a strong password persistence: - storageClass: # e.g. ceph-block - provisioning: - users: - - username: loki - password: # required; set a strong password + storageClass: # required; e.g. ceph-block loki: write: persistence: - storageClass: + storageClass: # required; same StorageClass as above backend: persistence: - storageClass: + storageClass: # required; same StorageClass as above ``` :::info -`minio.persistence.storageClass`, `loki.write.persistence.storageClass`, and `loki.backend.persistence.storageClass` must be set to a StorageClass available in your cluster. The value used in the reference p-cluster is `ceph-block`. +`minio.persistence.storageClass`, `loki.write.persistence.storageClass`, and `loki.backend.persistence.storageClass` must be set to a StorageClass available in your cluster. ::: :::info -MinIO provisioning creates a dedicated `loki` user with a policy scoped to the `loki` bucket. Loki uses these restricted credentials (not root) to access object storage. Both `minio.auth.rootPassword` and `minio.provisioning.users[0].password` are required. +MinIO creates a dedicated `loki` user with a policy scoped to the `loki` bucket. Loki uses these restricted credentials (not root) to access object storage. Default passwords are set out of the box; override `minio.rootPassword` and `minio.users[0].secretKey` in production. ::: ### 2. Install (or upgrade) the chart @@ -94,7 +88,7 @@ The chart will: 1. Create a `loki-bucket` ConfigMap and Secret in the `mif` namespace from the provided MinIO credentials. 2. Install the Loki Helm chart (v6.30.0) with TSDB storage and 90-day log retention. -3. Install the Vector Helm chart (v0.39.0) as a DaemonSet that collects container logs from all nodes, transforms them, and ships them to Loki. +3. Install the Vector Helm chart (v0.39.0) as a DaemonSet that collects logs from pods labelled `mif.moreh.io/log.collect=true`, transforms them, and ships them to Loki. 4. Create a Grafana datasource ConfigMap so that Grafana automatically discovers Loki. --- @@ -139,6 +133,46 @@ kubectl logs -n mif -l app.kubernetes.io/name=vector --tail=50 --- +## Enabling log collection for a pod + +Vector collects logs only from pods that explicitly opt in. Two pod labels control this behavior. + +### Opt-in label + +Add the `mif.moreh.io/log.collect=true` label to a pod to include its logs in Vector's collection. Pods without this label are ignored entirely. + +```yaml +metadata: + labels: + mif.moreh.io/log.collect: "true" +``` + +### Log format label + +Add the `mif.moreh.io/log.format=json` label to enable structured JSON log parsing for a pod. When set, Vector parses each log line as JSON and promotes the following fields: + +| JSON field | Mapped to | +| :--------- | :-------------------- | +| `msg` | `message` | +| `time` | `timestamp` | +| `level` | `level` (Loki label) | +| others | merged into the event | + +Without this label, the log line is forwarded as-is without any JSON parsing. + +```yaml +metadata: + labels: + mif.moreh.io/log.collect: "true" + mif.moreh.io/log.format: "json" +``` + +:::info +The `level` Loki label is only populated for pods with `mif.moreh.io/log.format=json`. For plain-text pods, `level` remains empty. +::: + +--- + ## Searching logs in Grafana Open Grafana → **Explore** → select the **Loki** datasource. @@ -185,79 +219,80 @@ Open Grafana → **Explore** → select the **Loki** datasource. ### Loki -| Property | Value | -| :------------------ | :----------------------------------------- | -| Helm chart | `moreh/loki` v6.30.0 (upstream grafana/loki) | -| App version | 3.5.1 | -| Storage backend | S3 (MinIO), TSDB index | -| Retention | 90 days (2160 h) | -| Ingestion limit | 30 MB/s, 60 MB burst | -| Max entries/query | 50 000 | -| Deployment | Distributed (gateway / read / write / backend) | +| Property | Value | +| :---------------- | :--------------------------------------------- | +| Helm chart | `moreh/loki` v6.30.0 (upstream grafana/loki) | +| App version | 3.5.1 | +| Storage backend | S3 (MinIO), TSDB index | +| Retention | 90 days (2160 h) | +| Ingestion limit | 30 MB/s, 60 MB burst | +| Max entries/query | 50 000 | +| Deployment | Distributed (gateway / read / write / backend) | ### Vector -| Property | Value | -| :------------------ | :------------------------------------------ | -| Helm chart | `moreh/vector` v0.39.0 | -| Deployment | DaemonSet (Agent mode, one pod per node) | -| Log source | All container logs (`kubernetes_logs`) | -| Resource limits | 100m CPU / 256Mi memory | -| Tolerations | unschedulable, compute, `amd.com/gpu` | +| Property | Value | +| :-------------- | :------------------------------------------------------------------------ | +| Helm chart | `vector/vector` v0.39.0 | +| Deployment | DaemonSet (Agent mode, one pod per node) | +| Log source | Pods labelled `mif.moreh.io/log.collect=true` (`kubernetes_logs`) | +| Log format | JSON parsing applied only to pods labelled `mif.moreh.io/log.format=json` | +| Resource limits | 100m CPU / 256Mi memory | +| Tolerations | unschedulable, compute, `amd.com/gpu` | ### MinIO -| Property | Value | -| :------------------ | :----------------------------------------------------------- | -| Helm chart | `bitnami/minio` v14.10.5 | -| Mode | Standalone | -| Bucket | `loki` (created via provisioning on startup) | -| Loki credentials | Dedicated `loki` user with S3 policy scoped to `loki` bucket | -| Resources | 1 CPU / 2 Gi memory (requests), 1.5 CPU / 3 Gi (limits) | -| Persistence | 500 Gi | -| Deployment | Single pod | +| Property | Value | +| :--------------- | :----------------------------------------------------------- | +| Helm chart | `minio/minio` v5.4.0 | +| Mode | Standalone | +| Bucket | `loki` (created via post-install Job on startup) | +| Loki credentials | Dedicated `loki` user with S3 policy scoped to `loki` bucket | +| Resources | 1 CPU / 2 Gi memory (requests), 1.5 CPU / 3 Gi (limits) | +| Persistence | 500 Gi | +| Deployment | Single pod | ### Component naming -`fullnameOverride` is set for both MinIO and Loki so that service names are predictable regardless of the Helm release name: +Service names are derived from the Helm release name. With the default release name `mif`: -| Service | Short name (same-namespace access) | -| :------------------ | :--------------------------------- | -| MinIO | `minio` | -| Loki gateway | `loki-gateway` | -| Loki read | `loki-read` | -| Loki write | `loki-write` | +| Service | Name (same-namespace access) | +| :----------- | :--------------------------- | +| MinIO | `mif-minio` | +| Loki gateway | `mif-loki-gateway` | +| Loki read | `mif-loki-read` | +| Loki write | `mif-loki-write` | -Vector connects to Loki using the short service name `http://loki-gateway` since all components are co-located in the same namespace. +Vector connects to Loki using the release-prefixed service name since all components are co-located in the same namespace. --- ## Using an external MinIO -If MinIO is already deployed outside this chart, set `minio.enabled: false`. The `loki-bucket` ConfigMap and Secret are generated from `minio.fullnameOverride` and `minio.provisioning.users[0].*` values regardless of whether the sub-chart is enabled. +If MinIO is already deployed outside this chart, set `minio.enabled: false`. The `loki-bucket` ConfigMap and Secret are still generated from `minio.users[0].*` values regardless of whether the sub-chart is enabled. The `BUCKET_HOST` is derived from the Helm release name (`-minio`). -**Same namespace** — set `fullnameOverride` to the existing service name: +**Same namespace** — if the existing MinIO service name matches `-minio`, no additional configuration is needed. Otherwise, set `minio.fullnameOverride` to override the name used as `BUCKET_HOST`: -```yaml title="moai-inference-framework-values.yaml" +```yaml title="moai-inference-framework-values.yaml" {3,5-6} minio: enabled: false - fullnameOverride: # e.g. minio - provisioning: - users: - - username: - password: + fullnameOverride: + users: + - accessKey: + secretKey: + policy: loki ``` -**Different namespace** — set `fullnameOverride` to the FQDN so that Loki can resolve it cross-namespace. When `minio.enabled` is `false`, the sub-chart is not deployed and the value is only used as `BUCKET_HOST` in the ConfigMap: +**Different namespace** — set `minio.fullnameOverride` to the FQDN so that Loki can resolve it cross-namespace: -```yaml title="moai-inference-framework-values.yaml" +```yaml title="moai-inference-framework-values.yaml" {5-6} minio: enabled: false - fullnameOverride: minio.minio.svc.cluster.local # FQDN for cross-namespace access - provisioning: - users: - - username: - password: + fullnameOverride: minio.minio.svc.cluster.local + users: + - accessKey: + secretKey: + policy: loki ``` --- From 43550caaed99fa5a1703ad1ebbef20fd225da000 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 23:03:40 +0900 Subject: [PATCH 13/23] MAF-19265: docs(prerequisites): update YAML configuration examples for clarity - Revised the example configuration in prerequisites.mdx to remove optional comments for MinIO and Loki settings. - Streamlined the YAML structure to focus on required fields, enhancing clarity for users setting up the MoAI Inference Framework. --- website/docs/getting-started/prerequisites.mdx | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/website/docs/getting-started/prerequisites.mdx b/website/docs/getting-started/prerequisites.mdx index d414b14..95417ea 100644 --- a/website/docs/getting-started/prerequisites.mdx +++ b/website/docs/getting-started/prerequisites.mdx @@ -67,31 +67,26 @@ The container images for the MoAI Inference Framework are distributed through a Create a `moai-inference-framework-values.yaml` file as follows. Fill in all values marked as required. -```yaml title="moai-inference-framework-values.yaml" {4-5,10,21,24} +```yaml title="moai-inference-framework-values.yaml" {4-5,10,16,19} # ECR credentials — provided by Moreh at purchase or trial issuance. ecrTokenRefresher: aws: - accessKeyId: # required - secretAccessKey: # required + accessKeyId: + secretAccessKey: # MinIO: object storage backend for Loki log data. minio: persistence: - storageClass: # required; e.g. ceph-block - rootPassword: "minio123!" # Optional: override the default passwords. - users: - - accessKey: loki - secretKey: "loki123!" # Optional: override the default passwords. - policy: loki + storageClass: # Loki: log aggregation system. Uses MinIO as its object storage backend. loki: write: persistence: - storageClass: # required; same StorageClass as above + storageClass: backend: persistence: - storageClass: # required; same StorageClass as above + storageClass: ``` :::info From f36206ba80b5ca6027531e2a498128f536cdaabc Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 23:03:55 +0900 Subject: [PATCH 14/23] MAF-19265: docs(prerequisites): clarify storage-class requirements in PVC configuration - Updated the prerequisites.mdx documentation to specify that the `` must match an available StorageClass in the cluster. - Added information about the default StorageClass usage and the implications of omitting this parameter, enhancing user understanding of PVC states. --- website/docs/getting-started/prerequisites.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/website/docs/getting-started/prerequisites.mdx b/website/docs/getting-started/prerequisites.mdx index 95417ea..da08be8 100644 --- a/website/docs/getting-started/prerequisites.mdx +++ b/website/docs/getting-started/prerequisites.mdx @@ -90,7 +90,7 @@ loki: ``` :::info -The `` must match a StorageClass available in your cluster. Run `kubectl get storageclass` to list the available StorageClasses. +`` must match a StorageClass available in your cluster. Run `kubectl get storageclass` to list available StorageClasses. If omitted, the cluster's default StorageClass is used; if no default exists, the PVC will remain in `Pending` state. ::: :::info From f5081ca04343c5c961f41c3be725ff20c803abcd Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 23:09:51 +0900 Subject: [PATCH 15/23] MAF-19265: feat(website): Update AGENTS.md and log-collection.mdx for clarity and content guidelines - Standardized import statements in AGENTS.md for consistency. - Added content guidelines to AGENTS.md to prevent duplication of installation steps in documentation. - Revised log-collection.mdx to streamline installation instructions, directing users to the prerequisites section for required values and installation commands. --- website/AGENTS.md | 10 ++++- website/docs/operations/log-collection.mdx | 43 +--------------------- 2 files changed, 9 insertions(+), 44 deletions(-) diff --git a/website/AGENTS.md b/website/AGENTS.md index 44bee54..d0f2589 100644 --- a/website/AGENTS.md +++ b/website/AGENTS.md @@ -30,8 +30,8 @@ Rules specific to the `website/` directory. General contribution guidelines are https://docusaurus.io/docs/markdown-features/tabs ```mdx -import Tabs from '@theme/Tabs'; -import TabItem from '@theme/TabItem'; +import Tabs from "@theme/Tabs"; +import TabItem from "@theme/TabItem"; @@ -96,3 +96,9 @@ This is a warning ## 4. Content Guidelines - **Inference Deployment**: When documenting deployment of inference services (e.g., vLLM, SGLang), instructions MUST use the `InferenceService` resource with a preset. + +- **No duplicate installation steps**: Operation or feature docs must not repeat the values file example or `helm upgrade` command that already appears in `getting-started/prerequisites.mdx`. Instead, link directly to the relevant section: + ```mdx + See [Prerequisites](../getting-started/prerequisites.mdx#moai-inference-framework) for the required values and install command. + ``` + Duplication causes the two pages to diverge whenever the chart version or values change. diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index 0d5aef9..903312f 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -48,48 +48,7 @@ MinIO, Loki, and Vector are all **enabled by default** in the `moai-inference-fr ## Installation -### 1. Prepare the values file - -Add the following block to your `moai-inference-framework-values.yaml`. - -```yaml title="moai-inference-framework-values.yaml" {3,8,11} -minio: - persistence: - storageClass: # required; e.g. ceph-block - -loki: - write: - persistence: - storageClass: # required; same StorageClass as above - backend: - persistence: - storageClass: # required; same StorageClass as above -``` - -:::info -`minio.persistence.storageClass`, `loki.write.persistence.storageClass`, and `loki.backend.persistence.storageClass` must be set to a StorageClass available in your cluster. -::: - -:::info -MinIO creates a dedicated `loki` user with a policy scoped to the `loki` bucket. Loki uses these restricted credentials (not root) to access object storage. Default passwords are set out of the box; override `minio.rootPassword` and `minio.users[0].secretKey` in production. -::: - -### 2. Install (or upgrade) the chart - -```shell -helm upgrade -i mif moreh/moai-inference-framework \ - --version v0.3.0 \ - -n mif \ - --create-namespace \ - -f moai-inference-framework-values.yaml -``` - -The chart will: - -1. Create a `loki-bucket` ConfigMap and Secret in the `mif` namespace from the provided MinIO credentials. -2. Install the Loki Helm chart (v6.30.0) with TSDB storage and 90-day log retention. -3. Install the Vector Helm chart (v0.39.0) as a DaemonSet that collects logs from pods labelled `mif.moreh.io/log.collect=true`, transforms them, and ships them to Loki. -4. Create a Grafana datasource ConfigMap so that Grafana automatically discovers Loki. +Log collection is installed as part of the `moai-inference-framework` Helm chart. See [Prerequisites](../getting-started/prerequisites.mdx#moai-inference-framework) for the required values and install command. --- From 32fafb668414df533ca89c6fc4a30574a7ca64d3 Mon Sep 17 00:00:00 2001 From: seongsu-dev Date: Fri, 20 Feb 2026 23:18:21 +0900 Subject: [PATCH 16/23] MAF-19265: docs(AGENTS, log-collection): standardize output formatting and enhance clarity - Added guidelines in AGENTS.md to ensure command output blocks specify both language type and title. - Updated log-collection.mdx to reflect the new output formatting, improving consistency and readability for expected command outputs. --- website/AGENTS.md | 7 +++++++ website/docs/operations/log-collection.mdx | 24 +++++++++------------- 2 files changed, 17 insertions(+), 14 deletions(-) diff --git a/website/AGENTS.md b/website/AGENTS.md index d0f2589..f6655d4 100644 --- a/website/AGENTS.md +++ b/website/AGENTS.md @@ -57,6 +57,13 @@ image: - title: ` ``` title=""` - highlight: ` ```<language> {1,4-6}` +- **Expected output**: Blocks showing command output must always specify both a language type and a title on the same opening fence. Use `shell` for terminal output: + ````mdx + ```shell title="Expected output (one pod per node, all `Running`)" + NAME READY STATUS RESTARTS AGE + vector-xxxxx 1/1 Running 0 2m + ``` + ```` - **Variables**: - Format as `<variableName>` (camelCase, no quotes). - Highlight lines containing variables in code blocks (e.g., ` ```yaml {2} `). diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index 903312f..f12e7b9 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -60,14 +60,12 @@ Check that all Loki components are running. kubectl get pods -n mif -l app.kubernetes.io/name=loki ``` -Expected output (all pods `Running`): - -``` -NAME READY STATUS RESTARTS AGE -loki-backend-0 1/1 Running 0 2m -loki-gateway-xxxxxxxxx-xxxxx 1/1 Running 0 2m -loki-read-xxxxxxxxx-xxxxx 1/1 Running 0 2m -loki-write-0 1/1 Running 0 2m +```shell title="Expected output (all pods Running)" +NAME READY STATUS RESTARTS AGE +loki-backend-0 1/1 Running 0 2m +loki-gateway-xxxxxxxxx-xxxxx 1/1 Running 0 2m +loki-read-xxxxxxxxx-xxxxx 1/1 Running 0 2m +loki-write-0 1/1 Running 0 2m ``` Check that Vector is running on all nodes. @@ -76,12 +74,10 @@ Check that Vector is running on all nodes. kubectl get pods -n mif -l app.kubernetes.io/name=vector ``` -Expected output (one pod per node, all `Running`): - -``` -NAME READY STATUS RESTARTS AGE -vector-xxxxx 1/1 Running 0 2m -vector-yyyyy 1/1 Running 0 2m +```shell title="Expected output (one pod per node, all Running)" +NAME READY STATUS RESTARTS AGE +vector-xxxxx 1/1 Running 0 2m +vector-yyyyy 1/1 Running 0 2m ``` Check Vector logs to confirm it is shipping to Loki without errors. From 3e60b77e56a4670a4486d6604c11cbb36b08f5ad Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Fri, 20 Feb 2026 23:24:07 +0900 Subject: [PATCH 17/23] MAF-19265: docs(log-collection): update log query language references to PromQL - Changed instances of `logql` to `promql` in log-collection.mdx to reflect the correct query language. - Updated docusaurus.config.ts to include `promql` in the additional languages for syntax highlighting. --- website/docs/operations/log-collection.mdx | 12 ++++++------ website/docusaurus.config.ts | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index f12e7b9..0bba91f 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -134,37 +134,37 @@ Open Grafana → **Explore** → select the **Loki** datasource. ### By namespace -```logql +```promql {namespace="default"} ``` ### By inference service name -```logql +```promql {inference_service="llama-3-2-1b"} ``` ### By pool name -```logql +```promql {pool_name="heimdall"} ``` ### By role -```logql +```promql {role="decode"} ``` ### Combined filter -```logql +```promql {namespace="default", inference_service="llama-3-2-1b", role="prefill"} |= "error" ``` ### Filter by log level -```logql +```promql {namespace="default", level="error"} ``` diff --git a/website/docusaurus.config.ts b/website/docusaurus.config.ts index 477c0cb..e2f43fe 100644 --- a/website/docusaurus.config.ts +++ b/website/docusaurus.config.ts @@ -82,7 +82,7 @@ const config: Config = { ], }, prism: { - additionalLanguages: ['bash', 'toml', 'yaml'], + additionalLanguages: ['bash', 'toml', 'yaml', 'promql'], theme: themes.nightOwlLight, darkTheme: themes.vsDark, }, From dda854f37975b119bcb6b1af7d2c67060b7d8568 Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Mon, 23 Feb 2026 11:18:00 +0900 Subject: [PATCH 18/23] MAF-19265: docs(values.yaml, prerequisites, log-collection): update configuration and documentation for clarity - Disabled persistence for MinIO and Loki in values.yaml to simplify setup. - Clarified instructions in prerequisites.mdx regarding the need to replace AWS credentials. - Updated log-collection.mdx to indicate that no additional configuration is required to get started with MinIO, Loki, and Vector. --- .../helm/moai-inference-framework/values.yaml | 10 +++----- .../docs/getting-started/prerequisites.mdx | 23 ++----------------- website/docs/operations/log-collection.mdx | 4 ++-- 3 files changed, 7 insertions(+), 30 deletions(-) diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index ba8e7cb..d69a037 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -118,9 +118,7 @@ minio: rootPassword: "minio123!" persistence: - # -- StorageClass for MinIO data volume (e.g. ceph-block, standard). - storageClass: "" - size: 500Gi + enabled: false # S3 policy granting the loki user access to the loki bucket only. policies: @@ -264,8 +262,7 @@ loki: cpu: 500m memory: 512Mi persistence: - # -- StorageClass for Loki write component (e.g. ceph-block, standard). - storageClass: "" + volumeClaimsEnabled: false backend: replicas: 1 @@ -286,8 +283,7 @@ loki: cpu: 500m memory: 512Mi persistence: - # -- StorageClass for Loki backend component (e.g. ceph-block, standard). - storageClass: "" + volumeClaimsEnabled: false vector: # -- Enable vector/vector as a DaemonSet log collector. diff --git a/website/docs/getting-started/prerequisites.mdx b/website/docs/getting-started/prerequisites.mdx index da08be8..f1f36da 100644 --- a/website/docs/getting-started/prerequisites.mdx +++ b/website/docs/getting-started/prerequisites.mdx @@ -65,34 +65,15 @@ The container images for the MoAI Inference Framework are distributed through a **The AWS credentials (`AWS_ACCESS_KEY_ID` and `AWS_SECRET_ACCESS_KEY`) should have been provided to you along with your purchase or trial issuance of the MoAI Inference Framework**. If you did not receive this information, please contact your point of purchase separately. ::: -Create a `moai-inference-framework-values.yaml` file as follows. Fill in all values marked as required. +Create a `moai-inference-framework-values.yaml` file as follows. **You need to replace `<AWS_ACCESS_KEY_ID>` and `<AWS_SECRET_ACCESS_KEY>` with your own values**. -```yaml title="moai-inference-framework-values.yaml" {4-5,10,16,19} -# ECR credentials — provided by Moreh at purchase or trial issuance. +```yaml title="moai-inference-framework-values.yaml" {3-4} ecrTokenRefresher: aws: accessKeyId: <AWS_ACCESS_KEY_ID> secretAccessKey: <AWS_SECRET_ACCESS_KEY> - -# MinIO: object storage backend for Loki log data. -minio: - persistence: - storageClass: <storage-class> - -# Loki: log aggregation system. Uses MinIO as its object storage backend. -loki: - write: - persistence: - storageClass: <storage-class> - backend: - persistence: - storageClass: <storage-class> ``` -:::info -`<storage-class>` must match a StorageClass available in your cluster. Run `kubectl get storageclass` to list available StorageClasses. If omitted, the cluster's default StorageClass is used; if no default exists, the PVC will remain in `Pending` state. -::: - :::info If dependencies such as `keda`, `kube-prometheus-stack`, or `lws` are already installed in your cluster, skip their installation by setting the corresponding values to `false`. Refer to [moai-inference-framework README](https://github.com/moreh-dev/mif/tree/main/deploy/helm/moai-inference-framework) for the full list of dependencies. ::: diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index 0bba91f..62726fc 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -41,7 +41,7 @@ Inference Service Pods - The `moai-inference-framework` Helm chart installed (or being installed). :::info -MinIO, Loki, and Vector are all **enabled by default** in the `moai-inference-framework` chart. The only required configuration steps are setting the MinIO credentials and StorageClass. +MinIO, Loki, and Vector are all **enabled by default** in the `moai-inference-framework` chart. No additional configuration is required to get started. ::: --- @@ -204,7 +204,7 @@ Open Grafana → **Explore** → select the **Loki** datasource. | Bucket | `loki` (created via post-install Job on startup) | | Loki credentials | Dedicated `loki` user with S3 policy scoped to `loki` bucket | | Resources | 1 CPU / 2 Gi memory (requests), 1.5 CPU / 3 Gi (limits) | -| Persistence | 500 Gi | +| Persistence | emptyDir (ephemeral by default) | | Deployment | Single pod | ### Component naming From d600e5c7b331a748591badd790feb43bba57736a Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Mon, 23 Feb 2026 11:27:50 +0900 Subject: [PATCH 19/23] MAF-19265: chore(values.yaml, log-collection): streamline resource configurations and update documentation - Removed specific resource requests and limits for MinIO and Loki in values.yaml to simplify configuration. - Updated log-collection.mdx to reflect changes in resource limits for Vector, enhancing clarity for users. --- .../helm/moai-inference-framework/values.yaml | 42 +------------------ website/docs/operations/log-collection.mdx | 15 ++++--- 2 files changed, 8 insertions(+), 49 deletions(-) diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index d69a037..ef25594 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -144,11 +144,7 @@ minio: resources: requests: - cpu: "1" - memory: 2048Mi - limits: - cpu: "1.5" - memory: 3072Mi + memory: 2Gi loki: # -- Enable grafana/loki. @@ -216,13 +212,6 @@ loki: name: loki-bucket nodeSelector: node-role.kubernetes.io/control-plane: "" - resources: - requests: - cpu: 500m - memory: 512Mi - limits: - cpu: 500m - memory: 512Mi read: replicas: 1 @@ -235,13 +224,6 @@ loki: name: loki-bucket nodeSelector: node-role.kubernetes.io/control-plane: "" - resources: - requests: - cpu: 500m - memory: 1Gi - limits: - cpu: 500m - memory: 1Gi write: replicas: 1 @@ -254,13 +236,6 @@ loki: name: loki-bucket nodeSelector: node-role.kubernetes.io/control-plane: "" - resources: - requests: - cpu: 500m - memory: 512Mi - limits: - cpu: 500m - memory: 512Mi persistence: volumeClaimsEnabled: false @@ -275,13 +250,6 @@ loki: name: loki-bucket nodeSelector: node-role.kubernetes.io/control-plane: "" - resources: - requests: - cpu: 500m - memory: 512Mi - limits: - cpu: 500m - memory: 512Mi persistence: volumeClaimsEnabled: false @@ -309,14 +277,6 @@ vector: rollingUpdate: maxUnavailable: 10 - resources: - requests: - cpu: 100m - memory: 256Mi - limits: - cpu: 100m - memory: 256Mi - customConfig: data_dir: /vector-data api: diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index 62726fc..10d0398 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -186,14 +186,13 @@ Open Grafana → **Explore** → select the **Loki** datasource. ### Vector -| Property | Value | -| :-------------- | :------------------------------------------------------------------------ | -| Helm chart | `vector/vector` v0.39.0 | -| Deployment | DaemonSet (Agent mode, one pod per node) | -| Log source | Pods labelled `mif.moreh.io/log.collect=true` (`kubernetes_logs`) | -| Log format | JSON parsing applied only to pods labelled `mif.moreh.io/log.format=json` | -| Resource limits | 100m CPU / 256Mi memory | -| Tolerations | unschedulable, compute, `amd.com/gpu` | +| Property | Value | +| :---------- | :------------------------------------------------------------------------ | +| Helm chart | `vector/vector` v0.39.0 | +| Deployment | DaemonSet (Agent mode, one pod per node) | +| Log source | Pods labelled `mif.moreh.io/log.collect=true` (`kubernetes_logs`) | +| Log format | JSON parsing applied only to pods labelled `mif.moreh.io/log.format=json` | +| Tolerations | unschedulable, compute, `amd.com/gpu` | ### MinIO From 877b1e5b945bddadfb3c50d52619ff903a5e7de3 Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Mon, 23 Feb 2026 11:30:29 +0900 Subject: [PATCH 20/23] MAF-19265: chore(README.md, values.yaml): simplify configuration options for Loki and MinIO - Removed specific resource requests and limits for Loki and MinIO in README.md and values.yaml to streamline configuration. - Disabled persistence for Loki and MinIO, enhancing setup simplicity. - Updated documentation to reflect these changes and improve clarity for users. --- .../helm/moai-inference-framework/README.md | 33 +++---------------- .../helm/moai-inference-framework/values.yaml | 3 -- 2 files changed, 4 insertions(+), 32 deletions(-) diff --git a/deploy/helm/moai-inference-framework/README.md b/deploy/helm/moai-inference-framework/README.md index b348ebf..bebc015 100644 --- a/deploy/helm/moai-inference-framework/README.md +++ b/deploy/helm/moai-inference-framework/README.md @@ -59,23 +59,14 @@ Moreh Inference Framework | loki.backend.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | | loki.backend.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | | loki.backend.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | -| loki.backend.persistence.storageClass | string | `""` | StorageClass for Loki backend component (e.g. ceph-block, standard). | +| loki.backend.persistence.volumeClaimsEnabled | bool | `false` | | | loki.backend.replicas | int | `1` | | -| loki.backend.resources.limits.cpu | string | `"500m"` | | -| loki.backend.resources.limits.memory | string | `"512Mi"` | | -| loki.backend.resources.requests.cpu | string | `"500m"` | | -| loki.backend.resources.requests.memory | string | `"512Mi"` | | | loki.enabled | bool | `true` | Enable grafana/loki. | | loki.gateway.extraArgs[0] | string | `"-config.expand-env=true"` | | | loki.gateway.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | | loki.gateway.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | | loki.gateway.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | | loki.gateway.replicas | int | `1` | | -| loki.gateway.resources.limits.cpu | string | `"500m"` | | -| loki.gateway.resources.limits.memory | string | `"512Mi"` | | -| loki.gateway.resources.requests.cpu | string | `"500m"` | | -| loki.gateway.resources.requests.memory | string | `"512Mi"` | | -| loki.global.dnsService | string | `"coredns"` | | | loki.loki.auth_enabled | bool | `false` | | | loki.loki.commonConfig.replication_factor | int | `1` | | | loki.loki.image.tag | string | `"3.5.1"` | | @@ -111,34 +102,22 @@ Moreh Inference Framework | loki.read.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | | loki.read.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | | loki.read.replicas | int | `1` | | -| loki.read.resources.limits.cpu | string | `"500m"` | | -| loki.read.resources.limits.memory | string | `"1Gi"` | | -| loki.read.resources.requests.cpu | string | `"500m"` | | -| loki.read.resources.requests.memory | string | `"1Gi"` | | | loki.write.extraArgs[0] | string | `"-config.expand-env=true"` | | | loki.write.extraEnvFrom[0].secretRef.name | string | `"loki-bucket"` | | | loki.write.extraEnvFrom[1].configMapRef.name | string | `"loki-bucket"` | | | loki.write.nodeSelector."node-role.kubernetes.io/control-plane" | string | `""` | | -| loki.write.persistence.storageClass | string | `""` | StorageClass for Loki write component (e.g. ceph-block, standard). | +| loki.write.persistence.volumeClaimsEnabled | bool | `false` | | | loki.write.replicas | int | `1` | | -| loki.write.resources.limits.cpu | string | `"500m"` | | -| loki.write.resources.limits.memory | string | `"512Mi"` | | -| loki.write.resources.requests.cpu | string | `"500m"` | | -| loki.write.resources.requests.memory | string | `"512Mi"` | | | lws.enabled | bool | `true` | Enable kubernetes-sigs/lws. Set to false if already deployed. | | minio.buckets[0].name | string | `"loki"` | | | minio.enabled | bool | `true` | Enable minio/minio as the S3-compatible object storage backend for Loki. Set to false if MinIO is already deployed; in that case, configure loki storage to point to the existing MinIO service. | | minio.mode | string | `"standalone"` | | -| minio.persistence.size | string | `"500Gi"` | | -| minio.persistence.storageClass | string | `""` | StorageClass for MinIO data volume (e.g. ceph-block, standard). | +| minio.persistence.enabled | bool | `false` | | | minio.policies[0].name | string | `"loki"` | | | minio.policies[0].statements[0].actions[0] | string | `"s3:*"` | | | minio.policies[0].statements[0].effect | string | `"Allow"` | | | minio.policies[0].statements[0].resources[0] | string | `"arn:aws:s3:::loki/*"` | | -| minio.resources.limits.cpu | string | `"1.5"` | | -| minio.resources.limits.memory | string | `"3072Mi"` | | -| minio.resources.requests.cpu | string | `"1"` | | -| minio.resources.requests.memory | string | `"2048Mi"` | | +| minio.resources.requests.memory | string | `"2Gi"` | | | minio.rootPassword | string | `"minio123!"` | MinIO root password. Override with a strong password in production. | | minio.rootUser | string | `"minio"` | MinIO root user. | | minio.users[0].accessKey | string | `"loki"` | | @@ -192,10 +171,6 @@ Moreh Inference Framework | vector.customConfig.transforms.mif_log_transform.source | string | `".namespace = .kubernetes.pod_namespace\n.node_name = \"$VECTOR_SELF_NODE_NAME\"\n.app = get(.kubernetes.pod_labels, [\"app.kubernetes.io/name\"]) ?? \"\"\n.inference_service = get(.kubernetes.pod_labels, [\"app.kubernetes.io/instance\"]) ?? \"\"\n.pool_name = get(.kubernetes.pod_labels, [\"mif.moreh.io/pool\"]) ?? \"\"\n.role = get(.kubernetes.pod_labels, [\"mif.moreh.io/role\"]) ?? \"\"\n\nlog_format = get(.kubernetes.pod_labels, [\"mif.moreh.io/log.format\"]) ?? \"\"\n\nif log_format == \"json\" {\n structured, err = parse_json(.message)\n if err == null {\n . = merge!(., structured)\n msg, err = get(., [\"msg\"])\n if err == null {\n .message = msg\n del(.msg)\n }\n time, err = get(., [\"time\"])\n if err == null {\n .timestamp = time\n del(.time)\n }\n }\n}\n\ndel(.file)\ndel(.source_type)\ndel(.stream)\ndel(.kubernetes)\n"` | | | vector.customConfig.transforms.mif_log_transform.type | string | `"remap"` | | | vector.enabled | bool | `true` | Enable vector/vector as a DaemonSet log collector. | -| vector.resources.limits.cpu | string | `"100m"` | | -| vector.resources.limits.memory | string | `"256Mi"` | | -| vector.resources.requests.cpu | string | `"100m"` | | -| vector.resources.requests.memory | string | `"256Mi"` | | | vector.role | string | `"Agent"` | | | vector.tolerations[0].effect | string | `"NoExecute"` | | | vector.tolerations[0].key | string | `"node.kubernetes.io/unschedulable"` | | diff --git a/deploy/helm/moai-inference-framework/values.yaml b/deploy/helm/moai-inference-framework/values.yaml index ef25594..59ded47 100644 --- a/deploy/helm/moai-inference-framework/values.yaml +++ b/deploy/helm/moai-inference-framework/values.yaml @@ -150,9 +150,6 @@ loki: # -- Enable grafana/loki. enabled: true - global: - dnsService: coredns - loki: auth_enabled: false commonConfig: From 4e7a4ab9b3ebdd5872c8d4574212cd0e76aaf868 Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Mon, 23 Feb 2026 12:44:54 +0900 Subject: [PATCH 21/23] MAF-19265: docs(log-collection): improve output formatting for command examples - Updated the expected output formatting in log-collection.mdx for both Loki and Vector commands to enhance readability and consistency. - Ensured alignment of output columns for better clarity in command results. --- website/docs/operations/log-collection.mdx | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index 10d0398..f3a5bfb 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -61,11 +61,11 @@ kubectl get pods -n mif -l app.kubernetes.io/name=loki ``` ```shell title="Expected output (all pods Running)" -NAME READY STATUS RESTARTS AGE -loki-backend-0 1/1 Running 0 2m -loki-gateway-xxxxxxxxx-xxxxx 1/1 Running 0 2m -loki-read-xxxxxxxxx-xxxxx 1/1 Running 0 2m -loki-write-0 1/1 Running 0 2m +NAME READY STATUS RESTARTS AGE +loki-backend-0 1/1 Running 0 2m +loki-gateway-xxxxxxxxx-xxxxx 1/1 Running 0 2m +loki-read-xxxxxxxxx-xxxxx 1/1 Running 0 2m +loki-write-0 1/1 Running 0 2m ``` Check that Vector is running on all nodes. @@ -75,9 +75,9 @@ kubectl get pods -n mif -l app.kubernetes.io/name=vector ``` ```shell title="Expected output (one pod per node, all Running)" -NAME READY STATUS RESTARTS AGE -vector-xxxxx 1/1 Running 0 2m -vector-yyyyy 1/1 Running 0 2m +NAME READY STATUS RESTARTS AGE +vector-xxxxx 1/1 Running 0 2m +vector-yyyyy 1/1 Running 0 2m ``` Check Vector logs to confirm it is shipping to Loki without errors. From 668541bb9975cb6390c0c99809d872e2ef2e579a Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Mon, 23 Feb 2026 15:36:20 +0900 Subject: [PATCH 22/23] MAF-19265: docs(log-collection): update diagram for log collection flow and enhance clarity - Replaced the text-based log collection flow with a mermaid diagram for better visualization. - Improved the representation of components involved in log collection, including Inference Service Pods, Vector, Loki, and Grafana. --- website/docs/operations/log-collection.mdx | 26 ++++++++++++---------- 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/log-collection.mdx index f3a5bfb..f845b7f 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/log-collection.mdx @@ -8,18 +8,20 @@ This document explains how to enable centralized log collection for the MoAI Inf ## Overview -``` -Inference Service Pods - │ (container logs) - ▼ - Vector DaemonSet ← runs on every node - │ transforms + labels logs - │ (namespace, inference_service, pool_name, …) - ▼ - Loki Gateway ← stores logs in MinIO (S3) - │ - ▼ - Grafana (LogQL) ← search and visualize logs +```mermaid +flowchart TB + pods["`**Inference Service Pods**`"] + vector["`**Vector**`"] + grafana["`**Grafana**`"] + + subgraph log_storage["Log Storage"] + loki["`**Loki**`"] + minio[("**MinIO**")] + end + + pods -->|"container logs"| vector + vector -->|"transforms + labels"| loki + loki -->|"LogQL"| grafana ``` ### Labels available for log search From cc9d1c8e86f9bcbfd8c52f7a34b9bf69a822cd10 Mon Sep 17 00:00:00 2001 From: seongsu-dev <seongsu.kwon@moreh.io> Date: Mon, 23 Feb 2026 15:38:53 +0900 Subject: [PATCH 23/23] MAF-19265: docs(log-collection): add comprehensive guide for centralized log collection with Loki and Vector - Introduced a new document detailing the setup and configuration for centralized log collection using Loki and Vector within the MoAI Inference Framework. - Included an overview diagram, prerequisites, installation steps, verification commands, and guidelines for enabling log collection on pods. - Provided detailed instructions for searching logs in Grafana and outlined architecture details for Loki, Vector, and MinIO. --- website/docs/operations/{ => monitoring}/log-collection.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename website/docs/operations/{ => monitoring}/log-collection.mdx (99%) diff --git a/website/docs/operations/log-collection.mdx b/website/docs/operations/monitoring/log-collection.mdx similarity index 99% rename from website/docs/operations/log-collection.mdx rename to website/docs/operations/monitoring/log-collection.mdx index f845b7f..0f3d73e 100644 --- a/website/docs/operations/log-collection.mdx +++ b/website/docs/operations/monitoring/log-collection.mdx @@ -1,6 +1,6 @@ --- title: Log Collection (Loki + Vector) -sidebar_label: Log Collection +sidebar_label: Logs sidebar_position: 3 ---