#pragma once
#include "transcribe.h"
#include <cstdint>
#include <vector>
namespace transcribe::gigaam {
struct GigaamHParams;
struct GigaamWeights;
struct GigaamWeights;
struct GigaamHParams;
struct HostDecoderWeights {
std::vector<float> pred_embed; std::vector<std::vector<float>> lstm_Wx; std::vector<std::vector<float>> lstm_Wh;
std::vector<std::vector<float>> lstm_b;
std::vector<float> joint_enc_w;
std::vector<float> joint_enc_b;
std::vector<float> joint_pred_w;
std::vector<float> joint_pred_b;
std::vector<float> joint_out_w;
std::vector<float> joint_out_b;
std::vector<float> ctc_w; std::vector<float> ctc_b;
};
transcribe_status build_host_decoder_weights(const GigaamWeights & w,
const GigaamHParams & hp,
HostDecoderWeights & out);
transcribe_status decode_rnnt_greedy(const HostDecoderWeights & host,
const GigaamHParams & hp,
const float * encoded,
int T_enc,
int max_symbols_per_step,
std::vector<int> & out_tokens,
std::vector<int> & out_frames);
transcribe_status decode_ctc_greedy(const HostDecoderWeights & host,
const GigaamHParams & hp,
const float * encoded,
int T_enc,
std::vector<int> & out_tokens,
std::vector<int> & out_frames);
}