Skip to content

Conversation

@tegnike
Copy link
Owner

@tegnike tegnike commented May 7, 2025

<slack_thread_ts>1746648373.275889</slack_thread_ts>

Summary by CodeRabbit

  • 新機能

    • 各言語のREADMEに新しいスポンサー「teruPP」を追加しました。
    • トラブルシューティングガイドを日本語・英語・中国語で新規追加しました。
    • サイドバーに「トラブルシューティング」項目を追加しました。
  • 機能改善

    • AIモデル選択や設定画面でのモデルリストを動的生成に変更し、モデル管理を一元化しました。
    • OpenAI音声合成APIの感情表現対応モデル判定を改善しました。
    • プリセット質問選択やスライド再生停止時に音声再生を確実に停止するようにしました。
  • バグ修正

    • Live2Dモデル読み込み時の既知エラーに対する解説と解決策を追加しました。
  • ドキュメント

    • README各国語版に新スポンサーを追記しました。
    • トラブルシューティングガイドを追加しました。
  • リファクタリング

    • AIモデルや型定義の管理方法を改善し、可読性と拡張性を向上させました。

devin-ai-integration bot and others added 27 commits April 28, 2025 08:22
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
…-functionality

ドキュメントサイトに検索機能を追加
OPENAI_TTS_KEYにすべきところのtypoを修正
…models

各AIのモデル一覧を一つのファイルにまとめる
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
…tion-voice-stop

プリセット質問ボタンクリック時に音声を停止するように修正
Co-Authored-By: ニケちゃん / nikechan <o3nike.teg.14@gmail.com>
スライドを停止したときに音声再生を即座に停止させる
@vercel
Copy link

vercel bot commented May 7, 2025

The latest updates on your projects. Learn more about Vercel for Git ↗︎

Name Status Preview Comments Updated (UTC)
aituber-kit ✅ Ready (Inspect) Visit Preview 💬 Add feedback May 7, 2025 8:46pm

@coderabbitai
Copy link

coderabbitai bot commented May 7, 2025

"""

Walkthrough

READMEファイル(日本語・英語・中国語・韓国語・ポーランド語)に、GitHubユーザー「teruPP」へのリンクとアバター画像を協力者(スポンサー)一覧に追加しました。他の内容や構造には一切変更がありません。

Changes

ファイル群 変更内容の概要
README.md, docs/README_en.md, docs/README_ko.md, docs/README_pl.md, docs/README_zh.md 協力者(スポンサー)セクションにGitHubユーザー「teruPP」へのリンクとアバター画像(40x40)を追加。他の内容や構造の変更なし。

Possibly related PRs

  • ドキュメント更新 #382: 本PRと同じく、READMEファイル群に新しいスポンサー「teruPP」を追加しており、内容・コードレベルで直接関連しています。
  • ドキュメント更新 #248: 本PRは「teruPP」を追加するのに対し、このPRは別のスポンサー「MojaX2」をREADMEの協力者欄に追加しており、両者ともスポンサー欄の更新で関連しています。
  • ドキュメントサイトに検索機能を追加 #380: 本PRと同じく、ドキュメントサイトの設定ファイル website/document/.vitepress/config.mts に変更を加えており、ナビゲーションや検索設定の改修で関連しています。

Suggested labels

devin
"""


📜 Recent review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro (Legacy)

📥 Commits

Reviewing files that changed from the base of the PR and between 0a3cd54 and 45144c2.

