YoheiHayamizu commited on
Commit
bada0f5
·
1 Parent(s): a512461

First Commit

Browse files
Files changed (4) hide show
  1. .gitattributes +0 -35
  2. app.py +73 -0
  3. poetry.lock +0 -0
  4. 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"