review_typst.py (2014B)
1 import os 2 3 from llama_cpp import Llama 4 5 MODEL_PATH = "./mistral_typst_merged.f16.gguf" 6 FILE_PATH = "prism.typ" 7 N_CTX = 8192 8 MAX_TOKENS = 8192 9 10 if not os.path.exists(MODEL_PATH): 11 print(f"Error: Model file not found at {MODEL_PATH}") 12 exit(1) 13 14 if not os.path.exists(FILE_PATH): 15 print(f"Error: Typst file not found at {FILE_PATH}") 16 exit(1) 17 18 try: 19 with open(FILE_PATH, "r", encoding="utf-8") as f: 20 typst_content = f.read() 21 except Exception as e: 22 print(f"Error reading file: {e}") 23 exit(1) 24 CPU_CORES = os.cpu_count() 25 llm = Llama( 26 model_path=MODEL_PATH, 27 n_gpu_layers=0, 28 n_ctx=N_CTX, 29 n_threads=CPU_CORES, 30 verbose=True, 31 ) 32 33 SYSTEM_PROMPT = ( 34 "あなたはTypstコードのレビュー専門家です。提供されたコードを分析し、" 35 "物理学の実験のレポートとしての問題点を日本語でリストアップしてください。" 36 "出力は、Markdownの箇条書き形式(- [種別] メッセージ)で簡潔に記述してください。" 37 "余計な前置きや結論の文章は一切不要です。" 38 ) 39 40 USER_PROMPT = ( 41 f"以下のTypstコードをレビューしてください。\n\n```typst\n{typst_content}\n```" 42 ) 43 44 prompt = f"### System:\n{SYSTEM_PROMPT}\n\n### User:\n{USER_PROMPT}\n\n### Assistant:" 45 46 print("--- Llama モデルの初期化完了 (CPU Mode) ---") 47 print(f"レビュー対象ファイル: {FILE_PATH} ({len(typst_content)} chars)") 48 print("--- 推論開始 (時間がかかる可能性があります) ---") 49 50 try: 51 completion = llm.create_completion( 52 prompt=prompt, 53 max_tokens=MAX_TOKENS, 54 temperature=0.1, 55 stop=["### User:", "### System:"], 56 ) 57 58 print("\n\n--- レビュー結果 ---") 59 print(completion["choices"][0]["text"].strip()) 60 print("--------------------") 61 62 except Exception as e: 63 print(f"\n\n--- 推論中にエラーが発生しました ---") 64 print(f"エラー: {e}")