tomo2chin2 commited on
Commit
d273f13
·
verified ·
1 Parent(s): ec228d9

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +28 -121
app.py CHANGED
@@ -15,6 +15,7 @@ import tempfile
15
  import time
16
  import os
17
  import logging
 
18
 
19
  # 正しいGemini関連のインポート
20
  import google.generativeai as genai
@@ -107,6 +108,30 @@ def enhance_font_awesome_layout(html_code):
107
  # どちらもない場合は先頭に追加
108
  return f'<html><head>{fa_fix_css}</head>' + html_code + '</html>'
109
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
110
  def generate_html_from_text(text, temperature=0.3):
111
  """テキストからHTMLを生成する"""
112
  try:
@@ -123,127 +148,9 @@ def generate_html_from_text(text, temperature=0.3):
123
  # Gemini APIの設定
124
  genai.configure(api_key=api_key)
125
 
126
- # システムプロンプト(リクエスト例と同じものを使用)
127
- system_instruction = """# グラフィックレコーディング風インフォグラフィック変換プロンプト V2
128
- ## 目的
129
- 以下の内容を、超一流デザイナーが作成したような、日本語で完璧なグラフィックレコーディング風のHTMLインフォグラフィックに変換してください。情報設計とビジュアルデザインの両面で最高水準を目指します。
130
- 手書き風の図形やFont Awesomeアイコンを大きく活用して内容を視覚的かつ直感的に表現します。
131
-
132
- ## デザイン仕様
133
- ### 1. カラースキーム
134
- ```
135
- <palette>
136
- <color name='MysticLibrary-1' rgb='2E578C' r='46' g='87' b='140' />
137
- <color name='MysticLibrary-2' rgb='182D40' r='24' g='45' b='64' />
138
- <color name='MysticLibrary-3' rgb='BF807A' r='191' g='128' b='122' />
139
- <color name='MysticLibrary-4' rgb='592A2A' r='89' g='42' b='42' />
140
- <color name='MysticLibrary-5' rgb='F2F2F2' r='242' g='242' b='242' />
141
- </palette>
142
- ```
143
- ### 2. グラフィックレコーディング要素
144
- - 左上から右へ、上から下へと情報を順次配置
145
- - 日本語の手書き風フォントの使用(Yomogi, Zen Kurenaido, Kaisei Decol)
146
- - 手描き風の囲み線、矢印、バナー、吹き出し
147
- - テキストと視覚要素(Font Awesomeアイコン、シンプルな図形)の組み合わせ
148
- - Font Awesomeアイコンは各セクションの内容を表現するものを大きく(2x〜3x)表示
149
- - キーワードごとに関連するFont Awesomeアイコンを隣接配置
150
- - キーワードの強調(色付き下線、マーカー効果、Font Awesomeによる装飾)
151
- - 関連する概念を線や矢印で接続し、接続部にもFont Awesomeアイコン(fa-arrow-right, fa-connection等)を挿入
152
- - Font Awesomeアニメーション効果(fa-beat, fa-bounce, fa-fade, fa-flip, fa-shake, fa-spin)を適切に活用
153
- - 重要なポイントには「fa-circle-exclamation」や「fa-lightbulb」などのアイコンを目立つ大きさで配置
154
- - 数値やデータには「fa-chart-line」や「fa-percent」などの関連アイコンを添える
155
- - 感情や状態を表すには表情アイコン(fa-face-smile, fa-face-frown等)を活用
156
- - アイコンにホバー効果(色変化、サイズ変化)を付与
157
- - 背景にはFont Awesomeの薄いパターンを配置(fa-shapes等を透過度を下げて配置)
158
- ### 3. アニメーション効果
159
- - Font Awesomeアイコンに連動するアニメーション(fa-beat, fa-bounce, fa-fade等)
160
- - 重要キーワード出現時のハイライト効果(グラデーション変化)
161
- - 接続線や矢印の流れるようなアニメーション
162
- - アイコンの回転・拡大縮小アニメーション(特に注目させたい箇所)
163
- - 背景グラデーションの緩やかな変化
164
- - スクロールに連動した要素の出現効果
165
- - クリック/タップでアイコンが反応する効果
166
- ### 4. タイポグラフィ
167
- - タイトル:32px、グラデーション効果、太字、Font Awesomeアイコンを左右に配置
168
- - サブタイトル:16px、#475569、関連するFont Awesomeアイコンを添える
169
- - セクション見出し:18px、# 1e40af、左側にFont Awesomeアイコンを必ず配置し、アイコンにはアニメーション効果
170
- - 本文:14px、#334155、行間1.4、重要キーワードには関連するFont Awesomeアイコンを小さく添える
171
- - フォント指定:
172
- ```html
173
- <style>
174
- @ import url('https ://fonts.googleapis.com/css2?family=Kaisei+Decol&family=Yomogi&family=Zen+Kurenaido&display=swap');
175
- @ import url('https ://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.4.0/css/all.min.css');
176
- </style>
177
- ```
178
- ### 5. レイアウト
179
- - ヘッダー:左揃えタイトル(大きなFont Awesomeアイコンを添える)+右揃え日付/出典
180
- - 2カラム構成:左側50%, 右側50%
181
- - カード型コンポーネント:白背景、角丸12px、微細シャドウ、右上にFont Awesomeアイコンを配置
182
- - セクション間の適切な余白と階層構造(階層を示すFont Awesomeアイコンを活用)
183
- - 適切にグラスモーフィズムを活用(背後にぼかしたFont Awesomeアイコンを配置)
184
- - 横幅は100%
185
- - 重要な要素は中央寄り、補足情報は周辺部に配置
186
-
187
- ### 重要なレイアウト注意事項
188
- - Font Awesomeアイコンと文字が重ならないよう適切なマージンを設定する
189
- - アイコンには必ず`margin-right: 10px;`や`margin-left: 10px;`などの余白を設定する
190
- - アイコンと文字列は必ず`display: inline-block;`または`display: inline-flex;`で配置し、`align-items: center;`を使用する
191
- - 複数のアイコンを配置する場合は十分な余白を確保する
192
- - レイアウト崩れを防ぐために、親要素には`overflow: hidden;`を適用する
193
- - アイコンの配置はコンテンツフローを妨げないよう注意する
194
- - カード内でのアイコン配置は、絶対位置指定ではなく相対位置で設定する
195
- - モバイル表示も考慮し、レスポンシブ対応を徹底する
196
-
197
- ## グラフィックレコーディング表現技法
198
- - テキストと視覚要素のバランスを重視(文字情報の50%以上をFont Awesomeアイコンで視覚的に補完)
199
- - キーワードを囲み線や色で強調し、関連するFont Awesomeアイコンを必ず添える
200
- - 概念ごとに最適なFont Awesomeアイコンを選定(抽象的な概念には複数の関連アイコンを組み合わせて表現)
201
- - 数値データは簡潔なグラフや図表で表現し、データ種類に応じたFont Awesomeアイコン(fa-chart-pie, fa-chart-column等)を配置
202
- - 接続線や矢印で情報間の関係性を明示し、関係性の種類に応じたアイコン(fa-link, fa-code-branch等)を添える
203
- - 余白を効果的に活用して視認性を確保(余白にも薄いFont Awesomeパターンを配置可)
204
- - コントラストと色の使い分けでメリハリを付け、カラースキームに沿ったアイコン色を活用
205
- ## Font Awesomeアイコン活用ガイドライン
206
- - 概念カテゴリー別の推奨アイコン:
207
- - 時間・順序:fa-clock, fa-hourglass, fa-calendar, fa-timeline
208
- - 場所・位置:fa-location-dot, fa-map, fa-compass, fa-globe
209
- - 人物・組織:fa-user, fa-users, fa-building, fa-sitemap
210
- - 行動・活動:fa-person-running, fa-gears, fa-hammer, fa-rocket
211
- - 思考・アイデア:fa-brain, fa-lightbulb, fa-thought-bubble, fa-comments
212
- - 感情・状態:fa-face-smile, fa-face-sad-tear, fa-heart, fa-temperature-half
213
- - 成長・変化:fa-seedling, fa-arrow-trend-up, fa-chart-line, fa-diagram-project
214
- - 問題・課題:fa-triangle-exclamation, fa-circle-question, fa-bug, fa-ban
215
- - 解決・成功:fa-check, fa-trophy, fa-handshake, fa-key
216
- - アイコンサイズの使い分け:
217
- - 主要概念:3x(fa-3x)
218
- - 重要キーワード:2x(fa-2x)
219
- - 補足情報:1x(標準サイズ)
220
- - 装飾的要素:lg(fa-lg)
221
- - アニメーション効果の適切な使い分け:
222
- - 注目喚起:fa-beat, fa-shake
223
- - 継続的プロセス:fa-spin, fa-pulse
224
- - 状態変化:fa-flip, fa-fade
225
- - 新規情報:fa-bounce
226
- ## 全体的な指針
227
- - 読み手が自然に視線を移動できる配置(Font Awesomeアイコンで視線誘導)
228
- - 情報の階層と関連性を視覚的に明確化(階層ごとにアイコンのサイズや色を変える)
229
- - 手書き風の要素とFont Awesomeアイコンを組み合わせて親しみやすさとプロフェッショナル感を両立
230
- - 大きなFont Awesomeアイコンを活用した視覚的な記憶に残るデザイン(各セクションに象徴的なアイコンを配置)
231
- - フッターに出典情報と関連するFont Awesomeアイコン(fa-book, fa-citation等)を明記
232
- ## 変換する文章/記事
233
- ーーー<ユーザーが入力(または添付)>ーーー"""
234
-
235
- # モデルを初期化して処理
236
- logger.info(f"Gemini APIにリクエストを送信: テキスト長さ = {len(text)}, 温度 = {temperature}")
237
-
238
- # モデル初期化とフォールバッ��処理
239
- try:
240
- model = genai.GenerativeModel(model_name)
241
- except Exception as e:
242
- # 指定されたモデルが使用できない場合はフォールバック
243
- fallback_model = "gemini-pro"
244
- logger.warning(f"{model_name}が利用できません: {e}, フォールバックモデル{fallback_model}を使用します")
245
- model = genai.GenerativeModel(fallback_model)
246
-
247
  # 生成設定 - ばらつきを減らすために設定を調整
