Spaces:
Sleeping
Sleeping
YoheiHayamizu
commited on
Commit
·
bada0f5
1
Parent(s):
a512461
First Commit
Browse files- .gitattributes +0 -35
- app.py +73 -0
- poetry.lock +0 -0
- pyproject.toml +67 -0
.gitattributes
DELETED
@@ -1,35 +0,0 @@
|
|
1 |
-
*.7z filter=lfs diff=lfs merge=lfs -text
|
2 |
-
*.arrow filter=lfs diff=lfs merge=lfs -text
|
3 |
-
*.bin filter=lfs diff=lfs merge=lfs -text
|
4 |
-
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
5 |
-
*.ckpt filter=lfs diff=lfs merge=lfs -text
|
6 |
-
*.ftz filter=lfs diff=lfs merge=lfs -text
|
7 |
-
*.gz filter=lfs diff=lfs merge=lfs -text
|
8 |
-
*.h5 filter=lfs diff=lfs merge=lfs -text
|
9 |
-
*.joblib filter=lfs diff=lfs merge=lfs -text
|
10 |
-
*.lfs.* filter=lfs diff=lfs merge=lfs -text
|
11 |
-
*.mlmodel filter=lfs diff=lfs merge=lfs -text
|
12 |
-
*.model filter=lfs diff=lfs merge=lfs -text
|
13 |
-
*.msgpack filter=lfs diff=lfs merge=lfs -text
|
14 |
-
*.npy filter=lfs diff=lfs merge=lfs -text
|
15 |
-
*.npz filter=lfs diff=lfs merge=lfs -text
|
16 |
-
*.onnx filter=lfs diff=lfs merge=lfs -text
|
17 |
-
*.ot filter=lfs diff=lfs merge=lfs -text
|
18 |
-
*.parquet filter=lfs diff=lfs merge=lfs -text
|
19 |
-
*.pb filter=lfs diff=lfs merge=lfs -text
|
20 |
-
*.pickle filter=lfs diff=lfs merge=lfs -text
|
21 |
-
*.pkl filter=lfs diff=lfs merge=lfs -text
|
22 |
-
*.pt filter=lfs diff=lfs merge=lfs -text
|
23 |
-
*.pth filter=lfs diff=lfs merge=lfs -text
|
24 |
-
*.rar filter=lfs diff=lfs merge=lfs -text
|
25 |
-
*.safetensors filter=lfs diff=lfs merge=lfs -text
|
26 |
-
saved_model/**/* filter=lfs diff=lfs merge=lfs -text
|
27 |
-
*.tar.* filter=lfs diff=lfs merge=lfs -text
|
28 |
-
*.tar filter=lfs diff=lfs merge=lfs -text
|
29 |
-
*.tflite filter=lfs diff=lfs merge=lfs -text
|
30 |
-
*.tgz filter=lfs diff=lfs merge=lfs -text
|
31 |
-
*.wasm filter=lfs diff=lfs merge=lfs -text
|
32 |
-
*.xz filter=lfs diff=lfs merge=lfs -text
|
33 |
-
*.zip filter=lfs diff=lfs merge=lfs -text
|
34 |
-
*.zst filter=lfs diff=lfs merge=lfs -text
|
35 |
-
*tfevents* filter=lfs diff=lfs merge=lfs -text
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
app.py
ADDED
@@ -0,0 +1,73 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
import re
|
2 |
+
import unicodedata
|
3 |
+
|
4 |
+
import requests
|
5 |
+
import streamlit as st
|
6 |
+
from bs4 import BeautifulSoup
|
7 |
+
from transformers import (
|
8 |
+
AutoModelForQuestionAnswering,
|
9 |
+
AutoTokenizer,
|
10 |
+
QuestionAnsweringPipeline,
|
11 |
+
)
|
12 |
+
|
13 |
+
model_name = "KoichiYasuoka/bert-base-japanese-wikipedia-ud-head"
|
14 |
+
|
15 |
+
tokenizer = AutoTokenizer.from_pretrained(model_name)
|
16 |
+
model = AutoModelForQuestionAnswering.from_pretrained(model_name)
|
17 |
+
qa_pipeline = QuestionAnsweringPipeline(model=model, tokenizer=tokenizer)
|
18 |
+
|
19 |
+
|
20 |
+
st.title("株価お知らせBot")
|
21 |
+
stock_code = st.text_input(
|
22 |
+
"株価を知りたい企業の証券コードを入力してください",
|
23 |
+
placeholder="証券コード",
|
24 |
+
max_chars=4,
|
25 |
+
help="4桁の数字",
|
26 |
+
)
|
27 |
+
|
28 |
+
if "content" not in st.session_state:
|
29 |
+
st.write("株価を知りたい企業の証券コードを入力してください")
|
30 |
+
|
31 |
+
if st.button("株価を知りたい"):
|
32 |
+
url = f"https://nikkei.com/nkd/company/?scode={stock_code}"
|
33 |
+
res = requests.get(url)
|
34 |
+
soup = BeautifulSoup(res.text, "html.parser")
|
35 |
+
|
36 |
+
_text = soup.find("div", attrs={"class": "m-stockInfo_top_left"}).text
|
37 |
+
|
38 |
+
content = unicodedata.normalize("NFKD", _text)
|
39 |
+
st.session_state.content = re.sub("[\r\t\n]+", " ", content)
|
40 |
+
|
41 |
+
|
42 |
+
# Transformersで回答を作成
|
43 |
+
def generate_response(prompt, max_length=50):
|
44 |
+
# input_ids = tokenizer.encode(prompt, return_tensors="pt")
|
45 |
+
# Generate response
|
46 |
+
answer = qa_pipeline(context=st.session_state.content[:100], question=prompt)
|
47 |
+
|
48 |
+
return answer["answer"]
|
49 |
+
|
50 |
+
|
51 |
+
# メッセージがない時
|
52 |
+
if "messages" not in st.session_state.keys():
|
53 |
+
st.session_state.messages = [{"role": "assistant", "content": "何か御用ですか?"}]
|
54 |
+
|
55 |
+
# チャット内容の表示
|
56 |
+
for message in st.session_state.messages:
|
57 |
+
with st.chat_message(message["role"]):
|
58 |
+
st.write(message["content"])
|
59 |
+
|
60 |
+
# ユーザーの質問
|
61 |
+
if prompt := st.chat_input():
|
62 |
+
st.session_state.messages.append({"role": "user", "content": prompt})
|
63 |
+
with st.chat_message("user"):
|
64 |
+
st.write(prompt)
|
65 |
+
|
66 |
+
# AIによる回答
|
67 |
+
if st.session_state.messages[-1]["role"] != "assistant":
|
68 |
+
with st.chat_message("assistant"):
|
69 |
+
with st.spinner("考え中..."):
|
70 |
+
response = generate_response(prompt)
|
71 |
+
st.write(response)
|
72 |
+
message = {"role": "assistant", "content": response}
|
73 |
+
st.session_state.messages.append(message)
|
poetry.lock
ADDED
The diff for this file is too large to render.
See raw diff
|
|
pyproject.toml
ADDED
@@ -0,0 +1,67 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
[tool.poetry]
|
2 |
+
name = "simple-chatbot"
|
3 |
+
version = "0.1.0"
|
4 |
+
description = ""
|
5 |
+
authors = ["YoheiHayamizu <[email protected]>"]
|
6 |
+
license = "mit"
|
7 |
+
readme = "README.md"
|
8 |
+
packages = [{ include = "simple_chatbot" }]
|
9 |
+
|
10 |
+
[tool.poetry.dependencies]
|
11 |
+
python = "^3.10"
|
12 |
+
streamlit = "^1.40.2"
|
13 |
+
sentencepiece = "^0.2.0"
|
14 |
+
transformers = "^4.47.0"
|
15 |
+
bs4 = "^0.0.2"
|
16 |
+
cython = "^3.0.11"
|
17 |
+
torch = "^2.5.1"
|
18 |
+
|
19 |
+
|
20 |
+
[tool.poetry.group.dev.dependencies]
|
21 |
+
ruff = "^0.8.2"
|
22 |
+
|
23 |
+
[tool.ruff]
|
24 |
+
line-length = 119
|
25 |
+
indent-width = 4
|
26 |
+
|
27 |
+
[tool.ruff.lint]
|
28 |
+
# Flake8、Black、isort、エラー、警告のみを選択
|
29 |
+
select = ["F", "B", "I", "E", "W"]
|
30 |
+
ignore = []
|
31 |
+
|
32 |
+
# すべてのルールに対して修正を許可(`--fix`を使用した場合)
|
33 |
+
fixable = ["ALL"]
|
34 |
+
unfixable = []
|
35 |
+
# extend-select = ["E501"]
|
36 |
+
|
37 |
+
[tool.ruff.lint.per-file-ignores]
|
38 |
+
# `__init__.py`ファイルや特定のサブディレクトリで、`E402`(インポート違反)を無視
|
39 |
+
"__init__.py" = ["E402"]
|
40 |
+
"**/{tests,docs,tools}/*" = ["E402"]
|
41 |
+
|
42 |
+
[tool.ruff.format]
|
43 |
+
# デフォルトで除外されるディレクトリ
|
44 |
+
exclude = [
|
45 |
+
".venv",
|
46 |
+
".git",
|
47 |
+
".tox",
|
48 |
+
".mypy_cache",
|
49 |
+
".pytest_cache",
|
50 |
+
"__pycache__",
|
51 |
+
"build",
|
52 |
+
"dist",
|
53 |
+
"docs",
|
54 |
+
"tests",
|
55 |
+
"tools",
|
56 |
+
]
|
57 |
+
indent-style = "space" # Blackと同様に、インデントはスペースで
|
58 |
+
quote-style = "double" # Blackと同様に、文字列はダブルクォートを使用
|
59 |
+
skip-magic-trailing-comma = false # Blackと同様に、魔法のカンマ(トレイリングコンマ)を無視しない
|
60 |
+
line-ending = "auto" # Blackと同様に、行末文字を自動検出
|
61 |
+
docstring-code-format = false # ドキュメンテーションストリング内のコード例を自動フォーマット
|
62 |
+
docstring-code-line-length = "dynamic" # ドキュメンテーションストリング内のコードスニペットの行の長さ
|
63 |
+
|
64 |
+
|
65 |
+
[build-system]
|
66 |
+
requires = ["poetry-core"]
|
67 |
+
build-backend = "poetry.core.masonry.api"
|