Skip to content

Commit 9e8d2f7

Browse files
Merge pull request #792 from simstudioai/staging
v0.3.11: arm64 runner, CDN video support
2 parents c91c132 + eeb1a34 commit 9e8d2f7

File tree

13 files changed

+167
-32
lines changed

13 files changed

+167
-32
lines changed

.github/workflows/build.yml

Lines changed: 94 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,43 @@ on:
77

88
jobs:
99
build-and-push:
10-
runs-on: ubuntu-latest-8-cores
1110
strategy:
1211
fail-fast: false
1312
matrix:
1413
include:
14+
# AMD64 builds on x86 runners
1515
- dockerfile: ./docker/app.Dockerfile
1616
image: ghcr.io/simstudioai/simstudio
17+
platform: linux/amd64
18+
arch: amd64
19+
runner: linux-x64-8-core
1720
- dockerfile: ./docker/db.Dockerfile
1821
image: ghcr.io/simstudioai/migrations
22+
platform: linux/amd64
23+
arch: amd64
24+
runner: linux-x64-8-core
1925
- dockerfile: ./docker/realtime.Dockerfile
2026
image: ghcr.io/simstudioai/realtime
27+
platform: linux/amd64
28+
arch: amd64
29+
runner: linux-x64-8-core
30+
# ARM64 builds on native ARM64 runners
31+
- dockerfile: ./docker/app.Dockerfile
32+
image: ghcr.io/simstudioai/simstudio
33+
platform: linux/arm64
34+
arch: arm64
35+
runner: linux-arm64-8-core
36+
- dockerfile: ./docker/db.Dockerfile
37+
image: ghcr.io/simstudioai/migrations
38+
platform: linux/arm64
39+
arch: arm64
40+
runner: linux-arm64-8-core
41+
- dockerfile: ./docker/realtime.Dockerfile
42+
image: ghcr.io/simstudioai/realtime
43+
platform: linux/arm64
44+
arch: arm64
45+
runner: linux-arm64-8-core
46+
runs-on: ${{ matrix.runner }}
2147
permissions:
2248
contents: read
2349
packages: write
@@ -26,9 +52,6 @@ jobs:
2652
- name: Checkout repository
2753
uses: actions/checkout@v4
2854

29-
- name: Set up QEMU
30-
uses: docker/setup-qemu-action@v3
31-
3255
- name: Set up Docker Buildx
3356
uses: docker/setup-buildx-action@v3
3457

