Duplicate events for some runnables #17

Closed
opened 2026-02-15 17:05:29 -05:00 by yindo · 5 comments
Owner

Originally created by @davidfant on GitHub (Mar 19, 2024).

For some runnables in nodes the events get logged multiple times. Not sure how to debug this further. This happens consistently

const eventStream = await graph.streamEvents({ ...     }, {        version: 'v1'      });

for await (const s of eventStream) {
  console.log('event', s.event, s.run_id, s.name);
}

=>

event on_chain_start 05ec6f69-ec4f-4c56-a1cb-b99b7afcfcbe Send step suggestion
event on_chain_start 05ec6f69-ec4f-4c56-a1cb-b99b7afcfcbe Send step suggestion
event on_chain_start 05ec6f69-ec4f-4c56-a1cb-b99b7afcfcbe Send step suggestion

In child traces from within this Send step suggestion, there are event more repeats. Maybe callbacks somehow get duplicated?

Originally created by @davidfant on GitHub (Mar 19, 2024). For some runnables in nodes the events get logged multiple times. Not sure how to debug this further. This happens consistently ```ts const eventStream = await graph.streamEvents({ ... }, { version: 'v1' }); for await (const s of eventStream) { console.log('event', s.event, s.run_id, s.name); } ``` => ``` event on_chain_start 05ec6f69-ec4f-4c56-a1cb-b99b7afcfcbe Send step suggestion event on_chain_start 05ec6f69-ec4f-4c56-a1cb-b99b7afcfcbe Send step suggestion event on_chain_start 05ec6f69-ec4f-4c56-a1cb-b99b7afcfcbe Send step suggestion ``` In child traces from within this `Send step suggestion`, there are event more repeats. Maybe callbacks somehow get duplicated?
yindo closed this issue 2026-02-15 17:05:29 -05:00
Author
Owner

@davidfant commented on GitHub (Mar 19, 2024):

Managed to find a minimal reproable scenario:

  const agent = new StateGraph({ channels: {} });

  agent.addNode('openai', async (state, options) => {
    const model = new ChatOpenAI({
      modelName: 'gpt-4-1106-preview',
      maxTokens: 1000,
      temperature: 0,
      streaming: true,
    }).withStructuredOutput({
      name: 'sendMessage',
      schema: z.object({ message: z.string() }),
    });
    await model.invoke('hey', options?.config);
    return {};
  });

  agent.setEntryPoint('openai');
  agent.addEdge('openai', END);
  const runnable = agent.compile();

  const eventStream = await runnable.streamEvents({}, { version: 'v1' });

  for await (const s of eventStream) {
    console.log('event', s.event, s.run_id, s.name);
  }

The following outputs:

