Kanekonkon commited on
Commit
41499f3
·
verified ·
1 Parent(s): d0e60b0

Upload folder using huggingface_hub

Browse files
Files changed (1) hide show
  1. app.py +41 -9
app.py CHANGED
@@ -161,7 +161,7 @@ def extract_text_from_pdf(pdf_file_path):
161
  def get_llm_response(selected_llm, query, context, source_code_to_check):
162
  """選択されたLLMを使用して質問に回答する"""
163
  system_prompt = "あなたは提供されたコンテキスト(ソースコードチェックリスト)とレビュー対象のソースコードに基づいて、ソースコードをチェックし、その結果を返す有益なアシスタントです。チェックリストの項目ごとにソースコードを評価し、具体的な指摘と改善案を提示してください。コンテキストに情報がない場合は、「提供された情報からは回答できません。」と答えてください。"
164
- user_content = f"ソースコードチェックリスト:\n{context}\n\nレビュー対象のソースコード:\n```\n{source_code_to_check}\n```\n\n質問: {query}\n\nチェック結果:"
165
 
166
  try:
167
  if selected_llm == "Ollama":
@@ -176,7 +176,7 @@ def get_llm_response(selected_llm, query, context, source_code_to_check):
176
  model=OLLAMA_MODEL_NAME,
177
  messages=messages,
178
  options={
179
- "temperature": 0.5,
180
  "num_predict": 2000
181
  }
182
  )
@@ -222,19 +222,51 @@ def get_llm_response(selected_llm, query, context, source_code_to_check):
222
  return "Google APIキーが設定されていないため、Geminiモデルは利用できません。"
223
  # Geminiのsystem instructionはまだベータ版で、messagesと併用できない場合があるため、
224
  # system_promptをuser_contentの先頭に結合する形式にする。
 
 
 
 
 
225
  full_user_content = f"{system_prompt}\n\n{user_content}"
226
  messages = [
227
  {"role": "user", "parts": [full_user_content]}
228
  ]
229
  print(f"Google Geminiモデル '{GOOGLE_MODEL_NAME}' にリクエストを送信中...")
230
- response = client_gemini.generate_content(
231
- messages,
232
- generation_config=genai.types.GenerationConfig(
233
- temperature=0.5,
234
- max_output_tokens=2000
 
 
235
  )
236
- )
237
- return response.text.strip()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
238
 
239
  else:
240
  return "無効なLLMが選択されました。"
 
161
  def get_llm_response(selected_llm, query, context, source_code_to_check):
162
  """選択されたLLMを使用して質問に回答する"""
163
  system_prompt = "あなたは提供されたコンテキスト(ソースコードチェックリスト)とレビュー対象のソースコードに基づいて、ソースコードをチェックし、その結果を返す有益なアシスタントです。チェックリストの項目ごとにソースコードを評価し、具体的な指摘と改善案を提示してください。コンテキストに情報がない場合は、「提供された情報からは回答できません。」と答えてください。"
164
+ user_content = f"ソースコードチェックリスト:\n{context}\n\nレビュー対象のソースコード:\n```\n{source_code_to_check}\n```\n\nレビュー指示: {query}\n\nチェック結果:"
165
 
166
  try:
167
  if selected_llm == "Ollama":
 
176
  model=OLLAMA_MODEL_NAME,
177
  messages=messages,
178
  options={
179
+ "temperature": 0.7,
180
  "num_predict": 2000
181
  }
182
  )
 
222
  return "Google APIキーが設定されていないため、Geminiモデルは利用できません。"
223
  # Geminiのsystem instructionはまだベータ版で、messagesと併用できない場合があるため、
224
  # system_promptをuser_contentの先頭に結合する形式にする。
225
+ # --- システムプロンプトの調整 (後述の2.プロンプト調整も参照) ---
226
+ system_prompt = "あなたは提供されたコンテキスト(ソースコードチェックリスト)とレビュー対象のソースコードに基づいて、ソースコードのレビューを行うアシスタントです。チェックリストの項目ごとにソースコードを評価し、潜在的な問題点や改善の機会を提案してください。コンテキストに情報がない場合は、「提供された情報からは回答できません。」と答えてください。"
227
+ # --- ユーザープロンプトの調整 (後述の2.プロンプト調整も参照) ---
228
+ user_content = f"ソースコードチェックリスト:\n{context}\n\nレビュー対象のソースコード:\n```\n{source_code_to_check}\n```\n\nレビュー指示: {query}\n\nチェック結果:"
229
+
230
  full_user_content = f"{system_prompt}\n\n{user_content}"
231
  messages = [
232
  {"role": "user", "parts": [full_user_content]}
233
  ]
234
  print(f"Google Geminiモデル '{GOOGLE_MODEL_NAME}' にリクエストを送信中...")
235
+ try:
236
+ response = client_gemini.generate_content(
237
+ messages,
238
+ generation_config=genai.types.GenerationConfig(
239
+ temperature=0.5, # まずは0.5で試す。必要なら0.7などに上げる
240
+ max_output_tokens=2000
241
+ )
242
  )
243
+
244
+ # --- エラーハンドリングの強化 ---
245
+ # response.text を呼び出す前に、応答の候補と終了理由を確認
246
+ if response.candidates:
247
+ candidate = response.candidates[0]
248
+ # finish_reason が SAFETY (genai.types.HarmCategory.SAFETY) の場合、安全ポリシーによりブロックされた可能性が高い
249
+ if candidate.finish_reason == genai.types.HarmCategory.SAFETY:
250
+ safety_ratings = candidate.safety_ratings
251
+ safety_details = ", ".join([f"{sr.category.name}: {sr.probability.name}" for sr in safety_ratings])
252
+ print(f"Gemini response blocked due to safety policy. Details: {safety_details}")
253
+ return f"Google Geminiからの応答が安全ポリシーによりブロックされました。詳細: {safety_details}"
254
+ # 正常なコンテンツがあるか確認
255
+ elif candidate.content and candidate.content.parts:
256
+ return response.text.strip()
257
+ else:
258
+ # コンテンツがないが、finish_reasonがSAFETY以外の場合
259
+ print(f"Gemini response has no content parts. Finish reason: {candidate.finish_reason.name}")
260
+ return f"Google Geminiからの応答にコンテンツが含まれていません。終了理由: {candidate.finish_reason.name}"
261
+ else:
262
+ # 候補自体がない場合
263
+ print(f"Gemini response has no candidates. Raw response: {response}")
264
+ return f"Google Geminiからの応答に候補がありませんでした。生の応答: {response}"
265
+
266
+ except Exception as e:
267
+ # generate_content 自体でエラーが発生した場合
268
+ print(f"Google Gemini API呼び出し中にエラーが発生しました: {e}")
269
+ return f"Google Gemini API呼び出し中にエラーが発生しました: {e}"
270
 
271
  else:
272
  return "無効なLLMが選択されました。"