yuki.tsutsumi commited on
Commit
9730e4b
1 Parent(s): 7974e41

embed_output関数を関数化。

Browse files
Files changed (5) hide show
  1. main.py +1 -2
  2. src/embed_output.py +0 -62
  3. src/forms.py +16 -23
  4. src/generate_query_all.py +1 -0
  5. src/utils.py +54 -0
main.py CHANGED
@@ -1,6 +1,5 @@
1
  import streamlit as st
2
 
3
- from src.embed_output import main as embed_output
4
  from src.embed_output_deviation import main as embed_output_deviation
5
  from src.embed_output_deviation_occurrence import \
6
  main as embed_output_deviation_occurrence
@@ -18,7 +17,7 @@ selected_page = st.sidebar.selectbox(
18
  )
19
  match selected_page:
20
  case "変更申請書":
21
- pages["変更申請書"](embed_output)
22
  case "逸脱発生報告書":
23
  pages["逸脱発生報告書"](embed_output_deviation_occurrence)
24
  case "逸脱報告書":
 
1
  import streamlit as st
2
 
 
3
  from src.embed_output_deviation import main as embed_output_deviation
4
  from src.embed_output_deviation_occurrence import \
5
  main as embed_output_deviation_occurrence
 
17
  )
18
  match selected_page:
19
  case "変更申請書":
20
+ pages["変更申請書"]()
21
  case "逸脱発生報告書":
22
  pages["逸脱発生報告書"](embed_output_deviation_occurrence)
23
  case "逸脱報告書":
src/embed_output.py DELETED
@@ -1,62 +0,0 @@
1
- import json
2
-
3
- from docx import Document
4
-
5
-
6
- def replace_text_in_paragraphs(paragraphs, replacements):
7
- """
8
- パラグラフ内のテキストを置き換える
9
- """
10
- for paragraph in paragraphs:
11
- for key, value in replacements.items():
12
- if key in paragraph.text:
13
- paragraph.text = paragraph.text.replace(key, value)
14
-
15
-
16
- def replace_text_in_tables(tables, replacements):
17
- """
18
- テーブル内のテキストを置き換える
19
- """
20
- for table in tables:
21
- for row in table.rows:
22
- for cell in row.cells:
23
- replace_text_in_paragraphs(cell.paragraphs, replacements)
24
-
25
-
26
- def replace_text_in_docx(template_path, replacements):
27
- """
28
- ドキュメント内の指定されたテキストを置き換える
29
- """
30
- doc = Document(template_path)
31
- replace_text_in_paragraphs(doc.paragraphs, replacements)
32
- replace_text_in_tables(doc.tables, replacements)
33
- return doc
34
-
35
-
36
- def main():
37
- with open("data/change_request.json", "r") as file:
38
- data = json.load(file)
39
-
40
- template_path = "data/template/template.docx"
41
-
42
- replacements = {
43
- "[plant]": data["工場"],
44
- "[applicant]": data["申請者"],
45
- "[apply_date]": data["申請日"],
46
- "[subject_to_change]": data["変更対象"],
47
- "[scheduled_implementation_date]": data["実施予定時期"],
48
- "[details_of_change]": data["変更内容"],
49
- "[reason_for_change]": data["変更理由"],
50
- "[impact_on_quality]": data["品質への影響"],
51
- "[attached_file]": data["添付資料"],
52
- "[supplementary_information]": data["備考"],
53
- }
54
-
55
- doc = replace_text_in_docx(template_path, replacements)
56
- output_path = "data/output.docx"
57
- doc.save(output_path)
58
- print(f"Document saved to {output_path}")
59
-
60
-
61
- if __name__ == "__main__":
62
- main()
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
src/forms.py CHANGED
@@ -14,7 +14,7 @@ from src.prompts import (deviation_occurrence_system_template_review,
14
  deviation_systemprompt_writing_instructions,
15
  deviation_systemprompt_output_format_instructions)
16
  from src.questions import get_questions
17
- from src.utils import get_embedding, load_env_vars
18
 
19
  # 変更タイプとサブタイプの定義
