Yuki Kobiyama commited on
Commit
b121074
1 Parent(s): 6584696

refactoring

Browse files
Files changed (3) hide show
  1. src/forms.py +142 -211
  2. src/generate_guery.py +1 -1
  3. src/questions.py +2 -0
src/forms.py CHANGED
@@ -16,6 +16,125 @@ from src.prompts import (
16
  from src.questions import get_questions
17
  from src.utils import get_embedding, load_env_vars
18
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
19
 
20
  def change_request_form(embed_output):
21
  st.title("変更申請書 文書生成")
@@ -47,8 +166,8 @@ def change_request_form(embed_output):
47
  )
48
  implementation_date = st.text_area("実施予定時期")
49
 
50
- submit_button0 = st.form_submit_button("進む")
51
- if submit_button0:
52
  st.session_state["form_submitted"] = True
53
 
54
  change_num = int(change_num)
@@ -75,219 +194,30 @@ def change_request_form(embed_output):
75
  st.markdown(f"**{change+1}つ目の変更**")
76
  types[change] = st.selectbox(
77
  "変更の種類を選択してください:",
78
- [
79
- "",
80
- "原薬",
81
- "添加物",
82
- "資材変更",
83
- "デザイン変更",
84
- "製造方法・製造設備",
85
- "製造支援システム",
86
- "構造設備・設備移設",
87
- "品質管理",
88
- "出荷・物流",
89
- ],
90
  key=f"type_{change}",
91
  )
92
  if types[change]:
93
  st.session_state[f"type_chosen_{change}"] = True
94
 
95
  if st.session_state[f"type_chosen_{change}"]:
96
- if types[change] == "原薬":
97
- subtypes2[change] = "x"
98
- subtypes[change] = st.selectbox(
99
- "変更内容を選択してください:",
100
- [
101
- "",
102
- "グレード",
103
- "製造設備",
104
- "製造方法",
105
- "製造所(A社→B社)",
106
- "製造場所(製造メーカーに変更はない。A社の①工場→A社の②工場)",
107
- ],
108
- key=f"subtype_1_{change}",
109
- )
110
- elif types[change] == "添加物":
111
- subtypes2[change] = "x"
112
- subtypes[change] = st.selectbox(
113
- "変更内容を選択してください:",
114
- [
115
- "",
116
- "グレード(型番)",
117
- "製造設備",
118
- "製造メーカー(A社→B社)",
119
- "製造場所(製造メーカーに変更はない。A社の①工場→A社の②工場)",
120
- ],
121
- key=f"subtype_2_{change}",
122
- )
123
- elif types[change] == "資材変更":
124
- subtypes[change] = st.selectbox(
125
- "変更内容を選択してください:",
126
- [
127
- "",
128
- "チューブ・容器キャップ(直接容器)",
129
- "容器ラベル",
130
- "添付文書",
131
- "個箱",
132
- "セット箱",
133
- "シール(例:見本用シール、変更品シール)",
134
- "パッキングケース",
135
- "パッキングケースラベル",
136
- ],
137
- key=f"subtype_3_{change}",
138
- )
139
- elif types[change] == "デザイン変更":
140
- subtypes2[change] = "x"
141
- subtypes[change] = "x"
142
- elif types[change] == "製造方法・製造設備":
143
- subtypes2[change] = "x"
144
- subtypes[change] = st.selectbox(
145
- "変更内容を選択してください:",
146
- [
147
- "",
148
- "仕込量変更(スケールアップ・ダウン)",
149
- "標準的仕込量変更(100%仕込み→10●%仕込みに変更)",
150
- "出荷規格の変更",
151
- "調合設備の変更",
152
- "充填設備の変更",
153
- "包装設備の変更",
154
- "調合工程のパラメーター変更",
155
- "充填工程のパラメーター変更(例:充填速度、設定温度、規格範囲、トルク値)",
156
- "包装工程のパラメーター変更",
157
- "重量基準値の変更(ウエイトチェッカーでの計量)",
158
- "包装工程 作業人数の変更",
159
- "洗浄方法の変更",
160
- ],
161
- key=f"subtype_4_{change}",
162
- )
163
- elif types[change] == "製造支援システム":
164
- subtypes2[change] = "x"
165
- subtypes[change] = st.selectbox(
166
- "変更内容を選択してください:",
167
- ["", "製造支援システム(製造用水、空調システム)"],
168
- key=f"subtype_5_{change}",
169
- )
170
- elif types[change] == "構造設備・設備移設":
171
- subtypes2[change] = "x"
172
- subtypes[change] = st.selectbox(
173
- "変更内容を選択してください:",
174
- ["", "構造設備", "設備の移設(製造設備・試験設備)"],
175
- key=f"subtype_6_{change}",
176
- )
177
- elif types[change] == "品質管理":
178
- subtypes2[change] = "x"
179
- subtypes[change] = st.selectbox(
180
- "変更内容を選択してください:",
181
- [
182
- "",
183
- "試験方法の変更",
184
- "試験室の変更",
185
- "外部試験機関の変更",
186
- "試験設備の変更・更新",
187
- "バルク保管期間の変更",
188
- ],
189
- key=f"subtype_7_{change}",
190
- )
191
- elif types[change] == "出荷・物流":
192
- subtypes2[change] = "x"
193
- subtypes[change] = st.selectbox(
194
- "変更内容を選択してください:",
195
- ["", "製品納品先の変更"],
196
- key=f"subtype_8_{change}",
197
- )
198
-
199
- if (
200
- subtypes[change]
201
- == "充填工程のパラメーター変更(例:充填速度、設定温度、規格範囲、トルク値)"
202
  ):