event on_chain_start e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph
event on_chain_start 67c9d1b6-175f-4e07-94f2-3cdf386e9bae __start__
event on_chain_start 7a961690-4424-49bb-80c7-3d2b57766f53 RunnableLambda
event on_chain_end 7a961690-4424-49bb-80c7-3d2b57766f53 RunnableLambda
event on_chain_start b8f6664f-3be6-4d2c-aa7e-07846f5f6cb1 RunnablePassthrough
event on_chain_end b8f6664f-3be6-4d2c-aa7e-07846f5f6cb1 RunnablePassthrough
event on_chain_end 67c9d1b6-175f-4e07-94f2-3cdf386e9bae __start__
event on_chain_start d90ef2f8-b253-4251-a7ef-40a4d40680ea __start__:edges
event on_chain_start 602e6933-556c-4419-a921-db2879ad47b7 ChannelRead<>
event on_chain_end 602e6933-556c-4419-a921-db2879ad47b7 ChannelRead<>
event on_chain_start 1675863a-5204-43e8-80a5-7c1cf3d890a1 RunnablePassthrough
event on_chain_end 1675863a-5204-43e8-80a5-7c1cf3d890a1 RunnablePassthrough
event on_chain_end d90ef2f8-b253-4251-a7ef-40a4d40680ea __start__:edges
event on_chain_start 58063191-5f5d-44f1-aa87-2d50e7051509 openai
event on_chain_start e67a5944-6d95-4876-aab9-9a275f3dc20b RunnableLambda
event on_chain_start dde9cd9b-f63f-46ed-b414-3854e1435386 RunnableSequence
event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_end 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_end 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_llm_end 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI
event on_parser_start 8ad52e99-8342-4b2a-befc-896f4bef18a6 JsonOutputKeyToolsParser
event on_parser_end 8ad52e99-8342-4b2a-befc-896f4bef18a6 JsonOutputKeyToolsParser
event on_chain_end dde9cd9b-f63f-46ed-b414-3854e1435386 RunnableSequence
event on_chain_end e67a5944-6d95-4876-aab9-9a275f3dc20b RunnableLambda
event on_chain_start bf0652e6-d324-41b1-afef-2fe8cae850f2 RunnableLambda
event on_chain_end bf0652e6-d324-41b1-afef-2fe8cae850f2 RunnableLambda
event on_chain_start e5442e61-2d5c-4e7d-89cb-3b106bb9e9dc RunnablePassthrough
event on_chain_end e5442e61-2d5c-4e7d-89cb-3b106bb9e9dc RunnablePassthrough
event on_chain_end 58063191-5f5d-44f1-aa87-2d50e7051509 openai
event on_chain_stream e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph
event on_chain_start a493f885-dcf5-4756-a67d-c370e490eb3f openai:edges
event on_chain_start 3757ffd0-a265-4df4-bd0b-077a97ebbebd ChannelRead<>
event on_chain_end 3757ffd0-a265-4df4-bd0b-077a97ebbebd ChannelRead<>
event on_chain_start 3d9075be-e403-4f63-8d62-9ec4e5cd544c RunnablePassthrough
event on_chain_end 3d9075be-e403-4f63-8d62-9ec4e5cd544c RunnablePassthrough
event on_chain_end a493f885-dcf5-4756-a67d-c370e490eb3f openai:edges
event on_chain_stream e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph
event on_chain_end e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph

Note that event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI appears 3 times. The on_llm_stream also run 3x, which makes streaming impossible to use with LangGraph atm.

It doesn't happen if either of the following is removed:

  • withStructuredOutput
  • Running the runnable outside of the graph
