Spaces:
Sleeping
Sleeping
system_prompt = self.instructions
Browse files- app.py +37 -31
- chatbot.py +2 -29
app.py
CHANGED
|
@@ -1650,6 +1650,26 @@ def download_exam_result(content):
|
|
| 1650 |
return word_path
|
| 1651 |
|
| 1652 |
# ---- Chatbot ----
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1653 |
def chat_with_ai(ai_name, password, video_id, trascript_state, key_moments, user_message, chat_history, content_subject, content_grade, socratic_mode=False):
|
| 1654 |
verify_password(password)
|
| 1655 |
|
|
@@ -1668,6 +1688,19 @@ def chat_with_ai(ai_name, password, video_id, trascript_state, key_moments, user
|
|
| 1668 |
else:
|
| 1669 |
simple_transcript = trascript_state
|
| 1670 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1671 |
chatbot_config = {
|
| 1672 |
"video_id": video_id,
|
| 1673 |
"transcript": simple_transcript,
|
|
@@ -1676,7 +1709,8 @@ def chat_with_ai(ai_name, password, video_id, trascript_state, key_moments, user
|
|
| 1676 |
"content_grade": content_grade,
|
| 1677 |
"jutor_chat_key": JUTOR_CHAT_KEY,
|
| 1678 |
"ai_name": ai_name,
|
| 1679 |
-
"ai_client": ai_client
|
|
|
|
| 1680 |
}
|
| 1681 |
|
| 1682 |
chatbot = Chatbot(chatbot_config)
|
|
@@ -1736,21 +1770,7 @@ def chat_with_opan_ai_assistant(password, youtube_id, thread_id, trascript_state
|
|
| 1736 |
moment.pop('text', None)
|
| 1737 |
key_moments_text = json.dumps(key_moments_json, ensure_ascii=False)
|
| 1738 |
|
| 1739 |
-
instructions =
|
| 1740 |
-
subject: {content_subject}
|
| 1741 |
-
grade: {content_grade}
|
| 1742 |
-
context: {key_moments_text}
|
| 1743 |
-
Assistant Role: you are a {content_subject} teacher
|
| 1744 |
-
User Role: {content_grade} th-grade student.
|
| 1745 |
-
Method: Socratic style, guide thinking, no direct answers. this is very important, please be seriously following.
|
| 1746 |
-
Language: Traditional Chinese ZH-TW (it's very important), suitable for {content_grade} th-grade level.
|
| 1747 |
-
Response: Single question, under 100 characters, include math symbols (use LaTeX $), hint with video timestamp which format【參考:00:00:00】.
|
| 1748 |
-
Sometimes encourage user by Taiwanese style with relaxing atmosphere.
|
| 1749 |
-
if user ask questions not include in context,
|
| 1750 |
-
just tell them to ask the question in context and give them example question.
|
| 1751 |
-
Restrictions: Answer within video content, no external references
|
| 1752 |
-
"""
|
| 1753 |
-
|
| 1754 |
print("=== instructions ===")
|
| 1755 |
print(instructions)
|
| 1756 |
|
|
@@ -1914,21 +1934,7 @@ def streaming_chat_with_open_ai(user_message, chat_history, password, thread_id,
|
|
| 1914 |
moment.pop('images', None)
|
| 1915 |
key_moments_text = json.dumps(key_moments_json, ensure_ascii=False)
|
| 1916 |
|
| 1917 |
-
instructions =
|
| 1918 |
-
subject: {content_subject}
|
| 1919 |
-
grade: {content_grade}
|
| 1920 |
-
context: {key_moments_text}
|
| 1921 |
-
Assistant Role: you are a {content_subject} teacher
|
| 1922 |
-
User Role: {content_grade} th-grade student.
|
| 1923 |
-
Method: Socratic style, guide thinking, no direct answers. this is very important, please be seriously following.
|
| 1924 |
-
Language: Traditional Chinese ZH-TW (it's very important), suitable for {content_grade} th-grade level.
|
| 1925 |
-
Response: Single question, under 100 characters, include math symbols (use LaTeX $), hint with video timestamp which format 【參考:00:00:00】.
|
| 1926 |
-
Please encourage student by Taiwanese style with relaxing atmosphere.
|
| 1927 |
-
if user ask questions not include in context,
|
| 1928 |
-
just tell them to ask the question in context and give them example question.
|
| 1929 |
-
Restrictions: Answer within video content, no external references
|
| 1930 |
-
"""
|
| 1931 |
-
|
| 1932 |
# 创建线程
|
| 1933 |
if not thread_id:
|
| 1934 |
thread = client.beta.threads.create()
|
|
|
|
| 1650 |
return word_path
|
| 1651 |
|
| 1652 |
# ---- Chatbot ----
|
| 1653 |
+
def get_instructions(content_subject, content_grade, key_moments):
|
| 1654 |
+
instructions = f"""
|
| 1655 |
+
subject: {content_subject}
|
| 1656 |
+
grade: {content_grade}
|
| 1657 |
+
context: {key_moments}
|
| 1658 |
+
Assistant Role: you are a {content_subject} teacher
|
| 1659 |
+
User Role: {content_grade} th-grade student.
|
| 1660 |
+
Method: Socratic style, guide thinking, no direct answers. this is very important, please be seriously following.
|
| 1661 |
+
Language: Traditional Chinese ZH-TW (it's very important), suitable for {content_grade} th-grade level.
|
| 1662 |
+
Response:
|
| 1663 |
+
- Single question, under 100 characters
|
| 1664 |
+
- include math symbols (use LaTeX $ to cover before and after)
|
| 1665 |
+
- hint with video timestamp which format 【參考:00:00:00】.
|
| 1666 |
+
- Sometimes encourage user by Taiwanese style with relaxing atmosphere.
|
| 1667 |
+
- if user ask questions not include in context,
|
| 1668 |
+
- just tell them to ask the question in context and give them example question.
|
| 1669 |
+
Restrictions: Answer within video content, no external references
|
| 1670 |
+
"""
|
| 1671 |
+
return instructions
|
| 1672 |
+
|
| 1673 |
def chat_with_ai(ai_name, password, video_id, trascript_state, key_moments, user_message, chat_history, content_subject, content_grade, socratic_mode=False):
|
| 1674 |
verify_password(password)
|
| 1675 |
|
|
|
|
| 1688 |
else:
|
| 1689 |
simple_transcript = trascript_state
|
| 1690 |
|
| 1691 |
+
if isinstance(key_moments, str):
|
| 1692 |
+
key_moments_json = json.loads(key_moments)
|
| 1693 |
+
else:
|
| 1694 |
+
key_moments_json = key_moments
|
| 1695 |
+
# key_moments_json remove images
|
| 1696 |
+
for moment in key_moments_json:
|
| 1697 |
+
moment.pop('images', None)
|
| 1698 |
+
moment.pop('end', None)
|
| 1699 |
+
moment.pop('text', None)
|
| 1700 |
+
key_moments_text = json.dumps(key_moments_json, ensure_ascii=False)
|
| 1701 |
+
|
| 1702 |
+
instructions = get_instructions(content_subject, content_grade, key_moments_text)
|
| 1703 |
+
|
| 1704 |
chatbot_config = {
|
| 1705 |
"video_id": video_id,
|
| 1706 |
"transcript": simple_transcript,
|
|
|
|
| 1709 |
"content_grade": content_grade,
|
| 1710 |
"jutor_chat_key": JUTOR_CHAT_KEY,
|
| 1711 |
"ai_name": ai_name,
|
| 1712 |
+
"ai_client": ai_client,
|
| 1713 |
+
"instructions": instructions
|
| 1714 |
}
|
| 1715 |
|
| 1716 |
chatbot = Chatbot(chatbot_config)
|
|
|
|
| 1770 |
moment.pop('text', None)
|
| 1771 |
key_moments_text = json.dumps(key_moments_json, ensure_ascii=False)
|
| 1772 |
|
| 1773 |
+
instructions = get_instructions(content_subject, content_grade, key_moments_text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1774 |
print("=== instructions ===")
|
| 1775 |
print(instructions)
|
| 1776 |
|
|
|
|
| 1934 |
moment.pop('images', None)
|
| 1935 |
key_moments_text = json.dumps(key_moments_json, ensure_ascii=False)
|
| 1936 |
|
| 1937 |
+
instructions = get_instructions(content_subject, content_grade, key_moments_text)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1938 |
# 创建线程
|
| 1939 |
if not thread_id:
|
| 1940 |
thread = client.beta.threads.create()
|
chatbot.py
CHANGED
|
@@ -12,6 +12,7 @@ class Chatbot:
|
|
| 12 |
self.key_moments_text = self.get_key_moments_text(config.get('key_moments'))
|
| 13 |
self.ai_name = config.get('ai_name')
|
| 14 |
self.ai_client = config.get('ai_client')
|
|
|
|
| 15 |
|
| 16 |
def get_transcript_text(self, transcript_data):
|
| 17 |
if isinstance(transcript_data, str):
|
|
@@ -40,41 +41,13 @@ class Chatbot:
|
|
| 40 |
|
| 41 |
def chat(self, user_message, chat_history, socratic_mode=False, service_type='jutor'):
|
| 42 |
messages = self.prepare_messages(chat_history, user_message)
|
| 43 |
-
system_prompt = self.
|
| 44 |
if service_type in ['jutor', 'groq', 'claude3']:
|
| 45 |
response_text = self.chat_with_service(service_type, system_prompt, messages)
|
| 46 |
return response_text
|
| 47 |
else:
|
| 48 |
raise gr.Error("不支持此服務")
|
| 49 |
|
| 50 |
-
def prepare_system_prompt(self, socratic_mode):
|
| 51 |
-
content_subject = self.content_subject
|
| 52 |
-
content_grade = self.content_grade
|
| 53 |
-
video_id = self.video_id
|
| 54 |
-
transcript_text = self.transcript_text
|
| 55 |
-
key_moments_text = self.key_moments_text
|
| 56 |
-
socratic_mode = str(socratic_mode)
|
| 57 |
-
ai_name = self.ai_name
|
| 58 |
-
|
| 59 |
-
system_prompt = f"""
|
| 60 |
-
subject: {content_subject}
|
| 61 |
-
grade: {content_grade}
|
| 62 |
-
context: {key_moments_text}
|
| 63 |
-
Assistant Role: you are a {content_subject} teacher
|
| 64 |
-
User Role: {content_grade} th-grade student.
|
| 65 |
-
Method: Socratic style, guide thinking, no direct answers. this is very important, please be seriously following.
|
| 66 |
-
Language: Traditional Chinese ZH-TW (it's very important), suitable for {content_grade} th-grade level.
|
| 67 |
-
Response: Single question, under 100 characters, include math symbols (use LaTeX $), hint with video timestamp which format 【參考:00:00:00】.
|
| 68 |
-
Sometimes encourage user by Taiwanese style with relaxing atmosphere.
|
| 69 |
-
if user ask questions not include in context,
|
| 70 |
-
just tell them to ask the question in context and give them example question.
|
| 71 |
-
Restrictions: Answer within video content, no external references
|
| 72 |
-
"""
|
| 73 |
-
print("====system_prompt====")
|
| 74 |
-
print(system_prompt)
|
| 75 |
-
|
| 76 |
-
return system_prompt
|
| 77 |
-
|
| 78 |
def prepare_messages(self, chat_history, user_message):
|
| 79 |
messages = []
|
| 80 |
if chat_history is not None:
|
|
|
|
| 12 |
self.key_moments_text = self.get_key_moments_text(config.get('key_moments'))
|
| 13 |
self.ai_name = config.get('ai_name')
|
| 14 |
self.ai_client = config.get('ai_client')
|
| 15 |
+
self.instructions = config.get('instructions')
|
| 16 |
|
| 17 |
def get_transcript_text(self, transcript_data):
|
| 18 |
if isinstance(transcript_data, str):
|
|
|
|
| 41 |
|
| 42 |
def chat(self, user_message, chat_history, socratic_mode=False, service_type='jutor'):
|
| 43 |
messages = self.prepare_messages(chat_history, user_message)
|
| 44 |
+
system_prompt = self.instructions
|
| 45 |
if service_type in ['jutor', 'groq', 'claude3']:
|
| 46 |
response_text = self.chat_with_service(service_type, system_prompt, messages)
|
| 47 |
return response_text
|
| 48 |
else:
|
| 49 |
raise gr.Error("不支持此服務")
|
| 50 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 51 |
def prepare_messages(self, chat_history, user_message):
|
| 52 |
messages = []
|
| 53 |
if chat_history is not None:
|