File size: 11,553 Bytes
5c5ca8d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
# FastAPI Django アプリケーション VS Code デバッグ環境構築ガイド

## 📋 概要

このドキュメントは、FastAPI Django アプリケーションでのGroq API統合と`chat_with_interpreter`関数のVS Codeデバッグ環境構築手順をまとめたものです。

## 🚀 完了した作業内容

### 1. Groq API統合とエラー修正
- ✅ 環境変数読み込みエラーの修正
-`chat_with_interpreter`関数でのGroq API設定
-`load_dotenv()`の適切な配置

### 2. VS Codeデバッグ環境構築
- ✅ デバッグ用launch.json設定
- ✅ debugpyサーバー設定
- ✅ リモートアタッチ機能
- ✅ ブレークポイント設定

### 3. Webベースデバッグ機能
- ✅ ブラウザ経由でのチャット機能テスト
- ✅ ブレークポイントでの実行停止
- ✅ ステップ実行とデバッグ変数確認

## 🔧 セットアップ手順

### 前提条件
- Python 3.12+
- VS Code
- FastAPI Django アプリケーション
- Groq API キー

### 1. 依存関係のインストール

```bash
pip install debugpy
pip install python-dotenv
pip install open-interpreter
pip install groq
```

### 2. 環境変数設定

`.env`ファイルにGroq APIキーとOpenInterpreterパスワードを設定:
```env
GROQ_API_KEY=gsk_your_api_key_here
api_key=gsk_your_api_key_here
OPENINTERPRETER_PASSWORD=your_secure_password_here
```

**セキュリティ注意事項:**
- パスワードは強固なものを設定してください
- `.env`ファイルは`.gitignore`に追加してバージョン管理から除外してください
- 本番環境では環境変数やシークレット管理サービスを使用してください

### 3. VS Code デバッグ設定

`.vscode/launch.json`ファイル:
```json
{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "🎯 Remote Attach (現在のプロセス)",
        "type": "debugpy",
        "request": "attach",
        "connect": {
          "host": "localhost",
          "port": 5678
        },
        "justMyCode": false,
        "pathMappings": [
          {
            "localRoot": "${workspaceFolder}",
            "remoteRoot": "${workspaceFolder}"
          }
        ]
      },
      {
        "name": "🚀 App.py Debug (メインアプリ)",
        "type": "debugpy",
        "request": "launch",
        "program": "${workspaceFolder}/app.py",
        "args": ["--debug"],
        "console": "integratedTerminal",
        "justMyCode": false,
        "env": {
          "PYTHONPATH": "${workspaceFolder}",
          "DJANGO_SETTINGS_MODULE": "mysite.settings"
        },
        "cwd": "${workspaceFolder}",
        "stopOnEntry": false,
        "subProcess": false,
        "python": "/home/codespace/.python/current/bin/python3"
      }
    ]
}
```

### 4. デバッグサーバー用アプリケーション

`app_debug_server.py`ファイル:
```python
#!/usr/bin/env python3
# Debug版のapp.py - VS Codeデバッガー対応

import debugpy
import os
import sys

# デバッグサーバーを開始
debugpy.listen(5678)
print("🐛 デバッグサーバーが起動しました (ポート: 5678)")
print("VS Codeで 'Python: Attach to Process' または 'Python: Remote Attach' を実行してください")
print("ホスト: localhost, ポート: 5678")

# ブレークポイントで待機するかどうか
WAIT_FOR_DEBUGGER = True

if WAIT_FOR_DEBUGGER:
    print("⏸️  デバッガーの接続を待機中... VS Codeでアタッチしてください")
    debugpy.wait_for_client()
    print("✅ デバッガーが接続されました!")

# 元のapp.pyと同じコードを実行
import gradio as gr
import shutil
from dotenv import load_dotenv

# .envファイルから環境変数を読み込み
load_dotenv()

from fastapi import FastAPI
from fastapi import Request
from fastapi.templating import Jinja2Templates
from fastapi.staticfiles import StaticFiles
import requests
import uvicorn
from groq import Groq

from fastapi import FastAPI, HTTPException, Header
from pydantic import BaseModel
from typing import Any, Coroutine, List

from starlette.middleware.cors import CORSMiddleware
from sse_starlette.sse import EventSourceResponse

from groq import AsyncGroq, AsyncStream, Groq
from groq.lib.chat_completion_chunk import ChatCompletionChunk
from groq.resources import Models
from groq.types import ModelList
from groq.types.chat.completion_create_params import Message

import async_timeout
import asyncio
from interpreter import interpreter

GENERATION_TIMEOUT_SEC = 60

from llamafactory.webui.interface import create_ui

if __name__ == "__main__":
    try:
        print("🚀 デバッグモードでアプリケーションを開始しています...")
        
        # デバッグモードで起動
        uvicorn.run(
            "mysite.asgi:app", 
            host="0.0.0.0", 
            port=7860, 
            reload=False,  # デバッグ時はリロード無効
            log_level="debug",
            access_log=True,
            use_colors=True
        )
            
    except Exception as e:
        print(f"❌ アプリケーション起動エラー: {e}")
        import traceback
        traceback.print_exc()
```

## 🎯 デバッグ実行手順

### 1. デバッグサーバー起動

```bash
python3 app_debug_server.py
```

出力例:
```
🐛 デバッグサーバーが起動しました (ポート: 5678)
VS Codeで 'Python: Attach to Process' または 'Python: Remote Attach' を実行してください
ホスト: localhost, ポート: 5678
⏸️  デバッガーの接続を待機中... VS Codeでアタッチしてください
```

### 2. ブレークポイント設定

