Satoc commited on
Commit
f2a4871
·
1 Parent(s): c46f583

Fix Pydantic compatibility and improve error handling

Browse files
Files changed (3) hide show
  1. OpenAITools/CrinicalTrialTools.py +11 -2
  2. app.py +59 -7
  3. requirements.txt +10 -15
OpenAITools/CrinicalTrialTools.py CHANGED
@@ -24,8 +24,8 @@ except ImportError:
24
  from langchain_core.runnables import RunnablePassthrough
25
  from langchain_core.output_parsers import StrOutputParser
26
 
27
- # GPT初期化
28
- gpt = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
29
 
30
  ## Database関連のインポート
31
  from langchain_community.utilities import SQLDatabase
@@ -36,6 +36,15 @@ from langchain_core.prompts import MessagesPlaceholder
36
 
37
  from OpenAITools.FetchTools import fetch_clinical_trials, fetch_clinical_trials_jp
38
 
 
 
 
 
 
 
 
 
 
39
  # エラーハンドリング用のデコレータ
40
  def retry_on_error(max_retries=3, delay=1):
41
  """エラー時のリトライデコレータ"""
 
24
  from langchain_core.runnables import RunnablePassthrough
25
  from langchain_core.output_parsers import StrOutputParser
26
 
27
+ # 修正: モジュールレベルでの初期化を削除
28
+ # gpt = ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
29
 
30
  ## Database関連のインポート
31
  from langchain_community.utilities import SQLDatabase
 
36
 
37
  from OpenAITools.FetchTools import fetch_clinical_trials, fetch_clinical_trials_jp
38
 
39
+ # GPT初期化を関数として追加
40
+ def get_openai_client():
41
+ """OpenAIクライアントを安全に初期化"""
42
+ try:
43
+ return ChatOpenAI(model="gpt-3.5-turbo", temperature=0)
44
+ except Exception as e:
45
+ print(f"OpenAI初期化エラー: {e}")
46
+ return None
47
+
48
  # エラーハンドリング用のデコレータ
49
  def retry_on_error(max_retries=3, delay=1):
50
  """エラー時のリトライデコレータ"""
app.py CHANGED
@@ -2,20 +2,54 @@ import gradio as gr
2
  import pandas as pd
3
  import time
4
  import traceback
 
5
  from OpenAITools.FetchTools import fetch_clinical_trials
6
  from langchain_openai import ChatOpenAI
7
  from langchain_groq import ChatGroq
8
  from OpenAITools.CrinicalTrialTools import SimpleClinicalTrialAgent, GraderAgent, LLMTranslator, generate_ex_question_English
9
 
10
- # モデルとエージェントの初期化
11
- groq = ChatGroq(model_name="llama3-70b-8192", temperature=0)
12
- translator = LLMTranslator(groq)
13
- CriteriaCheckAgent = SimpleClinicalTrialAgent(groq)
14
- grader_agent = GraderAgent(groq)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
15
 
16
  # エラーハンドリング付きでエージェント評価を実行する関数
17
  def evaluate_with_retry(agent, criteria, question, max_retries=3):
18
  """エラーハンドリング付きでエージェント評価を実行"""
 
 
 
19
  for attempt in range(max_retries):
20
  try:
21
  return agent.evaluate_eligibility(criteria, question)
@@ -32,6 +66,8 @@ def evaluate_with_retry(agent, criteria, question, max_retries=3):
32
  continue
33
  else:
34
  return "評価エラー: サーバーに接続できませんでした"
 
 
35
  else:
36
  print(f"予期しないエラー (試行 {attempt + 1}/{max_retries}): {e}")
37
  if attempt < max_retries - 1:
@@ -43,6 +79,9 @@ def evaluate_with_retry(agent, criteria, question, max_retries=3):
43
 
44
  def evaluate_grade_with_retry(agent, judgment, max_retries=3):
45
  """エラーハンドリング付きでグレード評価を実行"""
 
 
 
46
  for attempt in range(max_retries):
47
  try:
48
  return agent.evaluate_eligibility(judgment)
@@ -54,6 +93,8 @@ def evaluate_grade_with_retry(agent, judgment, max_retries=3):
54
  continue
55
  else:
56
  return "unclear"
 
 
