Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
86fe8d5
Adding transpiler base code
ParkiratS May 5, 2026
dae4d88
Examples
ParkiratS May 12, 2026
5ea2d1a
Merge branch 'v2' into transpiler
ParkiratS May 12, 2026
858cf80
Removed old transpiler logic
ParkiratS May 12, 2026
d1ac103
Transpiler
ParkiratS May 12, 2026
b9e2fe1
Added cli support to transpile and run the transpiled models through …
ParkiratS May 12, 2026
487b5c2
Removed debug files
ParkiratS May 12, 2026
82486f6
Python changes
ParkiratS May 12, 2026
733d634
Merge branch 'v2' into transpiler
ParkiratS May 12, 2026
cc5c318
CQ weights adoption
ParkiratS May 12, 2026
06c67a4
Added cli support to run transpiled models
ParkiratS May 13, 2026
227273f
Added missing graph ops
ParkiratS May 13, 2026
f851398
Transpiler complete
ParkiratS May 13, 2026
f87ba16
Gemma alignment
ParkiratS May 13, 2026
fbacf95
Full gemma4 working
ParkiratS May 13, 2026
9df20ae
Merged with main
ParkiratS May 13, 2026
ef36c1b
Cleanup
ParkiratS May 13, 2026
3a3aea8
Branch clean-up
ParkiratS May 14, 2026
63c0871
Clean up
ParkiratS May 14, 2026
15305f9
added transpile to conversion pipeline
cattermelon1234 May 14, 2026
e2ba129
added transpile pipelien to cactus convert, ports weights and model t…
cattermelon1234 May 14, 2026
e83ffb3
Merge pull request #642 from cattermelon1234/transpiler-complete-2
ParkiratS May 15, 2026
c650a82
Modified cactus convert to use transpile
ParkiratS May 15, 2026
9756629
Improvements
ParkiratS May 15, 2026
3cc64fc
Removed models in cmake
ParkiratS May 15, 2026
de430b7
Removed non-sensical publish_to_hf.yml changes
ParkiratS May 15, 2026
5761d1d
Speedup for cactus run
ParkiratS May 15, 2026
26879d3
Updates
ParkiratS May 15, 2026
8a7c4d2
Merge remote-tracking branch 'origin/v2' into transpiler-complete
ParkiratS May 15, 2026
07f890f
Changed transpiler from layer names to pure pytorch ops
ParkiratS May 16, 2026
77bf83b
More generalized Transpiler
ParkiratS May 16, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 12 additions & 12 deletions .github/workflows/verify-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -106,26 +106,26 @@ jobs:
run: |
source venv/bin/activate
convert_if_missing() {
local model_id=$1 output_dir=$2 precision=$3
local model_id=$1 output_dir=$2 bits=$3
if [ ! -f "weights/$output_dir/config.txt" ]; then
echo "Converting $model_id -> weights/$output_dir"
python3 -m src.cli convert "$model_id" "weights/$output_dir" --precision "$precision" ${HF_TOKEN:+--token "$HF_TOKEN"} || echo "WARNING: conversion of $model_id failed (exit $?), checking fallback directory"
python3 -m cactus convert "$model_id" "weights/$output_dir" --bits "$bits" ${HF_TOKEN:+--token "$HF_TOKEN"} || echo "WARNING: conversion of $model_id failed (exit $?), checking fallback directory"
local default_dir="weights/$(echo "$model_id" | sed 's|.*/||' | tr '[:upper:]' '[:lower:]')"
if [ ! -f "weights/$output_dir/config.txt" ] && [ -f "$default_dir/config.txt" ]; then
mv "$default_dir" "weights/$output_dir"
fi
fi
}
convert_if_missing "Qwen/Qwen3-0.6B" "qwen3-0.6b" "INT8"
convert_if_missing "nomic-ai/nomic-embed-text-v2-moe" "nomic-embed-text-v2-moe" "INT8"
convert_if_missing "LiquidAI/LFM2.5-350M" "lfm2-350m" "INT8"
convert_if_missing "LiquidAI/LFM2-8B-A1B" "lfm2-8b-a1b" "INT8"
convert_if_missing "google/gemma-3-270m-it" "gemma-3-270m-it" "INT8"
convert_if_missing "openai/whisper-small" "whisper-small" "INT8"
convert_if_missing "UsefulSensors/moonshine-base" "moonshine-base" "INT8"
convert_if_missing "LiquidAI/LFM2-VL-450M" "lfm2-vl-450m-int8" "INT8"
convert_if_missing "LiquidAI/LFM2-VL-450M" "lfm2-vl-450m-int4" "INT4"
convert_if_missing "LiquidAI/LFM2-VL-450M" "lfm2-vl-450m-fp16" "FP16"
convert_if_missing "Qwen/Qwen3-0.6B" "qwen3-0.6b" "4"
convert_if_missing "nomic-ai/nomic-embed-text-v2-moe" "nomic-embed-text-v2-moe" "4"
convert_if_missing "LiquidAI/LFM2.5-350M" "lfm2-350m" "4"
convert_if_missing "LiquidAI/LFM2-8B-A1B" "lfm2-8b-a1b" "4"
convert_if_missing "google/gemma-3-270m-it" "gemma-3-270m-it" "4"
convert_if_missing "openai/whisper-small" "whisper-small" "4"
convert_if_missing "UsefulSensors/moonshine-base" "moonshine-base" "4"
convert_if_missing "LiquidAI/LFM2-VL-450M" "lfm2-vl-450m-int8" "4"
convert_if_missing "LiquidAI/LFM2-VL-450M" "lfm2-vl-450m-int4" "4"
convert_if_missing "LiquidAI/LFM2-VL-450M" "lfm2-vl-450m-fp16" "4"

