SearchingScrews / app.py
kikuepi's picture
Upload 2 files
0086694 verified
import streamlit as st
import pandas as pd
from collections import defaultdict
import numpy as np
uploaded_file = st.file_uploader("Excelファイルを選択してください", type=["xlsx"])
if uploaded_file is not None:
df = pd.read_excel(uploaded_file)
st.sidebar.write("ファイルの内容:")
st.sidebar.dataframe(df)
dct = defaultdict(list)
column_names = df.columns.tolist()
for idx, row in df.iterrows():
key = (row['品番'], row['外径'])
dct[key].append((row['値段'], row['在庫数']))
def find_screws(diameter, weight):
try:
weight = np.float64(weight)
key = (diameter, weight)
return dct[key]
except ValueError:
return 0
if "messages" not in st.session_state:
# 辞書形式で定義
st.session_state["messages"] = []
for message in st.session_state.messages:
with st.chat_message(message["role"]):
st.markdown(message["content"])
if prompt := st.chat_input("品番と外径を改行区切りで入力してください"):
with st.chat_message("user"):
st.markdown(prompt)
st.session_state.messages.append({"role": "user", "content": prompt})
L = prompt.split('\n')
if(len(L) < 2):
response = "要素数が少ないです。 \n・品番 \n・外径 \nの順番に入力してください"
print(response)
elif(len(L) > 2):
response = "要素数が多いです。 \n・品番 \n・外径 \nの順番に入力してください"
print(response)
else:
p_id,diameter = L[0], L[1]
if diameter and p_id:
result = find_screws(p_id,diameter)
if result == 0:
response = f"""
品番 : {p_id} \n
外径 : {diameter} \n
は正しい入力形式ではありません。(カンマや空白などが入っていない確認してください) \n
"""
elif result:
response = f"""
見つかりました。 \n
品番 : {p_id} \n
外径 : {diameter} \n
価格 : {result[0][1]} \n
在庫 : {result[0][0]} \n
"""
else:
response = f"""
品番 : {p_id} \n
外径 : {diameter} \n
に該当するものは見つかりませんでした。 \n
"""
with st.chat_message("assistant"):
st.markdown(response)
st.session_state.messages.append({"role": "assistant", "content": response})