Skip to content

Commit 2e8a525

Browse files
committed
Merge remote-tracking branch 'origin/main' into kv-compress-keydiff
Signed-off-by: Noah Cylich <noahcylich@gmail.com> # Conflicts: # python/cactus/cli/__init__.py # python/cactus/cli/convert.py # python/cactus/cli/model.py # python/tests/test_cli_run.py # python/tests/test_cli_transpile_defaults.py # tests/ios/CactusTest/CactusTest/AppDelegate.mm
2 parents ac780c9 + fd61cbd commit 2e8a525

421 files changed

Lines changed: 4262 additions & 158722 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/assemble-docs.sh

Lines changed: 36 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ fi
1414
rm -rf site_docs
1515
mkdir -p site_docs/docs site_docs/python site_docs/apple site_docs/android \
1616
site_docs/flutter site_docs/rust site_docs/swift site_docs/kotlin \
17-
site_docs/blog site_docs/assets
17+
site_docs/react-native site_docs/blog site_docs/assets
1818

1919
cp -r assets/* site_docs/assets/
2020

@@ -35,28 +35,7 @@ cp android/README.md site_docs/android/README.md
3535
cp bindings/flutter/README.md site_docs/flutter/README.md
3636
cp bindings/swift/README.md site_docs/swift/README.md
3737
cp bindings/kotlin/README.md site_docs/kotlin/README.md
38-
39-
mkdir -p site_docs/react-native
40-
if curl -sfL "https://raw.githubusercontent.com/cactus-compute/cactus-react-native/main/README.md" -o site_docs/react-native/README.md; then
41-
42-
{
43-
echo '!!! info "Independent release cycle"'
44-
echo ' The React Native SDK releases independently from the Cactus engine.'
45-
echo ' Check the [releases page](https://github.com/cactus-compute/cactus-react-native/releases) for the latest compatible version.'
46-
echo ''
47-
cat site_docs/react-native/README.md
48-
} > site_docs/react-native/README.tmp && mv site_docs/react-native/README.tmp site_docs/react-native/README.md
49-
50-
mkdir -p site_docs/react-native/assets
51-
curl -sfL "https://raw.githubusercontent.com/cactus-compute/cactus-react-native/main/assets/logo.png" -o site_docs/react-native/assets/logo.png 2>/dev/null || true
52-
echo "Fetched React Native README"
53-
else
54-
echo "# React Native SDK" > site_docs/react-native/README.md
55-
echo "" >> site_docs/react-native/README.md
56-
echo "See [cactus-react-native on GitHub](https://github.com/cactus-compute/cactus-react-native) for full documentation." >> site_docs/react-native/README.md
57-
echo "Warning: Could not fetch React Native README, using fallback"
58-
fi
59-
38+
cp bindings/react-native/README.md site_docs/react-native/README.md
6039
cp bindings/rust/README.md site_docs/rust/README.md
6140

6241
if [ -d blog ] && ls blog/*.md >/dev/null 2>&1; then
@@ -74,15 +53,17 @@ fi
7453

7554
sedi 's/^# Cactus$//' site_docs/index.md
7655

77-
sedi 's|(cactus_engine\.md)|(docs/cactus_engine.md)|g' site_docs/index.md
78-
sedi 's|(cactus_graph\.md)|(docs/cactus_graph.md)|g' site_docs/index.md
79-
sedi 's|(cactus_index\.md)|(docs/cactus_index.md)|g' site_docs/index.md
80-
sedi 's|(cactus_kernels\.md)|(docs/cactus_kernels.md)|g' site_docs/index.md
81-
sedi 's|(cactus_quants\.md)|(docs/cactus_quants.md)|g' site_docs/index.md
82-
sedi 's|(cactus_transpiler\.md)|(docs/cactus_transpiler.md)|g' site_docs/index.md
83-
sedi 's|(cactus_hybrid\.md)|(docs/cactus_hybrid.md)|g' site_docs/index.md
84-
sedi 's|(finetuning\.md)|(docs/finetuning.md)|g' site_docs/index.md
85-
sedi 's|(compatibility\.md)|(docs/compatibility.md)|g' site_docs/index.md
56+
sedi 's|(/docs/cactus_engine\.md)|(docs/cactus_engine.md)|g' site_docs/index.md
57+
sedi 's|(/docs/cactus_graph\.md)|(docs/cactus_graph.md)|g' site_docs/index.md
58+
sedi 's|(/docs/cactus_index\.md)|(docs/cactus_index.md)|g' site_docs/index.md
59+
sedi 's|(/docs/cactus_kernels\.md)|(docs/cactus_kernels.md)|g' site_docs/index.md
60+
sedi 's|(/docs/cactus_quants\.md)|(docs/cactus_quants.md)|g' site_docs/index.md
61+
sedi 's|(/docs/cactus_transpiler\.md)|(docs/cactus_transpiler.md)|g' site_docs/index.md
62+
sedi 's|(/docs/cactus_hybrid\.md)|(docs/cactus_hybrid.md)|g' site_docs/index.md
63+
sedi 's|(/docs/finetuning\.md)|(docs/finetuning.md)|g' site_docs/index.md
64+
sedi 's|(/docs/compatibility\.md)|(docs/compatibility.md)|g' site_docs/index.md
65+
sedi 's|(/docs/quickstart\.md)|(docs/quickstart.md)|g' site_docs/index.md
66+
sedi 's|(/docs/choose-bindings\.md)|(docs/choose-bindings.md)|g' site_docs/index.md
8667
sedi 's|(/CONTRIBUTING\.md)|(CONTRIBUTING.md)|g' site_docs/index.md
8768
sedi 's|(/bindings/swift/)|(swift/README.md)|g' site_docs/index.md
8869
sedi 's|(/bindings/kotlin/)|(kotlin/README.md)|g' site_docs/index.md
@@ -93,16 +74,12 @@ sedi 's|(/bindings/rust/)|(rust/README.md)|g' site_docs/index.md
9374
sedi 's|(/python/)|(python/README.md)|g' site_docs/index.md
9475
sedi 's|(/apple/)|(apple/README.md)|g' site_docs/index.md
9576
sedi 's|(/android/)|(android/README.md)|g' site_docs/index.md
96-
sedi 's|(/flutter/)|(flutter/README.md)|g' site_docs/index.md
97-
sedi 's|(/rust/)|(rust/README.md)|g' site_docs/index.md
9877
sedi 's|(/blog/hybrid_transcription\.md)|(blog/hybrid_transcription.md)|g' site_docs/index.md
9978
sedi 's|(/blog/lfm2_24b_a2b\.md)|(blog/lfm2_24b_a2b.md)|g' site_docs/index.md
10079
sedi 's|(/blog/parakeet\.md)|(blog/parakeet.md)|g' site_docs/index.md
10180
sedi 's|(/blog/lfm2\.5_350m\.md)|(blog/lfm2.5_350m.md)|g' site_docs/index.md
10281
sedi 's|(/blog/gemma4\.md)|(blog/gemma4.md)|g' site_docs/index.md
10382
sedi 's|(/blog/turboquant-h\.md)|(blog/turboquant-h.md)|g' site_docs/index.md
104-
sedi 's|(quickstart\.md)|(docs/quickstart.md)|g' site_docs/index.md
105-
sedi 's|(choose-bindings\.md)|(docs/choose-bindings.md)|g' site_docs/index.md
10683

10784
for f in site_docs/docs/*.md; do
10885
sedi 's|(/docs/cactus_engine\.md)|(cactus_engine.md)|g' "$f"
@@ -117,6 +94,12 @@ for f in site_docs/docs/*.md; do
11794
sedi 's|(/docs/quickstart\.md)|(quickstart.md)|g' "$f"
11895
sedi 's|(/docs/choose-bindings\.md)|(choose-bindings.md)|g' "$f"
11996
sedi 's|(/docs/index\.md)|(../index.md)|g' "$f"
97+
sedi 's|(/blog/hybrid_transcription\.md)|(../blog/hybrid_transcription.md)|g' "$f"
98+
sedi 's|(/blog/lfm2_24b_a2b\.md)|(../blog/lfm2_24b_a2b.md)|g' "$f"
99+
sedi 's|(/blog/parakeet\.md)|(../blog/parakeet.md)|g' "$f"
100+
sedi 's|(/blog/lfm2\.5_350m\.md)|(../blog/lfm2.5_350m.md)|g' "$f"
101+
sedi 's|(/blog/gemma4\.md)|(../blog/gemma4.md)|g' "$f"
102+
sedi 's|(/blog/turboquant-h\.md)|(../blog/turboquant-h.md)|g' "$f"
120103
sedi 's|(/CONTRIBUTING\.md)|(../CONTRIBUTING.md)|g' "$f"
121104
sedi 's|(/bindings/swift/)|(../swift/README.md)|g' "$f"
122105
sedi 's|(/bindings/kotlin/)|(../kotlin/README.md)|g' "$f"
@@ -127,11 +110,9 @@ for f in site_docs/docs/*.md; do
127110
sedi 's|(/python/)|(../python/README.md)|g' "$f"
128111
sedi 's|(/apple/)|(../apple/README.md)|g' "$f"
129112
sedi 's|(/android/)|(../android/README.md)|g' "$f"
130-
sedi 's|(/flutter/)|(../flutter/README.md)|g' "$f"
131-
sedi 's|(/rust/)|(../rust/README.md)|g' "$f"
132113
done
133114

134-
for f in site_docs/python/README.md site_docs/apple/README.md site_docs/android/README.md site_docs/flutter/README.md site_docs/swift/README.md site_docs/kotlin/README.md; do
115+
for f in site_docs/python/README.md site_docs/apple/README.md site_docs/android/README.md site_docs/flutter/README.md site_docs/swift/README.md site_docs/kotlin/README.md site_docs/react-native/README.md site_docs/rust/README.md; do
135116
sedi 's|(/docs/cactus_engine\.md)|(../docs/cactus_engine.md)|g' "$f"
136117
sedi 's|(/docs/cactus_graph\.md)|(../docs/cactus_graph.md)|g' "$f"
137118
sedi 's|(/docs/cactus_index\.md)|(../docs/cactus_index.md)|g' "$f"
@@ -143,6 +124,14 @@ for f in site_docs/python/README.md site_docs/apple/README.md site_docs/android/
143124
sedi 's|(/docs/compatibility\.md)|(../docs/compatibility.md)|g' "$f"
144125
sedi 's|(/docs/quickstart\.md)|(../docs/quickstart.md)|g' "$f"
145126
sedi 's|(/docs/choose-bindings\.md)|(../docs/choose-bindings.md)|g' "$f"
127+
sedi 's|(/docs/index\.md)|(../index.md)|g' "$f"
128+
sedi 's|(/blog/hybrid_transcription\.md)|(../blog/hybrid_transcription.md)|g' "$f"
129+
sedi 's|(/blog/lfm2_24b_a2b\.md)|(../blog/lfm2_24b_a2b.md)|g' "$f"
130+
sedi 's|(/blog/parakeet\.md)|(../blog/parakeet.md)|g' "$f"
131+
sedi 's|(/blog/lfm2\.5_350m\.md)|(../blog/lfm2.5_350m.md)|g' "$f"
132+
sedi 's|(/blog/gemma4\.md)|(../blog/gemma4.md)|g' "$f"
133+
sedi 's|(/blog/turboquant-h\.md)|(../blog/turboquant-h.md)|g' "$f"
134+
sedi 's|(/CONTRIBUTING\.md)|(../CONTRIBUTING.md)|g' "$f"
146135
sedi 's|(/bindings/swift/)|(../swift/README.md)|g' "$f"
147136
sedi 's|(/bindings/kotlin/)|(../kotlin/README.md)|g' "$f"
148137
sedi 's|(/bindings/python/)|(../python/README.md)|g' "$f"
@@ -152,40 +141,9 @@ for f in site_docs/python/README.md site_docs/apple/README.md site_docs/android/
152141
sedi 's|(/python/)|(../python/README.md)|g' "$f"
153142
sedi 's|(/apple/)|(../apple/README.md)|g' "$f"
154143
sedi 's|(/android/)|(../android/README.md)|g' "$f"
155-
sedi 's|(/flutter/)|(../flutter/README.md)|g' "$f"
156-
sedi 's|(/rust/)|(../rust/README.md)|g' "$f"
157144
sedi 's|(\.\.\/README\.md)|(../index.md)|g' "$f"
158145
done
159146

160-
if [ -f site_docs/rust/README.md ]; then
161-
for pattern in \
162-
's|(/docs/cactus_engine\.md)|(../docs/cactus_engine.md)|g' \
163-
's|(/docs/cactus_graph\.md)|(../docs/cactus_graph.md)|g' \
164-
's|(/docs/cactus_index\.md)|(../docs/cactus_index.md)|g' \
165-
's|(/docs/cactus_kernels\.md)|(../docs/cactus_kernels.md)|g' \
166-
's|(/docs/cactus_quants\.md)|(../docs/cactus_quants.md)|g' \
167-
's|(/docs/cactus_transpiler\.md)|(../docs/cactus_transpiler.md)|g' \
168-
's|(/docs/cactus_hybrid\.md)|(../docs/cactus_hybrid.md)|g' \
169-
's|(/docs/finetuning\.md)|(../docs/finetuning.md)|g' \
170-
's|(/docs/compatibility\.md)|(../docs/compatibility.md)|g' \
171-
's|(/docs/quickstart\.md)|(../docs/quickstart.md)|g' \
172-
's|(/docs/choose-bindings\.md)|(../docs/choose-bindings.md)|g' \
173-
's|(/bindings/swift/)|(../swift/README.md)|g' \
174-
's|(/bindings/kotlin/)|(../kotlin/README.md)|g' \
175-
's|(/bindings/python/)|(../python/README.md)|g' \
176-
's|(/bindings/react-native/)|(../react-native/README.md)|g' \
177-
's|(/bindings/flutter/)|(../flutter/README.md)|g' \
178-
's|(/bindings/rust/)|(../rust/README.md)|g' \
179-
's|(/python/)|(../python/README.md)|g' \
180-
's|(/apple/)|(../apple/README.md)|g' \
181-
's|(/android/)|(../android/README.md)|g' \
182-
's|(/flutter/)|(../flutter/README.md)|g' \
183-
's|(/rust/)|(../rust/README.md)|g' \
184-
's|(\.\.\/README\.md)|(../index.md)|g'; do
185-
sedi "$pattern" site_docs/rust/README.md
186-
done
187-
fi
188-
189147
if ls site_docs/blog/*.md >/dev/null 2>&1; then
190148
for f in site_docs/blog/*.md; do
191149
sedi 's|(/docs/cactus_engine\.md)|(../docs/cactus_engine.md)|g' "$f"
@@ -197,6 +155,10 @@ if ls site_docs/blog/*.md >/dev/null 2>&1; then
197155
sedi 's|(/docs/cactus_hybrid\.md)|(../docs/cactus_hybrid.md)|g' "$f"
198156
sedi 's|(/docs/finetuning\.md)|(../docs/finetuning.md)|g' "$f"
199157
sedi 's|(/docs/compatibility\.md)|(../docs/compatibility.md)|g' "$f"
158+
sedi 's|(/docs/quickstart\.md)|(../docs/quickstart.md)|g' "$f"
159+
sedi 's|(/docs/choose-bindings\.md)|(../docs/choose-bindings.md)|g' "$f"
160+
sedi 's|(/docs/index\.md)|(../index.md)|g' "$f"
161+
sedi 's|(/CONTRIBUTING\.md)|(../CONTRIBUTING.md)|g' "$f"
200162
sedi 's|(/bindings/swift/)|(../swift/README.md)|g' "$f"
201163
sedi 's|(/bindings/kotlin/)|(../kotlin/README.md)|g' "$f"
202164
sedi 's|(/bindings/python/)|(../python/README.md)|g' "$f"
@@ -206,8 +168,6 @@ if ls site_docs/blog/*.md >/dev/null 2>&1; then
206168
sedi 's|(/python/)|(../python/README.md)|g' "$f"
207169
sedi 's|(/apple/)|(../apple/README.md)|g' "$f"
208170
sedi 's|(/android/)|(../android/README.md)|g' "$f"
209-
sedi 's|(/flutter/)|(../flutter/README.md)|g' "$f"
210-
sedi 's|(/rust/)|(../rust/README.md)|g' "$f"
211171
sedi 's|(/blog/hybrid_transcription\.md)|(hybrid_transcription.md)|g' "$f"
212172
sedi 's|(/blog/lfm2_24b_a2b\.md)|(lfm2_24b_a2b.md)|g' "$f"
213173
sedi 's|(/blog/parakeet\.md)|(parakeet.md)|g' "$f"
@@ -238,10 +198,12 @@ if [ -n "$DOCS_VERSION" ]; then
238198
fi
239199

240200
for nav_path in \
241-
"rust/README.md" \
201+
"python/README.md" \
242202
"swift/README.md" \
243203
"kotlin/README.md" \
204+
"flutter/README.md" \
244205
"react-native/README.md" \
206+
"rust/README.md" \
245207
"blog/README.md" \
246208
"blog/hybrid_transcription.md" \
247209
"blog/lfm2_24b_a2b.md" \
@@ -252,7 +214,7 @@ for nav_path in \
252214
"CONTRIBUTING.md" \
253215
"docs/compatibility.md"; do
254216
if [ ! -f "site_docs/$nav_path" ]; then
255-
grep -v "$nav_path" mkdocs.yml > mkdocs.yml.tmp && mv mkdocs.yml.tmp mkdocs.yml
217+
grep -vF "$nav_path" mkdocs.yml > mkdocs.yml.tmp && mv mkdocs.yml.tmp mkdocs.yml
256218
fi
257219
done
258220

.github/workflows/build.yml

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ name: Build
33
on:
44
pull_request:
55
paths:
6-
- cactus/**
76
- cactus-engine/**
87
- cactus-graph/**
98
- cactus-kernels/**
@@ -13,7 +12,6 @@ on:
1312
push:
1413
branches: [main]
1514
paths:
16-
- cactus/**
1715
- cactus-engine/**
1816
- cactus-graph/**
1917
- cactus-kernels/**
@@ -25,13 +23,17 @@ on:
2523
permissions:
2624
contents: read
2725

26+
concurrency:
27+
group: ${{ github.workflow }}-${{ github.ref }}
28+
cancel-in-progress: true
29+
2830
jobs:
2931
apple:
3032
runs-on: macos-15
31-
timeout-minutes: 15
33+
timeout-minutes: 30
3234
steps:
3335
- uses: actions/checkout@v4
34-
- run: bash cactus/build.sh
36+
- run: bash cactus-engine/build.sh
3537
- run: BUILD_STATIC=true BUILD_XCFRAMEWORK=false bash apple/build.sh
3638
- run: bash android/build.sh
3739

@@ -41,4 +43,4 @@ jobs:
4143
steps:
4244
- uses: actions/checkout@v4
4345
- run: sudo apt-get update && sudo apt-get install -y cmake build-essential libcurl4-openssl-dev
44-
- run: bash cactus/build.sh
46+
- run: bash cactus-engine/build.sh

.github/workflows/cpp.yml

Lines changed: 16 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,29 @@
1+
name: Unit Tests
2+
13
on:
24
pull_request:
35
paths:
4-
- cactus/**
5-
- tests/**
6+
- cactus-kernels/**
7+
- cactus-graph/**
68
- .github/workflows/cpp.yml
79
push:
810
branches: [main]
911
paths:
10-
- cactus/**
11-
- tests/**
12+
- cactus-kernels/**
13+
- cactus-graph/**
1214
- .github/workflows/cpp.yml
1315
workflow_dispatch:
1416

1517
permissions:
1618
contents: read
1719

20+
concurrency:
21+
group: ${{ github.workflow }}-${{ github.ref }}
22+
cancel-in-progress: true
23+
1824
jobs:
19-
test:
20-
timeout-minutes: 45
25+
unit-tests:
26+
timeout-minutes: 30
2127
strategy:
2228
fail-fast: false
2329
matrix:
@@ -30,17 +36,7 @@ jobs:
3036
steps:
3137
- uses: actions/checkout@v4
3238
- run: ${{ matrix.deps }}
33-
- uses: actions/cache@v4
34-
with:
35-
path: ~/.ccache
36-
key: ccache-${{ matrix.os }}-${{ github.ref_name }}-${{ hashFiles('cactus/CMakeLists.txt', 'tests/CMakeLists.txt', '.github/workflows/cpp.yml') }}
37-
restore-keys: |
38-
ccache-${{ matrix.os }}-${{ github.ref_name }}-
39-
ccache-${{ matrix.os }}-
40-
- run: ccache --zero-stats || true
41-
- run: cmake -G Ninja -S cactus -B cactus/build -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
42-
- run: cmake --build cactus/build --target cactus_ffi --parallel 4
43-
- run: cmake -G Ninja -S tests -B tests/build-ci -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_COMPILER_LAUNCHER=ccache
44-
- run: cmake --build tests/build-ci --target test_stt --parallel 4
45-
- run: ./tests/build-ci/test_stt
46-
- run: ccache --show-stats || true
39+
- name: Run kernel tests
40+
run: bash cactus-kernels/test.sh
41+
- name: Run graph tests
42+
run: bash cactus-graph/test.sh

.github/workflows/dco.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,17 @@ on:
44
pull_request:
55
types: [opened, synchronize, reopened]
66

7+
permissions:
8+
contents: read
9+
10+
concurrency:
11+
group: dco-${{ github.event.pull_request.number || github.ref }}
12+
cancel-in-progress: true
13+
714
jobs:
815
dco-check:
916
runs-on: ubuntu-latest
17+
timeout-minutes: 5
1018
name: DCO Check
1119
steps:
1220
- name: Checkout

.github/workflows/docs.yml

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,22 @@ on:
66
paths:
77
- docs/**
88
- blog/**
9+
- assets/**
910
- mkdocs.yml
11+
- CACTUS_VERSION
12+
- CONTRIBUTING.md
13+
- DCO.md
1014
- .github/assemble-docs.sh
1115
- .github/docs-overrides/**
1216
- .github/workflows/docs.yml
1317
- python/README.md
1418
- apple/README.md
1519
- android/README.md
1620
- bindings/flutter/README.md
21+
- bindings/kotlin/README.md
22+
- bindings/react-native/README.md
1723
- bindings/rust/README.md
24+
- bindings/swift/README.md
1825
- README.md
1926
workflow_call:
2027
inputs:
@@ -23,9 +30,17 @@ on:
2330
required: false
2431
workflow_dispatch:
2532

33+
permissions:
34+
contents: read
35+
36+
concurrency:
37+
group: docs-deploy
38+
cancel-in-progress: false
39+
2640
jobs:
2741
deploy:
2842
runs-on: ubuntu-latest
43+
timeout-minutes: 15
2944
permissions:
3045
contents: write
3146
steps:
@@ -36,7 +51,7 @@ jobs:
3651

3752
- uses: actions/setup-python@v5
3853
with:
39-
python-version: "3.x"
54+
python-version: "3.12"
4055

4156
- name: Install dependencies
4257
run: pip install "mkdocs==1.6.1" "mkdocs-material==9.7.5" "mike==2.1.4"

0 commit comments

Comments
 (0)