203
  subtypes2[change] = st.selectbox(
204
  "詳しい内容を選択してください:",
205
- ["", "液", "クリーム", "チューブ"],
206
- key=f"subtype_9_{change}",
207
  )
208
 
209
- match types[change], subtypes[change]:
210
- case "資材変更", "チューブ・容器キャップ(直接容器)":
211
- subtypes2[change] = st.selectbox(
212
- "詳しい内容を選択してください:",
213
- [
214
- "",
215
- "製造設備の変更",
216
- "製造所の変更",
217
- "材質の変更",
218
- "形状変更",
219
- "版番号の変更",
220
- ],
221
- key=f"subtype_3_1_{change}",
222
- )
223
- case "資材変更", "容器ラベル":
224
- subtypes2[change] = st.selectbox(
225
- "詳しい内容を選択してください:",
226
- [
227
- "",
228
- "版番号の変更",
229
- "セルフメディケーション税制対応マークの追加",
230
- ],
231
- key=f"subtype_3_2_{change}",
232
- )
233
- case "資材変更", "添付文書":
234
- subtypes2[change] = st.selectbox(
235
- "詳しい内容を選択してください:",
236
- [
237
- "",
238
- "製造所の変更",
239
- "材質変更",
240
- "厚さ変更",
241
- "版番号の変更",
242
- ],
243
- key=f"subtype_3_3_{change}",
244
- )
245
- case "資材変更", "個箱":
246
- subtypes2[change] = st.selectbox(
247
- "詳しい内容を選択してください:",
248
- [
249
- "",
250
- "製造所の変更",
251
- "捺印位置の変更",
252
- "個箱形状変更",
253
- "個箱の材質(表面加工)",
254
- "版番号の変更",
255
- "セルフメディケーション税制対応マークの追加",
256
- ],
257
- key=f"subtype_3_4_{change}",
258
- )
259
- case "資材変更", "セット箱":
260
- subtypes2[change] = st.selectbox(
261
- "詳しい内容を選択してください:",
262
- [
263
- "",
264
- "製造所の変更",
265
- "捺印位置の変更",
266
- "セット箱形状変更",
267
- "版番号の変更",
268
- ],
269
- key=f"subtype_3_5_{change}",
270
- )
271
- case "資材変更", "シール(例:見本用シール、変更品シール)":
272
- subtypes2[change] = st.selectbox(
273
- "詳しい内容を選択してください:",
274
- ["", "サイズの変更", "版番号の変更"],
275
- key=f"subtype_3_6_{change}",
276
- )
277
- case "資材変更", "パッキングケース":
278
- subtypes2[change] = st.selectbox(
279
- "詳しい内容を選択してください:",
280
- ["", "版番号の変更"],
281
- key=f"subtype_3_7_{change}",
282
- )
283
- case "資材変更", "パッキングケースラベル":
284
- subtypes2[change] = st.selectbox(
285
- "詳しい内容を選択してください:",
286
- ["", "版番号の変更"],
287
- key=f"subtype_3_8_{change}",
288
- )
289
-
290
- if subtypes[change] and subtypes2[change]:
291
  st.session_state[f"subtype_chosen_{change}"] = True
292
 
293
  if st.session_state[f"subtype_chosen_{change_num-1}"]:
@@ -338,17 +268,18 @@ def change_request_form(embed_output):
338
  if nos[k]:
339
  input_values[k] = "特になし"
340
 