@@ -46,21 +69,79 @@ jobs:
4669
with:
4770
images: ${{ matrix.image }}
4871
tags: |
49-
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
50-
type=ref,event=pr
51-
type=semver,pattern={{version}}
52-
type=semver,pattern={{major}}.{{minor}}
53-
type=semver,pattern={{major}}.{{minor}}.{{patch}}
54-
type=sha,format=long
72+
type=raw,value=latest-${{ matrix.arch }},enable=${{ github.ref == 'refs/heads/main' }}
73+
type=ref,event=pr,suffix=-${{ matrix.arch }}
74+
type=semver,pattern={{version}},suffix=-${{ matrix.arch }}
75+
type=semver,pattern={{major}}.{{minor}},suffix=-${{ matrix.arch }}
76+
type=semver,pattern={{major}}.{{minor}}.{{patch}},suffix=-${{ matrix.arch }}
77+
type=sha,format=long,suffix=-${{ matrix.arch }}
5578
5679
- name: Build and push Docker image
5780
uses: docker/build-push-action@v6
5881
with:
5982
context: .
6083
file: ${{ matrix.dockerfile }}
61-
platforms: linux/amd64,linux/arm64
84+
platforms: ${{ matrix.platform }}
6285
push: ${{ github.event_name != 'pull_request' }}
6386
tags: ${{ steps.meta.outputs.tags }}
6487
labels: ${{ steps.meta.outputs.labels }}
65-
cache-from: type=gha
66-
cache-to: type=gha,mode=max
88+
cache-from: type=gha,scope=build-v2
89+
cache-to: type=gha,mode=max,scope=build-v2
90+
91+
create-manifests:
92+
runs-on: ubuntu-latest
93+
needs: build-and-push
94+
if: github.event_name != 'pull_request'
95+
strategy:
96+
matrix:
97+
include:
98+
- image: ghcr.io/simstudioai/simstudio
99+
- image: ghcr.io/simstudioai/migrations
100+
- image: ghcr.io/simstudioai/realtime
101+
permissions:
102+
contents: read
103+
packages: write
104+
105+
steps:
106+
- name: Log in to the Container registry
107+
uses: docker/login-action@v3
108+
with:
109+
registry: ghcr.io
110+
username: ${{ github.repository_owner }}
111+
password: ${{ secrets.GITHUB_TOKEN }}
112+
113+
- name: Extract metadata for manifest
114+
id: meta
115+
uses: docker/metadata-action@v5
116+
with:
117+
images: ${{ matrix.image }}
118+
tags: |
119+
type=raw,value=latest,enable=${{ github.ref == 'refs/heads/main' }}
120+
type=ref,event=pr
121+
type=semver,pattern={{version}}
122+
type=semver,pattern={{major}}.{{minor}}
123+
type=semver,pattern={{major}}.{{minor}}.{{patch}}
124+
type=sha,format=long
125+
126+
- name: Create and push manifest
127+
run: |
128+
# Extract the tags from metadata
129+
TAGS="${{ steps.meta.outputs.tags }}"
130+
131+
# Create manifest for each tag
132+
for tag in $TAGS; do
133+
echo "Creating manifest for $tag"
134+
echo "Looking for images: ${tag}-amd64 and ${tag}-arm64"
135+
136+
# Check if both architecture images exist before creating manifest
137+
if docker manifest inspect ${tag}-amd64 >/dev/null 2>&1 && docker manifest inspect ${tag}-arm64 >/dev/null 2>&1; then
138+
docker manifest create $tag \
139+
${tag}-amd64 \
140+
${tag}-arm64
141+
docker manifest push $tag
142+
echo "Successfully created and pushed manifest for $tag"
143+
else
144+
echo "Warning: One or both architecture images not found for $tag"
145+
echo "Skipping manifest creation for this tag"
146+
fi
147+
done

apps/docs/components/ui/video.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
import { getVideoUrl } from '@/lib/utils'
2+
3+
interface VideoProps {
4+
src: string
5+
className?: string
6+
autoPlay?: boolean
7+
loop?: boolean
8+
muted?: boolean
9+
playsInline?: boolean
10+
}
11+
12+
export function Video({
13+
src,
14+
className = 'w-full -mb-2 rounded-lg',
15+
autoPlay = true,
16+
loop = true,
17+
muted = true,
18+
playsInline = true,
19+
}: VideoProps) {
20+
return (
21+
<video
22+
autoPlay={autoPlay}
23+
loop={loop}
24+
muted={muted}
25+
playsInline={playsInline}
26+
className={className}
27+
src={getVideoUrl(src)}
28+
/>
29+
)
30+
}

apps/docs/content/docs/blocks/evaluator.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { Callout } from 'fumadocs-ui/components/callout'
77
import { Step, Steps } from 'fumadocs-ui/components/steps'
88
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
99
import { ThemeImage } from '@/components/ui/theme-image'
10+
import { Video } from '@/components/ui/video'
1011

1112
The Evaluator block uses AI to score and assess content quality based on metrics you define. Perfect for quality control, A/B testing, and ensuring your AI outputs meet specific standards.
1213

@@ -63,7 +64,7 @@ Choose an AI model to perform the evaluation:
6364
**Local Models**: Any model running on Ollama
6465

6566
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
66-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/models.mp4"></video>
67+
<Video src="models.mp4" />
6768
</div>
6869

6970
**Recommendation**: Use models with strong reasoning capabilities like GPT-4o or Claude 3.7 Sonnet for more accurate evaluations.

apps/docs/content/docs/blocks/index.mdx

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ import { Card, Cards } from 'fumadocs-ui/components/card'
77
import { Step, Steps } from 'fumadocs-ui/components/steps'
88
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
99
import { BlockTypes } from '@/components/ui/block-types'
10+
import { Video } from '@/components/ui/video'
1011

