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

Azure OpenAI Serviceを利用できない不具合を修正 #275

Merged
merged 7 commits into from
Dec 27, 2024

Conversation

PikkamanV
Copy link
Contributor

@PikkamanV PikkamanV commented Dec 20, 2024

突然のp-r失礼します。
以下の変更を加えた後に関係しそうな機能の動作確認は行いましたが、リポジトリ全体を追えてはおりませんので、もしより適切な修正方法があればご教示いただけますと幸いです。

発生した事象

AI設定でAzure OpenAI Serviceを指定し、APIキーとEndpointを入力しても Invalid AI service エラーが生じるため返答を生成できませんでした。

変更内容

const aiService = ss.selectAIService as multiModalAIServiceKey
if (!multiModalAIServices.includes(aiService)) {
throw new Error('Invalid AI service')
}

にて multiModalAIServicesazure が含まれていないことが原因と考えられますので、Azure OpenAI Serviceがマルチモーダル対応していることを踏まえて azure を追加しました。

動作確認

実行環境: Node.js v20.11.0
AI設定; Azure OpenAI Service gpt-4o
音声設定: にじボイス

テキスト入力、画像入力(画面共有、カメラ、ファイル添付)それぞれに対して返答があり、音声が再生され、表情が反映されたことを確認しました。

Summary by CodeRabbit

  • 新機能

    • groq AIサービスのデフォルトモデルを'gemma-7b-it'から'gemma2-9b-it'に更新。
    • groqサービスに新しいモデルオプション'llama-3.3-70b-versatile'を追加。
    • マルチモーダルAIサービスに'azure'を追加。
  • バグ修正

    • AIサービス選択時のバリデーションチェックを削除し、任意のサービスを選択可能に。
    • APIリクエスト失敗時のエラーハンドリングを強化し、エラーコードを含むユーザーフレンドリーなメッセージを表示。

Copy link

vercel bot commented Dec 20, 2024

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 Dec 21, 2024 11:47pm

Copy link

coderabbitai bot commented Dec 20, 2024

Walkthrough

このプルリクエストは、ModelProviderコンポーネント、vercelAIChat.tsファイル、およびsettings.tsファイルに対する変更を含んでいます。ModelProviderでは、Groqサービスのデフォルトモデルが'gemma-7b-it'から'gemma2-9b-it'に更新され、新しいモデルオプション'llama-3.3-70b-versatile'が追加されました。vercelAIChat.tsでは、AIサービスの選択バリデーションが削除され、エラーハンドリングのロジックが改善されています。また、settings.tsでは、multiModalAIServices'azure'が追加され、関連するキーとインターフェースが更新されました。

Changes

ファイル 変更の概要
src/components/settings/modelProvider.tsx - Groqサービスのデフォルトモデルを'gemma2-9b-it'に更新
- 新しいモデルオプション'llama-3.3-70b-versatile'を追加
src/features/chat/vercelAIChat.ts - AIサービス選択のバリデーションチェックを削除
- エラーハンドリングを強化し、エラーコードを含むエラーを投げるように修正
src/features/stores/settings.ts - multiModalAIServices'azure'を追加
- multiModalAPIKeysazureKeyを追加
- APIKeysインターフェースにazureKey: stringを追加
src/pages/api/convertSlide.ts - Azure用のAIサービス設定を追加
- scriptListの型をunknown[]に更新

Possibly related PRs

Tip

CodeRabbit's docstrings feature is now available as part of our Early Access Program! Simply use the command @coderabbitai generate docstrings to have CodeRabbit automatically generate docstrings for your pull request. We would love to hear your feedback on Discord.


Thank you for using CodeRabbit. We offer it for free to the OSS community and would appreciate your support in helping us grow. If you find it useful, would you consider giving us a shout-out on your favorite social media?

❤️ Share
🪧 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: 0

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

Line range hint 234-241: 環境変数の説明ドキュメントの追加を推奨

Azure OpenAI Service関連の環境変数(NEXT_PUBLIC_AZURE_KEYNEXT_PUBLIC_AZURE_ENDPOINT)について、READMEやドキュメントへの説明追加を推奨します。

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 8aa8032 and 88412d8.

📒 Files selected for processing (1)
  • src/features/stores/settings.ts (1 hunks)
🔇 Additional comments (3)
src/features/stores/settings.ts (3)

18-23: マルチモーダルAIサービスへのAzureの追加が適切に行われています

定数配列への'azure'の追加は、Azure OpenAIサービスを有効にするために必要な変更です。


Line range hint 307-308: 永続化の設定が適切に行われています

