tomo2chin2 commited on
Commit
e50836b
·
verified ·
1 Parent(s): 79c422d

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +35 -54
app.py CHANGED
@@ -18,7 +18,8 @@ import logging
18
  from huggingface_hub import hf_hub_download # 追加: HuggingFace Hubからファイルを直接ダウンロード
19
 
20
  # 正しいGemini関連のインポート
21
- import google.generativeai as genai
 
22
 
23
  # ロギング設定
24
  logging.basicConfig(level=logging.INFO)
@@ -190,83 +191,63 @@ def generate_html_from_text(text, temperature=0.3, style="standard"):
190
  model_name = os.environ.get("GEMINI_MODEL", "gemini-1.5-pro")
191
  logger.info(f"使用するGeminiモデル: {model_name}")
192
 
193
- # Gemini APIの設定
194
- genai.configure(api_key=api_key)
195
-
196
  # 指定されたスタイルのシステムインストラクションを読み込む
197
  system_instruction = load_system_instruction(style)
198
 
199
- # モデル初期化
200
  logger.info(f"Gemini APIにリクエストを送信: テキスト長さ = {len(text)}, 温度 = {temperature}, スタイル = {style}")
201
-
202
- # モデル初期化
203
- model = genai.GenerativeModel(model_name)
204
-
205
- # 生成設定 - ばらつきを減らすために設定を調整
206
- generation_config = {
207
- "temperature": temperature, # より低い温度を設定
208
- "top_p": 0.7, # 0.95から0.7に下げて出力の多様性を制限
209
- "top_k": 20, # 64から20に下げて候補を絞る
210
- "max_output_tokens": 8192,
211
- "candidate_count": 1 # 候補は1つだけ生成
212
- }
213
-
214
- # 安全設定 - デフォルトの安全設定を使用
215
- safety_settings = [
216
- {
217
- "category": "HARM_CATEGORY_HARASSMENT",
218
- "threshold": "BLOCK_MEDIUM_AND_ABOVE"
219
- },
220
- {
221
- "category": "HARM_CATEGORY_HATE_SPEECH",
222
- "threshold": "BLOCK_MEDIUM_AND_ABOVE"
223
- },
224
- {
225
- "category": "HARM_CATEGORY_SEXUALLY_EXPLICIT",
226
- "threshold": "BLOCK_MEDIUM_AND_ABOVE"
227
- },
228
- {
229
- "category": "HARM_CATEGORY_DANGEROUS_CONTENT",
230
- "threshold": "BLOCK_MEDIUM_AND_ABOVE"
231
- }
232
- ]
233
-
234
  # プロンプト構築
235
  prompt = f"{system_instruction}\n\n{text}"
236
-
237
- # コンテンツ生成
238
- response = model.generate_content(
239
- prompt,
240
- generation_config=generation_config,
241
- safety_settings=safety_settings
 
 
242
  )
243
-
 
 
 
 
 
 
 
 
 
 
 
 
244
  # レスポンスからHTMLを抽出
245
  raw_response = response.text
246
-
247
- # HTMLタグ部分だけを抽出(```html と ``` の間)
248
- html_start = raw_response.find("```html")
249
  html_end = raw_response.rfind("```")
250
-
251
  if html_start != -1 and html_end != -1 and html_start < html_end:
252
- html_start += 7 # "```html" の長さ分進める
253
  html_code = raw_response[html_start:html_end].strip()
254
  logger.info(f"HTMLの生成に成功: 長さ = {len(html_code)}")
255
-
256
  # Font Awesomeのレイアウト改善
257
  html_code = enhance_font_awesome_layout(html_code)
258
  logger.info("Font Awesomeレイアウトの最適化を適用しました")
259
-
260
  return html_code
261
  else:
262
  # HTMLタグが見つからない場合、レスポンス全体を返す
263
- logger.warning("レスポンスから ```html ``` タグが見つかりませんでした。全テキストを返します。")
264
  return raw_response
265
-
266
  except Exception as e:
267
  logger.error(f"HTML生成中にエラーが発生: {e}", exc_info=True)
268
  raise Exception(f"Gemini APIでのHTML生成に失敗しました: {e}")
269
 
 
270
  # 画像から余分な空白領域をトリミング��る関数
271
  def trim_image_whitespace(image, threshold=250, padding=10):
272
  """
 
18
  from huggingface_hub import hf_hub_download # 追加: HuggingFace Hubからファイルを直接ダウンロード
19
 
20
  # 正しいGemini関連のインポート
21
+ from google import genai
22
+ from google.genai import types
23
 
24
  # ロギング設定
25
  logging.basicConfig(level=logging.INFO)
 
191
  model_name = os.environ.get("GEMINI_MODEL", "gemini-1.5-pro")
192
  logger.info(f"使用するGeminiモデル: {model_name}")
193
 
 
 
 
194
  # 指定されたスタイルのシステムインストラクションを読み込む
195
  system_instruction = load_system_instruction(style)
196
 
197
+ # モデル初期化と情報ログ
198
  logger.info(f"Gemini APIにリクエストを送信: テキスト長さ = {len(text)}, 温度 = {temperature}, スタイル = {style}")
199
+
200
+ # Gemini APIクライアントの初期化 (新しいSDK方式)
201
+ client = genai.Client(api_key=api_key)
202
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
203
  # プロンプト構築
204
  prompt = f"{system_instruction}\n\n{text}"
205
+
206
+ # 生成設定
207
+ generation_config = types.GenerateContentConfig(
208
+ temperature=temperature,
209
+ top_p=0.7,
210
+ top_k=20,
211
+ max_output_tokens=8192,
212
+ candidate_count=1
213
  )
214
+
215
+ # モデル名がgemini-2.5-flash-preview-04-17の場合、thinking_budgetを0に設定
216
+ if model_name == "gemini-2.5-flash-preview-04-17":
217
+ logger.info("Gemini 2.5 Flash検出: thinking_budgetを0に設定します")
218
+ generation_config.thinking_config = types.ThinkingConfig(thinking_budget=0)
219
+
220
+ # コンテンツ生成 - 新しいSDKの構文に合わせて更新
221
+ response = client.models.generate_content(
222
+ model=model_name,
223
+ contents=prompt,
224
+ config=generation_config
225
+ )
226
+
227
  # レスポンスからHTMLを抽出
228
  raw_response = response.text
229
+
230
+ # HTMLタグ部分だけを抽出(`````` の間)
231
+ html_start = raw_response.find("```
232
  html_end = raw_response.rfind("```")
 
233
  if html_start != -1 and html_end != -1 and html_start < html_end:
234
+ html_start += 7 # "```
235
  html_code = raw_response[html_start:html_end].strip()
236
  logger.info(f"HTMLの生成に成功: 長さ = {len(html_code)}")
 
237
  # Font Awesomeのレイアウト改善
238
  html_code = enhance_font_awesome_layout(html_code)
239
  logger.info("Font Awesomeレイアウトの最適化を適用しました")
 
240
  return html_code
241
  else:
242
  # HTMLタグが見つからない場合、レスポンス全体を返す
243
+ logger.warning("レスポンスから ```html ```
244
  return raw_response
245
+
246
  except Exception as e:
247
  logger.error(f"HTML生成中にエラーが発生: {e}", exc_info=True)
248
  raise Exception(f"Gemini APIでのHTML生成に失敗しました: {e}")
249
 
250
+
251
  # 画像から余分な空白領域をトリミング��る関数
252
  def trim_image_whitespace(image, threshold=250, padding=10):
253
  """