@davidfant commented on GitHub (Mar 19, 2024): Managed to find a minimal reproable scenario: ```ts const agent = new StateGraph({ channels: {} }); agent.addNode('openai', async (state, options) => { const model = new ChatOpenAI({ modelName: 'gpt-4-1106-preview', maxTokens: 1000, temperature: 0, streaming: true, }).withStructuredOutput({ name: 'sendMessage', schema: z.object({ message: z.string() }), }); await model.invoke('hey', options?.config); return {}; }); agent.setEntryPoint('openai'); agent.addEdge('openai', END); const runnable = agent.compile(); const eventStream = await runnable.streamEvents({}, { version: 'v1' }); for await (const s of eventStream) { console.log('event', s.event, s.run_id, s.name); } ``` The following outputs: ``` event on_chain_start e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph event on_chain_start 67c9d1b6-175f-4e07-94f2-3cdf386e9bae __start__ event on_chain_start 7a961690-4424-49bb-80c7-3d2b57766f53 RunnableLambda event on_chain_end 7a961690-4424-49bb-80c7-3d2b57766f53 RunnableLambda event on_chain_start b8f6664f-3be6-4d2c-aa7e-07846f5f6cb1 RunnablePassthrough event on_chain_end b8f6664f-3be6-4d2c-aa7e-07846f5f6cb1 RunnablePassthrough event on_chain_end 67c9d1b6-175f-4e07-94f2-3cdf386e9bae __start__ event on_chain_start d90ef2f8-b253-4251-a7ef-40a4d40680ea __start__:edges event on_chain_start 602e6933-556c-4419-a921-db2879ad47b7 ChannelRead<> event on_chain_end 602e6933-556c-4419-a921-db2879ad47b7 ChannelRead<> event on_chain_start 1675863a-5204-43e8-80a5-7c1cf3d890a1 RunnablePassthrough event on_chain_end 1675863a-5204-43e8-80a5-7c1cf3d890a1 RunnablePassthrough event on_chain_end d90ef2f8-b253-4251-a7ef-40a4d40680ea __start__:edges event on_chain_start 58063191-5f5d-44f1-aa87-2d50e7051509 openai event on_chain_start e67a5944-6d95-4876-aab9-9a275f3dc20b RunnableLambda event on_chain_start dde9cd9b-f63f-46ed-b414-3854e1435386 RunnableSequence event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_stream 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_end 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_end 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_llm_end 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI event on_parser_start 8ad52e99-8342-4b2a-befc-896f4bef18a6 JsonOutputKeyToolsParser event on_parser_end 8ad52e99-8342-4b2a-befc-896f4bef18a6 JsonOutputKeyToolsParser event on_chain_end dde9cd9b-f63f-46ed-b414-3854e1435386 RunnableSequence event on_chain_end e67a5944-6d95-4876-aab9-9a275f3dc20b RunnableLambda event on_chain_start bf0652e6-d324-41b1-afef-2fe8cae850f2 RunnableLambda event on_chain_end bf0652e6-d324-41b1-afef-2fe8cae850f2 RunnableLambda event on_chain_start e5442e61-2d5c-4e7d-89cb-3b106bb9e9dc RunnablePassthrough event on_chain_end e5442e61-2d5c-4e7d-89cb-3b106bb9e9dc RunnablePassthrough event on_chain_end 58063191-5f5d-44f1-aa87-2d50e7051509 openai event on_chain_stream e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph event on_chain_start a493f885-dcf5-4756-a67d-c370e490eb3f openai:edges event on_chain_start 3757ffd0-a265-4df4-bd0b-077a97ebbebd ChannelRead<> event on_chain_end 3757ffd0-a265-4df4-bd0b-077a97ebbebd ChannelRead<> event on_chain_start 3d9075be-e403-4f63-8d62-9ec4e5cd544c RunnablePassthrough event on_chain_end 3d9075be-e403-4f63-8d62-9ec4e5cd544c RunnablePassthrough event on_chain_end a493f885-dcf5-4756-a67d-c370e490eb3f openai:edges event on_chain_stream e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph event on_chain_end e23c6509-9d6d-4a93-9688-524d38f7d989 LangGraph ``` Note that `event on_llm_start 837fe171-8371-46a0-b21f-f31c67df80af ChatOpenAI` appears 3 times. The `on_llm_stream` also run 3x, which makes streaming impossible to use with LangGraph atm. It doesn't happen if either of the following is removed: * `withStructuredOutput` * Running the runnable outside of the graph
Author
Owner

@davidfant commented on GitHub (Mar 19, 2024):

Versions:

"@langchain/core": "^0.1.47",
"@langchain/openai": "^0.0.19",
"@langchain/langgraph": "^0.0.10",
@davidfant commented on GitHub (Mar 19, 2024): Versions: ``` "@langchain/core": "^0.1.47", "@langchain/openai": "^0.0.19", "@langchain/langgraph": "^0.0.10", ```
Author
Owner

@jacoblee93 commented on GitHub (Mar 20, 2024):

Thanks for reporting! Managed to repro and identify a fix here: https://github.com/langchain-ai/langchainjs/pull/4834

@jacoblee93 commented on GitHub (Mar 20, 2024): Thanks for reporting! Managed to repro and identify a fix here: https://github.com/langchain-ai/langchainjs/pull/4834
Author
Owner

@jacoblee93 commented on GitHub (Mar 20, 2024):

Fixed in latest @langchain/core@0.1.48

@jacoblee93 commented on GitHub (Mar 20, 2024): Fixed in latest `@langchain/core@0.1.48`
Author
Owner

@jacoblee93 commented on GitHub (Mar 20, 2024):

Sorry, that's 0.1.49

@jacoblee93 commented on GitHub (Mar 20, 2024): Sorry, that's 0.1.49
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: langchain-ai/langgraphjs#17