#pragma once
#include "ggml.h"
#include "weights.h"
struct ggml_context;
struct ggml_cgraph;
struct ggml_tensor;
namespace transcribe::moss {
struct EncoderDumps {
ggml_tensor * pos_add_out = nullptr; ggml_tensor * block_0_out = nullptr;
ggml_tensor * block_last_out = nullptr;
ggml_tensor * ln_post_out = nullptr; };
struct EncoderBuild {
ggml_tensor * mel_in = nullptr; ggml_tensor * out = nullptr; EncoderDumps dumps{};
ggml_cgraph * graph = nullptr;
};
EncoderBuild build_encoder_graph(ggml_context * ctx,
const MossWeights & weights,
const MossHParams & hp,
int n_mel_frames,
bool use_flash);
struct AdaptorDumps {
ggml_tensor * merge_out = nullptr; ggml_tensor * adaptor_out = nullptr; };
struct AdaptorBuild {
ggml_tensor * in = nullptr; ggml_tensor * out = nullptr; AdaptorDumps dumps{};
ggml_cgraph * graph = nullptr;
int T_enc = 0;
};
AdaptorBuild build_adaptor_graph(ggml_context * ctx, const MossWeights & weights, const MossHParams & hp, int T_trim);
int whisper_enc_len(int n_mel_frames);
int audio_token_length(int num_samples, const MossHParams & hp);
}