📒 Files selected for processing (2)
  • src/components/settings/index.tsx (1 hunks)
  • src/features/constants/settings.ts (3 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/components/settings/index.tsx
🚧 Files skipped from review as they are similar to previous changes (1)
  • src/features/constants/settings.ts
⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Cloudflare Pages

🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Generate unit testing code for this file.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbitai in a new review comment at the desired location with your query. Examples:
    • @coderabbitai generate unit testing code for this file.
    • @coderabbitai modularize this function.
  • PR comments: Tag @coderabbitai in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbitai gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbitai read src/utils.ts and generate unit testing code.
    • @coderabbitai read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.
    • @coderabbitai help me debug CodeRabbit configuration file.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

Note: Be mindful of the bot's finite context window. It's strongly recommended to break down tasks such as reading entire modules into smaller chunks. For a focused discussion, use review comments to chat about specific files and their changes, instead of using the PR comments.

CodeRabbit Commands (Invoked using PR comments)

  • @coderabbitai pause to pause the reviews on a PR.
  • @coderabbitai resume to resume the paused reviews.
  • @coderabbitai review to trigger an incremental review. This is useful when automatic reviews are disabled for the repository.
  • @coderabbitai full review to do a full review from scratch and review all the files again.
  • @coderabbitai summary to regenerate the summary of the PR.
  • @coderabbitai generate sequence diagram to generate a sequence diagram of the changes in this PR.
  • @coderabbitai resolve resolve all the CodeRabbit review comments.
  • @coderabbitai configuration to show the current CodeRabbit configuration for the repository.
  • @coderabbitai help to get help.

Other keywords and placeholders

  • Add @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Documentation and Community

  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

@cloudflare-workers-and-pages
Copy link

cloudflare-workers-and-pages bot commented May 7, 2025

Deploying aituber-kit-docs with  Cloudflare Pages  Cloudflare Pages

Latest commit: 45144c2
Status: ✅  Deploy successful!
Preview URL: https://0013f2ea.aituber-kit-4s1.pages.dev
Branch Preview URL: https://develop.aituber-kit-4s1.pages.dev

View logs

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🔭 Outside diff range comments (1)
src/features/constants/aiModels.ts (1)

1-219: 💡 Verification agent

🧩 Analysis chain

AIモデル定義を中央化する新しいファイルの追加

このファイルは、コードベース全体で使用されるAIモデル定義を中央化するという優れたアーキテクチャ判断を示しています。いくつかの観点から確認します:

  1. 構造化と文書化: 各関数と定数に明確なJSDocコメントがあり、目的とパラメータが記述されています。
  2. 型安全性: すべてのデータ構造が適切に型付けされており、型エラーを防止します。
  3. 一貫性: 関数と定数の命名が一貫しており、理解しやすいインターフェイスを提供しています。
  4. 安全なアクセス: 各ゲッター関数は、データが見つからない場合に空の配列または文字列を返す安全なフォールバックを提供しています。

この変更により、AIモデルの追加や更新が容易になり、コードベース全体で一貫したモデル参照が保証されます。

ただし、将来の拡張性のために以下の点を考慮することをお勧めします:


🌐 Web query:

最新のOpenAI APIモデルのリスト

💡 Result:

OpenAIは、2025年5月7日現在、以下の最新AIモデルを提供しています。

GPT-4.1
2025年4月14日にリリースされた最新のAIモデルで、コーディング能力、長文コンテキストの理解、指示の遵守において大幅な改善が見られます。特に、GPT-4oと比較してコーディング性能が21%、GPT-4.5と比較して27%向上しています。また、最大100万トークンのコンテキストウィンドウをサポートし、大規模なデータセットの理解が可能です。 (reuters.com)

GPT-4.5
2025年2月27日に発表された大規模かつ高性能なモデルで、教師なし学習により幅広い知識と深い世界理解を備えています。ハルシネーション率が37%と、前モデルのGPT-4oの約60%から大幅に低減しています。ただし、非常に大きなモデルであるため、運用コストが高く、API経由でのアクセスには注意が必要です。 (ft.com)

o3
2024年12月20日に発表された推論能力に特化したモデルで、複雑な問題解決に優れています。特に、コーディング、数学、科学的推論の分野で顕著な性能向上が見られます。また、GPT-4oと比較して、CodeforcesのEloスコアが2727と高い評価を受けています。 (en.wikipedia.org)

o4-mini
2025年4月16日にリリースされた新しい推論モデルで、テキストと画像の両方を処理できます。特に、ホワイトボードのスケッチ分析などの視覚的なタスクに対応可能です。また、GPT-5への統合を前提として開発されており、今後のアップデートが期待されます。 (en.wikipedia.org)

text-embedding-3-small
新しい埋め込みモデルで、前世代のモデルよりも大幅に効率化されています。料金も低く設定されており、開発者にとってコストパフォーマンスが高い選択肢となっています。 (openai.com)

これらのモデルは、OpenAIのAPIを通じて利用可能であり、各モデルの特性や料金体系を考慮して、適切なモデルを選択することが重要です。

Citations:


OpenAI新モデルの追加検討

Web検索(2025年5月7日時点)により、以下の最新モデルが公開されていることが分かりました:

  • o3 (推論特化モデル)¹
  • o4-mini (テキスト+画像対応の軽量推論モデル)³
  • text-embedding-3-small (新埋め込みモデル)⁵

これらを踏まえ、将来の拡張性とAPI互換性を確保するため、以下の修正をお願いします:

• src/features/constants/aiModels.ts の openai 配列に

  • 'o3'
  • 'o4-mini'
    を追加検討
    • 同ファイルに埋め込みモデル用の定数(例:openAIEmbeddingModels)を新設し、
  • 'text-embedding-3-small'
    を管理
    • 必要に応じて getModels や専用のゲッター関数を追加し、一貫したアクセスインターフェイスを提供

¹ https://en.wikipedia.org/wiki/OpenAI_o3
³ https://en.wikipedia.org/wiki/OpenAI_o4-mini
https://openai.com/ja-JP/index/new-embedding-models-and-api-updates/

📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between baf46ff and 0a3cd54.

📒 Files selected for processing (23)
  • README.md (1 hunks)
  • docs/README_en.md (1 hunks)
  • docs/README_ko.md (1 hunks)
  • docs/README_pl.md (1 hunks)
  • docs/README_zh.md (1 hunks)
  • src/__tests__/features/chat/openAIAudioChat.test.ts (3 hunks)
  • src/components/form.tsx (1 hunks)
  • src/components/presetQuestionButtons.tsx (2 hunks)
  • src/components/settings/modelProvider.tsx (16 hunks)
  • src/components/settings/slideConvert.tsx (3 hunks)
  • src/components/settings/speechInput.tsx (2 hunks)
  • src/components/settings/voice.tsx (2 hunks)
  • src/components/slides.tsx (2 hunks)
  • src/components/useRealtimeAPI.tsx (2 hunks)
  • src/features/chat/handlers.ts (1 hunks)
  • src/features/chat/openAIAudioChat.ts (2 hunks)
  • src/features/constants/aiModels.ts (1 hunks)
  • src/features/constants/settings.ts (3 hunks)
  • src/pages/api/openAITTS.ts (3 hunks)
  • website/document/.vitepress/config.mts (4 hunks)
  • website/document/en/guide/troubleshooting.md (1 hunks)
  • website/document/guide/troubleshooting.md (1 hunks)
  • website/document/zh/guide/troubleshooting.md (1 hunks)
🧰 Additional context used
🧬 Code Graph Analysis (9)
src/features/chat/openAIAudioChat.ts (1)
src/features/constants/aiModels.ts (1)
  • defaultModels (98-118)
src/components/slides.tsx (1)
src/features/messages/speakQueue.ts (1)
  • SpeakQueue (14-224)
src/__tests__/features/chat/openAIAudioChat.test.ts (1)
src/features/constants/aiModels.ts (1)
  • defaultModels (98-118)
src/components/settings/speechInput.tsx (2)
src/features/constants/settings.ts (1)
  • WhisperTranscriptionModel (171-171)
src/features/constants/aiModels.ts (1)
  • getOpenAIWhisperModels (204-206)
src/components/settings/voice.tsx (1)
src/features/constants/aiModels.ts (1)
  • getOpenAITTSModels (216-218)
src/components/presetQuestionButtons.tsx (1)
src/features/messages/speakQueue.ts (1)
  • SpeakQueue (14-224)
src/components/settings/slideConvert.tsx (1)
src/features/constants/aiModels.ts (2)
  • getDefaultModel (136-138)
  • getSlideConvertModels (154-156)
src/features/constants/aiModels.ts (1)
src/features/constants/settings.ts (1)
  • AIService (55-55)
src/features/constants/settings.ts (1)
src/features/constants/aiModels.ts (2)
  • openAITTSModels (211-211)
  • openAIWhisperModels (195-199)
🪛 LanguageTool
website/document/zh/guide/troubleshooting.md

[uncategorized] ~26-~26: 数词与名词之间一般应存在量词,可能缺少量词。
Context: ...o = ++frame;`时发生TypeError。 - 此外,以Cubism 5格式(.moc3 v4)导出的模型与AITuberKit附带的库不兼容。 ### ...

(wa5)


[uncategorized] ~47-~47: 数词与名词之间一般应存在量词,可能缺少量词。
Context: ...for Web / Cubism 4.2或更早版本** | 不支持Cubism 5格式(.moc3 v4) | | model...

(wa5)

website/document/en/guide/troubleshooting.md

[style] ~26-~26: Consider using “incompatible” to avoid wordiness.
Context: ...orted in Cubism 5 format (.moc3 v4) are not compatible with the libraries included in AITuberK...

(NOT_ABLE_PREMIUM)

⏰ Context from checks skipped due to timeout of 90000ms (1)
  • GitHub Check: Cloudflare Pages
🔇 Additional comments (45)
docs/README_ko.md (1)

267-269: スポンサー「teruPP」エントリの追加を承認します。
他の言語版と同様に、協力者一覧に正しく反映されています。

docs/README_zh.md (1)

267-269: スポンサー「teruPP」エントリの追加を承認します。
既存の「M1RA_A_Project」直後に一貫して挿入されており、表示にも問題ありません。

docs/README_pl.md (1)

267-269: スポンサー「teruPP」エントリの追加を承認します。
他のローカライズ版と整合しており、表記も統一されています。

docs/README_en.md (1)

267-269: Added sponsor entry for “teruPP” approved.
Inserted immediately after existing contributors, matching other localized READMEs without structural changes.

README.md (1)

267-269: スポンサー「teruPP」エントリの追加を承認します。
メインREADMEにも一貫して反映されており、リンク先・画像のパスも問題ありません。

website/document/.vitepress/config.mts (4)

70-198: 検索機能の実装が優れています!

検索設定の実装が非常に丁寧で、三言語(日本語、英語、中国語)にわたる詳細なUIテキストの翻訳が含まれています。ユーザーエクスペリエンスの向上に大きく貢献する素晴らしい実装です。


289-292: 日本語サイドバーへのトラブルシューティング追加が適切です

トラブルシューティングページへのリンクが適切に追加されています。ユーザーがLive2Dモデルの問題を解決するための重要な導線となります。


388-391: 英語サイドバーへのトラブルシューティング追加が適切です

英語版サイドバーにもトラブルシューティングへのリンクが正しく追加されています。多言語対応がしっかりと実装されています。


481-484: 中国語サイドバーへのトラブルシューティング追加が適切です

中国語版サイドバーにも「故障排除」リンクが正しく追加されています。国際ユーザーへの配慮が行き届いた実装です。

website/document/en/guide/troubleshooting.md (1)

1-51: 英語版トラブルシューティングガイドの内容が充実しています

Live2Dモデルの読み込み時に発生する可能性のあるエラーについて、原因と解決策が明確に説明されています。また、表形式での設定要点まとめは非常に分かりやすいです。技術的な問題の説明と解決方法の両方がバランス良く記載されています。

英語の表現も適切で、開発者とユーザーの両方にとって有益な情報源となるでしょう。

🧰 Tools
🪛 LanguageTool

[style] ~26-~26: Consider using “incompatible” to avoid wordiness.
Context: ...orted in Cubism 5 format (.moc3 v4) are not compatible with the libraries included in AITuberK...

(NOT_ABLE_PREMIUM)

website/document/zh/guide/troubleshooting.md (1)

1-51: 中国語版トラブルシューティングガイドも同様に充実しています

中国語版のトラブルシューティングガイドも、日本語版および英語版と同様に内容が充実しています。Live2Dモデルのエラーに関する説明と解決策が明確に翻訳されています。中国語のユーザーにとって非常に役立つリソースとなるでしょう。

専門用語の翻訳も適切に行われており、技術的なニュアンスが正確に伝わる内容となっています。

🧰 Tools
🪛 LanguageTool

[uncategorized] ~26-~26: 数词与名词之间一般应存在量词,可能缺少量词。
Context: ...o = ++frame;`时发生TypeError。 - 此外,以Cubism 5格式(.moc3 v4)导出的模型与AITuberKit附带的库不兼容。 ### ...

(wa5)


[uncategorized] ~47-~47: 数词与名词之间一般应存在量词,可能缺少量词。
Context: ...for Web / Cubism 4.2或更早版本** | 不支持Cubism 5格式(.moc3 v4) | | model...

(wa5)

website/document/guide/troubleshooting.md (1)

1-51: 日本語版トラブルシューティングガイドの実装が素晴らしいです

Live2Dモデル読み込み時のエラーについて、原因と解決策が非常に分かりやすく説明されています。特に「影響するLive2D側の設定早見表」は、ユーザーがすぐに問題を解決できるよう配慮された優れた実装です。

技術的な解説と実践的な対応策のバランスが良く、初心者から上級者まで幅広いユーザーに対応できる内容になっています。マスク生成に関するヒントも実用的で親切な補足となっています。

src/features/chat/handlers.ts (1)

639-640:

Details

✅ Verification successful

クエリパラメータの名前変更が適切に実装されています

slideDocs から slideName へのパラメータ名変更は、コードベース全体での一貫性を高めるための良い変更です。APIエンドポイントの実装側でも同様の変更がされていることを確認してください。

APIエンドポイントが slideName パラメータを正しく処理できることを確認するために、以下のスクリプトを実行してください:


🏁 Script executed:

#!/bin/bash
# APIエンドポイントが新しいパラメータ名を受け付けるか確認

# APIルートファイルを検索
rg -A 10 "getSupplement" --glob "pages/api/*.{js,ts,tsx}"

Length of output: 206


以下のスクリプトでリポジトリ全体を対象に再検索し、getSupplement エンドポイントと slideName パラメータの実装箇所を確認してください。


🏁 Script executed:

#!/bin/bash
# getSupplement エンドポイントを全体検索
echo "🔍 getSupplement の定義を検索"
rg -A5 'getSupplement' --glob '*.{js,ts,tsx}'

# API 実装内で slideName パラメータを検索
echo "🔍 API 実装内の slideName の参照を検索"
rg -n 'slideName' --glob '*.{js,ts,tsx}'

Length of output: 4718


APIエンドポイントの slideName パラメータ対応を確認しました

以下を確認し、問題ないことを検証しました。

  • pages/api/getSupplement.tsreq.query.slideName を文字列チェック・サニタイズした上で利用
  • 他の関連ファイル(src/pages/slide-editor/[slideName].tsxsrc/features/chat/handlers.tssrc/components/slides.tsx など)でも slideDocsslideName への変更が一貫して適用

これによりクエリパラメータ名の変更はコードベース全体で正しく反映されており、マージ準備完了です。

src/features/chat/openAIAudioChat.ts (2)

13-13: AIモデル定数の一元管理のためのインポートを追加

AIモデル名を一元管理するための適切なインポートです。これにより、モデル名の管理が容易になります。


26-26: ハードコードされたモデル名を一元管理された定数に置き換え

ハードコードされたモデル名を defaultModels.openaiAudio に置き換えることで、モデル名の一元管理が可能になり、将来的なモデル変更が容易になります。良いリファクタリングです。

src/__tests__/features/chat/openAIAudioChat.test.ts (3)

12-12: テストファイルへのAIモデル定数のインポート追加

テストでも本番コードと同じモデル定数を使用するための適切なインポートです。


56-56: モックデータでハードコードされた値を定数参照に変更

テスト用のモックデータを実装と一致させるための良い変更です。これにより、実装の変更に伴うテストの不整合を防ぐことができます。


193-193: テスト期待値をハードコードから定数参照に修正

テストの期待値を実装の変更に合わせて修正しており、適切な対応です。これによりテストの堅牢性が向上します。

src/components/slides.tsx (2)

5-5: 音声キュー制御のためのインポート追加

SpeakQueueクラスのインポート追加は、スライド再生停止時に音声合成を適切に停止するために必要な変更です。


153-156: スライド再生停止時の音声合成停止機能を追加

スライド再生が停止された時に音声合成も停止するようにする重要なUX改善です。これにより、ユーザーがスライド再生を停止しても音声が続くという混乱した体験を防ぐことができます。

homeStore.setState({ isSpeaking: false })SpeakQueue.stopAll()の呼び出しで、音声合成のリソースが適切にクリーンアップされます。

src/components/useRealtimeAPI.tsx (2)

9-9: モジュールインポートの追加は適切です

AIモデル定数の集中管理のためのdefaultModelsのインポートが追加されました。これは好ましい変更です。


245-246: ハードコードされたモデル文字列の代わりに集中管理された定数を使用

ハードコードされたモデル文字列をdefaultModels.openaiRealtimeに置き換えることで、モデル管理が一元化され、将来的なモデル変更が容易になります。これはコードの保守性を向上させる優れた方法です。

src/components/settings/speechInput.tsx (2)

8-8: AIモデルユーティリティ関数のインポート追加

getOpenAIWhisperModels関数のインポートにより、Whisperモデルのリストが集中管理されるようになります。これは良い変更です。


48-52: 静的なモデルリストを動的に生成するように改善

ハードコードされたWhisperモデルのリストが、集中管理された関数getOpenAIWhisperModels()を使用して動的に生成されるように変更されました。これにより、アプリケーション全体でモデルリストの一貫性が保たれ、将来的なモデル追加や変更が容易になります。

src/components/presetQuestionButtons.tsx (2)

3-4: 必要なモジュールのインポート追加

音声制御のために必要なhomeStoreSpeakQueueのインポートが追加されました。これらは音声再生状態を適切に管理するために必要です。


19-21: プリセット質問選択時の音声停止処理の追加

プリセット質問ボタンがクリックされたときに、進行中の音声合成を停止する処理が追加されました。これにより、新しい質問が選択されたときにユーザーエクスペリエンスが向上します。homeStoreの発話状態を更新し、SpeakQueueを停止することで、クリーンな状態で新しい対話を開始できます。

src/components/form.tsx (1)

48-52: スライドテキスト表示の条件論理の改善

SlideTextコンポーネントの表示条件が、slidePlayingchatProcessingCount !== 0の両方が真である場合のみに限定されるように変更されました。これにより、スライドが実際に再生中で、かつチャット処理が行われている場合にのみスライドテキストが表示されるようになり、UIの一貫性が向上します。

src/components/settings/voice.tsx (2)

16-16: モジュール化されたAIモデル定数のインポートが追加されました

AIモデルの一覧を集中管理する aiModels.ts からOpenAI TTSモデルを取得する関数をインポートしています。これにより、モデルリストの一元管理が可能になり、将来的なモデル追加・削除が簡単になります。


830-834: ハードコードされたモデルリストが動的生成に置き換えられました

以前はモデル名が直接コード内に記述されていましたが、getOpenAITTSModels()関数からモデルリストを取得し、動的に生成するように改善されました。

メリット:

  • 一箇所でのモデル管理が可能
  • 将来的なモデル追加時にこのコンポーネントを修正する必要がなくなる
  • モデル名の一貫性が保証される
src/pages/api/openAITTS.ts (3)

4-5: 感情表現を豊かにするモデルリストの導入

感情表現の指示を必要とするモデルをリスト形式で定義することで、将来的にモデルが追加された場合も柔軟に対応できるようになりました。


17-17: APIキー取得の優先順位が更新されました

OpenAI TTSに特化した環境変数 OPENAI_TTS_KEY を最初に確認するように変更されました。これにより、TTSと他のOpenAI機能で異なるAPIキーを使用できるようになり、より柔軟な運用が可能になります。


38-38: モデル判定がリスト対応に改善されました

ハードコードされた文字列含有チェックから、定義されたモデルリストを使用した柔軟な判定方法に変更されました。これにより、複数の対象モデルに対して一貫した判定ができるようになり、コードの保守性が向上しています。

src/components/settings/slideConvert.tsx (3)

7-10: モデル管理用のユーティリティ関数のインポートが追加されました

スライド変換用のデフォルトモデルとモデルリストを取得するための関数がインポートされました。これにより、AIモデルの一元管理が実現され、コードの整理と保守性の向上につながります。


27-28: デフォルトモデルの取得方法が改善されました

以前はサービスごとに条件分岐でデフォルトモデルを設定していましたが、集中管理されたユーティリティ関数 getDefaultModel を使用するように変更されました。これにより、デフォルトモデルの管理が一元化され、コードの可読性と保守性が向上しています。


129-134: モデル選択オプションの生成が動的に改善されました

ハードコードされたモデルのリストが、getSlideConvertModels 関数による動的なリスト生成に置き換えられました。これにより:

  1. 新しいモデルの追加がより簡単になりました
  2. 異なるAIサービスごとにサポートされるモデルを正確に表示できます
  3. モデルの一貫性が保証されます

この改善により、将来的なモデルの追加や変更に柔軟に対応できるようになりました。

src/components/settings/modelProvider.tsx (6)

21-26: 集中管理されたモデル定数とユーティリティ関数のインポートが追加されました

AIモデル関連の定数と取得用関数がインポートされ、コンポーネント内でのモデル管理が改善されました。これにより:

  1. モデルリストの一元管理が可能になりました
  2. サービスごとのデフォルトモデルを簡単に取得できます
  3. 各機能(リアルタイム、音声など)に適したモデルを動的に取得できます

29-29: AIService型のインポートが追加されました

型定義が共通のモジュールから一貫してインポートされるようになったため、型の一貫性と正確性が向上しました。


128-158: AIサービス変更ハンドラが改善されました

handleAIServiceChange 関数が以下のように改善されました:

  1. defaultModels マッピングを使用してデフォルトモデルを設定
  2. サービスに基づいて適切な機能の有効/無効を制御
  3. 特定のサービスでのみ利用可能な機能(リアルタイムAPI、音声モードなど)の制限を明確化

この改善により、異なるAIサービス間での移行がよりスムーズになり、互換性のない機能が自動的に無効化されるようになりました。


168-168: デフォルトモデル参照が集中管理に更新されました

ハードコードされたデフォルトモデル文字列が、集中管理された defaultModels オブジェクトからの参照に置き換えられました。これにより、デフォルトモデルの変更が一箇所で行えるようになり、一貫性が保証されます。

Also applies to: 185-185, 189-189


359-363: OpenAIモデルオプションの生成が動的に改善されました

リアルタイムAPI、音声モード、および通常のチャットモードでのOpenAIモデルオプションがそれぞれ getOpenAIRealtimeModels(), getOpenAIAudioModels(), getModels('openai') を使って動的に生成されるようになりました。

これにより、各機能に適したモデルのみが表示され、ユーザーが互換性のないモデルを選択するリスクが低減されました。

Also applies to: 426-430, 448-452


491-495: 各AIサービスのモデルリスト生成が統一されました

Anthropic、Google、Groq、Cohere、MistralAI、Perplexity、Fireworks、DeepSeekなど、すべてのAIサービスでモデルオプションの生成が getModels(サービス名) 関数を使用した統一された方法に変更されました。

この改善により:

  1. コードの重複が削減されました
  2. 新しいモデルの追加が一箇所で行えるようになりました
  3. すべてのサービスで一貫した実装が確保されました

Also applies to: 542-546, 728-732, 773-777, 818-822, 863-867, 908-912, 1032-1036

src/features/constants/settings.ts (4)

1-1: aiModels.tsからの新しいインポートが追加されています。

この変更は、モデル定義を中央化するリファクタリングの一部で、ハードコードされたモデルリストの代わりに、集中管理された配列からモデルタイプを導出するように変更しています。これにより一貫性と保守性が向上します。


140-140: モデルタイプの定義方法が改善されました。

OpenAITTSModelの型定義がハードコードされた文字列リテラルの共用型から、openAITTSModels配列の要素から派生する型に変更されました。これにより型定義とモデル配列が自動的に同期され、メンテナンス性が向上します。


171-171: モデルタイプの定義方法が改善されました。

WhisperTranscriptionModelの型定義がハードコードされた文字列リテラルの共用型から、openAIWhisperModels配列の要素から派生する型に変更されました。これにより型定義とモデル配列が自動的に同期され、メンテナンス性が向上します。


166-166:

Details

❓ Verification inconclusive

AudioModeModelの型が一般化されました。

この型が特定の文字列リテラルの共用型から単なるstring型に変更されました。この変更により柔軟性は向上しますが、型安全性が低下する可能性があります。モデル名の検証が他の場所で行われることを確認してください。


🏁 Script executed:

#!/bin/bash
# AudioModeModelの使用箇所をチェックして、ミスが発生しないことを確認
rg -t ts -t tsx "AudioModeModel" --context 5

Length of output: 72


tsxファイルが未定義のため検索に失敗しています。tsxをタイプ定義に追加して再度検索を実行してください。


🏁 Script executed:

#!/bin/bash
# tsxをタイプ定義に追加してAudioModeModelの使用箇所を検索
rg --type-add 'tsx:*.tsx' -t ts,tsx "AudioModeModel" -n

Length of output: 86


.ts.tsx をグロブ指定して再検索してください。


🏁 Script executed:

#!/bin/bash
# `.ts` と `.tsx` ファイル内の AudioModeModel 使用箇所を検索
rg "AudioModeModel" --glob '*.ts' --glob '*.tsx' -n

Length of output: 363


型安全性の検証を要確認: AudioModeModel を文字列リテラル共用型から単なる string 型に一般化したことで、柔軟性は向上しますが型安全性が低下します。以下の利用箇所を踏まえ、モデル名が有効な文字列かどうかを確実に検証しているか確認してください。

• src/features/constants/settings.ts:
– 166行目で export type AudioModeModel = string に変更
• src/features/chat/openAIAudioChat.ts:
– 12行目でインポート
– 26行目で (ss.selectAIModel as AudioModeModel) || defaultModels.openaiAudio としてキャスト利用

ss.selectAIModel(あるいはその元となる設定値)が、許容するモデル名のリテラル集合から外れた文字列を取らないよう、定義箇所でバリデーション/制約がかかっていることをご確認ください。

@tegnike
Copy link
Owner Author

tegnike commented May 7, 2025

@coderabbitai review

@coderabbitai
Copy link

coderabbitai bot commented May 7, 2025

✅ Actions performed

Review triggered.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@tegnike tegnike merged commit bb74ee4 into main May 7, 2025
7 checks passed
terisuke pushed a commit to terisuke/aituber-kit that referenced this pull request Dec 5, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants