Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

本番リリース #289

Merged
merged 9 commits into from
Jan 14, 2025
Merged

本番リリース #289

merged 9 commits into from
Jan 14, 2025

Conversation

tegnike
Copy link
Owner

@tegnike tegnike commented Jan 14, 2025

Summary by CodeRabbit

新機能

  • DeepSeekサービスのサポートを追加
  • 新しいAIモデルプロバイダーを導入
  • 複数の言語(英語、日本語、韓国語、中国語)で翻訳を更新
  • チャットログのユーザーインターフェースを改善

依存関係の更新

  • aiパッケージをバージョン3.4.33に更新
  • @ai-sdk/deepseekパッケージ(バージョン0.0.4)を追加

設定の変更

  • 環境設定ファイルにDeepSeek APIキーの設定を追加
  • 設定画面にDeepSeekサービスのオプションを導入

Copy link

vercel bot commented Jan 14, 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 Jan 14, 2025 10:06am

Copy link

coderabbitai bot commented Jan 14, 2025

"""

Walkthrough

このプルリクエストは、DeepSeekという新しいAIサービスの統合に焦点を当てています。環境設定ファイル、ローカライゼーションファイル、設定コンポーネント、チャットハンドラーなど、複数のファイルにわたって変更が加えられています。新しいAIサービスのサポートを追加することで、アプリケーションの機能を拡張し、ユーザーに新たな選択肢を提供しています。

Changes

ファイル 変更の概要
.env.example DeepSeek用の新しい環境変数 DEEPSEEK_KEYDEEPSEEK_URL を追加
package.json @ai-sdk/deepseek の依存関係を追加、ai パッケージのバージョンを更新
src/components/settings/modelProvider.tsx DeepSeekサービスのUIと設定オプションを追加
locales/**/translation.json 各言語のDeepSeek APIキーラベルを追加
src/features/constants/settings.ts DeepSeekサービスの型定義を更新
src/features/stores/settings.ts DeepSeek APIキーの設定を追加
src/pages/api/aiChat.ts DeepSeekサービスのサポートを追加

Sequence Diagram

sequenceDiagram
    participant User
    participant ModelProvider
    participant SettingsStore
    participant AIChat
    participant DeepSeek

    User->>ModelProvider: Select DeepSeek service
    ModelProvider->>SettingsStore: Update AI service and model
    User->>ModelProvider: Enter DeepSeek API Key
    ModelProvider->>SettingsStore: Save DeepSeek API Key
    User->>AIChat: Send message
    AIChat->>DeepSeek: Request chat completion
    DeepSeek-->>AIChat: Return AI response
    AIChat->>User: Display AI response
Loading

Possibly related PRs

Finishing Touches

  • 📝 Generate Docstrings (Beta)

🪧 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.

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 docstrings to generate docstrings for this PR. (Beta)
  • @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.

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: 2

🧹 Nitpick comments (2)
src/pages/api/tts-nijivoice.ts (1)

40-47: base64エンコードされた音声データの処理について

base64エンコードされたデータを使用する新しい実装は、以下の点で改善の余地があります:

  • メモリ使用量が増加する可能性があります
  • 大きな音声ファイルの場合、パフォーマンスに影響を与える可能性があります

ストリーミング処理の実装を検討することで、メモリ効率を改善できる可能性があります。実装例を提供しましょうか?

.env.example (1)

31-33: 環境変数の追加が適切です

DeepSeekサービスの設定が他のAIサービスと同様の形式で追加されており、一貫性が保たれています。

環境変数の説明を追加することを推奨します

他のサービスと同様に、DEEPSEEK_KEYとDEEPSEEK_URLの説明をコメントとして追加することで、設定時の理解が深まります。

 # DeepSeek
+# APIキーはDeepSeekのダッシュボードから取得してください
 DEEPSEEK_KEY=""
+# DeepSeek APIのエンドポイントURL
 DEEPSEEK_URL=""
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between ffc1199 and 6cb3960.

⛔ Files ignored due to path filters (1)
  • package-lock.json is excluded by !**/package-lock.json
📒 Files selected for processing (15)
  • .env.example (1 hunks)
  • cursor.txt (1 hunks)
  • locales/en/translation.json (1 hunks)
  • locales/ja/translation.json (1 hunks)
  • locales/ko/translation.json (1 hunks)
  • locales/zh/translation.json (1 hunks)
  • package.json (2 hunks)
  • src/components/settings/log.tsx (1 hunks)
  • src/components/settings/modelProvider.tsx (8 hunks)
  • src/features/chat/aiChatFactory.ts (1 hunks)
  • src/features/chat/handlers.ts (1 hunks)
  • src/features/constants/settings.ts (2 hunks)
  • src/features/stores/settings.ts (4 hunks)
  • src/pages/api/aiChat.ts (3 hunks)
  • src/pages/api/tts-nijivoice.ts (3 hunks)
🔇 Additional comments (27)
src/features/chat/aiChatFactory.ts (1)

28-29: 実装はシンプルで適切です!

既存の Vercel AI 実装を再利用することで、コードの重複を避け、保守性を高めています。

src/pages/api/tts-nijivoice.ts (2)

5-5: 型の変更が適切に行われています

ArrayBuffer から Buffer への変更は Node.js 環境での処理に適しています。


23-27: APIエンドポイントとフォーマットの変更について確認が必要です

以下の変更点について、影響範囲の確認をお願いします:

  1. エンドポイントが generate-encoded-voice に変更
  2. 音声フォーマットが MP3 に変更

クライアント側で MP3 形式の再生に問題がないか確認してください。

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

13-13: 型定義の追加が適切に行われています!

DeepSeek サービスの追加が既存のパターンに従って実装されており、型の安全性が保たれています。

Also applies to: 31-31

src/pages/api/aiChat.ts (3)

8-8: インポート文の配置が適切です

新しい DeepSeek サービスのインポートが他の AI サービスのインポートと同じグループに配置されており、一貫性が保たれています。


22-22: 型定義の更新が適切です

AIServiceKey 型に 'deepseek' が追加され、新しいサービスがタイプセーフに統合されています。


121-121: DeepSeek サービスの設定が適切です

aiServiceConfig オブジェクトに DeepSeek サービスが他のサービスと同じパターンで追加されています。

src/features/stores/settings.ts (3)

26-32: Google 検索グラウンディングモデルの定義が適切です

定数と型定義が明確に定義されており、型安全性が確保されています。


49-49: APIKeys インターフェースの更新が適切です

DeepSeek の API キーが他のサービスのキーと同じパターンで追加されています。


177-177: ストア初期化の更新が適切です

DeepSeek キーが空文字列で初期化されており、他のサービスと一貫性があります。

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

180-199: コードブロック処理の改善が適切です

コードブロックの処理ロジックが以下の点で改善されています:

  • 終了マーカーの検出が明確
  • テキストの蓄積が適切
  • 状態管理が改善

201-212: コードブロック開始処理の改善が適切です

コードブロック開始時の処理が以下の点で改善されています:

  • 前のテキストの適切な処理
  • 状態遷移の明確な管理
  • 空白処理の適切な実装
src/components/settings/modelProvider.tsx (7)

9-12: インポートの整理が適切です

googleSearchGroundingModels のインポートが適切に追加され、関連する型と一緒にグループ化されています。


45-45: DeepSeek の状態管理が適切です

deepseekKey の状態管理が他のサービスと同じパターンで実装されています。


70-70: デフォルトモデルの設定が適切です

DeepSeek のデフォルトモデルが他のサービスと同じパターンで追加されています。


96-100: Google 検索グラウンディングの処理が適切です

モデル変更時の検索グラウンディング設定の更新が適切に実装されています。


470-480: モデル選択時の処理が適切です

検索グラウンディング互換性チェックが適切に実装されています。


513-517: 検索グラウンディングボタンの制御が適切です

非互換モデルの場合にボタンが適切に無効化されます。


997-1021: DeepSeek UI の実装が適切です

DeepSeek の設定 UI が他のサービスと同じパターンで実装されており、一貫性が保たれています。

ただし、以下の確認が推奨されます:

  • 翻訳キーが適切に設定されているか
  • API キーのバリデーションが必要かどうか
✅ Verification successful

DeepSeek の実装が完全に検証されました

翻訳キーの確認結果:

  • DeepSeekAPIKeyLabelAPIKeyInstruction の両方が全ての言語(日本語、英語、中国語、韓国語)で適切に設定されています
  • API キーのバリデーションは他のプロバイダーと同様に実装されていないことが確認され、一貫性が保たれています
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if translation keys exist for DeepSeek
rg "DeepSeekAPIKeyLabel" locales/

Length of output: 320


Script:

#!/bin/bash
# Check for APIKeyInstruction translation key
echo "=== Checking APIKeyInstruction translations ==="
rg "APIKeyInstruction" locales/

# Check for API key validation patterns
echo -e "\n=== Checking API key validation patterns ==="
rg "validateApiKey|apiKeyValidation|isValidApiKey" --type ts

Length of output: 725

cursor.txt (1)

1-12: 実装計画が適切に構成されています!

新しいLLMサービスの追加に必要なファイル構成が明確に定義されており、実装の方向性が適切です。

package.json (2)

39-39: aiパッケージの更新が適切に行われています

aiパッケージのバージョンアップ(3.3.20 → 3.4.33)は適切に行われています。


21-21: 依存パッケージのバージョンを確認してください

@ai-sdk/deepseekのバージョンが0.0.4と初期段階のため、安定性に懸念があります。本番環境での使用前に十分なテストを行うことを推奨します。

以下のスクリプトを実行して、パッケージの最新バージョンと既知の問題を確認してください:

locales/zh/translation.json (1)

226-227: 中国語のローカライゼーションが適切に追加されています

DeepSeek API キーのラベルが他のAPIキーラベルと同様の形式で追加されており、翻訳も適切です。

locales/ja/translation.json (1)

35-35: 日本語のローカライゼーションが適切に追加されています

DeepSeek API キーのラベルが他のAPIキーラベルと同様の形式で追加されており、翻訳も適切です。

locales/ko/translation.json (1)

35-35: DeepSeek API キーラベルの追加が適切です

韓国語のローカライゼーションが正しく実装されており、他のAPIキーラベルと一貫性のある形式で追加されています。

locales/en/translation.json (2)

35-35: DeepSeek API キーラベルの追加が適切です

英語のローカライゼーションが正しく実装されており、他のAPIキーラベルと一貫性のある形式で追加されています。


35-35: 全ての言語ファイルでDeepSeek API キーラベルの一貫性を確認してください

各言語のローカライゼーションファイルで、DeepSeek API キーラベルが適切に追加されているか確認が必要です。

以下のスクリプトで確認できます:

✅ Verification successful

DeepSeek API キーラベルの翻訳が全ての言語ファイルで確認できました

全ての言語ファイル(英語、日本語、韓国語、中国語)で適切に実装されていることを確認しました。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# 全言語ファイルでDeepSeek API キーラベルの実装を確認

echo "Checking DeepSeek API key label in all language files..."
rg -U --json '"DeepSeekAPIKeyLabel":\s*"[^"]*"' locales/

Length of output: 2932

@@ -53,7 +53,7 @@ const Log = () => {
className="my-8 grid grid-flow-col grid-cols-[min-content_1fr] gap-x-fixed"
>
<div className="w-[64px] py-8">
{value.role === 'assistant' ? 'Character' : 'You'}
{value.role === 'user' ? 'You' : 'Character'}
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

文字列のローカライゼーションが必要です

ハードコードされた英語の文字列 'You''Character' を i18n を使用して多言語対応すべきです。

以下のような実装を推奨します:

-{value.role === 'user' ? 'You' : 'Character'}
+{value.role === 'user' ? t('You') : t('Character')}

関連する翻訳キーを各言語のtranslationファイルに追加することもお忘れなく。

Committable suggestion skipped: line range outside the PR's diff.

@@ -388,6 +398,7 @@ const settingsStore = create<SettingsState>()(
audioModeVoice: state.audioModeVoice,
messageReceiverEnabled: state.messageReceiverEnabled,
clientId: state.clientId,
useSearchGrounding: state.useSearchGrounding,
Copy link

Choose a reason for hiding this comment

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

💡 Codebase verification

deepseekKey の永続化が必要です

他のAPIキー(openaiKey、anthropicKeyなど)はすべて永続化されているのに対し、deepseekKeypartialize に含まれていません。一貫性を保つため、deepseekKey も永続化する必要があります。

🔗 Analysis chain

永続化設定の更新が必要かもしれません

useSearchGroundingpartialize に追加されていますが、deepseekKey も追加する必要があるかもしれません。

🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Description: Check if deepseekKey is used in persistence
rg "deepseekKey.*localStorage" 

Length of output: 32


Script:

#!/bin/bash
# Find all occurrences of deepseekKey
rg "deepseekKey" -A 3

# Look for persistence patterns in settings.ts
rg "partialize|persist" src/features/stores/settings.ts -A 3

Length of output: 1893


Script:

#!/bin/bash
# Get more context around partialize to see full list of persisted keys
rg "partialize: \(state\)" src/features/stores/settings.ts -A 15

Length of output: 702

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: 0

🧹 Nitpick comments (1)
src/features/stores/settings.ts (1)

Line range hint 26-429: 環境変数のバリデーションを追加することを推奨します

googleSearchGroundingModels に関連する環境変数の型チェックが実装されていません。以下のような型安全な実装を推奨します。

+ const validateSearchGroundingModel = (model: string): googleSearchGroundingModelKey => {
+   if (googleSearchGroundingModels.includes(model as any)) {
+     return model as googleSearchGroundingModelKey
+   }
+   return 'gemini-1.5-pro-latest' // デフォルト値
+ }

  // settingsStore の初期化時に使用
  const envSearchGroundingModel = validateSearchGroundingModel(
    process.env.NEXT_PUBLIC_SEARCH_GROUNDING_MODEL || ''
  )
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 6cb3960 and 757cc5b.

📒 Files selected for processing (2)
  • src/components/settings/index.tsx (1 hunks)
  • src/features/stores/settings.ts (5 hunks)
✅ Files skipped from review due to trivial changes (1)
  • src/components/settings/index.tsx
🔇 Additional comments (4)
src/features/stores/settings.ts (4)

26-32: 新しい定数の型安全性が確保されています

googleSearchGroundingModels の定数配列と型定義の実装は適切です。as const アサーションを使用して型の安全性を確保しており、良い実装です。


49-49: APIKeys インターフェースの更新が適切です

deepseekKey の追加は他のAPIキーと一貫性のある実装になっています。


177-177: DeepSeek APIキーの初期化が適切です

deepseekKey の初期値を空文字列に設定する実装は、他のAPIキーと同様の適切なパターンに従っています。


351-351: 永続化の実装が完了しました

以前の指摘事項であった deepseekKey の永続化が実装され、useSearchGrounding と共に適切に partialize に追加されています。

Also applies to: 402-402

@tegnike tegnike merged commit 5964df9 into main Jan 14, 2025
4 checks passed
@coderabbitai coderabbitai bot mentioned this pull request Jan 23, 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.

1 participant