Satoc commited on
Commit
716d761
·
1 Parent(s): 4580ede
Files changed (2) hide show
  1. app.py +8 -35
  2. oldapp.py +100 -0
app.py CHANGED
@@ -14,16 +14,12 @@ grader_agent = GraderAgent(groq)
14
 
15
  # データフレームを生成する関数
16
  def generate_dataframe_from_question(ex_question):
17
- # Modify and extract tumor name
18
  modified_question = modifier.modify_question(ex_question)
19
  tumor_name = extractor.extract_tumor_name(ex_question)
20
-
21
- # Get clinical trials data based on tumor name
22
  df = fetch_clinical_trials(tumor_name)
23
  df['AgentJudgment'] = None
24
  df['AgentGrade'] = None
25
-
26
- # NCTIDのリストを作成し、プログレスバーを表示
27
  NCTIDs = list(df['NCTID'])
28
  progress = gr.Progress(track_tqdm=True)
29
 
@@ -31,70 +27,47 @@ def generate_dataframe_from_question(ex_question):
31
  target_criteria = df.loc[df['NCTID'] == nct_id, 'Eligibility Criteria'].values[0]
32
  agent_judgment = CriteriaCheckAgent.evaluate_eligibility(target_criteria, modified_question)
33
  agent_grade = grader_agent.evaluate_eligibility(agent_judgment)
34
-
35
- # Update DataFrame
36
  df.loc[df['NCTID'] == nct_id, 'AgentJudgment'] = agent_judgment
37
  df.loc[df['NCTID'] == nct_id, 'AgentGrade'] = agent_grade
38
-
39
- # プログレスバーを更新(進行状況を浮動小数点数で渡す)
40
  progress((i + 1) / len(NCTIDs))
41
-
42
- # 列を指定した順に並び替え
43
  columns_order = ['NCTID', 'AgentGrade', 'Title', 'AgentJudgment', 'Japanes Locations',
44
  'Primary Completion Date', 'Cancer', 'Summary', 'Eligibility Criteria']
45
  df = df[columns_order]
46
 
47
- return df, df # フィルタ用と表示用にデータフレームを返す
48
 
49
  # AgentGradeが特定の値(yes, no, unclear)の行だけを選択する関数
50
  def filter_rows_by_grade(original_df, grade):
51
  df_filtered = original_df[original_df['AgentGrade'] == grade]
52
- return df_filtered, df_filtered # フィルタした結果を2つ返す
53
 
54
  # CSVとして保存しダウンロードする関数
55
  def download_filtered_csv(df):
56
- file_path = "filtered_data.csv" # 現在の作業ディレクトリに保存
57
- df.to_csv(file_path, index=False) # CSVファイルとして保存
58
  return file_path
59
 
60
  # Gradioインターフェースの作成
61
  with gr.Blocks() as demo:
62
- # 説明
63
  gr.Markdown("## 質問を入力して、患者さんが参加可能な臨床治験の情報を収集。参加可能か否かを判断根拠も含めて提示します。結果はcsvとしてダウンロード可能です")
64
-
65
- # 質問入力ボックス
66
  question_input = gr.Textbox(label="質問を入力してください", placeholder="例: 65歳男性でBRCA遺伝子の変異がある前立腺癌患者さんが参加できる臨床治験を教えて下さい。")
67
-
68
- # データフレーム表示エリア
69
  dataframe_output = gr.DataFrame()
70
-
71
- # データの元となるDataFrameを保存するためのstate
72
  original_df = gr.State()
73
  filtered_df = gr.State()
74
 
75
- # データフレームを生成するボタン
76
  generate_button = gr.Button("日本で行われている患者さんの癌腫の臨床治験を全て取得する")
77
-
78
- # ボタンでAgentGradeがyes, no, unclearの行のみ表示
79
  yes_button = gr.Button("AI Agentが患者さんが参加可能であると判断した臨床治験のみを表示")
80
  no_button = gr.Button("I Agentが患者さんが参加不可であると判断した臨床治験のみを表示")
81
  unclear_button = gr.Button("AI Agentが与えられた情報だけでは判断不可能とした臨床治験のみを表示")
82
-
83
- # フィルタ結果をダウンロードするボタン
84
  download_button = gr.Button("フィルタ結果をCSVとしてダウンロード")
85
- download_output = gr.File() # ダウンロード用の出力エリア
86
 
87
- # データフレームを生成して保存
88
  generate_button.click(fn=generate_dataframe_from_question, inputs=question_input, outputs=[dataframe_output, original_df])
89
-
90
- # yesボタン、noボタン、unclearボタンが押されたらフィルタしたデータを表示
91
  yes_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("yes")], outputs=[dataframe_output, filtered_df])
92
  no_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("no")], outputs=[dataframe_output, filtered_df])
93
  unclear_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("unclear")], outputs=[dataframe_output, filtered_df])
94
-
95
- # ダウンロードボタンを押すとフィルタ結果のCSVをダウンロード
96
  download_button.click(fn=download_filtered_csv, inputs=filtered_df, outputs=download_output)
