#pragma once
#include "ggml.h"
struct ggml_context;
struct ggml_tensor;
struct ggml_cgraph;
namespace transcribe::sensevoice {
struct SenseVoiceHParams;
struct SenseVoiceWeights;
struct EncoderDumps {
ggml_tensor * frontend_out = nullptr;
ggml_tensor * prefix_lid = nullptr;
ggml_tensor * prefix_event_emo = nullptr;
ggml_tensor * prefix_textnorm = nullptr;
ggml_tensor * input_with_prefix = nullptr;
ggml_tensor * embed_out = nullptr;
ggml_tensor * encoders0_0_out = nullptr;
ggml_tensor * encoders_first = nullptr; ggml_tensor * encoders_mid = nullptr; ggml_tensor * encoders_last = nullptr; ggml_tensor * after_norm_out = nullptr;
ggml_tensor * tp_encoders_first = nullptr;
ggml_tensor * tp_encoders_mid = nullptr;
ggml_tensor * tp_encoders_last = nullptr;
ggml_tensor * tp_norm_out = nullptr;
ggml_tensor * ctc_logits = nullptr;
ggml_tensor * ctc_log_probs = nullptr;
};
struct EncoderBuild {
ggml_tensor * frontend_in = nullptr;
ggml_tensor * lid_idx = nullptr;
ggml_tensor * event_emo_idx = nullptr; ggml_tensor * textnorm_idx = nullptr;
ggml_tensor * pe_in = nullptr;
ggml_tensor * attn_pad_mask_in = nullptr;
ggml_tensor * conv_pad_mask_in = nullptr;
ggml_tensor * out = nullptr;
EncoderDumps dumps{};
ggml_cgraph * graph = nullptr;
};
EncoderBuild build_encoder_graph(ggml_context * compute_ctx,
const SenseVoiceWeights & weights,
const SenseVoiceHParams & hp,
int n_lfr_frames,
int n_batch = 1,
bool batch_var_len = false);
}