- name: Build library
run: bash cactus/build.sh
Expand Down
14 changes: 1 addition & 13 deletions cactus-engine/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -74,29 +74,17 @@ set(ENGINE_SOURCES
src/npu.cpp
)

set(MODEL_SOURCES
models/model_lfm2.cpp
models/model_lfm2vl.cpp
models/model_qwen.cpp
models/model_siglip2.cpp
models/gemma4/model_gemma4.cpp
models/gemma4/model_gemma4_mm.cpp
models/gemma4/model_gemma4_audio.cpp
models/gemma4/model_gemma4_vision.cpp
)

if(APPLE)
enable_language(OBJCXX)
list(APPEND ENGINE_SOURCES src/npu_ane.mm)
set_source_files_properties(src/npu_ane.mm PROPERTIES COMPILE_FLAGS "-fobjc-arc")
endif()

add_library(cactus_engine STATIC ${ENGINE_SOURCES} ${MODEL_SOURCES})
add_library(cactus_engine STATIC ${ENGINE_SOURCES})
set(CACTUS_KERNELS_DIR "${CMAKE_CURRENT_SOURCE_DIR}/../cactus-kernels")
target_include_directories(cactus_engine
PUBLIC ${CMAKE_CURRENT_SOURCE_DIR}
PRIVATE ${CMAKE_CURRENT_SOURCE_DIR}/src
${CMAKE_CURRENT_SOURCE_DIR}/models
${CACTUS_KERNELS_DIR}/src
${CACTUS_KERNELS_DIR}/libs
)
Expand Down
3 changes: 3 additions & 0 deletions cactus-engine/cactus_engine.h
Original file line number Diff line number Diff line change
Expand Up @@ -292,6 +292,7 @@ CACTUS_FFI_EXPORT int cactus_graph_mean(cactus_graph_t graph, cactus_node_t x, i
CACTUS_FFI_EXPORT int cactus_graph_variance(cactus_graph_t graph, cactus_node_t x, int32_t axis, cactus_node_t* out);
CACTUS_FFI_EXPORT int cactus_graph_min(cactus_graph_t graph, cactus_node_t x, int32_t axis, cactus_node_t* out);
CACTUS_FFI_EXPORT int cactus_graph_max(cactus_graph_t graph, cactus_node_t x, int32_t axis, cactus_node_t* out);
CACTUS_FFI_EXPORT int cactus_graph_cumsum(cactus_graph_t graph, cactus_node_t x, int32_t axis, cactus_node_t* out);

CACTUS_FFI_EXPORT int cactus_graph_concat(
cactus_graph_t graph, cactus_node_t a, cactus_node_t b, int32_t axis,
Expand All @@ -312,6 +313,8 @@ CACTUS_FFI_EXPORT int cactus_graph_mmap_embeddings(
cactus_graph_t graph, const char* filename, cactus_node_t* out);
CACTUS_FFI_EXPORT int cactus_graph_mmap_weights(
cactus_graph_t graph, const char* filename, cactus_node_t* out);
CACTUS_FFI_EXPORT int cactus_graph_bind_mmap_weights(
cactus_graph_t graph, cactus_node_t node, const char* filename);
CACTUS_FFI_EXPORT int cactus_graph_bilinear_interpolation(
cactus_graph_t graph, cactus_node_t pos_embeds, size_t dst_height, size_t dst_width, cactus_node_t* out);
CACTUS_FFI_EXPORT int cactus_graph_release_weight_pages(cactus_graph_t graph, cactus_node_t node);
Expand Down
Loading
Loading