- {children}
+
+ {topChildren}
{controls.map((control, index) => (
@@ -67,6 +69,8 @@ export const ControlPanel = ({
{control.label}
))}
+
+ {botChildren}
diff --git a/autogpt_platform/frontend/src/components/flow.css b/autogpt_platform/frontend/src/components/flow.css
index 830099e75..30ef76b68 100644
--- a/autogpt_platform/frontend/src/components/flow.css
+++ b/autogpt_platform/frontend/src/components/flow.css
@@ -111,6 +111,9 @@ textarea::placeholder {
}
.flow-container {
- width: 100%;
- height: 600px; /* Adjust this height as needed */
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100vw;
+ height: 100vh;
}
diff --git a/autogpt_platform/frontend/src/components/ui/button.tsx b/autogpt_platform/frontend/src/components/ui/button.tsx
index 467f58b2d..2239996ac 100644
--- a/autogpt_platform/frontend/src/components/ui/button.tsx
+++ b/autogpt_platform/frontend/src/components/ui/button.tsx
@@ -25,7 +25,7 @@ const buttonVariants = cva(
default: "h-9 px-4 py-2",
sm: "h-8 rounded-md px-3 text-xs",
lg: "h-10 rounded-md px-8",
- primary: "h-14 w-44 rounded-2xl",
+ primary: "md:h-14 md:w-44 rounded-2xl h-10 w-28",
icon: "h-9 w-9",
},
},
diff --git a/autogpt_platform/frontend/src/components/ui/render.tsx b/autogpt_platform/frontend/src/components/ui/render.tsx
new file mode 100644
index 000000000..b6147130d
--- /dev/null
+++ b/autogpt_platform/frontend/src/components/ui/render.tsx
@@ -0,0 +1,82 @@
+"use client";
+
+import * as React from "react";
+import Image from "next/image";
+
+const getYouTubeVideoId = (url: string) => {
+ const regExp =
+ /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
+ const match = url.match(regExp);
+ return match && match[7].length === 11 ? match[7] : null;
+};
+
+const isValidVideoUrl = (url: string): boolean => {
+ const videoExtensions = /\.(mp4|webm|ogg)$/i;
+ const youtubeRegex = /^(https?:\/\/)?(www\.)?(youtube\.com|youtu\.?be)\/.+$/;
+ return videoExtensions.test(url) || youtubeRegex.test(url);
+};
+
+const isValidImageUrl = (url: string): boolean => {
+ const imageExtensions = /\.(jpeg|jpg|gif|png|svg|webp)$/i;
+ return imageExtensions.test(url);
+};
+
+const VideoRenderer: React.FC<{ videoUrl: string }> = ({ videoUrl }) => {
+ const videoId = getYouTubeVideoId(videoUrl);
+ return (
+
+ {videoId ? (
+
+ ) : (
+
+ )}
+
+ );
+};
+
+const ImageRenderer: React.FC<{ imageUrl: string }> = ({ imageUrl }) => (
+
+
+
+);
+
+const TextRenderer: React.FC<{ value: any; truncateLongData?: boolean }> = ({
+ value,
+ truncateLongData,
+}) => {
+ const maxChars = 100;
+ const text =
+ typeof value === "object" ? JSON.stringify(value, null, 2) : String(value);
+ return truncateLongData && text.length > maxChars
+ ? text.slice(0, maxChars) + "..."
+ : text;
+};
+
+export const ContentRenderer: React.FC<{
+ value: any;
+ truncateLongData?: boolean;
+}> = ({ value, truncateLongData }) => {
+ if (typeof value === "string") {
+ if (isValidVideoUrl(value)) {
+ return
;
+ } else if (isValidImageUrl(value)) {
+ return
;
+ }
+ }
+ return
;
+};
diff --git a/autogpt_platform/infra/helm/autogpt-market/templates/backendconfig.yaml b/autogpt_platform/infra/helm/autogpt-market/templates/backendconfig.yaml
index e7f7c8a8f..0e7c138d3 100644
--- a/autogpt_platform/infra/helm/autogpt-market/templates/backendconfig.yaml
+++ b/autogpt_platform/infra/helm/autogpt-market/templates/backendconfig.yaml
@@ -1,7 +1,7 @@
apiVersion: cloud.google.com/v1
kind: BackendConfig
metadata:
- name: {{ include "autogpt-market.fullname" . }}
+ name: {{ include "autogpt-market.fullname" . }}-backend-config
spec:
customRequestHeaders:
headers:
diff --git a/autogpt_platform/infra/helm/autogpt-market/templates/deployment.yaml b/autogpt_platform/infra/helm/autogpt-market/templates/deployment.yaml
index a1b10c22e..cb6d7faa4 100644
--- a/autogpt_platform/infra/helm/autogpt-market/templates/deployment.yaml
+++ b/autogpt_platform/infra/helm/autogpt-market/templates/deployment.yaml
@@ -41,7 +41,7 @@ spec:
imagePullPolicy: {{ .Values.image.pullPolicy }}
ports:
- name: http
- containerPort: {{ .Values.service.port }}
+ containerPort: {{ .Values.service.targetPort }}
protocol: TCP
livenessProbe:
{{- toYaml .Values.livenessProbe | nindent 12 }}
@@ -53,15 +53,6 @@ spec:
volumeMounts:
{{- toYaml . | nindent 12 }}
{{- end }}
- - name: cloud-sql-proxy
- image: "{{ .Values.cloudSqlProxy.image.repository }}:{{ .Values.cloudSqlProxy.image.tag }}"
- args:
- - "--structured-logs"
- {{- if .Values.cloudSqlProxy.usePrivateIp }}
- - "--private-ip"
- {{- end }}
- - "--port={{ .Values.cloudSqlProxy.port }}"
- - "{{ .Values.cloudSqlProxy.instanceConnectionName }}"
{{- with .Values.volumes }}
volumes:
{{- toYaml . | nindent 8 }}
diff --git a/autogpt_platform/infra/helm/autogpt-market/templates/service.yaml b/autogpt_platform/infra/helm/autogpt-market/templates/service.yaml
index ca126063d..3895c760f 100644
--- a/autogpt_platform/infra/helm/autogpt-market/templates/service.yaml
+++ b/autogpt_platform/infra/helm/autogpt-market/templates/service.yaml
@@ -4,11 +4,15 @@ metadata:
name: {{ include "autogpt-market.fullname" . }}
labels:
{{- include "autogpt-market.labels" . | nindent 4 }}
+ {{- with .Values.service.annotations }}
+ annotations:
+ {{- toYaml . | nindent 4 }}
+ {{- end }}
spec:
type: {{ .Values.service.type }}
ports:
- port: {{ .Values.service.port }}
- targetPort: http
+ targetPort: {{ .Values.service.targetPort }}
protocol: TCP
name: http
selector:
diff --git a/autogpt_platform/infra/helm/autogpt-market/values.dev.yaml b/autogpt_platform/infra/helm/autogpt-market/values.dev.yaml
index 27fe4b2bd..e8588fe0f 100644
--- a/autogpt_platform/infra/helm/autogpt-market/values.dev.yaml
+++ b/autogpt_platform/infra/helm/autogpt-market/values.dev.yaml
@@ -12,11 +12,11 @@ serviceAccount:
service:
type: ClusterIP
- port: 8000
- targetPort: 8005
+ port: 8015
+ targetPort: 8015
annotations:
cloud.google.com/neg: '{"ingress": true}'
- beta.cloud.google.com/backend-config: '{"default": "autogpt-market"}'
+ beta.cloud.google.com/backend-config: '{"default": "autogpt-market-backend-config"}'
ingress:
enabled: true
@@ -25,7 +25,7 @@ ingress:
kubernetes.io/ingress.class: gce
kubernetes.io/ingress.global-static-ip-name: "agpt-dev-agpt-market-ip"
networking.gke.io/managed-certificates: "autogpt-market-cert"
- kubernetes.io/ingress.allow-http: "false"
+ networking.gke.io/v1beta1.FrontendConfig: "autogpt-market-frontend-config"
hosts:
- host: dev-market.agpt.co
paths:
@@ -34,12 +34,12 @@ ingress:
backend:
service:
name: autogpt-market
- port: 8000
+ port: 8015
defaultBackend:
service:
name: autogpt-market
port:
- number: 8000
+ number: 8015
resources:
requests:
@@ -52,7 +52,7 @@ resources:
livenessProbe:
httpGet:
path: /health
- port: 8000
+ port: 8015
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 10
@@ -60,7 +60,7 @@ livenessProbe:
readinessProbe:
httpGet:
path: /health
- port: 8000
+ port: 8015
initialDelaySeconds: 60
periodSeconds: 20
timeoutSeconds: 10
@@ -95,9 +95,14 @@ cors:
env:
APP_ENV: "dev"
+ PYRO_HOST: "0.0.0.0"
ENABLE_AUTH: "true"
SUPABASE_JWT_SECRET: ""
- SUPABASE_ANON_KEY: ""
- SUPABASE_URL: ""
DATABASE_URL: ""
+ SENTRY_DSN: ""
+ SUPABASE_SERVICE_ROLE_KEY: ""
+ GITHUB_CLIENT_ID: ""
+ GITHUB_CLIENT_SECRET: ""
+ FRONTEND_BASE_URL: "https://dev-builder.agpt.co/"
+ SUPABASE_URL: "https://adfjtextkuilwuhzdjpf.supabase.co"
BACKEND_CORS_ALLOW_ORIGINS: "https://dev-builder.agpt.co"
\ No newline at end of file
diff --git a/autogpt_platform/infra/helm/autogpt-market/values.prod.yaml b/autogpt_platform/infra/helm/autogpt-market/values.prod.yaml
new file mode 100644
index 000000000..702dcce86
--- /dev/null
+++ b/autogpt_platform/infra/helm/autogpt-market/values.prod.yaml
@@ -0,0 +1,109 @@
+# prod values, overwrite base values as needed.
+
+image:
+ repository: us-east1-docker.pkg.dev/agpt-prod/agpt-market-prod/agpt-market-prod
+ pullPolicy: Always
+ tag: "latest"
+
+serviceAccount:
+ annotations:
+ iam.gke.io/gcp-service-account: "prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ name: "prod-agpt-market-sa"
+
+service:
+ type: ClusterIP
+ port: 8015
+ targetPort: 8015
+ annotations:
+ cloud.google.com/neg: '{"ingress": true}'
+ beta.cloud.google.com/backend-config: '{"default": "autogpt-market-backend-config"}'
+
+ingress:
+ enabled: true
+ className: "gce"
+ annotations:
+ kubernetes.io/ingress.class: gce
+ kubernetes.io/ingress.global-static-ip-name: "agpt-prod-agpt-market-ip"
+ networking.gke.io/managed-certificates: "autogpt-market-cert"
+ networking.gke.io/v1beta1.FrontendConfig: "autogpt-market-frontend-config"
+ hosts:
+ - host: market.agpt.co
+ paths:
+ - path: /
+ pathType: Prefix
+ backend:
+ service:
+ name: autogpt-market
+ port: 8015
+ defaultBackend:
+ service:
+ name: autogpt-market
+ port:
+ number: 8015
+
+resources:
+ requests:
+ cpu: 200m
+ memory: 1Gi
+ limits:
+ cpu: 2
+ memory: 2Gi
+
+livenessProbe:
+ httpGet:
+ path: /health
+ port: 8015
+ initialDelaySeconds: 60
+ periodSeconds: 20
+ timeoutSeconds: 10
+ failureThreshold: 12
+readinessProbe:
+ httpGet:
+ path: /health
+ port: 8015
+ initialDelaySeconds: 60
+ periodSeconds: 20
+ timeoutSeconds: 10
+ failureThreshold: 12
+
+domain: "market.agpt.co"
+
+cloudSqlProxy:
+ image:
+ repository: gcr.io/cloud-sql-connectors/cloud-sql-proxy
+ tag: 2.11.4
+ instanceConnectionName: "agpt-prod:us-central1:agpt-server-prod"
+ port: 5432
+ resources:
+ requests:
+ memory: "2Gi"
+ cpu: "1"
+
+cors:
+ allowOrigin: "https://platform.agpt.co"
+ allowMethods:
+ - "GET"
+ - "POST"
+ - "PUT"
+ - "DELETE"
+ - "OPTIONS"
+ allowHeaders:
+ - "Content-Type"
+ - "Authorization"
+ maxAge: 3600
+ allowCredentials: true
+
+env:
+ APP_ENV: "prod"
+ PYRO_HOST: "0.0.0.0"
+ ENABLE_AUTH: "true"
+ SUPABASE_JWT_SECRET: ""
+ DATABASE_URL: ""
+ SENTRY_DSN: ""
+ SUPABASE_SERVICE_ROLE_KEY: ""
+ GITHUB_CLIENT_ID: ""
+ GITHUB_CLIENT_SECRET: ""
+ FRONTEND_BASE_URL: "https://platform.agpt.co/"
+ SUPABASE_URL: "https://bgwpwdsxblryihinutbx.supabase.co"
+ BACKEND_CORS_ALLOW_ORIGINS: "https://platform.agpt.co"
+
diff --git a/autogpt_platform/infra/helm/autogpt-market/values.yaml b/autogpt_platform/infra/helm/autogpt-market/values.yaml
index b5227f5f0..6b6bd1add 100644
--- a/autogpt_platform/infra/helm/autogpt-market/values.yaml
+++ b/autogpt_platform/infra/helm/autogpt-market/values.yaml
@@ -71,15 +71,6 @@ resources: {}
# cpu: 100m
# memory: 128Mi
-livenessProbe:
- httpGet:
- path: /
- port: http
-readinessProbe:
- httpGet:
- path: /
- port: http
-
autoscaling:
enabled: false
minReplicas: 1
diff --git a/autogpt_platform/infra/helm/redis-values.prod.yaml b/autogpt_platform/infra/helm/redis-values.prod.yaml
new file mode 100644
index 000000000..ea5914477
--- /dev/null
+++ b/autogpt_platform/infra/helm/redis-values.prod.yaml
@@ -0,0 +1,15 @@
+architecture: standalone
+auth:
+ enabled: true
+ password: "" #empty on purpose
+master:
+ persistence:
+ enabled: true
+ size: 3Gi
+ configmap:
+ redis.conf: |
+ bind 127.0.0.1
+ protected-mode yes
+ requirepass password
+replica:
+ replicaCount: 0
\ No newline at end of file
diff --git a/autogpt_platform/infra/terraform/environments/prod.tfvars b/autogpt_platform/infra/terraform/environments/prod.tfvars
new file mode 100644
index 000000000..43f2ae63c
--- /dev/null
+++ b/autogpt_platform/infra/terraform/environments/prod.tfvars
@@ -0,0 +1,100 @@
+project_id = "agpt-prod"
+region = "us-central1"
+zone = "us-central1-a"
+network_name = "prod-gke-network"
+subnet_name = "prod-gke-subnet"
+subnet_cidr = "10.0.0.0/24"
+cluster_name = "prod-gke-cluster"
+node_count = 4
+node_pool_name = "prod-main-pool"
+machine_type = "e2-highmem-4"
+disk_size_gb = 100
+static_ip_names = ["agpt-backend-ip", "agpt-frontend-ip", "agpt-ws-backend-ip", "agpt-market-ip"]
+
+
+service_accounts = {
+ "prod-agpt-backend-sa" = {
+ display_name = "AutoGPT prod backend Account"
+ description = "Service account for agpt prod backend"
+ },
+ "prod-agpt-frontend-sa" = {
+ display_name = "AutoGPT prod frontend Account"
+ description = "Service account for agpt prod frontend"
+ },
+ "prod-agpt-ws-backend-sa" = {
+ display_name = "AutoGPT prod WebSocket backend Account"
+ description = "Service account for agpt prod websocket backend"
+ },
+ "prod-agpt-market-sa" = {
+ display_name = "AutoGPT prod Market backend Account"
+ description = "Service account for agpt prod market backend"
+ }
+}
+
+workload_identity_bindings = {
+ "prod-agpt-backend-workload-identity" = {
+ service_account_name = "prod-agpt-backend-sa"
+ namespace = "prod-agpt"
+ ksa_name = "prod-agpt-backend-sa"
+ },
+ "prod-agpt-frontend-workload-identity" = {
+ service_account_name = "prod-agpt-frontend-sa"
+ namespace = "prod-agpt"
+ ksa_name = "prod-agpt-frontend-sa"
+ },
+ "prod-agpt-ws-backend-workload-identity" = {
+ service_account_name = "prod-agpt-ws-backend-sa"
+ namespace = "prod-agpt"
+ ksa_name = "prod-agpt-ws-backend-sa"
+ },
+ "prod-agpt-market-workload-identity" = {
+ service_account_name = "prod-agpt-market-sa"
+ namespace = "prod-agpt"
+ ksa_name = "prod-agpt-market-sa"
+ }
+}
+
+role_bindings = {
+ "roles/container.developer" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-ws-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ],
+ "roles/cloudsql.client" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ],
+ "roles/cloudsql.editor" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ],
+ "roles/cloudsql.instanceUser" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ],
+ "roles/iam.workloadIdentityUser" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-ws-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ]
+ "roles/compute.networkUser" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-ws-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ],
+ "roles/container.hostServiceAgentUser" = [
+ "serviceAccount:prod-agpt-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-frontend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-ws-backend-sa@agpt-prod.iam.gserviceaccount.com",
+ "serviceAccount:prod-agpt-market-sa@agpt-prod.iam.gserviceaccount.com"
+ ]
+}
+
+pods_ip_cidr_range = "10.1.0.0/16"
+services_ip_cidr_range = "10.2.0.0/20"
\ No newline at end of file
diff --git a/docs/mkdocs.yml b/docs/mkdocs.yml
index a397a00b6..28dc686c4 100644
--- a/docs/mkdocs.yml
+++ b/docs/mkdocs.yml
@@ -1,6 +1,8 @@
site_name: AutoGPT Documentation
site_url: https://docs.agpt.co/
repo_url: https://github.com/Significant-Gravitas/AutoGPT
+repo_name: AutoGPT
+edit_uri: edit/master/docs/content
docs_dir: content
nav:
- Home: index.md
@@ -10,7 +12,7 @@ nav:
- Setup: server/setup.md
- Advanced Setup: server/advanced_setup.md
- Using Ollama: server/ollama.md
- - Using D-ID: serveer/d_id.md
+ - Using D-ID: server/d_id.md
- AutoGPT Agent:
- Introduction: AutoGPT/index.md
@@ -69,14 +71,27 @@ nav:
theme:
name: material
custom_dir: overrides
+ language: en
icon:
+ repo: fontawesome/brands/github
logo: material/book-open-variant
- favicon: favicon.png
+ edit: material/pencil
+ view: material/eye
+ favicon: assets/favicon.png
features:
- navigation.sections
- - toc.follow
+ - navigation.footer
- navigation.top
+ - navigation.tracking
+ - navigation.tabs
+ # - navigation.path
+ - toc.follow
+ - toc.integrate
+ - content.action.edit
+ - content.action.view
- content.code.copy
+ - content.code.annotate
+ - content.tabs.link
palette:
# Palette toggle for light mode
- media: "(prefers-color-scheme: light)"
@@ -137,6 +152,20 @@ markdown_extensions:
plugins:
- table-reader
- search
+ - git-revision-date-localized:
+ enable_creation_date: true
+
+
+extra:
+ social:
+ - icon: fontawesome/brands/github
+ link: https://github.com/Significant-Gravitas/AutoGPT
+ - icon: fontawesome/brands/x-twitter
+ link: https://x.com/Auto_GPT
+ - icon: fontawesome/brands/instagram
+ link: https://www.instagram.com/autogpt/
+ - icon: fontawesome/brands/discord
+ link: https://discord.gg/autogpt
extra_javascript:
- https://unpkg.com/tablesort@5.3.0/dist/tablesort.min.js
diff --git a/docs/favicon.png b/docs/overrides/assets/favicon.png
similarity index 100%
rename from docs/favicon.png
rename to docs/overrides/assets/favicon.png
diff --git a/docs/requirements.txt b/docs/requirements.txt
index 074e062b0..73c768233 100644
--- a/docs/requirements.txt
+++ b/docs/requirements.txt
@@ -2,3 +2,4 @@ mkdocs
mkdocs-material
mkdocs-table-reader-plugin
pymdown-extensions
+mkdocs-git-revision-date-localized-plugin