From fb964de63d82da5e50362bb1c39c076a44ff381a Mon Sep 17 00:00:00 2001 From: ModelHub XC Date: Sat, 13 Jun 2026 17:04:16 +0800 Subject: [PATCH] =?UTF-8?q?=E5=88=9D=E5=A7=8B=E5=8C=96=E9=A1=B9=E7=9B=AE?= =?UTF-8?q?=EF=BC=8C=E7=94=B1ModelHub=20XC=E7=A4=BE=E5=8C=BA=E6=8F=90?= =?UTF-8?q?=E4=BE=9B=E6=A8=A1=E5=9E=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Model: itsjorigo/sinllama-mcq-merged-2.0 Source: Original Platform --- .gitattributes | 36 ++++++++ README.md | 199 +++++++++++++++++++++++++++++++++++++++++ config.json | 32 +++++++ generation_config.json | 9 ++ handler.py | 79 ++++++++++++++++ model.safetensors | 3 + tokenizer.json | 3 + tokenizer_config.json | 13 +++ 8 files changed, 374 insertions(+) create mode 100644 .gitattributes create mode 100644 README.md create mode 100644 config.json create mode 100644 generation_config.json create mode 100644 handler.py create mode 100644 model.safetensors create mode 100644 tokenizer.json create mode 100644 tokenizer_config.json diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..52373fe --- /dev/null +++ b/.gitattributes @@ -0,0 +1,36 @@ +*.7z filter=lfs diff=lfs merge=lfs -text +*.arrow filter=lfs diff=lfs merge=lfs -text +*.bin filter=lfs diff=lfs merge=lfs -text +*.bz2 filter=lfs diff=lfs merge=lfs -text +*.ckpt filter=lfs diff=lfs merge=lfs -text +*.ftz filter=lfs diff=lfs merge=lfs -text +*.gz filter=lfs diff=lfs merge=lfs -text +*.h5 filter=lfs diff=lfs merge=lfs -text +*.joblib filter=lfs diff=lfs merge=lfs -text +*.lfs.* filter=lfs diff=lfs merge=lfs -text +*.mlmodel filter=lfs diff=lfs merge=lfs -text +*.model filter=lfs diff=lfs merge=lfs -text +*.msgpack filter=lfs diff=lfs merge=lfs -text +*.npy filter=lfs diff=lfs merge=lfs -text +*.npz filter=lfs diff=lfs merge=lfs -text +*.onnx filter=lfs diff=lfs merge=lfs -text +*.ot filter=lfs diff=lfs merge=lfs -text +*.parquet filter=lfs diff=lfs merge=lfs -text +*.pb filter=lfs diff=lfs merge=lfs -text +*.pickle filter=lfs diff=lfs merge=lfs -text +*.pkl filter=lfs diff=lfs merge=lfs -text +*.pt filter=lfs diff=lfs merge=lfs -text +*.pth filter=lfs diff=lfs merge=lfs -text +*.rar filter=lfs diff=lfs merge=lfs -text +*.safetensors filter=lfs diff=lfs merge=lfs -text +saved_model/**/* filter=lfs diff=lfs merge=lfs -text +*.tar.* filter=lfs diff=lfs merge=lfs -text +*.tar filter=lfs diff=lfs merge=lfs -text +*.tflite filter=lfs diff=lfs merge=lfs -text +*.tgz filter=lfs diff=lfs merge=lfs -text +*.wasm filter=lfs diff=lfs merge=lfs -text +*.xz filter=lfs diff=lfs merge=lfs -text +*.zip filter=lfs diff=lfs merge=lfs -text +*.zst filter=lfs diff=lfs merge=lfs -text +*tfevents* filter=lfs diff=lfs merge=lfs -text +tokenizer.json filter=lfs diff=lfs merge=lfs -text diff --git a/README.md b/README.md new file mode 100644 index 0000000..bc5f30d --- /dev/null +++ b/README.md @@ -0,0 +1,199 @@ +--- +library_name: transformers +tags: [] +--- + +# Model Card for Model ID + + + + + +## Model Details + +### Model Description + + + +This is the model card of a 🤗 transformers model that has been pushed on the Hub. This model card has been automatically generated. + +- **Developed by:** [More Information Needed] +- **Funded by [optional]:** [More Information Needed] +- **Shared by [optional]:** [More Information Needed] +- **Model type:** [More Information Needed] +- **Language(s) (NLP):** [More Information Needed] +- **License:** [More Information Needed] +- **Finetuned from model [optional]:** [More Information Needed] + +### Model Sources [optional] + + + +- **Repository:** [More Information Needed] +- **Paper [optional]:** [More Information Needed] +- **Demo [optional]:** [More Information Needed] + +## Uses + + + +### Direct Use + + + +[More Information Needed] + +### Downstream Use [optional] + + + +[More Information Needed] + +### Out-of-Scope Use + + + +[More Information Needed] + +## Bias, Risks, and Limitations + + + +[More Information Needed] + +### Recommendations + + + +Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations. + +## How to Get Started with the Model + +Use the code below to get started with the model. + +[More Information Needed] + +## Training Details + +### Training Data + + + +[More Information Needed] + +### Training Procedure + + + +#### Preprocessing [optional] + +[More Information Needed] + + +#### Training Hyperparameters + +- **Training regime:** [More Information Needed] + +#### Speeds, Sizes, Times [optional] + + + +[More Information Needed] + +## Evaluation + + + +### Testing Data, Factors & Metrics + +#### Testing Data + + + +[More Information Needed] + +#### Factors + + + +[More Information Needed] + +#### Metrics + + + +[More Information Needed] + +### Results + +[More Information Needed] + +#### Summary + + + +## Model Examination [optional] + + + +[More Information Needed] + +## Environmental Impact + + + +Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700). + +- **Hardware Type:** [More Information Needed] +- **Hours used:** [More Information Needed] +- **Cloud Provider:** [More Information Needed] +- **Compute Region:** [More Information Needed] +- **Carbon Emitted:** [More Information Needed] + +## Technical Specifications [optional] + +### Model Architecture and Objective + +[More Information Needed] + +### Compute Infrastructure + +[More Information Needed] + +#### Hardware + +[More Information Needed] + +#### Software + +[More Information Needed] + +## Citation [optional] + + + +**BibTeX:** + +[More Information Needed] + +**APA:** + +[More Information Needed] + +## Glossary [optional] + + + +[More Information Needed] + +## More Information [optional] + +[More Information Needed] + +## Model Card Authors [optional] + +[More Information Needed] + +## Model Card Contact + +[More Information Needed] \ No newline at end of file diff --git a/config.json b/config.json new file mode 100644 index 0000000..e209d76 --- /dev/null +++ b/config.json @@ -0,0 +1,32 @@ +{ + "architectures": [ + "LlamaForCausalLM" + ], + "attention_bias": false, + "attention_dropout": 0.0, + "bos_token_id": 128000, + "dtype": "float16", + "eos_token_id": 128001, + "head_dim": 128, + "hidden_act": "silu", + "hidden_size": 4096, + "initializer_range": 0.02, + "intermediate_size": 14336, + "max_position_embeddings": 8192, + "mlp_bias": false, + "model_type": "llama", + "num_attention_heads": 32, + "num_hidden_layers": 32, + "num_key_value_heads": 8, + "pad_token_id": null, + "pretraining_tp": 1, + "rms_norm_eps": 1e-05, + "rope_parameters": { + "rope_theta": 500000.0, + "rope_type": "default" + }, + "tie_word_embeddings": false, + "transformers_version": "5.0.0", + "use_cache": true, + "vocab_size": 139336 +} diff --git a/generation_config.json b/generation_config.json new file mode 100644 index 0000000..844a65b --- /dev/null +++ b/generation_config.json @@ -0,0 +1,9 @@ +{ + "bos_token_id": 128000, + "do_sample": true, + "eos_token_id": 128001, + "max_length": 4096, + "temperature": 0.6, + "top_p": 0.9, + "transformers_version": "5.0.0" +} diff --git a/handler.py b/handler.py new file mode 100644 index 0000000..9739244 --- /dev/null +++ b/handler.py @@ -0,0 +1,79 @@ +""" +HuggingFace Inference Endpoint custom handler for sinllama-mcq-merged-2.0. + +The deployed model (itsjorigo/sinllama-mcq-merged) is a fully merged +AutoModelForCausalLM — NOT a PEFT adapter stack. Load it directly. + +The tokenizer must come from polyglots/SinLlama_v01 (trust_remote_code=True) +because that repo defines the custom TokenizersBackend class. + +Request: {"inputs": {"passage": "", "entity_block": ""}} +Response: {"mcq": "ප්‍රශ්නය: ..."} +""" + +import re +import torch +from transformers import AutoTokenizer, AutoModelForCausalLM + +SINLLAMA_ID = "polyglots/SinLlama_v01" + +PROMPT_TEMPLATE = ( + "පහත ඉතිහාස ඡේදය කියවා, ඒ ගැන බහු-විකල්ප ප්‍රශ්නයක් සාදන්න.\n\n" + "ඡේදය: {passage}\n\n" + "{entity_block}" + "MCQ:" +) + + +class EndpointHandler: + def __init__(self, path=""): + # Tokenizer from SinLlama — defines the TokenizersBackend class + print("Loading tokenizer from SinLlama repo...", flush=True) + self.tokenizer = AutoTokenizer.from_pretrained(SINLLAMA_ID, trust_remote_code=True) + + # Model loaded directly — itsjorigo/sinllama-mcq-merged is already fully merged + print(f"Loading merged model from {path!r}...", flush=True) + self.model = AutoModelForCausalLM.from_pretrained( + path, + torch_dtype=torch.float16, + device_map="auto", + low_cpu_mem_usage=True, + attn_implementation="sdpa", + ) + self.model.eval() + print("EndpointHandler ready.", flush=True) + + def __call__(self, data: dict) -> dict: + inputs = data.get("inputs", {}) + passage = inputs.get("passage", "") + entity_block = inputs.get("entity_block", "") + + if not passage: + return {"error": 'No passage provided. Send {"inputs": {"passage": "..."}}'} + + prompt = PROMPT_TEMPLATE.format( + passage=passage.strip(), + entity_block=entity_block, + ) + + enc = self.tokenizer(prompt, return_tensors="pt").to(self.model.device) + + with torch.no_grad(): + out = self.model.generate( + **enc, + max_new_tokens=280, + temperature=0.7, + do_sample=True, + repetition_penalty=1.1, + eos_token_id=self.tokenizer.eos_token_id, + pad_token_id=self.tokenizer.pad_token_id, + ) + + new_ids = out[0][enc.input_ids.shape[1]:] + text = self.tokenizer.decode(new_ids, skip_special_tokens=True).strip() + + # Ensure each option starts on its own line + for tag in ["A)", "B)", "C)", "D)", "නිවැරදි පිළිතුර:"]: + text = re.sub(rf"(?", + "clean_up_tokenization_spaces": true, + "eos_token": "<|end_of_text|>", + "is_local": false, + "model_input_names": [ + "input_ids", + "attention_mask" + ], + "model_max_length": 1000000000000000019884624838656, + "tokenizer_class": "TokenizersBackend" +}