### USER
関数 generateCodeを完成させてください
仕様
・ openai.createChatCompletion は、古いAPIです使用できません
・ システムプロンプトとユーザープロンプトを利用してプログラムコードを生成する
・ システムプロンプトとユーザープロンプトはgenerateCodeのパラメタで渡される
・変数 openai は、既に初期化すみ
・変数 selectedModel モデル名が登録されているか確認し利用する
・ openai.chat.completions.create に モデル　と システムプロンプトとユーザープロンプトを渡し、プログラムコードを生成する
ーーーーーーーーーーーーーーーーーーーーーーーーーー
export async function generateCode(systemPrompt: string, userPrompt: string): Promise<string>

### ASSISTANT
`generateCode` 関数を完成させるためには、OpenAIの新しいAPIである `openai.chat.completions.create` を使用して、指定されたシステムプロンプトとユーザープロンプトからコードを生成する必要があります。以下にその実装例を示します。

```typescript
import { OpenAIApi, ChatCompletionRequestMessage } from 'openai';

// Assume `openai` is already initialized as an instance of OpenAIApi
declare const openai: OpenAIApi;

// Assume `selectedModel` contains the model name you want to use
const selectedModel = 'gpt-3.5-turbo'; // Replace with your desired model

export async function generateCode(systemPrompt: string, userPrompt: string): Promise<string> {
    try {
        const response = await openai.chat.completions.create({
            model: selectedModel,
            messages: [
                { role: 'system', content: systemPrompt },
                { role: 'user', content: userPrompt }
            ],
            max_tokens: 150 // Adjust the token limit as needed
        });

        if (response.choices && response.choices.length > 0) {
            return response.choices[0].message.content;
        } else {
            throw new Error('No completion was generated.');
        }
    } catch (error) {
        console.error('Error generating code:', error);
        throw new Error(`Failed to generate code: ${error.message}`);
    }
}
```

### 説明

1. **OpenAI APIの初期化**: `openai` は既に初期化されていると仮定しています。これは通常、APIキーを使用して行われます。

2. **モデル名の指定**: `selectedModel` 変数に適切なモデル名（例: `'gpt-3.5-turbo'`）が設定されていることを確認します。必要に応じて他のモデルに変更してください。

3. **APIリクエスト**: `openai.chat.completions.create` メソッドを使用して、システムプロンプトとユーザープロンプトを含むメッセージ配列を渡します。これにより、OpenAIのチャットコンプリーションAPIが呼び出されます。

4. **応答処理**: APIからの応答を確認し、生成されたコード（`response.choices[0].message.content`）を返します。もし何らかのエラーが発生した場合は適切にキャッチして処理します。

5. **トークン制限**: 必要に応じて `max_tokens` を調整して、生成されるコードの長さを制御できます。デフォルトでは150トークンとしていますが、プロジェクトのニーズに合わせて変更してください。

この関数は、指定されたシステムプロンプトとユーザープロンプトを基にコードを生成し、それを返すことができます。エラー処理も含まれているので、実行時の問題を適切に管理することが可能です。