mirror of
https://github.com/bytedance/deer-flow.git
synced 2026-05-21 23:46:50 +00:00
Refactor DeerFlow to use Gateway's LangGraph-compatible API
- Updated documentation and comments to reflect the transition from LangGraph Server to Gateway. - Changed default URLs in ChannelManager and tests to point to Gateway. - Removed references to LangGraph Server in deployment scripts and configurations. - Updated Nginx configuration to route API traffic to Gateway. - Adjusted frontend configurations to utilize Gateway's API. - Removed LangGraph service from Docker Compose files, consolidating services under Gateway. - Added regression tests to ensure Gateway integration works as expected. Co-authored-by: Copilot <copilot@github.com>
This commit is contained in:
@@ -495,7 +495,7 @@ class TestChannelManager:
|
||||
await _wait_for(lambda: len(outbound_received) >= 1)
|
||||
await manager.stop()
|
||||
|
||||
# Thread should be created on the LangGraph Server
|
||||
# Thread should be created through Gateway
|
||||
mock_client.threads.create.assert_called_once()
|
||||
|
||||
# Thread ID should be stored
|
||||
@@ -1987,28 +1987,28 @@ class TestChannelService:
|
||||
def test_service_urls_fall_back_to_env(self, monkeypatch):
|
||||
from app.channels.service import ChannelService
|
||||
|
||||
monkeypatch.setenv("DEER_FLOW_CHANNELS_LANGGRAPH_URL", "http://langgraph:2024")
|
||||
monkeypatch.setenv("DEER_FLOW_CHANNELS_LANGGRAPH_URL", "http://gateway:8001/api")
|
||||
monkeypatch.setenv("DEER_FLOW_CHANNELS_GATEWAY_URL", "http://gateway:8001")
|
||||
|
||||
service = ChannelService(channels_config={})
|
||||
|
||||
assert service.manager._langgraph_url == "http://langgraph:2024"
|
||||
assert service.manager._langgraph_url == "http://gateway:8001/api"
|
||||
assert service.manager._gateway_url == "http://gateway:8001"
|
||||
|
||||
def test_config_service_urls_override_env(self, monkeypatch):
|
||||
from app.channels.service import ChannelService
|
||||
|
||||
monkeypatch.setenv("DEER_FLOW_CHANNELS_LANGGRAPH_URL", "http://langgraph:2024")
|
||||
monkeypatch.setenv("DEER_FLOW_CHANNELS_LANGGRAPH_URL", "http://gateway:8001/api")
|
||||
monkeypatch.setenv("DEER_FLOW_CHANNELS_GATEWAY_URL", "http://gateway:8001")
|
||||
|
||||
service = ChannelService(
|
||||
channels_config={
|
||||
"langgraph_url": "http://custom-langgraph:2024",
|
||||
"langgraph_url": "http://custom-gateway:8001/api",
|
||||
"gateway_url": "http://custom-gateway:8001",
|
||||
}
|
||||
)
|
||||
|
||||
assert service.manager._langgraph_url == "http://custom-langgraph:2024"
|
||||
assert service.manager._langgraph_url == "http://custom-gateway:8001/api"
|
||||
assert service.manager._gateway_url == "http://custom-gateway:8001"
|
||||
|
||||
def test_disabled_channel_with_string_creds_emits_warning(self, caplog):
|
||||
|
||||
@@ -0,0 +1,62 @@
|
||||
"""Regression coverage for the Gateway-owned LangGraph API runtime."""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import re
|
||||
from pathlib import Path
|
||||
|
||||
REPO_ROOT = Path(__file__).resolve().parents[2]
|
||||
|
||||
|
||||
def _read(path: str) -> str:
|
||||
return (REPO_ROOT / path).read_text(encoding="utf-8")
|
||||
|
||||
|
||||
def test_root_makefile_no_longer_exposes_transition_gateway_targets():
|
||||
makefile = _read("Makefile")
|
||||
|
||||
assert "dev-pro" not in makefile
|
||||
assert "start-pro" not in makefile
|
||||
assert "dev-daemon-pro" not in makefile
|
||||
assert "start-daemon-pro" not in makefile
|
||||
assert "docker-start-pro" not in makefile
|
||||
assert "up-pro" not in makefile
|
||||
assert not re.search(r"serve\.sh .*--gateway", makefile)
|
||||
assert "docker.sh start --gateway" not in makefile
|
||||
assert "deploy.sh --gateway" not in makefile
|
||||
|
||||
|
||||
def test_service_launchers_always_use_gateway_runtime():
|
||||
operational_files = {
|
||||
"scripts/serve.sh": _read("scripts/serve.sh"),
|
||||
"scripts/docker.sh": _read("scripts/docker.sh"),
|
||||
"scripts/deploy.sh": _read("scripts/deploy.sh"),
|
||||
"docker/docker-compose-dev.yaml": _read("docker/docker-compose-dev.yaml"),
|
||||
"docker/docker-compose.yaml": _read("docker/docker-compose.yaml"),
|
||||
}
|
||||
|
||||
for path, content in operational_files.items():
|
||||
assert "start --gateway" not in content, path
|
||||
assert "deploy.sh --gateway" not in content, path
|
||||
assert "langgraph dev" not in content, path
|
||||
assert "LANGGRAPH_UPSTREAM" not in content, path
|
||||
assert "LANGGRAPH_REWRITE" not in content, path
|
||||
|
||||
|
||||
def test_nginx_routes_official_langgraph_prefix_to_gateway_api():
|
||||
for path in ("docker/nginx/nginx.local.conf", "docker/nginx/nginx.conf"):
|
||||
content = _read(path)
|
||||
|
||||
assert "/api/langgraph-compat" not in content
|
||||
assert "proxy_pass http://langgraph" not in content
|
||||
assert "rewrite ^/api/langgraph/(.*) /api/$1 break;" in content
|
||||
assert "proxy_pass http://gateway" in content
|
||||
|
||||
|
||||
def test_frontend_rewrites_langgraph_prefix_to_gateway():
|
||||
next_config = _read("frontend/next.config.js")
|
||||
api_client = _read("frontend/src/core/api/api-client.ts")
|
||||
|
||||
assert "DEER_FLOW_INTERNAL_LANGGRAPH_BASE_URL" not in next_config
|
||||
assert "http://127.0.0.1:2024" not in next_config
|
||||
assert "langgraph-compat" not in api_client
|
||||
Reference in New Issue
Block a user