Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import torch | |
| from sentence_transformers import SentenceTransformer | |
| from torch.nn.functional import cosine_similarity | |
| from spaces import GPU | |
| # モデルの読み込み | |
| model = SentenceTransformer("Shuu12121/CodeCloneDetection-ModernBERT-Owl") | |
| model.eval() | |
| # 閾値設定(安定性の高い0.9推奨) | |
| THRESHOLD = 0.9 | |
| def detect_clone(code1, code2): | |
| if not code1.strip() or not code2.strip(): | |
| return "❌ どちらのコードも入力してください", "" | |
| with torch.no_grad(): | |
| embeddings = model.encode([code1, code2], convert_to_tensor=True) | |
| sim_score = cosine_similarity(embeddings[0].unsqueeze(0), embeddings[1].unsqueeze(0)).item() | |
| result = ( | |
| f"🟢 類似度: {sim_score:.4f}\n→ これらのコードは **クローン** と判定されます。" | |
| if sim_score >= THRESHOLD | |
| else f"🔴 類似度: {sim_score:.4f}\n→ これらのコードは **クローンではありません**。" | |
| ) | |
| return result, sim_score | |
| # Javaクローン例(ファイル読み込み) | |
| java_code1 = """\ | |
| public static String readFileToString(File file, Charset encoding) throws IOException { | |
| try (BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), encoding))) { | |
| StringBuilder sb = new StringBuilder(); | |
| String line; | |
| while ((line = reader.readLine()) != null) { | |
| sb.append(line).append("\\n"); | |
| } | |
| return sb.toString(); | |
| } | |
| }""" | |
| java_code2 = """\ | |
| public static String readFileToString(File file, Charset encoding) throws IOException { | |
| byte[] bytes = java.nio.file.Files.readAllBytes(file.toPath()); | |
| return new String(bytes, encoding); | |
| }""" | |
| # Gradioインターフェースの作成 | |
| demo = gr.Interface( | |
| fn=detect_clone, | |
| inputs=[ | |
| gr.Textbox(label="コードスニペット1", lines=12, value=java_code1), | |
| gr.Textbox(label="コードスニペット2", lines=8, value=java_code2), | |
| ], | |
| outputs=[ | |
| gr.Markdown(label="判定結果"), | |
| gr.Number(label="Cosine Similarity") | |
| ], | |
| title="Code Clone Detection with ModernBERT-Owl 🦉", | |
| description="Shuu12121/CodeModernBERT-Owl によって構築された Sentence-BERT モデルを使用し、コードクローンを検出します。これは Java における意味的に同等なファイル読み込み関数の例です。" | |
| ) | |
| if __name__ == "__main__": | |
| demo.launch() | |