97
 
98
-
99
  if __name__ == "__main__":
100
- demo.launch()
 
14
 
15
  # データフレームを生成する関数
16
  def generate_dataframe_from_question(ex_question):
 
17
  modified_question = modifier.modify_question(ex_question)
18
  tumor_name = extractor.extract_tumor_name(ex_question)
 
 
19
  df = fetch_clinical_trials(tumor_name)
20
  df['AgentJudgment'] = None
21
  df['AgentGrade'] = None
22
+
 
23
  NCTIDs = list(df['NCTID'])
24
  progress = gr.Progress(track_tqdm=True)
25
 
 
27
  target_criteria = df.loc[df['NCTID'] == nct_id, 'Eligibility Criteria'].values[0]
28
  agent_judgment = CriteriaCheckAgent.evaluate_eligibility(target_criteria, modified_question)
29
  agent_grade = grader_agent.evaluate_eligibility(agent_judgment)
 
 
30
  df.loc[df['NCTID'] == nct_id, 'AgentJudgment'] = agent_judgment
31
  df.loc[df['NCTID'] == nct_id, 'AgentGrade'] = agent_grade
 
 
32
  progress((i + 1) / len(NCTIDs))
33
+
 
34
  columns_order = ['NCTID', 'AgentGrade', 'Title', 'AgentJudgment', 'Japanes Locations',
35
  'Primary Completion Date', 'Cancer', 'Summary', 'Eligibility Criteria']
36
  df = df[columns_order]
37
 
38
+ return df, df
39
 
40
  # AgentGradeが特定の値(yes, no, unclear)の行だけを選択する関数
41
  def filter_rows_by_grade(original_df, grade):
42
  df_filtered = original_df[original_df['AgentGrade'] == grade]
43
+ return df_filtered, df_filtered
44
 
45
  # CSVとして保存しダウンロードする関数
46
  def download_filtered_csv(df):
47
+ file_path = "filtered_data.csv"
48
+ df.to_csv(file_path, index=False)
49
  return file_path
50
 
51
  # Gradioインターフェースの作成
52
  with gr.Blocks() as demo:
 
53
  gr.Markdown("## 質問を入力して、患者さんが参加可能な臨床治験の情報を収集。参加可能か否かを判断根拠も含めて提示します。結果はcsvとしてダウンロード可能です")
 
 
54
  question_input = gr.Textbox(label="質問を入力してください", placeholder="例: 65歳男性でBRCA遺伝子の変異がある前立腺癌患者さんが参加できる臨床治験を教えて下さい。")
 
 
55
  dataframe_output = gr.DataFrame()
 
 
56
  original_df = gr.State()
57
  filtered_df = gr.State()
58
 
 
59
  generate_button = gr.Button("日本で行われている患者さんの癌腫の臨床治験を全て取得する")
 
 
60
  yes_button = gr.Button("AI Agentが患者さんが参加可能であると判断した臨床治験のみを表示")
61
  no_button = gr.Button("I Agentが患者さんが参加不可であると判断した臨床治験のみを表示")
62
  unclear_button = gr.Button("AI Agentが与えられた情報だけでは判断不可能とした臨床治験のみを表示")
 
 
63
  download_button = gr.Button("フィルタ結果をCSVとしてダウンロード")
64
+ download_output = gr.File(label="CSVダウンロード")
65
 
 
66
  generate_button.click(fn=generate_dataframe_from_question, inputs=question_input, outputs=[dataframe_output, original_df])
 
 
67
  yes_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("yes")], outputs=[dataframe_output, filtered_df])
68
  no_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("no")], outputs=[dataframe_output, filtered_df])
69
  unclear_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("unclear")], outputs=[dataframe_output, filtered_df])
 
 
70
  download_button.click(fn=download_filtered_csv, inputs=filtered_df, outputs=download_output)
71
 
 
72
  if __name__ == "__main__":