341
- system_prompt = systemprompt_template_1
342
- system_prompt += systemprompt_template_2
 
 
 
343
  for k in range(question_num):
344
- system_prompt += q[k]
345
- system_prompt += "\n"
346
  system_prompt += systemprompt_template_3
347
 
348
  user_prompt = ""
349
  for k in range(question_num):
350
- user_prompt += f" A{q[k][1:4]} : {input_values[k]}"
351
- user_prompt += "\n"
352
 
353
  client = OpenAI(api_key=open_api_key)
354
  response = client.chat.completions.create(
@@ -357,7 +288,7 @@ def change_request_form(embed_output):
357
  {"role": "system", "content": system_prompt},
358
  {"role": "user", "content": user_prompt},
359
  ],
360
- response_format={"type": "json_object"},
361
  temperature=0.0,
362
  )
363
  response_text = response.choices[0].message.content
 
16
  from src.questions import get_questions
17
  from src.utils import get_embedding, load_env_vars
18
 
19
+ # 変更タイプとサブタイプの定義
20
+ CHANGE_TYPES = [
21
+ "",
22
+ "原薬",
23
+ "添加物",
24
+ "資材変更",
25
+ "デザイン変更",
26
+ "製造方法・製造設備",
27
+ "製造支援システム",
28
+ "構造設備・設備移設",
29
+ "品質管理",
30
+ "出荷・物流",
31
+ ]
32
+
33
+ SUBTYPES = {
34
+ "原薬": [
35
+ "",
36
+ "グレード",
37
+ "製造設備",
38
+ "製造方法",
39
+ "製造所(A社→B社)",
40
+ "製造場所(製造メーカーに変更はない。A社の①工場→A社の②工場)",
41
+ ],
42
+ "添加物": [
43
+ "",
44
+ "グレード(型番)",
45
+ "製造設備",
46
+ "製造メーカー(A社→B社)",
47
+ "製造場所(製造メーカーに変更はない。A社の①工場→A社の②工場)",
48
+ ],
49
+ "資材変更": [
50
+ "",
51
+ "チューブ・容器キャップ(直接容器)",
52
+ "容器ラベル",
53
+ "添付文書",
54
+ "個箱",
55
+ "セット箱",
56
+ "シール(例:見本用シール、変更品シール)",
57
+ "パッキングケース",
58
+ "パッキングケースラベル",
59
+ ],
60
+ "製造方法・製造設備": [
61
+ "",
62
+ "仕込量変更(スケールアップ・ダウン)",
63
+ "標準的仕込量変更(100%仕込み→10●%仕込みに変更)",
64
+ "出荷規格の変更",
65
+ "調合設備の変更",
66
+ "充填設備の変更",
67
+ "包装設備の変更",
68
+ "調合工程のパラメーター変更",
69
+ "充填工程のパラメーター変更(例:充填速度、設定温度、規格範囲、トルク値)",
70
+ "包装工程のパラメーター変更",
71
+ "重量基準値の変更(ウエイトチェッカーでの計量)",
72
+ "包装工程 作業人数の変更",
73
+ "洗浄方法の変更",
74
+ ],
75
+ "製造支援システム": ["", "製造支援システム(製造用水、空調システム)"],
76
+ "構造設備・設備移設": ["", "構造設備", "設備の移設(製造設備・試験設備)"],
77
+ "品質管理": [
78
+ "",
79
+ "試験方法の変更",
80
+ "試験室の変更",
81
+ "外部試験機関の変更",
82
+ "試験設備の変更・更新",
83
+ "バルク保管期間の変更",
84
+ ],
85
+ "出荷・物流": ["", "製品納品先の変更"],
86
+ }
87
+
88
+ SUBTYPES2 = {
89
+ ("資材変更", "チューブ・容器キャップ(直接容器)"): [
90
+ "",
91
+ "製造設備の変更",
92
+ "製造所の変更",
93
+ "材質の変更",
94
+ "形状変更",
95
+ "版番号の変更",
96
+ ],
97
+ ("資材変更", "容器ラベル"): [
98
+ "",
99
+ "版番号の変更",
100
+ "セルフメディケーション税制対応マークの追加",
101
+ ],
102
+ ("資材変更", "添付文書"): [
103
+ "",
104
+ "製造所の変更",
105
+ "材質変更",
106
+ "厚さ変更",
107
+ "版番号の変更",
108
+ ],
109
+ ("資材変更", "個箱"): [
110
+ "",
111
+ "製造所の変更",
112
+ "捺印位置の変更",
113
+ "個箱形状変更",
114
+ "個箱の材質(表面加工)",
115
+ "版番号の変更",
116
+ "セルフメディケーション税制対応マークの追加",
117
+ ],
118
+ ("資材変更", "セット箱"): [
119
+ "",
120
+ "製造所の変更",
121
+ "捺印位置の変更",
122
+ "セット箱形状変更",
123
+ "版番号の変更",
124
+ ],
125
+ ("資材変更", "シール(例:見本用シール、変更品シール)"): [
126
+ "",
127
+ "サイズの変更",
128
+ "版番号の変更",
129
+ ],
130
+ ("資材変更", "パッキングケース"): ["", "版番号の変更"],
131
+ ("資材変更", "パッキングケースラベル"): ["", "版番号の変更"],
132
+ (
133
+ "製造方法・製造設備",
134
+ "充填工程のパラメーター変更(例:充填速度、設定温度、規格範囲、トルク値)",
135
+ ): ["", "液", "クリーム", "チューブ"],
136
+ }
137
+
138
 
