Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
56 commits
Select commit Hold shift + click to select a range
890d13c
pytest関連パッケージ追加
Milix-M Nov 7, 2025
c7fbecf
testコード追加
Milix-M Nov 7, 2025
152b51e
testにより生成される不要なデータをignore設定
Milix-M Nov 7, 2025
aba83b4
テストに関する情報をREADMEに追加
Milix-M Nov 7, 2025
33fc4bc
Merge pull request #6 from Milix-M/feature/ut
Milix-M Nov 7, 2025
424662e
ChatTranscriptコンポーネントの空メッセージ処理を修正
Milix-M Nov 7, 2025
71135ef
ResearchInputFormコンポーネントのラベルを削除し、プレースホルダーを修正
Milix-M Nov 7, 2025
dbd0d55
ExecutionIndicatorコンポーネントのメッセージを修正
Milix-M Nov 7, 2025
a2c7d68
メタデータのタイトルと説明をOSS DeepReSearchに更新
Milix-M Nov 7, 2025
cd5ab6c
コンポーネントのステータスラベルを削除し、実行中メッセージを調査計画作成中のメッセージに変更
Milix-M Nov 7, 2025
6779cf3
ConversationSidebarコンポーネントのヘルスステータス表示を修正し、不要なインポートとプロパティを削除
Milix-M Nov 7, 2025
376887c
調査計画編集のフィードバックメッセージを更新し、計画のフォーマット処理を修正
Milix-M Nov 7, 2025
a9e1a44
__call__メソッドの引数名を修正し、一貫性を持たせる
Milix-M Nov 7, 2025
5c06c18
WebSocketイベント送信機能を改善し、ワークフローサービスにイベントコンシューマを追加
Milix-M Nov 7, 2025
067e2a3
WorkflowのTestの調査計画のテストを修正
Milix-M Nov 7, 2025
6af2252
CIを仮構築
Milix-M Nov 8, 2025
db9925e
エラーハンドリングを強化し、ワークフローサービスにエラーメッセージの抽出機能を追加
Milix-M Nov 8, 2025
5149759
ChatTranscriptコンポーネントにmarkdownComponentsプロパティを追加し、メッセージの表示を改善
Milix-M Nov 8, 2025
152a543
PlanInterruptPanelのメッセージ表示を改善し、ユーザーに進行確認を促す文言を変更
Milix-M Nov 8, 2025
0ff6810
ResearchPlanViewerコンポーネントにmarkdownサポートを追加し、表示を改善
Milix-M Nov 8, 2025
cf78f2b
ResearchReportViewerコンポーネントのクラス名管理を改善し、fallback表示をReactMarkdownでラップ
Milix-M Nov 8, 2025
db05380
useResearchControllerフックを新規作成し、スレッド管理とリサーチ計画の機能を統合
Milix-M Nov 8, 2025
70722e5
chat-helpers.tsを新規作成し、リサーチ関連のユーティリティ関数を追加
Milix-M Nov 8, 2025
f3d2142
markdown-components.tsxを新規作成し、Markdown表示用のカスタムコンポーネントを追加
Milix-M Nov 8, 2025
a46bda6
新規作成: 研究計画フォームのユーティリティ関数を追加
Milix-M Nov 8, 2025
2ecc509
各コンポネントを別モジュールとして分離
Milix-M Nov 8, 2025
1b9d1bd
"client"モードを有効にするために、ResearchPlanViewerコンポーネントの先頭に"use client"を追加
Milix-M Nov 8, 2025
f0ade57
WebSocket処理のロギングを強化し、エラーハンドリングを改善
Milix-M Nov 11, 2025
4750ac9
ChatTranscriptコンポーネントのメッセージ表示ロジックを改善し、アニメーション遅延を追加
Milix-M Nov 11, 2025
e638b90
ConversationHeaderコンポーネントに進捗ステップ表示機能を追加し、スタイルを改善
Milix-M Nov 11, 2025
b7f2eb1
ConversationSidebarコンポーネントに最小化機能を追加し、スタイルを改善
Milix-M Nov 11, 2025
acb7310
ExecutionIndicatorコンポーネントのスタイルを改善し、シャドウ効果を追加
Milix-M Nov 11, 2025
a10450b
PlanInterruptPanelコンポーネントのスタイルを改善し、ボタンのデザインを更新
Milix-M Nov 11, 2025
e471d82
ResearchInputFormコンポーネントのフォーム処理を改善し、スタイルを更新
Milix-M Nov 11, 2025
e3db7dc
ResearchPlanViewerコンポーネントのスタイルを改善し、詳細表示機能を追加
Milix-M Nov 11, 2025
cdcfb24
ResearchReportViewerコンポーネントのスタイルを改善し、レイアウトを調整
Milix-M Nov 11, 2025
4f36d24
ResearchControllerResultインターフェースにoverallProgressプロパティを追加し、新しいスレッド作成機能を実装
Milix-M Nov 11, 2025
d8b5919
globals.cssのスタイルを更新し、ダークテーマの背景と前景色を改善。page.tsxにoverallProgressを追加し、サイ…
Milix-M Nov 11, 2025
eb45af6
リサーチコントローラーのメッセージ管理機能を追加し、スレッドタイトルのストレージ管理を実装。メッセージID生成機能を追加し、リサーチプラン…
Milix-M Nov 11, 2025
25727bf
ディープリサーチシステムプロンプトを改良
Milix-M Nov 11, 2025
f5185fc
get_current_dateをプロンプトに統合
Milix-M Nov 11, 2025
eda205b
toolsからget_current_dateを削除し、docstring修正
Milix-M Nov 11, 2025
202ef01
langchain v1移行と同時にパッケージアップグレード実施
Milix-M Nov 12, 2025
32b8d8f
DeepResearchのプロンプトを改良し、deep_research.pyを削除
Milix-M Nov 12, 2025
0d33335
不要なファイルの整理
Milix-M Nov 12, 2025
8b0f213
不要なファイルの整理
Milix-M Nov 12, 2025
0b60a30
不要なファイルの整理
Milix-M Nov 12, 2025
5490c5a
workflow.pyを分解しモジュール分けし、main.pyでWorkFlowServiceをインスタンス化するように変更
Milix-M Nov 12, 2025
384740a
feat: copilot-instructionsを追加
Milix-M Nov 12, 2025
c33b7bd
graph.pngをgit管理対象から除外
Milix-M Nov 12, 2025
16e85dd
graph.png保存コードをテスト対象外に変更
Milix-M Nov 12, 2025
81b342f
importパス修正
Milix-M Nov 12, 2025
1ca2ec7
copilot instructions修正
Milix-M Nov 12, 2025
7e53cf9
テスト対象外コードをmain.pyから減らす
Milix-M Nov 12, 2025
93c2b94
service.py一部部分をテスト対象外に
Milix-M Nov 12, 2025
1fe9e45
実装とかけ離れたテストコードを修正
Milix-M Nov 12, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions .github/copilot-instructions.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 全体的な命令

