use crate::{Matrix, Result};
use crate::ml::autograd::{
node::{GradNode, operation::GradNodeOperation},
tape::record_node,
};
use crate::ml::autograd::node::operation::{GradNodeSiluMul, GradNodeSwiglu};
pub(in crate::ml) fn record_swiglu(gate: &Matrix, up: &Matrix, result: &Matrix) -> Result<()> {
record_node(GradNode::Operation(GradNodeOperation::Swiglu(
GradNodeSwiglu {
gate: gate.clone(),
up: up.clone(),
output_id: result.value_id(),
},
)))
}
pub(in crate::ml) fn record_silu_mul(
input: &Matrix,
intermediate_size: usize,
result: &Matrix,
) -> Result<()> {
record_node(GradNode::Operation(GradNodeOperation::SiluMul(
GradNodeSiluMul {
input: input.clone(),
intermediate_size,
output_id: result.value_id(),
},
)))
}