1112
Blocks are the building components you connect together to create AI workflows. Think of them as specialized modules that each handle a specific task—from chatting with AI models to making API calls or processing data.
1213

1314
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
14-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/connections.mp4"></video>
15+
<Video src="connections.mp4" />
1516
</div>
1617

1718
## Core Block Types
@@ -62,7 +63,7 @@ You create workflows by connecting blocks together. The output of one block beco
6263
- **Branching paths**: Some blocks can route to different paths based on conditions
6364

6465
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
65-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/connections.mp4"></video>
66+
<Video src="connections.mp4" />
6667
</div>
6768

6869
## Common Patterns

apps/docs/content/docs/blocks/router.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import { Step, Steps } from 'fumadocs-ui/components/steps'
88
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
99
import { Accordion, Accordions } from 'fumadocs-ui/components/accordion'
1010
import { ThemeImage } from '@/components/ui/theme-image'
11+
import { Video } from '@/components/ui/video'
1112

1213
The Router block uses AI to intelligently decide which path your workflow should take next. Unlike Condition blocks that use simple rules, Router blocks can understand context and make smart routing decisions based on content analysis.
1314

@@ -103,7 +104,7 @@ Choose an AI model to power the routing decision:
103104
**Local Models**: Any model running on Ollama
104105

105106
<div className="w-full max-w-2xl mx-auto overflow-hidden rounded-lg">
106-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/router-model-dropdown.mp4"></video>
107+
<Video src="router-model-dropdown.mp4" />
107108
</div>
108109

109110
**Recommendation**: Use models with strong reasoning capabilities like GPT-4o or Claude 3.7 Sonnet for more accurate routing decisions.

apps/docs/content/docs/connections/index.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ description: Connect your blocks to one another.
66
import { Callout } from 'fumadocs-ui/components/callout'
77
import { Card, Cards } from 'fumadocs-ui/components/card'
88
import { ConnectIcon } from '@/components/icons'
9+
import { Video } from '@/components/ui/video'
910

1011
Connections are the pathways that allow data to flow between blocks in your workflow. They define how information is passed from one block to another, enabling you to create sophisticated, multi-step processes.
1112

@@ -15,7 +16,7 @@ Connections are the pathways that allow data to flow between blocks in your work
1516
</Callout>
1617

1718
<div className="mx-auto w-full overflow-hidden rounded-lg">
18-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/connections.mp4"></video>
19+
<Video src="connections.mp4" />
1920
</div>
2021

2122
## Connection Types

apps/docs/content/docs/connections/tags.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,12 @@ description: Using connection tags to reference data between blocks
44
---
55

66
import { Callout } from 'fumadocs-ui/components/callout'
7+
import { Video } from '@/components/ui/video'
78

89
Connection tags are visual representations of the data available from connected blocks. They provide an easy way to reference outputs from previous blocks in your workflow.
910

1011
<div className="mx-auto w-full overflow-hidden rounded-lg">
11-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/connections.mp4"></video>
12+
<Video src="connections.mp4" />
1213
</div>
1314

1415
### What Are Connection Tags?

apps/docs/content/docs/execution/basics.mdx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@ import {
2020
LoopIcon,
2121
ParallelIcon,
2222
} from '@/components/icons'
23+
import { Video } from '@/components/ui/video'
2324

2425
When you run a workflow in Sim Studio, the execution engine follows a systematic process to ensure blocks are executed in the correct order with proper data flow.
2526

@@ -162,7 +163,7 @@ Run workflows on-demand through the Sim Studio interface by clicking the "Run" b
162163
- Workflows that need human supervision
163164

164165
<div className="mx-auto w-full overflow-hidden rounded-lg">
165-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/input-format.mp4"></video>
166+
<Video src="input-format.mp4" />
166167
</div>
167168

168169
### Scheduled Execution
@@ -175,7 +176,7 @@ Configure workflows to run automatically on a specified schedule:
175176
- Set minimum and maximum execution intervals
176177

177178
<div className="mx-auto w-full overflow-hidden rounded-lg">
178-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/configure-schedule.mp4"></video>
179+
<Video src="configure-schedule.mp4" />
179180
</div>
180181

181182
### API Endpoints
@@ -188,15 +189,15 @@ Each workflow can be exposed as an API endpoint:
188189
- Receive execution results as JSON responses
189190