57
  else:
58
  print(f"予期しないエラー (グレード評価 - 試行 {attempt + 1}/{max_retries}): {e}")
59
  if attempt < max_retries - 1:
@@ -72,7 +113,11 @@ def generate_dataframe(age, sex, tumor_type, GeneMutation, Meseable, Biopsiable)
72
 
73
  # 日本語の腫瘍タイプを英語に翻訳
74
  try:
75
- TumorName = translator.translate(tumor_type)
 
 
 
 
76
  except Exception as e:
77
  print(f"翻訳エラー: {e}")
78
  TumorName = tumor_type # 翻訳に失敗した場合は元の値を使用
@@ -162,7 +207,14 @@ def download_full_csv(df):
162
  # Gradioインターフェースの作成
163
  with gr.Blocks(title="臨床試験適格性評価", theme=gr.themes.Soft()) as demo:
164
  gr.Markdown("## 臨床試験適格性評価インターフェース")
165
- gr.Markdown("⚠️ **注意**: サーバーエラーが発生する場合があります。エラーが続く場合は少し時間をおいてから再試行してください。")
 
 
 
 
 
 
 
166
 
167
  # 各種入力フィールド
168
  with gr.Row():
 
2
  import pandas as pd
3
  import time
4
  import traceback
5
+ import os
6
  from OpenAITools.FetchTools import fetch_clinical_trials
7
  from langchain_openai import ChatOpenAI
8
  from langchain_groq import ChatGroq
9
  from OpenAITools.CrinicalTrialTools import SimpleClinicalTrialAgent, GraderAgent, LLMTranslator, generate_ex_question_English
10
 
11
+ # 環境変数チェック
12
+ def check_environment():
13
+ """環境変数をチェックし、不足している場合は警告"""
14
+ missing_vars = []
15
+
16
+ if not os.getenv("GROQ_API_KEY"):
17
+ missing_vars.append("GROQ_API_KEY")
18
+
19
+ if not os.getenv("OPENAI_API_KEY"):
20
+ missing_vars.append("OPENAI_API_KEY")
21
+
22
+ if missing_vars:
23
+ print(f"⚠️ 環境変数が設定されていません: {', '.join(missing_vars)}")
24
+ print("一部の機能が制限される可能性があります。")
25
+
26
+ return len(missing_vars) == 0
27
+
28
+ # 環境変数チェック実行
29
+ env_ok = check_environment()
30
+
31
+ # モデルとエージェントの安全な初期化
32
+ def safe_init_agents():
33
+ """エージェントを安全に初期化"""
34
+ try:
35
+ groq = ChatGroq(model_name="llama3-70b-8192", temperature=0)
36
+ translator = LLMTranslator(groq)
37
+ criteria_agent = SimpleClinicalTrialAgent(groq)
38
+ grader_agent = GraderAgent(groq)
39
+ return translator, criteria_agent, grader_agent
40
+ except Exception as e:
41
+ print(f"エージェント初期化エラー: {e}")
42
+ return None, None, None
43
+
44
+ # エージェント初期化
45
+ translator, CriteriaCheckAgent, grader_agent = safe_init_agents()
46
 
47
  # エラーハンドリング付きでエージェント評価を実行する関数
48
  def evaluate_with_retry(agent, criteria, question, max_retries=3):
49
  """エラーハンドリング付きでエージェント評価を実行"""
50
+ if agent is None:
51
+ return "評価エラー: エージェントが初期化されていません。API keyを確認してください。"
52
+
53
  for attempt in range(max_retries):
54
  try:
55
  return agent.evaluate_eligibility(criteria, question)
 
66
  continue
67
  else:
68
  return "評価エラー: サーバーに接続できませんでした"
69
+ elif "API key" in str(e) or "authentication" in str(e).lower():
70
+ return "評価エラー: API keyが無効または設定されていません"
71
  else:
72
  print(f"予期しないエラー (試行 {attempt + 1}/{max_retries}): {e}")
73
  if attempt < max_retries - 1:
 
79
 
80
  def evaluate_grade_with_retry(agent, judgment, max_retries=3):
81
  """エラーハンドリング付きでグレード評価を実行"""
82
+ if agent is None:
83
+ return "unclear"
84
+
85
  for attempt in range(max_retries):