73
+ demo.launch()
oldapp.py ADDED
@@ -0,0 +1,100 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import gradio as gr
2
+ import pandas as pd
3
+ from OpenAITools.FetchTools import fetch_clinical_trials, fetch_clinical_trials_jp
4
+ from langchain_openai import ChatOpenAI
5
+ from langchain_groq import ChatGroq
6
+ from OpenAITools.CrinicalTrialTools import QuestionModifierEnglish, TumorNameExtractor, SimpleClinicalTrialAgent, GraderAgent
7
+
8
+ # モデルとエージェントの初期化
9
+ groq = ChatGroq(model_name="llama3-70b-8192", temperature=0)
10
+ modifier = QuestionModifierEnglish(groq)
11
+ extractor = TumorNameExtractor(groq)
12
+ CriteriaCheckAgent = SimpleClinicalTrialAgent(groq)
13
+ grader_agent = GraderAgent(groq)
14
+
15
+ # データフレームを生成する関数
16
+ def generate_dataframe_from_question(ex_question):
17
+ # Modify and extract tumor name
18
+ modified_question = modifier.modify_question(ex_question)
19
+ tumor_name = extractor.extract_tumor_name(ex_question)
20
+
21
+ # Get clinical trials data based on tumor name
22
+ df = fetch_clinical_trials(tumor_name)
23
+ df['AgentJudgment'] = None
24
+ df['AgentGrade'] = None
25
+
26
+ # NCTIDのリストを作成し、プログレスバーを表示
27
+ NCTIDs = list(df['NCTID'])
28
+ progress = gr.Progress(track_tqdm=True)
29
+
30
+ for i, nct_id in enumerate(NCTIDs):
31
+ target_criteria = df.loc[df['NCTID'] == nct_id, 'Eligibility Criteria'].values[0]
32
+ agent_judgment = CriteriaCheckAgent.evaluate_eligibility(target_criteria, modified_question)
33
+ agent_grade = grader_agent.evaluate_eligibility(agent_judgment)
34
+
35
+ # Update DataFrame
36
+ df.loc[df['NCTID'] == nct_id, 'AgentJudgment'] = agent_judgment
37
+ df.loc[df['NCTID'] == nct_id, 'AgentGrade'] = agent_grade
38
+
39
+ # プログレスバーを更新(進行状況を浮動小数点数で渡す)
40
+ progress((i + 1) / len(NCTIDs))
41
+
42
+ # 列を指定した順に並び替え
43
+ columns_order = ['NCTID', 'AgentGrade', 'Title', 'AgentJudgment', 'Japanes Locations',
44
+ 'Primary Completion Date', 'Cancer', 'Summary', 'Eligibility Criteria']
45
+ df = df[columns_order]
46
+
47
+ return df, df # フィルタ用と表示用にデータフレームを返す
48
+
49
+ # AgentGradeが特定の値(yes, no, unclear)の行だけを選択する関数
50
+ def filter_rows_by_grade(original_df, grade):
51
+ df_filtered = original_df[original_df['AgentGrade'] == grade]
52
+ return df_filtered, df_filtered # フィルタした結果を2つ返す
53
+
54
+ # CSVとして保存しダウンロードする関数
55
+ def download_filtered_csv(df):
56
+ file_path = "filtered_data.csv" # 現在の作業ディレクトリに保存
57
+ df.to_csv(file_path, index=False) # CSVファイルとして保存
58
+ return file_path
59
+
60
+ # Gradioインターフェースの作成
61
+ with gr.Blocks() as demo:
62
+ # 説明
63
+ gr.Markdown("## 質問を入力して、患者さんが参加可能な臨床治験の情報を収集。参加可能か否かを判断根拠も含めて提示します。結果はcsvとしてダウンロード可能です")
64
+
65
+ # 質問入力ボックス
66
+ question_input = gr.Textbox(label="質問を入力してください", placeholder="例: 65歳男性でBRCA遺伝子の変異がある前立腺癌患者さんが参加できる臨床治験を教えて下さい。")
67
+
68
+ # データフレーム表示エリア
69
+ dataframe_output = gr.DataFrame()
70
+
71
+ # データの元となるDataFrameを保存するためのstate
72
+ original_df = gr.State()
73
+ filtered_df = gr.State()
74
+
75
+ # データフレームを生成するボタン
76
+ generate_button = gr.Button("日本で行われている患者さんの癌腫の臨床治験を全て取得する")
77
+
78
+ # ボタンでAgentGradeがyes, no, unclearの行のみ表示
79
+ yes_button = gr.Button("AI Agentが患者さんが参加可能であると判断した臨床治験のみを表示")
80
+ no_button = gr.Button("I Agentが患者さんが参加不可であると判断した臨床治験のみを表示")
81
+ unclear_button = gr.Button("AI Agentが与えられた情報だけでは判断不可能とした臨床治験のみを表示")
82
+
83
+ # フィルタ結果をダウンロードするボタン
84
+ download_button = gr.Button("フィルタ結果をCSVとしてダウンロード")
85
+ download_output = gr.File() # ダウンロード用の出力エリア
86
+
87
+ # データフレームを生成して保存
88
+ generate_button.click(fn=generate_dataframe_from_question, inputs=question_input, outputs=[dataframe_output, original_df])
89
+
90
+ # yesボタン、noボタン、unclearボタンが押されたらフィルタしたデータを表示
91
+ yes_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("yes")], outputs=[dataframe_output, filtered_df])
92
+ no_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("no")], outputs=[dataframe_output, filtered_df])
93
+ unclear_button.click(fn=filter_rows_by_grade, inputs=[original_df, gr.State("unclear")], outputs=[dataframe_output, filtered_df])
94
+
95
+ # ダウンロードボタンを押すとフィルタ結果のCSV��ダウンロード
96
+ download_button.click(fn=download_filtered_csv, inputs=filtered_df, outputs=download_output)
97
+
98
+
99
+ if __name__ == "__main__":
100
+ demo.launch()