20
  CHANGE_TYPES = [
@@ -137,7 +137,7 @@ SUBTYPES2 = {
137
  }
138
 
139
 
140
- def change_request_form(embed_output):
141
  st.title("変更申請書 文書生成")
142
 
143
  load_env_vars()
@@ -270,7 +270,7 @@ def change_request_form(embed_output):
270
  )
271
  submitted = st.form_submit_button("送信")
272
 
273
- if submitted:
274
  for k in range(question_num):
275
  if nos[k]:
276
  input_values[k] = "特になし"
@@ -305,7 +305,7 @@ def change_request_form(embed_output):
305
  date_obj = datetime.strptime(application_date, "%Y-%m-%d")
306
  application_date = date_obj.strftime("%Y年%m月%d日")
307
 
308
- json_data = {
309
  "工場": plant_type,
310
  "申請者": applicant_name,
311
  "申請日": application_date,
@@ -316,14 +316,10 @@ def change_request_form(embed_output):
316
  "品質への影響": str(response_data["品質への影響"]),
317
  "添付資料": attached_files,
318
  "備考": supplementary_information,
319
- "ユーザープロンプト": user_prompt,
320
  }
321
 
322
- filename = "data/change_request.json"
323
- with open(filename, "w") as file:
324
- json.dump(json_data, file, ensure_ascii=False, indent=4)
325
 
326
- embed_output()
327
  st.session_state["document_generated"] = True
328
 
329
  if st.session_state["document_generated"]:
@@ -337,23 +333,20 @@ def change_request_form(embed_output):
337
  mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
338
  )
339
 
340
- with open("data/change_request.json", "r") as file:
341
- json_data = json.load(file)
342
-
343
- st.markdown(f'**申請者** : {json_data["申請者"]}')
344
- st.markdown(f'**申請日** : {json_data["申請日"]}')
345
- st.markdown(f'**変更対象** : {json_data["変更対象"]}')
346
- st.markdown(f'**実施予定時期** : {json_data["実施予定時期"]}')
347
- st.markdown(f'**変更内容** : {json_data["変更内容"]}')
348
- st.markdown(f'**変更理由** : {json_data["変更理由"]}')
349
- st.markdown(f'**品質への影響** : {json_data["品質への影響"]}')
350
- st.markdown(f'**添付資料** : {json_data["添付資料"]}')
351
- st.markdown(f'**備考** : {json_data["備考"]}')
352
 
353
  review_button = st.button("レビューする")
354
  if review_button:
355
- query_content = json_data["変更内容"]
356
- query_reason = json_data["変更理由"]
357
  query_vec = get_embedding(query_content, client=client)
358
 
359
  genres = [None] * change_num
 
14
  deviation_systemprompt_writing_instructions,
15
  deviation_systemprompt_output_format_instructions)
16
  from src.questions import get_questions
17
+ from src.utils import get_embedding, load_env_vars, make_change_application_output
18
 
19
  # 変更タイプとサブタイプの定義
20
  CHANGE_TYPES = [
 
137
  }
138
 
139
 
140
+ def change_request_form():
141
  st.title("変更申請書 文書生成")
142
 
143
  load_env_vars()
 
270
  )
271
  submitted = st.form_submit_button("送信")
272
 
273
+ if submitted or st.session_state["document_generated"]:
274
  for k in range(question_num):
275
  if nos[k]:
276
  input_values[k] = "特になし"
 
305
  date_obj = datetime.strptime(application_date, "%Y-%m-%d")
306
  application_date = date_obj.strftime("%Y年%m月%d日")
307
 
308
+ contents = {
309
  "工場": plant_type,
310
  "申請者": applicant_name,
311
  "申請日": application_date,
 
316
  "品質への影響": str(response_data["品質への影響"]),
317
  "添付資料": attached_files,
318
  "備考": supplementary_information,
 
319
  }
320
 
321
+ make_change_application_output(contents)
 
 
322
 
 
323
  st.session_state["document_generated"] = True
324
 
325
  if st.session_state["document_generated"]:
 
333
  mime="application/vnd.openxmlformats-officedocument.wordprocessingml.document",
334
  )
335
 