VS Codeで `controllers/gra_02_openInterpreter/OpenInterpreter.py`**187行目** にブレークポイントを設定:

```python
def chat_with_interpreter(message, history=None,passw=None, temperature=None, max_new_tokens=None):
    import os
    
    # 🎯 ここにブレークポイントを設定してください! (デバッグ開始点)
    print(f"DEBUG: Received message: '{message}'")
    print(f"DEBUG: Password: '{passw}'")
```

### 3. VS Codeでデバッガーアタッチ

**方法1: デバッグパネル使用**
1. VS Code左側の「実行とデバッグ」アイコン(🐛)をクリック
2. 上部のドロップダウンで **"🎯 Remote Attach (現在のプロセス)"** を選択
3. **緑の再生ボタン** をクリック

**方法2: F5キー使用**
1. **F5** を押す
2. **"🎯 Remote Attach (現在のプロセス)"** を選択

### 4. デバッガー接続確認

デバッガーが正常に接続されると、ターミナルに以下が表示されます:
```
✅ デバッガーが接続されました!
🚀 デバッグモードでアプリケーションを開始しています...
```

### 5. Webブラウザでテスト

1. ブラウザで `http://localhost:7860` にアクセス
2. **OpenInterpreter** タブをクリック
3. **パスワード欄に環境変数で設定したパスワードを入力** (デフォルト: 12345)
4. **メッセージ欄にテスト用メッセージを入力**
5. **送信ボタンをクリック**

### 6. デバッグ実行

ブレークポイントで実行が停止したら:

- **F10**: ステップオーバー(次の行に進む)
- **F11**: ステップイン(関数内部に入る)  
- **F5**: 継続実行
- **左パネル**: 変数の値を確認
- **ウォッチ**: 式の監視

## 🔍 デバッグ対象ファイル

### メインファイル
- `controllers/gra_02_openInterpreter/OpenInterpreter.py`
- `mysite/interpreter/interpreter.py`

### 重要な関数
- `chat_with_interpreter()` - メインのチャット処理関数
- `format_response()` - レスポンス整形関数
- `initialize_db()` - データベース初期化

## 🐛 トラブルシューティング

### よくある問題と解決方法

#### 1. デバッガーが接続できない
```bash
# プロセス確認
ps aux | grep "python.*app_debug_server"

# ポート確認
netstat -tulpn | grep 5678
```

#### 2. Groq APIキーエラー
```bash
# 環境変数確認
echo $GROQ_API_KEY

# .envファイル確認
cat .env | grep GROQ_API_KEY
```

#### 3. モジュール不足エラー
```bash
# 必要なパッケージをインストール
pip install -r requirements.txt
pip install debugpy python-dotenv open-interpreter groq
```

## 📁 ファイル構成

```
/workspaces/fastapi_django_main_live/
├── app_debug_server.py              # デバッグサーバー用アプリ
├── .vscode/
│   └── launch.json                  # VS Codeデバッグ設定
├── controllers/
│   └── gra_02_openInterpreter/
│       └── OpenInterpreter.py       # メインのチャット処理
├── mysite/
│   └── interpreter/
│       └── interpreter.py           # インタープリター設定
└── .env                             # 環境変数(Groq APIキー)
```

## 🎉 成功時の状態

### ターミナル出力例
```
🐛 デバッグサーバーが起動しました (ポート: 5678)
✅ デバッガーが接続されました!
🚀 デバッグモードでアプリケーションを開始しています...
INFO:     Started server process [270257]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:7860 (Press CTRL+C to quit)
```

### デバッグ実行時の出力例
```
DEBUG: Received message: 'Hello, test debug'
DEBUG: Password: '12345'
DEBUG: API key found: gsk_JVhaGp...
DEBUG: Interpreter configured successfully
DEBUG: Password check passed
DEBUG: Processing message: 'Hello, test debug'
```

## 📚 参考情報

### 使用技術
- **FastAPI**: Webアプリケーションフレームワーク
- **Django**: バックエンドフレームワーク
- **Gradio**: Web UI インターフェース
- **Groq API**: LLM API サービス
- **Open Interpreter**: コード実行エンジン
- **debugpy**: Python デバッガー
- **VS Code**: 開発環境

### 重要な設定
- **ポート**: 7860 (Webアプリ), 5678 (デバッグサーバー)
- **パスワード**: 環境変数 `OPENINTERPRETER_PASSWORD` で設定 (デフォルト: 12345)
- **API設定**: Groq llama3-8b-8192 モデル

## 🔒 セキュリティ考慮事項

### パスワード管理
- ハードコーディングを避け、環境変数を使用
- 強固なパスワードを設定
- `.env`ファイルをバージョン管理から除外

### 本番環境での推奨事項
- AWS Secrets Manager, Azure Key Vault等のシークレット管理サービス使用
- 最小権限の原則に従ったアクセス制御
- 定期的なパスワードローテーション

## 🔗 関連ドキュメント

- [VS Code Python Debugging](https://code.visualstudio.com/docs/python/debugging)
- [debugpy Documentation](https://github.com/microsoft/debugpy)
- [FastAPI Documentation](https://fastapi.tiangolo.com/)
- [Groq API Documentation](https://console.groq.com/docs)

---

**作成日**: 2025年6月10日  
**最終更新**: 2025年6月10日  
**ステータス**: ✅ 動作確認済み

## 📝 更新履歴

| 日付 | 内容 | 担当者 |
|------|------|--------|
| 2025-06-10 | 初版作成 - VS Codeデバッグ環境構築完了 | GitHub Copilot |
| 2025-06-10 | Groq API統合とエラー修正完了 | GitHub Copilot |
| 2025-06-10 | Webベースデバッグ機能動作確認 | GitHub Copilot |