#pragma once
#include "ggml.h"
#include "weights.h"
#include <cstddef>
#include <vector>
struct ggml_context;
struct ggml_cgraph;
struct ggml_tensor;
namespace transcribe::ecapa_tdnn {
struct Model;
constexpr size_t kGraphSize = 2048;
struct Dumps {
ggml_tensor * blk0_out = nullptr; ggml_tensor * blk1_tdnn1_out = nullptr; ggml_tensor * blk1_res2_out = nullptr; ggml_tensor * blk1_se_out = nullptr; ggml_tensor * blk_out[kNumSeBlocks] = { nullptr, nullptr, nullptr };
ggml_tensor * mfa_out = nullptr; ggml_tensor * asp_attn_logits = nullptr; ggml_tensor * asp_out = nullptr; ggml_tensor * emb = nullptr; ggml_tensor * cls_hidden = nullptr; ggml_tensor * cls_logits = nullptr; };
struct GraphBuild {
ggml_tensor * blk0_in = nullptr;
ggml_tensor * idx[kNumSeBlocks] = { nullptr, nullptr, nullptr };
ggml_tensor * chunk_ids = nullptr;
ggml_tensor * logits = nullptr;
Dumps dumps{};
ggml_cgraph * graph = nullptr;
};
GraphBuild build_graph(ggml_context * ctx, const Model & model, int T);
void build_blk0_im2col(const HParams & hp, const float * mel, int T, std::vector<float> & out);
}