use text releaser
This commit is contained in:
@@ -14,6 +14,7 @@ from lang_agent.components.tool_manager import ToolManager, ToolManagerConfig
|
|||||||
from lang_agent.base import GraphBase, ToolNodeBase
|
from lang_agent.base import GraphBase, ToolNodeBase
|
||||||
from lang_agent.graphs.graph_states import State
|
from lang_agent.graphs.graph_states import State
|
||||||
from lang_agent.graphs.tool_nodes import AnnotatedToolNode, ToolNodeConfig
|
from lang_agent.graphs.tool_nodes import AnnotatedToolNode, ToolNodeConfig
|
||||||
|
from lang_agent.components.text_releaser import TextReleaser
|
||||||
|
|
||||||
from langchain.chat_models import init_chat_model
|
from langchain.chat_models import init_chat_model
|
||||||
from langchain_core.messages import SystemMessage, HumanMessage, BaseMessage
|
from langchain_core.messages import SystemMessage, HumanMessage, BaseMessage
|
||||||
@@ -69,11 +70,11 @@ class RoutingGraph(GraphBase):
|
|||||||
def _stream_result(self, *nargs, **kwargs):
|
def _stream_result(self, *nargs, **kwargs):
|
||||||
streamable_tags = self.tool_node.get_streamable_tags() + [["route_chat_llm"]]
|
streamable_tags = self.tool_node.get_streamable_tags() + [["route_chat_llm"]]
|
||||||
|
|
||||||
|
def text_iterator():
|
||||||
for chunk, metadata in self.workflow.stream({"inp": nargs},
|
for chunk, metadata in self.workflow.stream({"inp": nargs},
|
||||||
stream_mode="messages",
|
stream_mode="messages",
|
||||||
subgraphs=True,
|
subgraphs=True,
|
||||||
**kwargs):
|
**kwargs):
|
||||||
|
|
||||||
if isinstance(metadata, tuple):
|
if isinstance(metadata, tuple):
|
||||||
chunk, metadata = metadata
|
chunk, metadata = metadata
|
||||||
|
|
||||||
@@ -81,11 +82,12 @@ class RoutingGraph(GraphBase):
|
|||||||
if not (tags in streamable_tags):
|
if not (tags in streamable_tags):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# Yield only the final message content chunks
|
|
||||||
if isinstance(chunk, (BaseMessageChunk, BaseMessage)) and getattr(chunk, "content", None):
|
if isinstance(chunk, (BaseMessageChunk, BaseMessage)) and getattr(chunk, "content", None):
|
||||||
print(chunk.content, end="", flush=True)
|
|
||||||
yield chunk.content
|
yield chunk.content
|
||||||
|
|
||||||
|
text_releaser = TextReleaser(*self.tool_node.get_delay_keys())
|
||||||
|
for chunk in text_releaser.release(text_iterator()):
|
||||||
|
yield chunk
|
||||||
|
|
||||||
|
|
||||||
def invoke(self, *nargs, as_stream:bool=False, as_raw:bool=False, **kwargs):
|
def invoke(self, *nargs, as_stream:bool=False, as_raw:bool=False, **kwargs):
|
||||||
@@ -259,6 +261,7 @@ if __name__ == "__main__":
|
|||||||
from lang_agent.graphs.tool_nodes import AnnotatedToolNode, ToolNodeConfig, ChattyToolNodeConfig
|
from lang_agent.graphs.tool_nodes import AnnotatedToolNode, ToolNodeConfig, ChattyToolNodeConfig
|
||||||
load_dotenv()
|
load_dotenv()
|
||||||
|
|
||||||
|
# route:RoutingGraph = RoutingConfig(tool_node_config=ChattyToolNodeConfig()).setup()
|
||||||
route:RoutingGraph = RoutingConfig(tool_node_config=ChattyToolNodeConfig()).setup()
|
route:RoutingGraph = RoutingConfig(tool_node_config=ChattyToolNodeConfig()).setup()
|
||||||
graph = route.workflow
|
graph = route.workflow
|
||||||
|
|
||||||
@@ -268,8 +271,8 @@ if __name__ == "__main__":
|
|||||||
},{"configurable": {"thread_id": "3"}}
|
},{"configurable": {"thread_id": "3"}}
|
||||||
|
|
||||||
for chunk in route.invoke(*nargs, as_stream=True):
|
for chunk in route.invoke(*nargs, as_stream=True):
|
||||||
# pass
|
print(f"\033[92m{chunk}\033[0m", end="", flush=True)
|
||||||
print(chunk, end="", flush=True)
|
|
||||||
|
|
||||||
# for chunk, metadata in graph.stream({"inp": nargs}, stream_mode="messages"):
|
# for chunk, metadata in graph.stream({"inp": nargs}, stream_mode="messages"):
|
||||||
# node = metadata.get("langgraph_node")
|
# node = metadata.get("langgraph_node")
|
||||||
|
|||||||
Reference in New Issue
Block a user