248
  generation_config = {
249
  "temperature": temperature, # より低い温度を設定
 
15
  import time
16
  import os
17
  import logging
18
+ import datasets # 追加: HuggingFace Datasetsライブラリ
19
 
20
  # 正しいGemini関連のインポート
21
  import google.generativeai as genai
 
108
  # どちらもない場合は先頭に追加
109
  return f'<html><head>{fa_fix_css}</head>' + html_code + '</html>'
110
 
111
+ def load_system_instruction():
112
+ """HuggingFaceデータセットからプロンプトを読み込む"""
113
+ try:
114
+ # データセットを読み込む
115
+ logger.info("HuggingFaceデータセットからシステムインストラクションを読み込み中...")
116
+ dataset = datasets.load_dataset("tomo2chin2/GURAREKOstlyle")
117
+
118
+ # prompt.txtの内容を取得
119
+ if 'prompt.txt' in dataset['train']:
120
+ instruction = dataset['train']['prompt.txt'][0]
121
+ logger.info("システムインストラクションを正常に読み込みました")
122
+ return instruction
123
+ else:
124
+ # prompt.txtが見つからない場合
125
+ error_msg = "データセット内にprompt.txtが見つかりません"
126
+ logger.error(error_msg)
127
+ raise ValueError(error_msg)
128
+
129
+ except Exception as e:
130
+ # その他のエラーが発生した場合
131
+ error_msg = f"システムインストラクションの読み込みに失敗: {str(e)}"
132
+ logger.error(error_msg)
133
+ raise ValueError(error_msg)
134
+
135
  def generate_html_from_text(text, temperature=0.3):
136
  """テキストからHTMLを生成する"""
137
  try:
 
148
  # Gemini APIの設定
149
  genai.configure(api_key=api_key)
150
 
151
+ # HuggingFaceデータセットからシステムインストラクションを読み込む
152
+ system_instruction = load_system_instruction()
153
+
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
154
  # 生成設定 - ばらつきを減らすために設定を調整
155
  generation_config = {
156
  "temperature": temperature, # より低い温度を設定