Llm/Gpt2TokenizerDocument.cs

DTO classes for deserializing a GPT-2 tokenizer JSON document. Defines Gpt2TokenizerDocument and related nested documents mapping JSON properties to C# properties for version, tokens, tokenizer components, model vocab and merges.

using System.Text.Json.Serialization;

namespace LlmPoc.Llm;

public sealed class Gpt2TokenizerDocument
{
	[JsonPropertyName( "version" )]
	public string Version { get; set; }

	[JsonPropertyName( "added_tokens" )]
	public List<Gpt2AddedTokenDocument> AddedTokens { get; set; }

	[JsonPropertyName( "normalizer" )]
	public object Normalizer { get; set; }

	[JsonPropertyName( "pre_tokenizer" )]
	public Gpt2ByteLevelDocument PreTokenizer { get; set; }

	[JsonPropertyName( "post_processor" )]
	public Gpt2ByteLevelDocument PostProcessor { get; set; }

	[JsonPropertyName( "decoder" )]
	public Gpt2ByteLevelDocument Decoder { get; set; }

	[JsonPropertyName( "model" )]
	public Gpt2BpeModelDocument Model { get; set; }
}

public sealed class Gpt2AddedTokenDocument
{
	[JsonPropertyName( "id" )]
	public int Id { get; set; }

	[JsonPropertyName( "content" )]
	public string Content { get; set; }

	[JsonPropertyName( "special" )]
	public bool Special { get; set; }
}

public sealed class Gpt2ByteLevelDocument
{
	[JsonPropertyName( "type" )]
	public string Type { get; set; }

	[JsonPropertyName( "add_prefix_space" )]
	public bool AddPrefixSpace { get; set; }

	[JsonPropertyName( "trim_offsets" )]
	public bool TrimOffsets { get; set; }

	[JsonPropertyName( "use_regex" )]
	public bool UseRegex { get; set; }
}

public sealed class Gpt2BpeModelDocument
{
	[JsonPropertyName( "type" )]
	public string Type { get; set; }

	[JsonPropertyName( "dropout" )]
	public float? Dropout { get; set; }

	[JsonPropertyName( "unk_token" )]
	public string UnknownToken { get; set; }

	[JsonPropertyName( "continuing_subword_prefix" )]
	public string ContinuingSubwordPrefix { get; set; }

	[JsonPropertyName( "end_of_word_suffix" )]
	public string EndOfWordSuffix { get; set; }

	[JsonPropertyName( "fuse_unk" )]
	public bool FuseUnknown { get; set; }

	[JsonPropertyName( "byte_fallback" )]
	public bool ByteFallback { get; set; }

	[JsonPropertyName( "ignore_merges" )]
	public bool IgnoreMerges { get; set; }

	[JsonPropertyName( "vocab" )]
	public Dictionary<string, int> Vocabulary { get; set; }

	[JsonPropertyName( "merges" )]
	public List<string[]> Merges { get; set; }
}