thanhtung09t2 commited on
Commit
0859f1c
1 Parent(s): c54b114

Upload llms settings

Browse files
api/llms/base.py ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from api.llms.llm_config import LLMConfig
2
+ import api.llms.gpt4o_mini as gpt4o
3
+
4
+ def get_LLM(model_name) -> LLMConfig:
5
+ """
6
+ Hàm điều hướng trung gian xử lý tác vụ tạo LLM, config và prompt template liên quan
7
+ """
8
+ if model_name == "gpt4o_mini":
9
+ return gpt4o.GPT4oMini()
10
+ else:
11
+ raise NotImplementedError("This type of model is not yet supported")
12
+
13
+
api/llms/gpt4o_mini.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from llama_index.llms.openai import OpenAI
2
+ from llama_index.core import PromptTemplate, Settings
3
+ from api.llms.llm_config import LLMConfig
4
+ from api.llms.key_utils import decrypt_string
5
+ import os
6
+
7
+ # GPT-4o-mini config
8
+ MODEL = "gpt-4o-mini"
9
+ USER_KEY = decrypt_string("eMv2Ec77SMKAJOl078Ow9t+5PjCTq6y/8ZgzqkkmO2Rpy50rxedjotRdxWnu04WP0bcWK76zu48=", os.getenv('MY_SECRET_PASSWORD'))
10
+ REQUEST_TIMEOUT = 100.00
11
+ CONTEXT_WINDOW = 8000
12
+ TEMPERATURE = 0
13
+ TOP_P = 0.2
14
+ TOP_K = 30
15
+
16
+ GPT_SYSTEM_PROMPT = """
17
+ Bạn là một chuyên gia nông nghiệp có thể trả lời những câu hỏi về kiến thức nông nghiệp, mùa vụ, cây trồng, phân bón,... Dựa vào thông tin được cung cấp, hãy trả lời câu hỏi của người dùng.
18
+ Ưu tiên sử dụng thông tin được cung cấp và không sử dụng tri thức sẵn có.
19
+ """
20
+
21
+ GPT_QUERY_CONTEXT_TEMPLATE = PromptTemplate("""Bạn là một chuyên gia nông nghiệp có thể trả lời những câu hỏi về kiến thức nông nghiệp, mùa vụ, cây trồng, phân bón,... Bạn được cung cấp dữ liệu như sau:
22
+ Dữ liệu: {context_str}
23
+
24
+ Chỉ dẫn:
25
+ Sử dụng thông tin ngữ cảnh đã cho và không sử dụng tri thức sẵn có (not prior knowledge), trả lời những câu hỏi về
26
+ nông nghiệp, cây trồng, phân bón, bệnh cây trồng,.... một cách rõ ràng và chính xác.
27
+ Nếu thông tin được cung cấp không liên quan đến câu hỏi hoặc bạn không chắc chắn về câu trả lời của mình, bạn hãy yêu cầu
28
+ người dùng cung cấp thêm thông tin làm rõ câu hỏi.
29
+ Nếu không tìm thấy câu trả lời thì cho người dùng biết bạn không thể đưa ra câu trả lời chính xác.
30
+ KHÔNG sử dụng những kiến thức sẵn có của bạn để kết hợp với những dữ liệu được cung cấp (DO NOT use prior knowledge).
31
+ Ngôn ngữ trong câu trả lời phải giống với ngôn ngữ trong câu hỏi.
32
+ Nếu người dùng yêu cầu bạn dịch câu trả lời sang một ngôn ngữ khác thì phải cung cấp câu
33
+ trả lời bằng ngôn ngữ mà người dùng yêu cầu.
34
+ Ví dụ nếu người dùng yêu cầu "Dịch câu trả lời sang tiếng Anh" thì câu trả lời phải là nội dung văn bản đã dịch sang tiếng Anh mặc dù người
35
+ dùng đang hỏi bạn bằng tiếng Việt.
36
+ Nếu câu hỏi hiện tại liên quan với câu hỏi trước thì có thể sử dụng kết hợp ngữ cảnh câu hỏi trước để trả lời.
37
+ Nếu câu hỏi hiện tại không liên quan với câu hỏi trước thì không được dùng ngữ cảnh câu hỏi trước để trả lời.
38
+
39
+ Câu hỏi: {query_str}
40
+ Trả lời:""")
41
+
42
+ GPT_CHAT_CONDENSE_TEMPLATE = """Đây là lịch sử hội thoại (chat history) giữa người dùng và chat bot, cùng với câu hỏi tiếp theo của người dùng (follow up message).
43
+ Hãy viết lại cuộc hội thoại trở thành một câu hỏi đơn chứa tóm tắt đầy đủ nội dung cuộc hội thoại.
44
+ Lịch sử hội thoại:
45
+ {chat_history}
46
+
47
+ Câu hỏi tiếp theo:
48
+ {question}
49
+
50
+ Câu hỏi đơn:
51
+ """
52
+
53
+ GPT_CHAT_CONTEXT_TEMPLATE = """
54
+ Cho thông tin như sau:
55
+ ---------------------
56
+ {context_str}
57
+ ---------------------
58
+ Chỉ dẫn:
59
+ Sử dụng thông tin ngữ cảnh đã cho và không sử dụng tri thức sẵn có (not prior knowledge), trả lời những câu hỏi về
60
+ nông nghiệp, cây trồng, phân bón, bệnh cây trồng,.... một cách rõ ràng và chính xác.
61
+ Nếu không có thông tin ngữ cảnh (no context provided) thì trả lời là "Tôi không có câu trả lời chính xác cho câu hỏi của bạn".
62
+ Nếu thông tin được cung cấp không liên quan đến câu hỏi hoặc bạn không chắc chắn về câu trả lời của mình, bạn hãy yêu cầu
63
+ người dùng cung cấp thêm thông tin làm rõ câu hỏi.
64
+ Nếu không tìm thấy câu trả lời thì cho người dùng biết bạn không thể đưa ra câu trả lời chính xác.
65
+ KHÔNG sử dụng những kiến thức sẵn có của bạn để kết hợp với những dữ liệu được cung cấp (DO NOT use prior knowledge).
66
+ Ngôn ngữ trong câu trả lời phải giống với ngôn ngữ trong câu hỏi.
67
+ Nếu người dùng yêu cầu bạn dịch câu trả lời sang một ngôn ngữ khác thì phải cung cấp câu trả lời bằng ngôn ngữ mà người dùng yêu cầu.
68
+ """
69
+
70
+ def GPT4oMini() -> LLMConfig:
71
+ Settings.llm = OpenAI(model=MODEL,
72
+ api_key=USER_KEY,
73
+ request_timeout=REQUEST_TIMEOUT,
74
+ context_window=CONTEXT_WINDOW,
75
+ temperature=TEMPERATURE,
76
+ top_p=TOP_P,
77
+ top_k=TOP_K)
78
+ return LLMConfig(system_prompt=GPT_SYSTEM_PROMPT,
79
+ query_context_template=GPT_QUERY_CONTEXT_TEMPLATE,
80
+ chat_condense_template = GPT_CHAT_CONDENSE_TEMPLATE,
81
+ chat_context_template= GPT_CHAT_CONTEXT_TEMPLATE)
api/llms/key_utils.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import hashlib
2
+ import base64
3
+
4
+ def generate_key(password: str) -> bytes:
5
+ return hashlib.sha256(password.encode()).digest()
6
+
7
+ def xor_bytes(data: bytes, key: bytes) -> bytes:
8
+ return bytes([b ^ key[i % len(key)] for i, b in enumerate(data)])
9
+
10
+ def encrypt_string(plain_text: str, password: str) -> str:
11
+ key = generate_key(password)
12
+ plain_bytes = plain_text.encode()
13
+ encrypted_bytes = xor_bytes(plain_bytes, key)
14
+ return base64.b64encode(encrypted_bytes).decode()
15
+
16
+ def decrypt_string(encrypted_text: str, password: str) -> str:
17
+ key = generate_key(password)
18
+ encrypted_bytes = base64.b64decode(encrypted_text)
19
+ decrypted_bytes = xor_bytes(encrypted_bytes, key)
20
+ return decrypted_bytes.decode()
api/llms/llm_config.py ADDED
@@ -0,0 +1,20 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ class LLMConfig:
2
+ def __init__(self,
3
+ system_prompt,
4
+ query_context_template,
5
+ chat_condense_template,
6
+ chat_context_template,
7
+ **kwargs
8
+ ):
9
+ """
10
+ system_prompt: act as llm's system instructions
11
+ query_context_template: used for QueryEngine - single question-answer pairs without chat history
12
+ chat_condense_template: used for ChatEngine - 'condense' & 'condense_plus_context' mode
13
+ chat_context_template: used for ChatEngine - 'context' mode
14
+ **kwargs: additional keyword arguments for other configurations
15
+ """
16
+ self.system_prompt = system_prompt
17
+ self.query_context_template = query_context_template
18
+ self.chat_condense_template = chat_condense_template
19
+ self.chat_context_template = chat_context_template
20
+ self.kwargs = kwargs