!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())

[Skip to main content](#__docusaurus_skipToContent_fallback)

LangChain v0.2 is coming soon! Preview the new docs [here](/v0.2/docs/introduction/).

[

![🦜️🔗 Langchain](/v0.1/img/brand/wordmark.png)![🦜️🔗 Langchain](/v0.1/img/brand/wordmark-dark.png)

](/v0.1/)[Docs](/v0.1/docs/get_started/introduction/)[Use cases](/v0.1/docs/use_cases/)[Integrations](/v0.1/docs/integrations/platforms/)[API Reference](https://api.js.langchain.com)

[More](#)

*   [People](/v0.1/docs/people/)
*   [Community](/v0.1/docs/community/)
*   [Tutorials](/v0.1/docs/additional_resources/tutorials/)
*   [Contributing](/v0.1/docs/contributing/)

[v0.1](#)

*   [v0.2](https://js.langchain.com/v0.2/docs/introduction)
*   [v0.1](/v0.1/docs/get_started/introduction/)

[🦜🔗](#)

*   [LangSmith](https://smith.langchain.com)
*   [LangSmith Docs](https://docs.smith.langchain.com)
*   [LangChain Hub](https://smith.langchain.com/hub)
*   [LangServe](https://github.com/langchain-ai/langserve)
*   [Python Docs](https://python.langchain.com/)

[Chat](https://chatjs.langchain.com)[](https://github.com/langchain-ai/langchainjs)

Search

*   [Get started](/v0.1/docs/get_started/)
    
    *   [Introduction](/v0.1/docs/get_started/introduction/)
    *   [Installation](/v0.1/docs/get_started/installation/)
    *   [Quickstart](/v0.1/docs/get_started/quickstart/)
*   [LangChain Expression Language](/v0.1/docs/expression_language/)
    
    *   [Get started](/v0.1/docs/expression_language/get_started/)
    *   [Why use LCEL?](/v0.1/docs/expression_language/why/)
    *   [Interface](/v0.1/docs/expression_language/interface/)
    *   [Streaming](/v0.1/docs/expression_language/streaming/)
    *   [How to](/v0.1/docs/expression_language/how_to/routing/)
        
    *   [Cookbook](/v0.1/docs/expression_language/cookbook/)
        
    *   [LangChain Expression Language (LCEL)](/v0.1/docs/expression_language/)
*   [Modules](/v0.1/docs/modules/)
    
    *   [Model I/O](/v0.1/docs/modules/model_io/)
        
        *   [Quickstart](/v0.1/docs/modules/model_io/quick_start/)
        *   [Concepts](/v0.1/docs/modules/model_io/concepts/)
        *   [Prompts](/v0.1/docs/modules/model_io/prompts/)
            
        *   [LLMs](/v0.1/docs/modules/model_io/llms/)
            
            *   [Quick Start](/v0.1/docs/modules/model_io/llms/quick_start/)
            *   [Streaming](/v0.1/docs/modules/model_io/llms/streaming_llm/)
            *   [Caching](/v0.1/docs/modules/model_io/llms/llm_caching/)
            *   [Custom LLM](/v0.1/docs/modules/model_io/llms/custom_llm/)
            *   [Tracking token usage](/v0.1/docs/modules/model_io/llms/token_usage_tracking/)
            *   [Cancelling requests](/v0.1/docs/modules/model_io/llms/cancelling_requests/)
            *   [Dealing with API Errors](/v0.1/docs/modules/model_io/llms/dealing_with_api_errors/)
            *   [Dealing with Rate Limits](/v0.1/docs/modules/model_io/llms/dealing_with_rate_limits/)
            *   [Subscribing to events](/v0.1/docs/modules/model_io/llms/subscribing_events/)
            *   [Adding a timeout](/v0.1/docs/modules/model_io/llms/timeouts/)
        *   [Chat Models](/v0.1/docs/modules/model_io/chat/)
            
        *   [Model I/O](/v0.1/docs/modules/model_io/)
        *   [Output Parsers](/v0.1/docs/modules/model_io/output_parsers/)
            
    *   [Retrieval](/v0.1/docs/modules/data_connection/)
        
    *   [Chains](/v0.1/docs/modules/chains/)
    *   [Agents](/v0.1/docs/modules/agents/)
        
    *   [More](/v0.1/docs/modules/memory/)
        
*   [Security](/v0.1/docs/security/)
*   [Guides](/v0.1/docs/guides/)
    
*   [Ecosystem](/v0.1/docs/ecosystem/)
    
*   [LangGraph](/v0.1/docs/langgraph/)
*   * * *
    

*   [](/v0.1/)
*   [Modules](/v0.1/docs/modules/)
*   [Model I/O](/v0.1/docs/modules/model_io/)
*   [LLMs](/v0.1/docs/modules/model_io/llms/)
*   Subscribing to events

Subscribing to events
=====================

Especially when using an agent, there can be a lot of back-and-forth going on behind the scenes as a LLM processes a prompt. For agents, the response object contains an intermediateSteps object that you can print to see an overview of the steps it took to get there. If that's not enough and you want to see every exchange with the LLM, you can pass callbacks to the LLM for custom logging (or anything else you want to do) as the model goes through the steps:

For more info on the events available see the [Callbacks](/v0.1/docs/modules/callbacks/) section of the docs.

tip

See [this section for general instructions on installing integration packages](/v0.1/docs/get_started/installation/#installing-integration-packages).

*   npm
*   Yarn
*   pnpm

    npm install @langchain/openai @langchain/community

    yarn add @langchain/openai @langchain/community

    pnpm add @langchain/openai @langchain/community

    import { OpenAI } from "@langchain/openai";import type { Serialized } from "@langchain/core/load/serializable";import { LLMResult } from "@langchain/core/outputs";// We can pass in a list of CallbackHandlers to the LLM constructor to get callbacks for various events.const model = new OpenAI({  callbacks: [    {      handleLLMStart: async (llm: Serialized, prompts: string[]) => {        console.log(JSON.stringify(llm, null, 2));        console.log(JSON.stringify(prompts, null, 2));      },      handleLLMEnd: async (output: LLMResult) => {        console.log(JSON.stringify(output, null, 2));      },      handleLLMError: async (err: Error) => {        console.error(err);      },    },  ],});await model.invoke(  "What would be a good company name a company that makes colorful socks?");// {//     "name": "openai"// }// [//     "What would be a good company name a company that makes colorful socks?"// ]// {//   "generations": [//     [//         {//             "text": "\n\nSocktastic Splashes.",//             "generationInfo": {//                 "finishReason": "stop",//                 "logprobs": null//             }//         }//     ]//  ],//   "llmOutput": {//     "tokenUsage": {//         "completionTokens": 9,//          "promptTokens": 14,//          "totalTokens": 23//     }//   }// }

#### API Reference:

*   [OpenAI](https://api.js.langchain.com/classes/langchain_openai.OpenAI.html) from `@langchain/openai`
*   [Serialized](https://api.js.langchain.com/types/langchain_core_load_serializable.Serialized.html) from `@langchain/core/load/serializable`
*   [LLMResult](https://api.js.langchain.com/types/langchain_core_outputs.LLMResult.html) from `@langchain/core/outputs`

* * *

#### Help us out by providing feedback on this documentation page:

[

Previous

Dealing with Rate Limits

](/v0.1/docs/modules/model_io/llms/dealing_with_rate_limits/)[

Next

Adding a timeout

](/v0.1/docs/modules/model_io/llms/timeouts/)

Community

*   [Discord](https://discord.gg/cU2adEyC7w)
*   [Twitter](https://twitter.com/LangChainAI)

GitHub

*   [Python](https://github.com/langchain-ai/langchain)
*   [JS/TS](https://github.com/langchain-ai/langchainjs)

More

*   [Homepage](https://langchain.com)
*   [Blog](https://blog.langchain.dev)

Copyright © 2024 LangChain, Inc.