huchiahsi commited on
Commit
29e6a5e
Β·
1 Parent(s): dcfe880
Files changed (1) hide show
  1. gemini.py +11 -76
gemini.py CHANGED
@@ -25,27 +25,27 @@ from linebot.v3.messaging import (
25
  TextMessage,
26
  )
27
  from linebot.v3.webhooks import (
28
- ImageMessageContent,
29
- MessageEvent,
30
  TextMessageContent,
31
  )
32
 
33
  from PIL import Image
34
 
35
-
36
  # === εˆε§‹εŒ– Google Gemini ===
37
  GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
38
  client = genai.Client(api_key=GOOGLE_API_KEY)
39
 
40
  google_search_tool = Tool(
41
- google_search = GoogleSearch()
42
  )
43
 
44
- chat = client.chats.create(model="gemini-2.5-pro-preview-05-06",
 
45
  config=GenerateContentConfig(
46
  system_instruction="δ½ ζ˜―δΈ€ε€‹δΈ­ζ–‡ηš„AIεŠ©ζ‰‹οΌŒθ«‹η”¨ηΉι«”δΈ­ζ–‡ε›žη­”",
47
  tools=[google_search_tool],
48
- response_modalities=["TEXT"],
49
  )
50
  )
51
 
@@ -57,7 +57,8 @@ base_url = os.getenv("SPACE_HOST") # e.g., "your-space-name.hf.space"
57
  # === Flask ζ‡‰η”¨εˆε§‹εŒ– ===
58
  app = Flask(__name__)
59
  logging.basicConfig(
60
- level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s"
 
61
  )
62
  app.logger.setLevel(logging.INFO)
63
 
@@ -73,6 +74,7 @@ def query(payload):
73
  response = chat.send_message(message=payload)
74
  return response.text
75
 
 
76
  # === ιœζ…‹εœ–ζͺ”θ·―η”± ===
77
  @app.route("/images/<filename>")
78
  def serve_image(filename):
@@ -142,7 +144,7 @@ def handle_text_message(event):
142
  ],
143
  )
144
  )
145
-
146
  except Exception as e:
147
  app.logger.error(f"Gemini API error: {e}")
148
  with ApiClient(configuration) as api_client:
@@ -196,7 +198,6 @@ def handle_image_message(event):
196
  app.logger.info(response.text)
197
 
198
  # === δ»₯δΈ‹ζ˜―ε›žε‚³εœ–η‰‡ιƒ¨εˆ† === #
199
-
200
  with ApiClient(configuration) as api_client:
201
  line_bot_api = MessagingApi(api_client)
202
  line_bot_api.reply_message(
@@ -209,70 +210,4 @@ def handle_image_message(event):
209
  TextMessage(text=response.text),
210
  ],
211
  )
212
- )
213
- '''
214
- @handler.add(MessageEvent, message=ImageMessageContent)
215
- def handle_image_message(event):
216
-
217
- # === δ»₯δΈ‹ζ˜―θ™•η†εœ–η‰‡ε›žε‚³ιƒ¨εˆ† === #
218
-
219
- with ApiClient(configuration) as api_client:
220
- blob_api = MessagingApiBlob(api_client)
221
- content = blob_api.get_message_content(message_id=event.message.id)
222
- image_bytes = content
223
-
224
- # Step 2οΌšθ½‰ζˆ base64 ε­—δΈ²
225
- base64_string = base64.b64encode(image_bytes).decode("utf-8")
226
-
227
- # Step 3οΌšη΅„ζˆ OpenAI ηš„ data URI 格式
228
- data_uri = f"data:image/png;base64,{base64_string}"
229
- app.logger.info(f"Data URI: {data_uri}")
230
-
231
- # Step 4οΌšε°‡εœ–η‰‡ε­˜εˆ°ζœ¬εœ°η«―
232
- with tempfile.NamedTemporaryFile(
233
- dir=static_tmp_path, suffix=".jpg", delete=False
234
- ) as tf:
235
- tf.write(content)
236
- filename = os.path.basename(tf.name)
237
-
238
- image_url = f"https://{base_url}/images/{filename}"
239
-
240
- app.logger.info(f"Image URL: {image_url}")
241
-
242
- # === δ»₯δΈ‹ζ˜―θ™•η†θ§£ι‡‹εœ–η‰‡ιƒ¨εˆ† === #
243
- response = client.responses.create(
244
- model="gpt-4.1-nano",
245
- input=[
246
- {
247
- "role": "user",
248
- "content": [
249
- {
250
- "type": "input_text",
251
- "text": "describe the image in traditional chinese",
252
- },
253
- {
254
- "type": "input_image",
255
- "image_url": data_uri,
256
- },
257
- ],
258
- }
259
- ],
260
- )
261
- app.logger.info(response.output_text)
262
-
263
- # === δ»₯δΈ‹ζ˜―ε›žε‚³εœ–η‰‡ιƒ¨εˆ† === #
264
-
265
- with ApiClient(configuration) as api_client:
266
- line_bot_api = MessagingApi(api_client)
267
- line_bot_api.reply_message(
268
- ReplyMessageRequest(
269
- reply_token=event.reply_token,
270
- messages=[
271
- ImageMessage(
272
- original_content_url=image_url, preview_image_url=image_url
273
- ),
274
- TextMessage(text=response.output_text),
275
- ],
276
- )
277
- )
278
- '''
 
25
  TextMessage,
26
  )
27
  from linebot.v3.webhooks import (
28
+ ImageMessageContent,
29
+ MessageEvent,
30
  TextMessageContent,
31
  )
32
 
33
  from PIL import Image
34
 
 
35
  # === εˆε§‹εŒ– Google Gemini ===
36
  GOOGLE_API_KEY = os.environ.get("GOOGLE_API_KEY")
37
  client = genai.Client(api_key=GOOGLE_API_KEY)
38
 
39
  google_search_tool = Tool(
40
+ google_search=GoogleSearch()
41
  )
42
 
43
+ chat = client.chats.create(
44
+ model="gemini-2.5-pro-preview-05-06",
45
  config=GenerateContentConfig(
46
  system_instruction="δ½ ζ˜―δΈ€ε€‹δΈ­ζ–‡ηš„AIεŠ©ζ‰‹οΌŒθ«‹η”¨ηΉι«”δΈ­ζ–‡ε›žη­”",
47
  tools=[google_search_tool],
48
+ response_modalities=["TEXT"],
49
  )
50
  )
51
 
 
57
  # === Flask ζ‡‰η”¨εˆε§‹εŒ– ===
58
  app = Flask(__name__)
59
  logging.basicConfig(
60
+ level=logging.INFO,
61
+ format="%(asctime)s - %(levelname)s - %(message)s"
62
  )
63
  app.logger.setLevel(logging.INFO)
64
 
 
74
  response = chat.send_message(message=payload)
75
  return response.text
76
 
77
+
78
  # === ιœζ…‹εœ–ζͺ”θ·―η”± ===
79
  @app.route("/images/<filename>")
80
  def serve_image(filename):
 
144
  ],
145
  )
146
  )
147
+
148
  except Exception as e:
149
  app.logger.error(f"Gemini API error: {e}")
150
  with ApiClient(configuration) as api_client:
 
198
  app.logger.info(response.text)
199
 
200
  # === δ»₯δΈ‹ζ˜―ε›žε‚³εœ–η‰‡ιƒ¨εˆ† === #
 
201
  with ApiClient(configuration) as api_client:
202
  line_bot_api = MessagingApi(api_client)
203
  line_bot_api.reply_message(
 
210
  TextMessage(text=response.text),
211
  ],
212
  )
213
+ )