336
+ st.markdown(f'**申請者** : {contents["申請者"]}')
337
+ st.markdown(f'**申請日** : {contents["申請日"]}')
338
+ st.markdown(f'**変更対象** : {contents["変更対象"]}')
339
+ st.markdown(f'**実施予定時期** : {contents["実施予定時期"]}')
340
+ st.markdown(f'**変更内容** : {contents["変更内容"]}')
341
+ st.markdown(f'**変更理由** : {contents["変更理由"]}')
342
+ st.markdown(f'**品質への影響** : {contents["品質への影響"]}')
343
+ st.markdown(f'**添付資料** : {contents["添付資料"]}')
344
+ st.markdown(f'**備考** : {contents["備考"]}')
 
 
 
345
 
346
  review_button = st.button("レビューする")
347
  if review_button:
348
+ query_content = contents["変更内容"]
349
+ query_reason = contents["変更理由"]
350
  query_vec = get_embedding(query_content, client=client)
351
 
352
  genres = [None] * change_num
src/generate_query_all.py CHANGED
@@ -5,6 +5,7 @@ from dotenv import load_dotenv
5
  from openai import OpenAI
6
  from openpyxl import load_workbook
7
 
 
8
  # TODO: 実際には使われていない様子なので、消去して良いか確認する。(堤)
9
  def make_json(type, subtype, subtype2, items):
10
  name = f"{type}_{subtype}_{subtype2}"
 
5
  from openai import OpenAI
6
  from openpyxl import load_workbook
7
 
8
+
9
  # TODO: 実際には使われていない様子なので、消去して良いか確認する。(堤)
10
  def make_json(type, subtype, subtype2, items):
11
  name = f"{type}_{subtype}_{subtype2}"
src/utils.py CHANGED
@@ -1,3 +1,4 @@
 
1
  from dotenv import load_dotenv
2
 
3
 
@@ -10,3 +11,56 @@ def get_embedding(text, model="text-embedding-3-large", client=None):
10
  return (
11
  client.embeddings.create(input=[text], model=model).data[0].embedding
12
  )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from docx import Document
2
  from dotenv import load_dotenv
3
 
4
 
 
11
  return (
12
  client.embeddings.create(input=[text], model=model).data[0].embedding
13
  )
14
+
15
+
16
+ def make_change_application_output(contents: dict):
17
+ change_application_form_template_path = "data/template/template.docx"
18
+
19
+ replacements = {
20
+ "[plant]": contents["工場"],
21
+ "[applicant]": contents["申請者"],
22
+ "[apply_date]": contents["申請日"],
23
+ "[subject_to_change]": contents["変更対象"],
24
+ "[scheduled_implementation_date]": contents["実施予定時期"],
25
+ "[details_of_change]": contents["変更内容"],
26
+ "[reason_for_change]": contents["変更理由"],
27
+ "[impact_on_quality]": contents["品質への影響"],
28
+ "[attached_file]": contents["添付資料"],
29
+ "[supplementary_information]": contents["備考"],
30
+ }
31
+
32
+ doc = replace_text_in_docx(change_application_form_template_path, replacements)
33
+ change_application_form_path = "data/output.docx"
34
+ doc.save(change_application_form_path)
35
+ # TODO: loggerを使う
36
+ print(f"Document saved to {change_application_form_path}")
37
+
38
+
39
+ def replace_text_in_docx(template_path, replacements):
40
+ """
41
+ ドキュメント内の指定されたテキストを置き換える
42
+ """
43
+ doc = Document(template_path)
44
+ replace_text_in_paragraphs(doc.paragraphs, replacements)
45
+ replace_text_in_tables(doc.tables, replacements)
46
+ return doc
47
+
48
+
49
+ def replace_text_in_tables(tables, replacements):
50
+ """
51
+ テーブル内のテキストを置き換える
52
+ """
53
+ for table in tables:
54
+ for row in table.rows:
55
+ for cell in row.cells:
56
+ replace_text_in_paragraphs(cell.paragraphs, replacements)
57
+
58
+
59
+ def replace_text_in_paragraphs(paragraphs, replacements):
60
+ """
61
+ パラグラフ内のテキストを置き換える
62
+ """
63
+ for paragraph in paragraphs:
64
+ for key, value in replacements.items():
65
+ if key in paragraph.text:
66
+ paragraph.text = paragraph.text.replace(key, value)