huchiahsi commited on
Commit
753cc60
·
1 Parent(s): afd414d

change to system_prompt.py

Browse files
Files changed (2) hide show
  1. Dockerfile +1 -1
  2. system_prompt.py +88 -0
Dockerfile CHANGED
@@ -14,4 +14,4 @@ USER appuser
14
 
15
  HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD curl -f http://0.0.0.0:7860/ || exit 1
16
 
17
- CMD ["gunicorn","-b", "0.0.0.0:7860", "replybot:app"]
 
14
 
15
  HEALTHCHECK --interval=30s --timeout=30s --start-period=5s --retries=3 CMD curl -f http://0.0.0.0:7860/ || exit 1
16
 
17
+ CMD ["gunicorn","-b", "0.0.0.0:7860", "system_prompt:app"]
system_prompt.py ADDED
@@ -0,0 +1,88 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ """
2
+ 東吳大學資料系 2025 LINEBOT
3
+ """
4
+
5
+ import os
6
+
7
+ from flask import Flask, abort, request
8
+ from bs4 import BeautifulSoup
9
+ import markdown
10
+
11
+ from google import genai
12
+ from google.genai import types # 加入system prompot所需的types模組
13
+
14
+ from linebot.v3 import WebhookHandler
15
+ from linebot.v3.exceptions import InvalidSignatureError
16
+ from linebot.v3.messaging import (
17
+ ApiClient,
18
+ Configuration,
19
+ MessagingApi,
20
+ ReplyMessageRequest,
21
+ TextMessage,
22
+ )
23
+ from linebot.v3.webhooks import MessageEvent, TextMessageContent
24
+
25
+
26
+ # Initialize Google Gemini
27
+ GOOGLE_API_KEY = os.getenv("GOOGLE_API_KEY")
28
+ client = genai.Client(api_key=GOOGLE_API_KEY)
29
+
30
+ # Initialize Flask app
31
+ app = Flask(__name__)
32
+ channel_secret = os.getenv("YOUR_CHANNEL_SECRET")
33
+ channel_access_token = os.getenv("YOUR_CHANNEL_ACCESS_TOKEN")
34
+ configuration = Configuration(access_token=channel_access_token)
35
+ handler = WebhookHandler(channel_secret)
36
+
37
+
38
+ def query(payload: str) -> str:
39
+ """Send a prompt to Gemini and return the response text."""
40
+ response = client.models.generate_content(
41
+ model="gemini-2.0-flash",
42
+ config=types.GenerateContentConfig(
43
+ system_instruction="你是一個中文的AI助手,請用繁體中文回答"),
44
+ contents=payload
45
+ )
46
+ return response.text
47
+
48
+
49
+ @app.route("/", methods=["GET"])
50
+ def home():
51
+ """Health check endpoint."""
52
+ return {"message": "Line Webhook Server"}
53
+
54
+
55
+ @app.route("/", methods=["POST"])
56
+ def callback():
57
+ """Handle incoming webhook from LINE."""
58
+ signature = request.headers.get("X-Line-Signature")
59
+ body = request.get_data(as_text=True)
60
+ app.logger.info("Request body: %s", body)
61
+
62
+ try:
63
+ handler.handle(body, signature)
64
+ except InvalidSignatureError:
65
+ app.logger.warning(
66
+ "Invalid signature. Please check channel credentials."
67
+ )
68
+ abort(400)
69
+
70
+ return "OK"
71
+
72
+
73
+ @handler.add(MessageEvent, message=TextMessageContent)
74
+ def handle_text_message(event):
75
+ """Handle incoming text message event."""
76
+ user_input = event.message.text.strip()
77
+ response_text = query(user_input)
78
+ html_msg = markdown.markdown(response_text)
79
+ soup = BeautifulSoup(html_msg, "html.parser")
80
+
81
+ with ApiClient(configuration) as api_client:
82
+ line_bot_api = MessagingApi(api_client)
83
+ line_bot_api.reply_message_with_http_info(
84
+ ReplyMessageRequest(
85
+ reply_token=event.reply_token,
86
+ messages=[TextMessage(text=soup.get_text())],
87
+ )
88
+ )