190191
<div className="mx-auto w-full overflow-hidden rounded-lg">
191-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/api-deployment.mp4"></video>
192+
<Video src="api-deployment.mp4" />
192193
</div>
193194

194195
#### Viewing Deployed APIs
195196

196197
Monitor your deployed workflow APIs and their current state:
197198

198199
<div className="mx-auto w-full overflow-hidden rounded-lg">
199-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/api-redeployment.mp4"></video>
200+
<Video src="api-redeployment.mp4" />
200201
</div>
201202

202203
This shows how to view the deployed state and compare with the original deployed API configuration.
@@ -211,7 +212,7 @@ Configure workflows to execute in response to external events:
211212
- Support for specialized webhooks (GitHub, Stripe, etc.)
212213

213214
<div className="mx-auto w-full overflow-hidden rounded-lg">
214-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/webhooks.mp4"></video>
215+
<Video src="webhooks.mp4" />
215216
</div>
216217

217218
<Callout type="info">

apps/docs/content/docs/getting-started/index.mdx

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import {
2323
PerplexityIcon,
2424
SlackIcon,
2525
} from '@/components/icons'
26+
import { Video } from '@/components/ui/video'
2627

2728
This tutorial will guide you through building your first AI workflow in Sim Studio. We'll create a people research agent that can find information about individuals using state-of-the-art LLM-Search tools.
2829

@@ -63,7 +64,7 @@ A people research agent that:
6364
- **User Prompt**: Drag the connection from the Start block's output into this field (this connects `<start.input>` to the user prompt)
6465

6566
<div className="mx-auto w-full overflow-hidden rounded-lg">
66-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/static/examples/started/started-2.mp4"></video>
67+
<Video src="examples/started-2.mp4" />
6768
</div>
6869
</Step>
6970

@@ -77,7 +78,7 @@ A people research agent that:
7778
- Add your API keys for both tools (this allows the agent to search the web and access additional information)
7879

7980
<div className="mx-auto w-3/5 overflow-hidden rounded-lg">
80-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/static/examples/started/started-3.mp4"></video>
81+
<Video src="examples/started-3.mp4" />
8182
</div>
8283
</Step>
8384

@@ -92,7 +93,7 @@ A people research agent that:
9293
You should see the agent's response analyzing the person described in your text.
9394

9495
<div className="mx-auto w-full overflow-hidden rounded-lg">
95-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/static/examples/started/started-4.mp4"></video>
96+
<Video src="examples/started-4.mp4" />
9697
</div>
9798
</Step>
9899

@@ -105,7 +106,7 @@ A people research agent that:
105106
- The AI will generate a JSON schema for you automatically
106107

107108
<div className="mx-auto w-full overflow-hidden rounded-lg">
108-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/static/examples/started/started-5.mp4"></video>
109+
<Video src="examples/started-5.mp4" />
109110
</div>
110111
</Step>
111112

@@ -120,7 +121,7 @@ A people research agent that:
120121
You should now see structured JSON output with the person's information organized into location, profession, and education fields.
121122

122123
<div className="mx-auto w-full overflow-hidden rounded-lg">
123-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/static/examples/started/started-6.mp4"></video>
124+
<Video src="examples/started-6.mp4" />
124125
</div>
125126
</Step>
126127
</Steps>

apps/docs/content/docs/triggers/webhook.mdx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,12 @@ description: Trigger workflow execution from external webhooks
66
import { Callout } from 'fumadocs-ui/components/callout'
77
import { Tab, Tabs } from 'fumadocs-ui/components/tabs'
88
import { ThemeImage } from '@/components/ui/theme-image'
9+
import { Video } from '@/components/ui/video'
910

1011
The Webhook block allows external services to automatically trigger your workflow execution through HTTP webhooks.
1112

1213
<div className="mx-auto w-full overflow-hidden rounded-lg">
13-
<video autoPlay loop muted playsInline className="w-full -mb-2 rounded-lg" src="/webhooks.mp4"></video>
14+
<Video src="webhooks.mp4" />
1415
</div>
1516

1617
## Supported Providers

0 commit comments

Comments
 (0)