86
  try:
87
  return agent.evaluate_eligibility(judgment)
 
93
  continue
94
  else:
95
  return "unclear"
96
+ elif "API key" in str(e) or "authentication" in str(e).lower():
97
+ return "unclear"
98
  else:
99
  print(f"予期しないエラー (グレード評価 - 試行 {attempt + 1}/{max_retries}): {e}")
100
  if attempt < max_retries - 1:
 
113
 
114
  # 日本語の腫瘍タイプを英語に翻訳
115
  try:
116
+ if translator is not None:
117
+ TumorName = translator.translate(tumor_type)
118
+ else:
119
+ print("翻訳エージェントが利用できません。元の値を使用します。")
120
+ TumorName = tumor_type
121
  except Exception as e:
122
  print(f"翻訳エラー: {e}")
123
  TumorName = tumor_type # 翻訳に失敗した場合は元の値を使用
 
207
  # Gradioインターフェースの作成
208
  with gr.Blocks(title="臨床試験適格性評価", theme=gr.themes.Soft()) as demo:
209
  gr.Markdown("## 臨床試験適格性評価インターフェース")
210
+
211
+ # 環境変数状態の表示
212
+ if env_ok:
213
+ gr.Markdown("✅ **ステータス**: 全ての環境変数が設定されています")
214
+ else:
215
+ gr.Markdown("⚠️ **���意**: 一部の環境変数が設定されていません。機能が制限される可能性があります。")
216
+
217
+ gr.Markdown("💡 **使用方法**: 患者情報を入力して「Generate Clinical Trials Data」をクリックしてください。")
218
 
219
  # 各種入力フィールド
220
  with gr.Row():
requirements.txt CHANGED
@@ -6,23 +6,23 @@ pandas>=1.5.0
6
  numpy>=1.21.0
7
  requests>=2.25.0
8
 
9
- # LangChain ecosystem (安定バージョンに固定)
10
- langchain==0.3.2
11
- langchain-community==0.3.1
12
- langchain-core==0.3.9
13
- langchain-openai==0.2.2
14
- langchain-groq==0.2.0
15
- langchain-text-splitters==0.3.0
16
 
17
  # LLM providers
18
- openai>=1.0.0
19
  groq>=0.4.0
20
 
21
  # Database utilities
22
  SQLAlchemy>=2.0.0,<3.0.0
23
 
24
- # Pydantic (Gradio互換性のため)
25
- pydantic>=2.0.0,<3.0.0
26
 
27
  # Text processing (軽量化)
28
  tiktoken>=0.4.0
@@ -31,11 +31,6 @@ tiktoken>=0.4.0
31
  tenacity>=8.0.0
32
  packaging>=23.0.0
33
 
34
- # Optional: Vector databases (必要な場合のみ)
35
- # chromadb>=0.4.0
36
- # sentence-transformers>=2.2.0
37
- # transformers>=4.40.0
38
-
39
  # Optional: Bio-related libraries (if needed for your specific use case)
40
  # Uncomment the following lines if bio-processing is required
41
  # biopython>=1.83
 
6
  numpy>=1.21.0
7
  requests>=2.25.0
8
 
9
+ # LangChain ecosystem (互換性のあるバージョンに調整)
10
+ langchain==0.2.16
11
+ langchain-community==0.2.16
12
+ langchain-core==0.2.38
13
+ langchain-openai==0.1.23
14
+ langchain-groq==0.1.9
15
+ langchain-text-splitters==0.2.4
16
 
17
  # LLM providers
18
+ openai>=1.0.0,<2.0.0
19
  groq>=0.4.0
20
 
21
  # Database utilities
22
  SQLAlchemy>=2.0.0,<3.0.0
23
 
24
+ # Pydantic (LangChain互換性のため)
25
+ pydantic>=2.5.0,<3.0.0
26
 
27
  # Text processing (軽量化)
28
  tiktoken>=0.4.0
 
31
  tenacity>=8.0.0
32
  packaging>=23.0.0
33
 
 
 
 
 
 
34
  # Optional: Bio-related libraries (if needed for your specific use case)
35
  # Uncomment the following lines if bio-processing is required
36
  # biopython>=1.83