beyoru commited on
Commit
8964e4f
·
verified ·
1 Parent(s): 99184f4

Update client.py

Browse files
Files changed (1) hide show
  1. client.py +106 -106
client.py CHANGED
@@ -1,106 +1,106 @@
1
- from huggingface_hub import InferenceClient
2
- from init import ACCESS_TOKEN, SYSTEM_PROMPT
3
- from utils import extract_sql, is_sql
4
- from database import execute
5
-
6
-
7
- client = InferenceClient()
8
-
9
-
10
- def respond(message, history, system_message, max_tokens, temperature, top_p):
11
- messages = [{"role": "system", "content": SYSTEM_PROMPT}]
12
- # Xử lý lịch sử chat
13
- for val in history:
14
- if val[0]:
15
- messages.append({"role": "user", "content": val[0]})
16
- if val[1]:
17
- messages.append({"role": "assistant", "content": val[1]})
18
-
19
- messages.append({"role": "user", "content": message})
20
-
21
- # Tạo response đầu tiên
22
- response = ""
23
- for message in client.chat.completions.create(
24
- model="Qwen/Qwen2.5-3B-Instruct",
25
- max_tokens=max_tokens,
26
- stream=True,
27
- temperature=temperature,
28
- top_p=top_p,
29
- messages=messages,
30
- ):
31
- token = message.choices[0].delta.content
32
- response += token
33
- yield response
34
-
35
- # Xử lý logic SQL và retry
36
- if is_sql(response):
37
- sql_query = extract_sql(response)
38
- max_attempts = 3
39
- attempts = 0
40
- sql_result = None
41
- last_error = None
42
-
43
- while attempts < max_attempts:
44
- try:
45
- sql_result = execute(sql_query)
46
- break
47
- except Exception as e:
48
- last_error = str(e)
49
- attempts += 1
50
- if attempts < max_attempts:
51
- # Thêm thông tin lỗi vào context và yêu cầu mô hình hỏi lại người dùng
52
- clarification_prompt = f"""Tôi gặp lỗi khi thực hiện truy vấn SQL: {last_error}
53
- Bạn có thể cung cấp thêm thông tin hoặc chỉnh sửa câu hỏi để tôi có thể sửa truy vấn không?"""
54
- messages += [
55
- {"role": "assistant", "content": response},
56
- {"role": "user", "content": clarification_prompt},
57
- ]
58
-
59
- # Tạo response yêu cầu thông tin thêm
60
- response = ""
61
- for message in client.chat.completions.create(
62
- model="Qwen/Qwen2.5-3B-Instruct",
63
- max_tokens=max_tokens,
64
- stream=True,
65
- temperature=temperature,
66
- top_p=top_p,
67
- messages=messages,
68
- ):
69
- token = message.choices[0].delta.content
70
- response += token
71
- yield response
72
-
73
- # Nếu mô hình cung cấp SQL mới, tiếp tục thử
74
- if is_sql(response):
75
- sql_query = extract_sql(response)
76
- else:
77
- # Nếu sau 3 lần vẫn lỗi, tiếp tục hỏi lại người dùng thay vì in lỗi
78
- retry_prompt = f"""Tôi đã thử {max_attempts} lần nhưng vẫn gặp lỗi: {last_error}
79
- Bạn có thể cung cấp thêm chi tiết về dữ liệu cần truy vấn không?"""
80
- messages.append({"role": "assistant", "content": retry_prompt})
81
- yield retry_prompt
82
- return
83
-
84
- # Nếu thực hiện truy vấn thành công
85
- if sql_result is not None:
86
- reformulation_prompt = f"""Kết quả truy vấn SQL:
87
- {sql_result}
88
- Hãy tóm tắt kết quả thành phản hồi tự nhiên cho người dùng."""
89
- messages += [
90
- {"role": "assistant", "content": response},
91
- {"role": "user", "content": reformulation_prompt},
92
- ]
93
-
94
- # Tạo response tóm tắt
95
- reformulated_response = ""
96
- for message in client.chat.completions.create(
97
- model="Qwen/Qwen2.5-3B-Instruct",
98
- max_tokens=512,
99
- stream=True,
100
- temperature=temperature,
101
- top_p=top_p,
102
- messages=messages,
103
- ):
104
- token = message.choices[0].delta.content
105
- reformulated_response += token
106
- yield reformulated_response
 
