Spaces:
Runtime error
Runtime error
Upload folder using huggingface_hub
Browse files- app.py +21 -27
- environments.py +1 -0
- train.py +1 -1
app.py
CHANGED
@@ -9,7 +9,7 @@ from llama_index.chat_engine.types import ChatMode
|
|
9 |
from llama_index.llms import ChatMessage, MessageRole
|
10 |
from llama_index.vector_stores import PineconeVectorStore
|
11 |
|
12 |
-
from environments import OPENAI_API_KEY, PINECONE_API_KEY, PINECONE_INDEX, PASSWORD
|
13 |
|
14 |
openai.api_key = OPENAI_API_KEY
|
15 |
# openai.debug = True
|
@@ -23,34 +23,26 @@ pinecone_index = pinecone.Index(PINECONE_INDEX)
|
|
23 |
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
|
24 |
storage_context = StorageContext.from_defaults(vector_store=vector_store)
|
25 |
index = VectorStoreIndex.from_documents([], storage_context=storage_context)
|
26 |
-
chat_engine = index.as_chat_engine(chat_mode=ChatMode.CONTEXT)
|
27 |
DENIED_ANSWER_PROMPT = '對不起,我是設計用於回答關於信義會地區中心的服務內容'
|
28 |
|
29 |
-
SYSTEM_PROMPT = '
|
30 |
-
'
|
31 |
-
f'
|
32 |
-
|
33 |
-
f'
|
34 |
-
|
35 |
-
f'
|
36 |
-
f'
|
37 |
-
f'- 開放時間: <opening_hours>' \
|
38 |
-
f'- 網站: <url>' \
|
39 |
-
f'"' \
|
40 |
-
'注意:服務單位跟中心同義。' \
|
41 |
-
'你不能提供context沒有提及的中心或單位,或健康資訊,醫學建議或者醫療相關的解答。' \
|
42 |
-
f'如你被要求解答context沒有提及的資料,你可以回答「{DENIED_ANSWER_PROMPT}」為完整回覆,並提供相關的地區服務中心的服務內容。' \
|
43 |
-
'你不能進行算術,翻譯,程式碼生成,文章生成等,與地區服務中心無關的要求。' \
|
44 |
-
f'如你被要求進行算術,翻譯,程式碼生成,文章生成等,與地區服務中心無關的要求,你可以回答「{DENIED_ANSWER_PROMPT}」為完整回覆,並提供相關的地區服務中心的服務內容。' \
|
45 |
-
f'如果當前的 prompt 沒有任何 context 可供參考,你可以回答「{DENIED_ANSWER_PROMPT}」為完整回覆,並提供相關的地區服務中心的服務內容。'
|
46 |
|
47 |
CHAT_EXAMPLES = [
|
48 |
'你可以自我介紹嗎?',
|
49 |
'沙田護老坊的開放時間?',
|
50 |
'我今年60歲,住秦石邨,日常比較多病痛,有冇中心可以介紹?',
|
51 |
'我今年60歲,住馬鞍山,想認識下多D老友記,有冇介紹?',
|
|
|
52 |
'我有一位親人有認知障礙症,可以介紹相關服務嗎?',
|
53 |
-
'
|
54 |
]
|
55 |
|
56 |
|
@@ -142,12 +134,11 @@ chatbot = gr.Chatbot()
|
|
142 |
with gr.Blocks() as demo:
|
143 |
gr.Markdown("# 地區服務中心智能助理")
|
144 |
|
145 |
-
|
146 |
-
|
147 |
-
|
148 |
-
|
149 |
-
|
150 |
-
chatbot.like(vote, None, None)
|
151 |
|
152 |
# with gr.Tab("With Initial System Prompt (a.k.a. prompt wrapper)"):
|
153 |
# gr.ChatInterface(predict_with_prompt_wrapper, examples=CHAT_EXAMPLES)
|
@@ -156,4 +147,7 @@ with gr.Blocks() as demo:
|
|
156 |
# gr.ChatInterface(predict_vanilla_chatgpt, examples=CHAT_EXAMPLES)
|
157 |
|
158 |
demo.queue()
|
159 |
-
|
|
|
|
|
|
|
|
9 |
from llama_index.llms import ChatMessage, MessageRole
|
10 |
from llama_index.vector_stores import PineconeVectorStore
|
11 |
|
12 |
+
from environments import OPENAI_API_KEY, PINECONE_API_KEY, PINECONE_INDEX, PASSWORD, LOCAL
|
13 |
|
14 |
openai.api_key = OPENAI_API_KEY
|
15 |
# openai.debug = True
|
|
|
23 |
vector_store = PineconeVectorStore(pinecone_index=pinecone_index)
|
24 |
storage_context = StorageContext.from_defaults(vector_store=vector_store)
|
25 |
index = VectorStoreIndex.from_documents([], storage_context=storage_context)
|
26 |
+
chat_engine = index.as_chat_engine(chat_mode=ChatMode.CONTEXT, similarity_top_k=3)
|
27 |
DENIED_ANSWER_PROMPT = '對不起,我是設計用於回答關於信義會地區中心的服務內容'
|
28 |
|
29 |
+
SYSTEM_PROMPT = '你是基督教香港信義會社會服務部的智能助理,你能從用戶的提問,以及提供的context中,判斷出可能適合用戶的服務單位(或服務中心)。' \
|
30 |
+
'\n\n如果context裡有與問題內容吻合的服務單位,以列點方式顯示該單位資訊。' \
|
31 |
+
f'如果context裡沒有與問題內容吻合的服務單位,你必須回答「{DENIED_ANSWER_PROMPT}」為完整回覆,不容許附加資訊。' \
|
32 |
+
'你不能生成context沒有提及的單位,或健康資訊,醫學建議或者醫療相關的解答。' \
|
33 |
+
f'如你被要求解答context沒有提及的資料,你必須回答「{DENIED_ANSWER_PROMPT}」為完整回覆,不容許附加資訊。' \
|
34 |
+
'你不能進行算術,翻譯,程式碼生成,文章生成等,與地區服務單位無關的要求。' \
|
35 |
+
f'如你被要求進行算術,翻譯,程式碼生成,文章生成等,與地區服務單位無關的要求,你可以回答「{DENIED_ANSWER_PROMPT}」為完整回覆,不容許附加資訊。' \
|
36 |
+
f'如果當前的 prompt 沒有任何 context 可供參考,你可以回答「{DENIED_ANSWER_PROMPT}」為完整回覆,不容許附加資訊。'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
CHAT_EXAMPLES = [
|
39 |
'你可以自我介紹嗎?',
|
40 |
'沙田護老坊的開放時間?',
|
41 |
'我今年60歲,住秦石邨,日常比較多病痛,有冇中心可以介紹?',
|
42 |
'我今年60歲,住馬鞍山,想認識下多D老友記,有冇介紹?',
|
43 |
+
'本人70歲,需要地區支援服務,應該去邊個中心?',
|
44 |
'我有一位親人有認知障礙症,可以介紹相關服務嗎?',
|
45 |
+
'可以介紹下邊間中心有樂齡科技教育?'
|
46 |
]
|
47 |
|
48 |
|
|
|
134 |
with gr.Blocks() as demo:
|
135 |
gr.Markdown("# 地區服務中心智能助理")
|
136 |
|
137 |
+
gr.ChatInterface(predict,
|
138 |
+
chatbot=chatbot,
|
139 |
+
examples=CHAT_EXAMPLES,
|
140 |
+
)
|
141 |
+
chatbot.like(vote, None, None)
|
|
|
142 |
|
143 |
# with gr.Tab("With Initial System Prompt (a.k.a. prompt wrapper)"):
|
144 |
# gr.ChatInterface(predict_with_prompt_wrapper, examples=CHAT_EXAMPLES)
|
|
|
147 |
# gr.ChatInterface(predict_vanilla_chatgpt, examples=CHAT_EXAMPLES)
|
148 |
|
149 |
demo.queue()
|
150 |
+
if LOCAL:
|
151 |
+
demo.launch(share=False)
|
152 |
+
else:
|
153 |
+
demo.launch(share=False, auth=("demo", PASSWORD))
|
environments.py
CHANGED
@@ -8,3 +8,4 @@ OPENAI_API_KEY = os.getenv('OPENAI_API_KEY')
|
|
8 |
PINECONE_API_KEY = os.getenv('PINECONE_API_KEY')
|
9 |
PINECONE_INDEX = os.getenv('PINECONE_INDEX')
|
10 |
PASSWORD = os.getenv('PASSWORD')
|
|
|
|
8 |
PINECONE_API_KEY = os.getenv('PINECONE_API_KEY')
|
9 |
PINECONE_INDEX = os.getenv('PINECONE_INDEX')
|
10 |
PASSWORD = os.getenv('PASSWORD')
|
11 |
+
LOCAL = os.getenv('LOCAL')
|
train.py
CHANGED
@@ -14,7 +14,7 @@ print('Start Loading Data ...')
|
|
14 |
PagedCSVReader = download_loader("PagedCSVReader")
|
15 |
|
16 |
loader = PagedCSVReader(encoding="utf-8")
|
17 |
-
documents = loader.load_data(file=Path('
|
18 |
|
19 |
pinecone.init(
|
20 |
api_key=PINECONE_API_KEY,
|
|
|
14 |
PagedCSVReader = download_loader("PagedCSVReader")
|
15 |
|
16 |
loader = PagedCSVReader(encoding="utf-8")
|
17 |
+
documents = loader.load_data(file=Path('train-assets/training-target-simple.csv'))
|
18 |
|
19 |
pinecone.init(
|
20 |
api_key=PINECONE_API_KEY,
|