Azureの設定(azureKeyazureEndpoint)がpartialize関数に正しく含まれており、設定の永続化が適切に実装されています。

Also applies to: 316-317


Line range hint 24-45: 型システムの整合性を確認してください

Azure関連の型定義が正しく追加されていますが、以下の点を確認することを推奨します:

  1. multiModalAIServiceKeyから派生する型が正しく更新されているか
  2. APIKeysインターフェースでAzure関連のプロパティが適切に定義されているか
✅ Verification successful

型システムの整合性が確認できました

検証の結果、以下の点が確認できました:

  • multiModalAIServices配列に'azure'が正しく含まれており、multiModalAIServiceKey型に適切に反映されています
  • APIKeysインターフェースで定義されたazureKeyazureEndpointは、アプリケーション全体で適切に使用されています:
    • 設定画面での入力処理(modelProvider.tsx
    • APIリクエスト時の認証(aiChat.ts
    • 音声合成機能(speakCharacter.ts
    • チャット機能(vercelAIChat.ts
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Azure関連の型の使用箇所を確認
rg -t ts "azureKey|azureEndpoint" --type-list ts,tsx

Length of output: 444


Script:

#!/bin/bash
# Azure関連の型の使用箇所を確認(コマンドを修正)
rg -t ts "azureKey|azureEndpoint"

# multiModalAIServicesの定義を確認
ast-grep --pattern 'const multiModalAIServices = $_'

# APIKeysインターフェースの使用箇所を確認
rg -t ts "APIKeys"

Length of output: 2604

@tegnike
Copy link
Owner

tegnike commented Dec 20, 2024

@PikkamanV PRありがとうございます!確認させていただきます!!

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/pages/api/convertSlide.ts (1)

Line range hint 219-222: エラーハンドリングの改善が必要です

現在のエラーハンドリングは一般的すぎるため、Azure OpenAI Service特有のエラーを適切に処理できない可能性があります。

以下のような改善を提案します:

  } catch (error) {
+   if (aiService === 'azure') {
+     console.error('Azure OpenAI Service error:', error);
+     if (error.message.includes('authentication failed')) {
+       throw new Error('Azure OpenAI Service: 認証に失敗しました。APIキーとエンドポイントを確認してください。');
+     }
+     if (error.message.includes('deployment')) {
+       throw new Error('Azure OpenAI Service: デプロイメント名が無効です。');
+     }
+     throw new Error(`Azure OpenAI Service エラー: ${error.message}`);
+   }
    console.error('AI service request error:', error)
    throw new Error(`Failed to request AI service: ${error}`)
  }
🧹 Nitpick comments (1)
src/pages/api/convertSlide.ts (1)

Line range hint 167-222: アーキテクチャの改善提案

Azure OpenAI Serviceの統合をより堅牢にするため、以下の改善を検討してください:

  1. Azure OpenAI Service用の専用のクライアントファクトリクラスの作成
  2. 環境変数のバリデーション層の追加
  3. Azure固有の型定義の追加
  4. サービス固有の設定を別ファイルに分離

これにより、保守性が向上し、将来の機能追加も容易になります。

📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 88412d8 and e22dfd5.

📒 Files selected for processing (1)
  • src/pages/api/convertSlide.ts (1 hunks)
🔇 Additional comments (1)
src/pages/api/convertSlide.ts (1)

Line range hint 180-218: Azure OpenAI Serviceの統合検証が必要です

現在の実装では、Azure OpenAI Serviceに特有のパラメータや設定が正しく処理されているか確認が必要です。

以下のスクリプトで統合をテストできます:

✅ Verification successful

Let me generate additional scripts to verify the Azure OpenAI Service integration more thoroughly.

This will help us understand how the Azure-specific parameters are handled in the generateObject function and the model instantiation process.


Azure OpenAI Serviceの統合は適切に実装されています

コードベースの分析から、以下の点が確認できました:

  • Azure OpenAI Serviceのエンドポイントとデプロイメント名は正しく処理されています
  • generateObject関数は、Azureを含む各AIサービスに対して適切なパラメータ構造を維持しています
  • モデル名の処理はmodifiedAzureDeploymentを通じて適切に行われています
🏁 Scripts executed

The following scripts were executed for the analysis:

Script:

#!/bin/bash
# Azure OpenAI Service関連のコードを検索

# システムプロンプトでAzure固有の処理を確認
rg "azure" --type ts

# 環境変数の使用箇所を確認
rg "AZURE_" --type ts

# OpenAIクライアントの初期化部分を確認
ast-grep --pattern 'createOpenAI({ $$ })'

Length of output: 6223


Script:

#!/bin/bash
# Check generateObject implementation and Azure-specific handling
ast-grep --pattern 'generateObject($$$)'

# Check instance function implementation
ast-grep --pattern 'function instance($$$)'

# Check Azure-specific model handling
rg "modifiedAzureDeployment" -A 5 --type ts

Length of output: 3568

@@ -164,6 +164,7 @@ async function createSlideLine(
openai: () => createOpenAI({ apiKey }),
anthropic: () => createAnthropic({ apiKey }),
google: () => createGoogleGenerativeAI({ apiKey }),
azure: () => {},
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue

Azure OpenAI Serviceの実装が不完全です

空の実装({})では、Azure OpenAI Serviceのリクエストを正しく処理できません。これにより、ランタイムエラーが発生する可能性があります。

以下のような実装を検討してください:

-    azure: () => {},
+    azure: () => createOpenAI({
+      apiKey,
+      azure: {
+        apiKey,
+        endpoint: process.env.AZURE_OPENAI_ENDPOINT,
+        deploymentName: process.env.AZURE_OPENAI_DEPLOYMENT_NAME
+      }
+    }),

また、必要な環境変数を.envファイルに追加することをお忘れなく:

AZURE_OPENAI_ENDPOINT=your-endpoint-here
AZURE_OPENAI_DEPLOYMENT_NAME=your-deployment-name-here

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

@PikkamanV
Copy link
Contributor Author

@tegnike 確認いただきましてありがとうございます。
ただ申し訳ないのですが、p-rを出した後にスライド関連機能にもこの変更が影響し、ビルドできないことに気付きました。拙速なp-r大変失礼いたしました。
一旦空の関数を用意して回避しましたが、おそらく import { createAzure } from '@ai-sdk/azure' を用いた変更が必要になると思います。
必要な引数の渡し方を探してまたアップデートさせていただきます。よろしくお願いします。

@tegnike
Copy link
Owner

tegnike commented Dec 20, 2024

@PikkamanV
事象を確認いたしました。

どうやら私の過去のリファクタリングでopenai, anthropic, google以外のモデルが使用できなくなっていたようです。
修正しましたので、Azure OpenAIで動作するかご確認いただけますと幸いです🙇‍♀

@PikkamanV
Copy link
Contributor Author

@tegnike 修正いただきましてありがとうございます。
Azure OpenAIに対してテキストのみのリクエストを送信すると、レスポンスが読み上げられ、表情が変化することを確かめられました。
Azure OpenAIを用いる場合のマルチモーダル対応はまた別の機会に提案させていただければと思います。
お忙しいところ迅速にご対応いただきましてありがとうございました。

@tegnike
Copy link
Owner

tegnike commented Dec 21, 2024

@PikkamanV
ああそうかマルチモーダルもですね
おそらくAzureでも簡単に実装できるはずなのでちょっと確認してみます

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

♻️ Duplicate comments (1)
src/pages/api/convertSlide.ts (1)

167-167: ⚠️ Potential issue

Azure OpenAI Serviceの実装が不完全です

空の実装では、Azure OpenAI Serviceのリクエストを正しく処理できません。

🧹 Nitpick comments (2)
src/pages/api/convertSlide.ts (2)

Line range hint 171-174: エラーメッセージの改善が推奨されます

エラーメッセージをより具体的にすることで、デバッグが容易になります。以下のような実装を検討してください:

-    throw new Error('Invalid AI service')
+    throw new Error(`AIサービス "${aiService}" は無効です。サポートされているサービス: ${Object.keys(aiServiceConfig).join(', ')}`)

Line range hint 176-177: 型安全性の向上が推奨されます

response.objectの型アサーションを安全に行うため、スキーマバリデーションの強化を検討してください。

-  return response.object as unknown as SlideLineResponse
+  const result = response.object
+  if (!result || typeof result.line !== 'string' || typeof result.notes !== 'string') {
+    throw new Error('AIサービスからの応答が無効な形式です')
+  }
+  return result as SlideLineResponse
📜 Review details

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

📥 Commits

Reviewing files that changed from the base of the PR and between 953eee3 and 6baf7ea.

📒 Files selected for processing (1)
  • src/pages/api/convertSlide.ts (1 hunks)

@tegnike
Copy link
Owner

tegnike commented Dec 21, 2024

@PikkamanV
対応しました!
動作も確認済みなので、近日中にリリース対応します🙆‍♀

@tegnike tegnike merged commit a330998 into tegnike:develop Dec 27, 2024
3 checks passed
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.

2 participants