1
+ from huggingface_hub import InferenceClient
2
+ from init import ACCESS_TOKEN, SYSTEM_PROMPT
3
+ from utils import extract_sql, is_sql
4
+ from database import execute
5
+ import os
6
+
7
+ client = InferenceClient(api_key=os.environ.get('HF_TOKEN'))
8
+
9
+
10
+ def respond(message, history, system_message, max_tokens, temperature, top_p):
11
+ messages = [{"role": "system", "content": SYSTEM_PROMPT}]
12
+ # Xử lý lịch sử chat
13
+ for val in history:
14
+ if val[0]:
15
+ messages.append({"role": "user", "content": val[0]})
16
+ if val[1]:
17
+ messages.append({"role": "assistant", "content": val[1]})
18
+
19
+ messages.append({"role": "user", "content": message})
20
+
21
+ # Tạo response đầu tiên
22
+ response = ""
23
+ for message in client.chat.completions.create(
24
+ model="Qwen/Qwen2.5-3B-Instruct",
25
+ max_tokens=max_tokens,
26
+ stream=True,
27
+ temperature=temperature,
28
+ top_p=top_p,
29
+ messages=messages,
30
+ ):
31
+ token = message.choices[0].delta.content
32
+ response += token
33
+ yield response
34
+
35
+ # Xử lý logic SQL và retry
36
+ if is_sql(response):
37
+ sql_query = extract_sql(response)
38
+ max_attempts = 3
39
+ attempts = 0
40
+ sql_result = None
41
+ last_error = None
42
+
43
+ while attempts < max_attempts:
44
+ try:
45
+ sql_result = execute(sql_query)
46
+ break
47
+ except Exception as e:
48
+ last_error = str(e)
49
+ attempts += 1
50
+ if attempts < max_attempts:
51
+ # Thêm thông tin lỗi vào context và yêu cầu mô hình hỏi lại người dùng
52
+ clarification_prompt = f"""Tôi gặp lỗi khi thực hiện truy vấn SQL: {last_error}
53
+ Bạn có thể cung cấp thêm thông tin hoặc chỉnh sửa câu hỏi để tôi có thể sửa truy vấn không?"""
54
+ messages += [
55
+ {"role": "assistant", "content": response},
56
+ {"role": "user", "content": clarification_prompt},
57
+ ]
58
+
59
+ # Tạo response yêu cầu thông tin thêm
60
+ response = ""
61
+ for message in client.chat.completions.create(
62
+ model="Qwen/Qwen2.5-3B-Instruct",
63
+ max_tokens=max_tokens,
64
+ stream=True,
65
+ temperature=temperature,
66
+ top_p=top_p,
67
+ messages=messages,
68
+ ):
69
+ token = message.choices[0].delta.content
70
+ response += token
71
+ yield response
72
+
73
+ # Nếu mô hình cung cấp SQL mới, tiếp tục thử
74
+ if is_sql(response):
75
+ sql_query = extract_sql(response)
76
+ else:
77
+ # Nếu sau 3 lần vẫn lỗi, tiếp tục hỏi lại người dùng thay vì in lỗi
78
+ retry_prompt = f"""Tôi đã thử {max_attempts} lần nhưng vẫn gặp lỗi: {last_error}
79
+ Bạn có thể cung cấp thêm chi tiết về dữ liệu cần truy vấn không?"""
80
+ messages.append({"role": "assistant", "content": retry_prompt})
81
+ yield retry_prompt
82
+ return
83
+
84
+ # Nếu thực hiện truy vấn thành công
85
+ if sql_result is not None:
86
+ reformulation_prompt = f"""Kết quả truy vấn SQL:
87
+ {sql_result}
88
+ Hãy tóm tắt kết quả thành phản hồi tự nhiên cho người dùng."""
89
+ messages += [
90
+ {"role": "assistant", "content": response},
91
+ {"role": "user", "content": reformulation_prompt},
92
+ ]
93
+
94
+ # Tạo response tóm tắt
95
+ reformulated_response = ""
96
+ for message in client.chat.completions.create(
97
+ model="Qwen/Qwen2.5-3B-Instruct",
98
+ max_tokens=512,
99
+ stream=True,
100
+ temperature=temperature,
101
+ top_p=top_p,
102
+ messages=messages,
103
+ ):
104
+ token = message.choices[0].delta.content
105
+ reformulated_response += token
106
+ yield reformulated_response