char-fork/llama.cpp
git clone https://git.t4t.associates/char-fork/llama.cpp
fa88ae936
char/aliceai-t5-moe
1from __future__import annotations 2 3from typing import Iterable ,TYPE_CHECKING 4 5if TYPE_CHECKING : 6from torch import Tensor 7 8from .base import ModelBase ,TextModel ,gguf 9 10 11@ ModelBase . register ( "DreamModel" ) 12@ ModelBase . example ( "Dream-org/Dream-v0-Instruct-7B" ) 13class DreamModel (TextModel ): 14model_arch = gguf .MODEL_ARCH .DREAM 15 16def get_vocab_base (self )-> tuple [list [str ],list [int ],str ]: 17tokens :list [str ]= [] 18toktypes :list [int ]= [] 19 20from transformers import AutoTokenizer 21tokenizer = AutoTokenizer .from_pretrained (self .dir_model ,trust_remote_code = True ) 22 23vocab_dict = tokenizer .get_vocab ()# ty: ignore[unresolved-attribute] 24vocab_size = self .hparams .get ("vocab_size" ,len (vocab_dict )) 25assert max (vocab_dict .values ())< vocab_size 26 27tokpre = self .get_vocab_base_pre (tokenizer ) 28 29reverse_vocab = {id_ :encoded_tok for encoded_tok ,id_ in vocab_dict .items ()} 30added_vocab = tokenizer .get_added_vocab ()# ty: ignore[unresolved-attribute] 31 32for i in range (vocab_size ): 33if i not in reverse_vocab : 34tokens .append (f"[PAD { i } ]" ) 35toktypes .append (gguf .TokenType .UNUSED ) 36elif reverse_vocab [i ]in added_vocab : 37tokens .append (reverse_vocab [i ]) 38# Check if it's a special token - treat special tokens as CONTROL tokens 39if hasattr (tokenizer ,'added_tokens_decoder' )and i in tokenizer .added_tokens_decoder : 40if tokenizer .added_tokens_decoder [i ].special : 41toktypes .append (gguf .TokenType .CONTROL ) 42else : 43toktypes .append (gguf .TokenType .USER_DEFINED ) 44else : 45# Fallback: treat all added vocab as control tokens for special tokens like <|im_start|> 46toktypes .append (gguf .TokenType .CONTROL ) 47else : 48tokens .append (reverse_vocab [i ]) 49toktypes .append (gguf .TokenType .NORMAL ) 50 51return tokens ,toktypes ,tokpre 52 53def set_vocab (self ): 54try : 55self ._set_vocab_sentencepiece () 56except FileNotFoundError : 57self ._set_vocab_gpt2 () 58 59def set_gguf_parameters (self ): 60super ().set_gguf_parameters () 61self ._try_set_pooling_type () 62 63# Dream models use non-causal attention for diffusion 64self .gguf_writer .add_causal_attention (False ) 65 66# Add Dream-specific parameters 67mask_token_id = self .hparams .get ("mask_token_id" ) 68if mask_token_id is not None : 69self .gguf_writer .add_mask_token_id (mask_token_id ) 70 71def modify_tensors (self ,data_torch :Tensor ,name :str ,bid :int | None )-> Iterable [tuple [str ,Tensor ]]: 72# Dream model tensors should be mapped directly since it's the base model 73yield from super ().modify_tensors (data_torch ,name ,bid )