139
  def change_request_form(embed_output):
140
  st.title("変更申請書 文書生成")
 
166
  )
167
  implementation_date = st.text_area("実施予定時期")
168
 
169
+ moveon_button = st.form_submit_button("進む")
170
+ if moveon_button:
171
  st.session_state["form_submitted"] = True
172
 
173
  change_num = int(change_num)
 
194
  st.markdown(f"**{change+1}つ目の変更**")
195
  types[change] = st.selectbox(
196
  "変更の種類を選択してください:",
197
+ CHANGE_TYPES,
 
 
 
 
 
 
 
 
 
 
 
198
  key=f"type_{change}",
199
  )
200
  if types[change]:
201
  st.session_state[f"type_chosen_{change}"] = True
202
 
203
  if st.session_state[f"type_chosen_{change}"]:
204
+ subtypes[change] = st.selectbox(
205
+ "変更内容を選択してください:",
206
+ SUBTYPES.get(types[change], [""]),
207
+ key=f"subtype_{change}",
208
+ )
209
+ if subtypes[change] in SUBTYPES2.get(
210
+ (types[change], subtypes[change]), []
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
211
  ):
212
  subtypes2[change] = st.selectbox(
213
  "詳しい内容を選択してください:",
214
+ SUBTYPES2[(types[change], subtypes[change])],
215
+ key=f"subtype2_{change}",
216
  )
217
 
218
+ if subtypes[change] and (
219
+ subtypes2[change] or subtypes2[change] is None
220
+ ):
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
221
  st.session_state[f"subtype_chosen_{change}"] = True
222
 
223
  if st.session_state[f"subtype_chosen_{change_num-1}"]:
 
268
  if nos[k]:
269
  input_values[k] = "特になし"
270
 
271
+ system_prompt = (
272
+ system_template_review
273
+ + systemprompt_template_1
274
+ + systemprompt_template_2
275
+ )
276
  for k in range(question_num):
277
+ system_prompt += f" {q[k]} : {input_values[k]}\n"
 
278
  system_prompt += systemprompt_template_3
279
 
280
  user_prompt = ""
281
  for k in range(question_num):
282
+ user_prompt += f" A{q[k][1:4]} : {input_values[k]}\n"
 
283
 
284
  client = OpenAI(api_key=open_api_key)
285
  response = client.chat.completions.create(
 
288
  {"role": "system", "content": system_prompt},
289
  {"role": "user", "content": user_prompt},
290
  ],
291
+ response_format="json_object",
292
  temperature=0.0,
293
  )
294
  response_text = response.choices[0].message.content
src/generate_guery.py CHANGED
@@ -42,7 +42,7 @@ This is very important to my career.
42
  """
43
 
44
  completion = client.chat.completions.create(
45
- model="gpt-4-0125-preview",
46
  messages=[
47
  {
48
  "role": "user",
 
42
  """
43
 
44
  completion = client.chat.completions.create(
45
+ model="gpt-4o",
46
  messages=[
47
  {
48
  "role": "user",
src/questions.py CHANGED
@@ -2,6 +2,8 @@ import json
2
 
3
 
4
  def get_questions(type, subtype, subtype2):
 
 
5
  with open(
6
  f"data/questions/{type}_{subtype}_{subtype2}.json", "r", encoding="utf-8"
7
  ) as file:
 
2
 
3
 
4
  def get_questions(type, subtype, subtype2):
5
+ if subtype2 == None:
6
+ subtype2 = "x"
7
  with open(
8
  f"data/questions/{type}_{subtype}_{subtype2}.json", "r", encoding="utf-8"
9
  ) as file: