--- pipeline_tag: text-generation license: apache-2.0 tags: - code-generation - myanmar - burmese - qwen - qwen2 - qwen2.5 - qwen2.5-coder - transformers - conversational - text-generation library_name: transformers inference: parameters: max_new_tokens: 512 temperature: 0.2 top_p: 0.95 repetition_penalty: 1.1 model-index: - name: amk-coder-v2 results: - task: type: text-generation name: CodeGeneration dataset: name: HumanEval type: openai/openai_humaneval metrics: - type: pass_at_1 value: 50 verified: false - type: pass_at_10 value: 75 verified: false - task: type: text-generation name: PythonCodeGeneration dataset: name: MBPP type: abdshhayan/MBPP metrics: - type: pass_at_1 value: 55 verified: false --- # πŸ€– amk-coder-v2 β€” Myanmar Coding Agent Myanmar Coding Assistant β€” Fine-tuned from **Qwen2.5-Coder-1.5B** using **LoRA (PEFT)** ![Model](https://img.shields.io/badge/Model-Size-2B-blue) ![License](https://img.shields.io/badge/License-Apache--2.0-green) ![HuggingFace](https://img.shields.io/badge/-HuggingFace-orange) --- ## πŸ“‹ Table of Contents - [Model Overview](#model-overview) - [Training Details](#training-details) - [Quick Start](#quick-start) - [Usage Examples](#usage-examples) - [API Deployment](#api-deployment) - [Limitations](#limitations) - [License](#license) --- ## Model Overview **amk-coder-v2** is a Myanmar-localized coding assistant fine-tuned from **Qwen2.5-Coder-1.5B** using LoRA (PEFT) technique. | Attribute | Value | |---|---| | **Base Model** | Qwen2.5-Coder-1.5B | | **Parameters** | 2B (2,000M) | | **Architecture** | Qwen2ForCausalLM | | **Training Method** | LoRA (PEFT) fine-tuning | | **Dataset** | [amkyawdev/mm-llm-coder-agent-dataset](https://huggingface.co/datasets/amkyawdev/mm-llm-coder-agent-dataset) (4M rows) | | **Context Length** | 32,768 tokens | | **Format** | Safetensors (BF16) | | **License** | Apache-2.0 | | **Languages** | Burmese + English | ### Features | Feature | Description | |---|---| | πŸ‡²πŸ‡² **Myanmar Support** | Full support for Myanmar Unicode text | | πŸ’» **Code Generation** | Python, JavaScript, C++, Java, and more | | πŸ› **Debugging** | Bug detection and fixes | | πŸ“– **Code Explanation** | Line-by-line explanations | --- ## Training Details | Parameter | Value | |---|---| | **Framework** | Transformers + PEFT | | **Training Method** | LoRA fine-tuning | | **Target Modules** | q_proj, k_proj, v_proj, o_proj, gate_proj, up_proj, down_proj | | **Optimizer** | paged_adamw_8bit | | **Learning Rate** | 3e-5 | | **Epochs** | 3 | | **Batch Size** | 8 | | **Max Length** | 2048 | | **Precision** | FP16 mixed | | **Hardware** | Kaggle Dual T4 GPU | | **Training Time** | ~3-5 hrs | ### Chat Template (ChatML) ``` <|im_start|>system You are an expert Myanmar AI coding agent with tool access.<|im_end|> <|im_start|>user {Instruction} Tools available: {Tools}<|im_end|> <|im_start|>assistant Thought & Code: ``` --- ## Quick Start ### Using Transformers (Python) ```python # Method 1: Pipeline (Recommended for beginners) from transformers import pipeline pipe = pipeline("text-generation", model="amkyawdev/amk-coder-v2") messages = [ {"role": "user", "content": "Python function တစ်ခုရေးပါ။ list comprehension α€”α€²α€· sorting α€œα€―α€•α€Ία€•α€±α€Έα€•α€«α‹"} ] result = pipe(messages, max_new_tokens=512, temperature=0.2) print(result[0]['generated_text']) # Method 2: Direct Model Loading from transformers import AutoTokenizer, AutoModelForCausalLM import torch tokenizer = AutoTokenizer.from_pretrained("amkyawdev/amk-coder-v2") model = AutoModelForCausalLM.from_pretrained( "amkyawdev/amk-coder-v2", torch_dtype=torch.bfloat16, device_map="auto" ) messages = [ {"role": "system", "content": "You are a helpful coding assistant."}, {"role": "user", "content": "Write a Python function to reverse a string"} ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, return_tensors="pt" ).to(model.device) outputs = model.generate(inputs, max_new_tokens=512, temperature=0.2) response = tokenizer.decode(outputs[0][inputs.shape[-1]:], skip_special_tokens=True) print(response) ``` ### Using vLLM (Production) ```bash # Install vLLM pip install vllm # Start server vllm serve "amkyawdev/amk-coder-v2" --tensor-parallel-size 1 # API call curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "amkyawdev/amk-coder-v2", "messages": [ {"role": "user", "content": "Hello, write Python code"} ], "max_tokens": 512, "temperature": 0.2 }' ``` ### Using SGLang ```bash # Install SGLang pip install sglang # Start server python -m sglang.launch_server --model-path "amkyawdev/amk-coder-v2" --port 30000 # API call curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ -d '{ "model": "amkyawdev/amk-coder-v2", "messages": [{"role": "user", "content": "Write a hello world in Python"}] }' ``` --- ## Usage Examples ### πŸ‡²πŸ‡² Myanmar Prompts ```python messages = [ {"role": "user", "content": "Python function တစ်ခုရေးပါ။ ဂဏန်းတွေကို sorting α€œα€―α€•α€Ία€•α€±α€Έα€•α€«α‹"} ] # Output: def sort_numbers(numbers): return sorted(numbers) ``` ### πŸ‡¬πŸ‡§ English Prompts ```python messages = [ {"role": "user", "content": "Explain this code:\nfor i in range(10):\n print(i)"} ] # Output: This is a for loop that prints numbers 0 to 9 ``` ### πŸ› Debugging ```python messages = [ {"role": "user", "content": "Fix this Python code:\nprint('Hello' + 5)"} ] # Output: TypeError fix suggestion with corrected code ``` --- ## API Deployment ### Backend Server ```bash cd backend pip install -r requirements.txt export HF_TOKEN=hf_your_token uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` ### Endpoints | Method | Endpoint | Description | |---|---|---| | GET | `/` | Health check | | GET | `/health` | Service health status | | POST | `/chat` | Streaming chat (SSE) | | GET | `/demo` | Demo HTML interface | | GET | `/models` | Model information | ### Request Format ```bash # Streaming chat curl -X POST "http://localhost:8000/chat" \ -H "Content-Type: application/json" \ -d '{ "messages": [ {"role": "user", "content": "Write a Fibonacci function in Python"} ], "stream": true }' ``` ### Docker Deployment ```bash # Using Docker Model Runner docker model run hf.co/amkyawdev/amk-coder-v2 # Using vLLM Docker docker run --gpus all \ -v ~/.cache/huggingface:/root/.cache/huggingface \ -p 8000:8000 \ --rm \ vllm/vllm-openai:latest \ --model amkyawdev/amk-coder-v2 ``` --- ## ⚠️ Limitations 1. **Context Length** - Maximum 32,768 tokens 2. **Code Quality** - May generate incorrect code; verify outputs 3. **Myanmar Unicode** - Best results with proper Zawgyi-to-Unicode conversion 4. **Domain Knowledge** - Limited to common programming languages 5. **Safety** - May produce harmful content; use responsible AI practices --- ## πŸ“– Resources - [Qwen2.5-Coder Documentation](https://qwenlm.github.io/blog/Qwen2.5-Coder/) - [Transformers Library](https://huggingface.co/docs/transformers) - [HuggingFace Hub](https://huggingface.co/amkyawdev/amk-coder-v2) --- ## πŸ™ Acknowledgments - **Alibaba Cloud Qwen Team** - Base model Qwen2.5-Coder - **HuggingFace** - Model hosting and infrastructure - **Myanmar Developer Community** - Testing and feedback --- ## πŸ“ License Apache License 2.0 - See LICENSE file for details. --- ## πŸ“§ Contact - **Author**: amkyawdev - **HuggingFace**: [amkyawdev/amk-coder-v2](https://huggingface.co/amkyawdev/amk-coder-v2) - **GitHub**: [github.com/amkyawdev](https://github.com/amkyawdev) --- *Made with ❀️ for Myanmar Developers*