# Design Pattern Detection Model This model detects software design patterns in Java source code using CodeBERT. The model has been fine-tuned for single-label classification tasks and supports the following design pattern labels: ## Supported Labels | Label ID | Design Pattern | |----------|--------------------| | 0 | Observer | | 1 | Decorator | | 2 | Adapter | | 3 | Proxy | | 4 | Singleton | | 5 | Facade | | 6 | AbstractFactory | | 7 | Memento | | 8 | FactoryMethod | | 9 | Prototype | | 10 | Visitor | | 11 | Builder | | 12 | Unknown | ## How to Use ```python from transformers import AutoTokenizer, AutoModelForSequenceClassification # Load the model and tokenizer tokenizer = AutoTokenizer.from_pretrained("ichsanbudiman/design-pattern-detection-codebert") model = AutoModelForSequenceClassification.from_pretrained("ichsanbudiman/design-pattern-detection-codebert") # Example input input_code = """ public class Singleton { private static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } } """ # Tokenize the input inputs = tokenizer(input_code, return_tensors="pt", padding="max_length", truncation=True, max_length=512) # Make predictions with torch.no_grad(): outputs = model(**inputs) # Get the predicted class and label predicted_class = torch.argmax(outputs.logits, dim=1).item() predicted_label = model.config.id2label[predicted_class] print(f"Predicted label: {predicted_label}") ``` ## Input Requirements - **Input Format**: Java code snippets as strings. - **Max Length**: Input code longer than 512 tokens will be truncated. - **Padding**: Automatically pads to 512 tokens for batch processing. ## Task This model performs single-label classification for the detection of design patterns in Java source code. The supported design patterns are listed above. ## Fine-Tuning Details - **Base Model**: [CodeBERT](https://huggingface.co/microsoft/codebert-base) - **Dataset**: Fine-tuned on a curated dataset of labeled Java code examples. The dataset was sourced from the following research article: > Najam Nazar, Aldeida Aleti, Yaokun Zheng, Feature-based software design pattern detection, Journal of Systems and Software, Volume 185, 2022, 111179, ISSN 0164-1212, [https://doi.org/10.1016/j.jss.2021.111179](https://doi.org/10.1016/j.jss.2021.111179). - **Metrics**: The model achieves high accuracy on detecting design patterns, making it suitable for software engineering tasks. ## Contact For inquiries or feedback, please reach out to [Ichsan Budiman](mailto:budimanichsan@gmail.com). ## License This model is licensed under the Apache 2.0 License.