- 回答は指示されない限り、常に日本語で行ってください。
- 関数にはdocstringを必ず記載してください。
- docstringはGoogle Styleで記述してください。
- プログラムには、適切な粒度でコメントを記載してください。
- docstringやコメントは、日本語で記述してください。

## プログラム実装に関する命令
- コードを新たに追加したり、変更した場合は、テストコードも必ず追加・修正してください。
- 常にカバレッジ100%を目指してください。
61 changes: 61 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
name: CI

on:
push:
branches:
- main
- develop
- feature/**
pull_request:
branches:
- main
- develop

jobs:
backend-tests:
runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Python
uses: actions/setup-python@v5
with:
python-version: "3.13"
cache: "pip"
cache-dependency-path: pyproject.toml

- name: Install backend dependencies
run: |
python -m pip install --upgrade pip
pip install .

- name: Run backend tests
run: pytest tests/backend

frontend-build:
runs-on: ubuntu-latest

steps:
- name: Check out repository
uses: actions/checkout@v4

- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: "20"
cache: "npm"
cache-dependency-path: src/frontend/package-lock.json

- name: Install frontend dependencies
working-directory: src/frontend
run: npm ci

- name: Lint frontend
working-directory: src/frontend
run: npm run lint -- --max-warnings=0

- name: Build frontend
working-directory: src/frontend
run: npm run build
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@ build/
dist/
wheels/
*.egg-info
.pytest_cache/
.coverage
htmlcov/

# Virtual environments
.venv

graph.png
22 changes: 14 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,20 @@ DeepReSearch は、LangGraph と LangChain を用いて多段階のウェブリ
export OPENROUTER_API_KEY="your-key"
```

### テストの実行

```bash
python -m pytest
```

カバレッジと視覚的なレポートが必要な場合は次のように実行します。

```bash
python -m pytest --cov=src/backend --cov-report=term-missing --cov-report=html
```

HTML レポートは `htmlcov/index.html` に生成され、ブラウザや VS Code の Live Preview で確認できます。

### フロントエンド (Next.js)

1. 依存関係をインストールします。
Expand Down Expand Up @@ -80,14 +94,6 @@ npm run dev
- 調査計画のレビュー・編集フォーム (interrupt 発生時)
- 生成済みプランとレポートの閲覧

### CLI クライアントから操作する

```bash
python -m clients.research_client ws "人類の歴史"
```

CLI 上で中断が発生したら `y` / `n` で判断し、必要に応じて編集済み計画 JSON を指定して再開できます。

### API ドキュメント

バックエンド API のエンドポイント一覧は <http://127.0.0.1:8000/docs> から確認できます。
Expand Down
149 changes: 0 additions & 149 deletions clients/research_client.py

This file was deleted.

3 changes: 3 additions & 0 deletions pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@ dependencies = [
"langchain-openai>=1.0.1",
"langgraph>=1.0.1",
"nest-asyncio>=1.6.0",
"pytest>=8.4.2",
"pytest-asyncio>=1.2.0",
"pytest-cov>=7.0.0",
"streamlit>=1.51.0",
"uvicorn[standard]>=0.38.0",
"websockets>=15.0.1",
Expand Down
1 change: 0 additions & 1 deletion src/backend/__init__.py

This file was deleted.

30 changes: 16 additions & 14 deletions src/backend/agent.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import datetime
from os import getenv
from typing import Annotated

Expand All @@ -23,7 +24,6 @@
from src.backend.ai.reflect.reflect_search_result import ReflectionResultSchema
from src.backend.ai.schedule.plan_reserch import GeneratedObjectSchema, PlanResearchAI
from src.backend.ai.search.prompt import DEEP_RESEARCH_SYSTEM_PROMPT
from src.backend.tools.get_current_date import get_current_date
from src.backend.tools.search_reflect import reflect_on_results
from src.backend.tools.web_research import web_research

Expand Down Expand Up @@ -131,7 +131,7 @@ class OSSDeepResearchAgent:
def __init__(self) -> None:
"""エージェントを初期化する。"""
# 使用するツール
self.tools = [web_research, reflect_on_results, get_current_date]
self.tools = [web_research, reflect_on_results]

self.llm = ChatOpenAI(
model="tngtech/deepseek-r1t2-chimera:free",
Expand Down Expand Up @@ -173,7 +173,7 @@ async def _node_generate_research_parameters(

Args:
state (State): 現在のステート。
config (RunnableConfig): LangGraph 実行時の設定
config (RunnableConfig): LangGraph実行時の設定

Returns:
dict[str, ResearchParameters]: 生成した研究パラメータを含む差分ステート。
Expand All @@ -189,7 +189,7 @@ async def _node_make_research_plan(

Args:
state (State): 現在のステート。
config (RunnableConfig): LangGraph 実行時の設定
config (RunnableConfig): LangGraph実行時の設定

Returns:
dict[str, GeneratedObjectSchema]: 研究計画を含む差分ステート。
Expand All @@ -203,12 +203,12 @@ async def _research_plan_human_judge(self, state: State, config: RunnableConfig)

Args:
state (State): 現在のステート。
config (RunnableConfig): LangGraph 実行時の設定
config (RunnableConfig): LangGraph実行時の設定

Returns:
State: 判定結果を反映したステート。
"""
feedback = interrupt("編集しますか? y or n: ")
feedback = interrupt("調査計画を編集しますか?")
if feedback == "y":
state.research_plan_human_edit = True

Expand Down Expand Up @@ -243,7 +243,7 @@ async def _node_deep_research(self, state: State, config: RunnableConfig):

Args:
state (State): 現在のステート。
config (RunnableConfig): ランググラフ実行時の設定
config (RunnableConfig): LangGraph実行時の設定

Returns:
dict[str, list]: LLM 応答を追記したメッセージ差分。
Expand Down Expand Up @@ -296,13 +296,16 @@ def _node_prepare_research(self, state: State):
params = state.research_parameters

assert params
assert plan

# 2. システムプロンプトをフォーマット
formatted_plan = str(plan)
formatted_plan = plan.model_dump()
final_prompt_text = DEEP_RESEARCH_SYSTEM_PROMPT.format(
SEARCH_PLAN=formatted_plan,
SEARCH_QUERIES_PER_SECTION=params.search_queries_per_section,
SEARCH_API="DuckDuckGo",
SEARCH_ITERATIONS=params.search_iterations,
SEARCH_PLAN=formatted_plan,
CURRENT_DATE=datetime.date.today(),
)

# 3. ReActエージェントへの初期メッセージを作成
Expand Down Expand Up @@ -398,8 +401,7 @@ def get_compiled_graph(self):
compiled_graph = graph.compile(checkpointer=memory)

# graph実行イメージ保存
# graph_image = compiled_graph.get_graph().draw_mermaid_png()
# with open("./graph.png", "wb") as file:
# file.write(graph_image)

return compiled_graph
graph_image = compiled_graph.get_graph().draw_mermaid_png() # pragma: no cover
with open("./graph.png", "wb") as file: # pragma: no cover
file.write(graph_image) # pragma: no cover
return compiled_graph # pragma: no cover
4 changes: 2 additions & 2 deletions src/backend/ai/reflect/reflect_search_result.py
Original file line number Diff line number Diff line change
Expand Up @@ -53,12 +53,12 @@ def __init__(self, llm):
self.llm = llm
self.structured_llm = llm.with_structured_output(ReflectionResultSchema)

def __call__(self, query, result) -> ReflectionResultSchema:
def __call__(self, query, results) -> ReflectionResultSchema:
prompt = [
(
"system",
SEARCH_RESULT_ANALYZE_AND_REFLECTION_SYSTEM_PROMPT.format(
query=query, result=result
query=query, results=results
),
)
]
Expand Down
Loading
Loading