#pragma once
#include "ggml.h"
namespace transcribe::granite_conformer {
struct ShawAttnWeights {
ggml_tensor * norm_attn_w = nullptr; ggml_tensor * norm_attn_b = nullptr; ggml_tensor * attn_q_w = nullptr; ggml_tensor * attn_kv_w = nullptr; ggml_tensor * attn_rel_pos_emb = nullptr; ggml_tensor * attn_out_w = nullptr; ggml_tensor * attn_out_b = nullptr; };
ggml_tensor * shaw_block_attn(ggml_context * ctx,
ggml_tensor * x,
ggml_tensor * zero_pad,
ggml_tensor * dists,
ggml_tensor * pad_mask_3d,
const ShawAttnWeights & w,
int n_heads,
int head_dim,
int context_size,
int num_blocks,
int T_enc,
float layer_norm_eps,
ggml_tensor * pos_rows = nullptr);
}