Spaces:
Running
Running
yuki.tsutsumi
commited on
Commit
•
9730e4b
1
Parent(s):
7974e41
embed_output関数を関数化。
Browse files- main.py +1 -2
- src/embed_output.py +0 -62
- src/forms.py +16 -23
- src/generate_query_all.py +1 -0
- 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["変更申請書"](
|
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(
|
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 |
-
|
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 |
-
|
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 |
-
|
341 |
-
|
342 |
-
|
343 |
-
st.markdown(f'
|
344 |
-
st.markdown(f'
|
345 |
-
st.markdown(f'
|
346 |
-
st.markdown(f'
|
347 |
-
st.markdown(f'
|
348 |
-
st.markdown(f'
|
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 =
|
356 |
-
query_reason =
|
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)
|