fudii0921 commited on
Commit
acb4482
·
verified ·
1 Parent(s): 4adc0b0

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +125 -1
app.py CHANGED
@@ -1,3 +1,4 @@
 
1
  import gradio as gr
2
  import re
3
  import hashlib
@@ -117,6 +118,31 @@ def summarize_text(long_text, username):
117
  contents=[prompt]
118
  )
119
  summary = gresponse.text
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  return summary
121
 
122
  def respond(ctype, msg, username):
@@ -223,6 +249,11 @@ with gr.Blocks(title="Fund Manager Buddy", css="""footer {visibility: hidden;} #
223
  object-fit: cover;
224
  border: 3px solid #4a90e2;
225
  }
 
 
 
 
 
226
  .gr-button {
227
  width: 100%;
228
  border-radius: 10px;
@@ -312,6 +343,43 @@ with gr.Blocks(title="Fund Manager Buddy", css="""footer {visibility: hidden;} #
312
  summary_output = gr.Markdown(label="要約結果")
313
  summary_submit_btn = gr.Button("要約")
314
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
315
  logout_btn = gr.Button("ログアウト")
316
 
317
  gr.HTML('<p class="footer">© 2025 Fund Manager Buddy. All rights reserved.</p>')
@@ -415,13 +483,69 @@ with gr.Blocks(title="Fund Manager Buddy", css="""footer {visibility: hidden;} #
415
  bot_message = respond(ctype, msg, username)
416
  chat_history.append([msg, bot_message])
417
  return chat_history, "" # Clear the input after sending
418
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
419
  dialog_submit_btn.click(
420
  generate_response,
421
  inputs=[dialog_ctype, dialog_query, dialog_output, current_username],
422
  outputs=[dialog_output, dialog_query]
423
  )
424
 
 
 
 
 
 
 
425
  # Summarize Logic
426
  def generate_summary(input_text, username):
427
  if not username:
 
1
+ # pip install gradio cohere python-dotenv numpy psycopg2-binary google-genai
2
  import gradio as gr
3
  import re
4
  import hashlib
 
118
  contents=[prompt]
119
  )
120
  summary = gresponse.text
121
+
122
+ #response = co.embed(
123
+ #texts=[summary],
124
+ #model="embed-multilingual-v3.0",
125
+ #input_type="search_document",
126
+ #output_dimension=1024,
127
+ #embedding_types=["float"],
128
+ #)
129
+
130
+ #embedding_str = ",".join(map(str, response.embeddings.float_[0]))
131
+
132
+ #conn = psycopg2.connect(
133
+ #dbname="smair",
134
+ #user="smairuser",
135
+ #password="smairuser",
136
+ #host="www.ryhintl.com",
137
+ #port=10629
138
+ #)
139
+
140
+ #cur = conn.cursor()
141
+ #sql = "INSERT INTO dailog_logs (userid, content, embedding) VALUES (%s, %s, %s)"
142
+ #cur.execute(sql, (username, summary, f"[{embedding_str}]"))
143
+ #conn.commit()
144
+ #cur.close()
145
+ #conn.close()
146
  return summary
147
 
148
  def respond(ctype, msg, username):
 
249
  object-fit: cover;
250
  border: 3px solid #4a90e2;
251
  }
252
+
253
+ .avatar:hover {
254
+ transform: scale(1.2);
255
+ border: 3px solid #4a90e2;
256
+ }
257
  .gr-button {
258
  width: 100%;
259
  border-radius: 10px;
 
343
  summary_output = gr.Markdown(label="要約結果")
344
  summary_submit_btn = gr.Button("要約")
345
 
346
+ with gr.TabItem("ファンド投資家向け最新情報"):
347
+ report_input = gr.Textbox(label="投資家向けのアップデート情報を入力", lines=10, value='''
348
+ 自分のプロフィル
349
+ 山田 太郎
350
+ ファンドマネージャー
351
+ 〇〇アセットマネジメント株式会社
352
+ 連絡先: yamada@amgmt.com
353
+
354
+ • パフォーマンス: 2025年第2四半期、当ファンドは手数料控除後で 3.50% のリターンを達成し、ベンチマークである MSCIワールド指数 を 1.20% 上回りました。
355
+ • 市場環境: この四半期は、技術革新の加速とインフレ圧力の緩和によって特徴づけられ、特に成長株に追い風となりました。
356
+ • 見通し: 引き続き慎重ながらも楽観的な見方をしており、構造的成長テーマと安定したキャッシュフローを持つ優良企業に注力しています。 
357
+
358
+ ベンチマークおよび同業他社とのリターン比較表
359
+ 当ファンドは、情報技術セクターへの選好が奏功し、ベンチマークを上回るパフォーマンスを達成しました。同業他社と比較しても、相対的に堅調なリターンを確保しています。
360
+
361
+ パフォーマンス寄与度:
362
+ 好調なパフォーマンスは主にテクノロジーセクターへのオーバーウェイト(比重超過)が牽引しました。特に、クラウドコンピューティングおよび人工知能関連企業への投資が大きく寄与しました。
363
+ 一方で、公益事業セクターへのアンダーウェイト(比重不足)がわずかなマイナス要因となりましたが、全体的な影響は限定的でした。
364
+
365
+ 資産配分を示す円グラフ:
366
+ 現在のポートフォリオは、株式が中心であり、特に情報技術、ヘルスケア、消費循環セクターに重点を置いています。
367
+ 地域別では、北米市場への配分が最も高く、次いで欧州、アジアとなっています。
368
+ リターンへの貢献度が高かった上位5銘柄と低かった下位5銘柄のリスト:
369
+ (上位貢献銘柄の例:〇〇社、△△社、□□社など、具体的な企業名と貢献理由を記載)
370
+ (下位貢献銘柄の例:××社、☆☆社など、具体的な企業名と影響理由を記載)
371
+ 新たに組み入れた主要銘柄についての説明:
372
+ 今期は、再生可能エネルギー分野のリーディングカンパニーである「グリーンエネルギー・ソリューションズ」を新規に組み入れました。これは、長期的な脱炭素化トレンドと、同社の強固な技術力および市場シェアを評価したものです。
373
+ 現在の経済状況に関する簡単な分析:
374
+ 世界経済は緩やかな回復基調にあり、特にサービス業の活動が活発化しています。主要中央銀行はインフレ抑制と経済成長のバランスを取りながら金融政策を運営しており、金利の動向が引き続き注目されます。
375
+ 来四半期に向けたファンドのポジションニングについての説明:
376
+ 来四半期も引き続き、イノベーションを牽引する企業や、構造的な需要増加が見込まれるセクターに焦点を当てていきます。また、地政学的リスクやサプライチェーンの変動にも注意を払い、機動的なポートフォリオ調整を行う方針です。
377
+
378
+ 運用資産総額 (AUM): 125.5 億ドル
379
+ ファンド設定日: 2025年1月1日''')
380
+ report_output = gr.Textbox(label="レポート", show_copy_button=True)
381
+ report_submit_btn = gr.Button("生成")
382
+
383
  logout_btn = gr.Button("ログアウト")
384
 
385
  gr.HTML('<p class="footer">© 2025 Fund Manager Buddy. All rights reserved.</p>')
 
483
  bot_message = respond(ctype, msg, username)
484
  chat_history.append([msg, bot_message])
485
  return chat_history, "" # Clear the input after sending
486
+
487
+ def generate_report(report_input):
488
+ if not report_input:
489
+ return "アップデートがありません。"
490
+
491
+ prompt = f"""以下のデータを元に[フォーマット]を修正してください。\n{report_input}
492
+ [フォーマット]=
493
+ ファンド四半期投資家向け最新情報
494
+
495
+ 投資家の皆様へ
496
+ 件名: (ファンド名) 四半期投資家向け最新情報 - 期
497
+
498
+ 1. エグゼクティブサマリー
499
+
500
+ パフォーマンス:
501
+ 市場環境:
502
+ 見通し:
503
+
504
+ 2. ファンドパフォーマンスレビュー
505
+ (ベンチマークおよび同業他社とのリターン比較表)
506
+ (パフォーマンス寄与度: 例: 「好調なパフォーマンスは主にテクノロジーセクターへのオーバーウェイト(比重超過)が牽引しました。一方、エネルギーセクターへのアンダーウェイト(比重不足)がわずかなマイナス要因となりました。」)
507
+
508
+ 3. ポートフォリオレビュー
509
+ (資産配分を示す円グラフ)
510
+ (リターンへの貢献度が高かった上位5銘柄と低かった下位5銘柄のリスト)
511
+ (新たに組み入れた主要銘柄についての説明)
512
+
513
+ 4. 市場解説および見通し
514
+ (現在の経済状況に関する簡単な分析)
515
+ (来四半期に向けたファンドのポジションニングについての説明)
516
+
517
+ 5. ファンド詳細
518
+ 運用資産総額 (AUM): XX.X 億ドル
519
+ ファンド設定日: (日付)
520
+
521
+ 6. 重要な開示事項と免責事項
522
+ 本資料は情報提供のみを目的としており、投資勧誘を目的とするものではありません。
523
+ 当ファンドの過去の運用実績は、将来の運用成果を保証するものではありません。
524
+ 投資には元本割れのリスクがあります。投資判断はご自身の責任において行ってください。
525
+ 本資料に記載されている情報は、作成時点のものであり、将来予告なく変更される場合があります。
526
+
527
+ 敬具
528
+ (氏名 / ファンドマネージャー名) (役職) (ファンド運用会社名) (連絡先情報)
529
+ """
530
+ gresponse = client.models.generate_content(
531
+ model="gemini-2.5-flash",
532
+ contents=[prompt]
533
+ )
534
+ report_update = gresponse.text
535
+ return report_update
536
+
537
  dialog_submit_btn.click(
538
  generate_response,
539
  inputs=[dialog_ctype, dialog_query, dialog_output, current_username],
540
  outputs=[dialog_output, dialog_query]
541
  )
542
 
543
+ report_submit_btn.click(
544
+ generate_report,
545
+ inputs=[report_input],
546
+ outputs=[report_output]
547
+ )
548
+
549
  # Summarize Logic
550
  def generate_summary(input_text, username):
551
  if not username: