Skip to content

Commit 013b759

Browse files
committed
Merge branch 'main' of github.com:langchain-ai/langchainjs into feat/datadog-llmobs
2 parents c5df6a2 + b311ec5 commit 013b759

File tree

69 files changed

+1779
-223
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

69 files changed

+1779
-223
lines changed

docs/core_docs/docs/how_to/trim_messages.ipynb

+12-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,18 @@
77
"source": [
88
"# How to trim messages\n",
99
"\n",
10-
":::note\n",
11-
"The `trimMessages` function is available in `@langchain/core` version `0.2.8` and above.\n",
10+
":::info Prerequisites\n",
11+
"\n",
12+
"This guide assumes familiarity with the following concepts:\n",
13+
"\n",
14+
"- [Messages](/docs/concepts/#messages)\n",
15+
"- [Chat models](/docs/concepts/#chat-models)\n",
16+
"- [Chaining](/docs/how_to/sequence/)\n",
17+
"- [Chat history](/docs/concepts/#chat-history)\n",
18+
"\n",
19+
"The methods in this guide also require `@langchain/core>=0.2.8`.\n",
20+
"Please see here for a [guide on upgrading](/docs/how_to/installation/#installing-integration-packages).\n",
21+
"\n",
1222
":::\n",
1323
"\n",
1424
"All models have finite context windows, meaning there's a limit to how many tokens they can take as input. If you have very long messages or a chain/agent that accumulates a long message is history, you'll need to manage the length of the messages you're passing in to the model.\n",

docs/core_docs/docs/integrations/platforms/microsoft.mdx

+18
Original file line numberDiff line numberDiff line change
@@ -152,3 +152,21 @@ See a [usage example for the Azure Files](/docs/integrations/document_loaders/we
152152
```typescript
153153
import { AzureBlobStorageFileLoader } from "@langchain/community/document_loaders/web/azure_blob_storage_file";
154154
```
155+
156+
## Tools
157+
158+
### Azure Container Apps Dynamic Sessions
159+
160+
> [Azure Container Apps dynamic sessions](https://learn.microsoft.com/azure/container-apps/sessions) provide fast access to secure sandboxed environments that are ideal for running code or applications that require strong isolation from other workloads.
161+
162+
<IntegrationInstallTooltip></IntegrationInstallTooltip>
163+
164+
```bash npm2yarn
165+
npm install @langchain/azure-dynamic-sessions
166+
```
167+
168+
See a [usage example](/docs/integrations/tools/azure_dynamic_sessions).
169+
170+
```typescript
171+
import { SessionsPythonREPLTool } from "@langchain/azure-dynamic-sessions";
172+
```
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Azure Container Apps Dynamic Sessions
2+
3+
> [Azure Container Apps dynamic sessions](https://learn.microsoft.com/azure/container-apps/sessions) provide fast access to secure sandboxed environments that are ideal for running code or applications that require strong isolation from other workloads.
4+
5+
You can learn more about Azure Container Apps dynamic sessions and its code interpretation capabilities on [this page](https://learn.microsoft.com/azure/container-apps/sessions). If you don't have an Azure account, you can [create a free account](https://azure.microsoft.com/free/) to get started.
6+
7+
## Setup
8+
9+
You'll first need to install the [`@langchain/azure-dynamic-sessions`](https://www.npmjs.com/package/@langchain/azure-dynamic-sessions) package:
10+
11+
import IntegrationInstallTooltip from "@mdx_components/integration_install_tooltip.mdx";
12+
13+
<IntegrationInstallTooltip></IntegrationInstallTooltip>
14+
15+
```bash npm2yarn
16+
npm install @langchain/azure-dynamic-sessions
17+
```
18+
19+
You'll also need to have a code interpreter session pool instance running. You can deploy a version using [Azure CLI](https://learn.microsoft.com/cli/azure/install-azure-cli) following [this guide](https://learn.microsoft.com/azure/container-apps/sessions-code-interpreter).
20+
21+
Once you have your instance running, you need to make sure you have properly set up the Azure Entra authentication for it. You can find the instructions on how to do that [here](https://learn.microsoft.com/azure/container-apps/sessions?tabs=azure-cli#authentication).
22+
23+
After you've added the role for your identity, you need to retrieve the **session pool management endpoint**. You can find it in the Azure Portal, under the "Overview" section of your instance. Then you need to set the following environment variable:
24+
25+
import CodeBlock from "@theme/CodeBlock";
26+
import EnvVars from "@examples/tools/azure_dynamic_sessions/.env.example";
27+
28+
<CodeBlock language="text">{EnvVars}</CodeBlock>
29+
30+
## Usage example
31+
32+
Below is a simple example that creates a new Python code interpreter session, invoke the tool and prints the result.
33+
34+
import Example from "@examples/tools/azure_dynamic_sessions/azure_dynamic_sessions.ts";
35+
36+
<CodeBlock language="typescript">{Example}</CodeBlock>
37+
38+
Here is a complete example where we use an Azure OpenAI chat model to call the Python code interpreter session tool to execute the code and get the result:
39+
40+
import AgentExample from "@examples/tools/azure_dynamic_sessions/azure_dynamic_sessions-agent.ts";
41+
42+
<CodeBlock language="typescript">{AgentExample}</CodeBlock>

environment_tests/test-exports-bun/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export * from "langchain/memory";
2828
export * from "langchain/memory/index";
2929
export * from "langchain/memory/chat_memory";
3030
export * from "langchain/document";
31-
export * from "@langchain/community/document_loaders/base";
32-
export * from "@langchain/community/document_loaders/web/searchapi";
33-
export * from "@langchain/community/document_loaders/web/serpapi";
34-
export * from "@langchain/community/document_loaders/web/sort_xyz_blockchain";
31+
export * from "langchain/document_loaders/base";
32+
export * from "langchain/document_loaders/web/searchapi";
33+
export * from "langchain/document_loaders/web/serpapi";
34+
export * from "langchain/document_loaders/web/sort_xyz_blockchain";
3535
export * from "langchain/document_transformers/openai_functions";
3636
export * from "langchain/callbacks";
3737
export * from "langchain/output_parsers";

environment_tests/test-exports-cf/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export * from "langchain/memory";
2828
export * from "langchain/memory/index";
2929
export * from "langchain/memory/chat_memory";
3030
export * from "langchain/document";
31-
export * from "@langchain/community/document_loaders/base";
32-
export * from "@langchain/community/document_loaders/web/searchapi";
33-
export * from "@langchain/community/document_loaders/web/serpapi";
34-
export * from "@langchain/community/document_loaders/web/sort_xyz_blockchain";
31+
export * from "langchain/document_loaders/base";
32+
export * from "langchain/document_loaders/web/searchapi";
33+
export * from "langchain/document_loaders/web/serpapi";
34+
export * from "langchain/document_loaders/web/sort_xyz_blockchain";
3535
export * from "langchain/document_transformers/openai_functions";
3636
export * from "langchain/callbacks";
3737
export * from "langchain/output_parsers";

environment_tests/test-exports-cjs/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ const memory = require("langchain/memory");
2828
const memory_index = require("langchain/memory/index");
2929
const memory_chat_memory = require("langchain/memory/chat_memory");
3030
const document = require("langchain/document");
31-
const document_loaders_base = require("@langchain/community/document_loaders/base");
32-
const document_loaders_web_searchapi = require("@langchain/community/document_loaders/web/searchapi");
33-
const document_loaders_web_serpapi = require("@langchain/community/document_loaders/web/serpapi");
34-
const document_loaders_web_sort_xyz_blockchain = require("@langchain/community/document_loaders/web/sort_xyz_blockchain");
31+
const document_loaders_base = require("langchain/document_loaders/base");
32+
const document_loaders_web_searchapi = require("langchain/document_loaders/web/searchapi");
33+
const document_loaders_web_serpapi = require("langchain/document_loaders/web/serpapi");
34+
const document_loaders_web_sort_xyz_blockchain = require("langchain/document_loaders/web/sort_xyz_blockchain");
3535
const document_transformers_openai_functions = require("langchain/document_transformers/openai_functions");
3636
const callbacks = require("langchain/callbacks");
3737
const output_parsers = require("langchain/output_parsers");

environment_tests/test-exports-esbuild/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ import * as memory from "langchain/memory";
2828
import * as memory_index from "langchain/memory/index";
2929
import * as memory_chat_memory from "langchain/memory/chat_memory";
3030
import * as document from "langchain/document";
31-
import * as document_loaders_base from "@langchain/community/document_loaders/base";
32-
import * as document_loaders_web_searchapi from "@langchain/community/document_loaders/web/searchapi";
33-
import * as document_loaders_web_serpapi from "@langchain/community/document_loaders/web/serpapi";
34-
import * as document_loaders_web_sort_xyz_blockchain from "@langchain/community/document_loaders/web/sort_xyz_blockchain";
31+
import * as document_loaders_base from "langchain/document_loaders/base";
32+
import * as document_loaders_web_searchapi from "langchain/document_loaders/web/searchapi";
33+
import * as document_loaders_web_serpapi from "langchain/document_loaders/web/serpapi";
34+
import * as document_loaders_web_sort_xyz_blockchain from "langchain/document_loaders/web/sort_xyz_blockchain";
3535
import * as document_transformers_openai_functions from "langchain/document_transformers/openai_functions";
3636
import * as callbacks from "langchain/callbacks";
3737
import * as output_parsers from "langchain/output_parsers";

environment_tests/test-exports-esm/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ import * as memory from "langchain/memory";
2828
import * as memory_index from "langchain/memory/index";
2929
import * as memory_chat_memory from "langchain/memory/chat_memory";
3030
import * as document from "langchain/document";
31-
import * as document_loaders_base from "@langchain/community/document_loaders/base";
32-
import * as document_loaders_web_searchapi from "@langchain/community/document_loaders/web/searchapi";
33-
import * as document_loaders_web_serpapi from "@langchain/community/document_loaders/web/serpapi";
34-
import * as document_loaders_web_sort_xyz_blockchain from "@langchain/community/document_loaders/web/sort_xyz_blockchain";
31+
import * as document_loaders_base from "langchain/document_loaders/base";
32+
import * as document_loaders_web_searchapi from "langchain/document_loaders/web/searchapi";
33+
import * as document_loaders_web_serpapi from "langchain/document_loaders/web/serpapi";
34+
import * as document_loaders_web_sort_xyz_blockchain from "langchain/document_loaders/web/sort_xyz_blockchain";
3535
import * as document_transformers_openai_functions from "langchain/document_transformers/openai_functions";
3636
import * as callbacks from "langchain/callbacks";
3737
import * as output_parsers from "langchain/output_parsers";

environment_tests/test-exports-vercel/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export * from "langchain/memory";
2828
export * from "langchain/memory/index";
2929
export * from "langchain/memory/chat_memory";
3030
export * from "langchain/document";
31-
export * from "@langchain/community/document_loaders/base";
32-
export * from "@langchain/community/document_loaders/web/searchapi";
33-
export * from "@langchain/community/document_loaders/web/serpapi";
34-
export * from "@langchain/community/document_loaders/web/sort_xyz_blockchain";
31+
export * from "langchain/document_loaders/base";
32+
export * from "langchain/document_loaders/web/searchapi";
33+
export * from "langchain/document_loaders/web/serpapi";
34+
export * from "langchain/document_loaders/web/sort_xyz_blockchain";
3535
export * from "langchain/document_transformers/openai_functions";
3636
export * from "langchain/callbacks";
3737
export * from "langchain/output_parsers";

environment_tests/test-exports-vite/src/entrypoints.js

+4-4
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ export * from "langchain/memory";
2828
export * from "langchain/memory/index";
2929
export * from "langchain/memory/chat_memory";
3030
export * from "langchain/document";
31-
export * from "@langchain/community/document_loaders/base";
32-
export * from "@langchain/community/document_loaders/web/searchapi";
33-
export * from "@langchain/community/document_loaders/web/serpapi";
34-
export * from "@langchain/community/document_loaders/web/sort_xyz_blockchain";
31+
export * from "langchain/document_loaders/base";
32+
export * from "langchain/document_loaders/web/searchapi";
33+
export * from "langchain/document_loaders/web/serpapi";
34+
export * from "langchain/document_loaders/web/sort_xyz_blockchain";
3535
export * from "langchain/document_transformers/openai_functions";
3636
export * from "langchain/callbacks";
3737
export * from "langchain/output_parsers";

examples/.env.example

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ AZURE_OPENAI_API_COMPLETIONS_DEPLOYMENT_NAME=ADD_YOURS_HERE # Azure Portal -> Co
1515
AZURE_OPENAI_API_EMBEDDINGS_DEPLOYMENT_NAME=ADD_YOURS_HERE # Azure Portal -> Cognitive Services -> OpenAI -> Choose your instance -> Go to Azure OpenAI Studio -> Deployments
1616
AZURE_OPENAI_API_VERSION=ADD_YOURS_HERE # Azure Portal -> Cognitive Services -> OpenAI -> Choose your instance -> Go to Azure OpenAI Studio -> Completions/Chat -> Choose Deployment -> View Code
1717
AZURE_OPENAI_BASE_PATH=ADD_YOURS_HERE # Azure Portal -> Cognitive Services -> OpenAI -> Choose your instance -> Endpoint (optional)
18+
AZURE_OPENAI_BASE_PATH=ADD_YOURS_HERE # Azure Portal -> Cognitive Services -> OpenAI -> Choose your instance -> Endpoint (optional)
19+
AZURE_CONTAINER_APP_SESSION_POOL_MANAGEMENT_ENDPOINT=ADD_YOURS_HERE # Azure Portal -> Container App Session Pools -> Choose your app -> Pool management endpoint -> Copy the URL
1820
CONNERY_RUNNER_URL=ADD_YOURS_HERE
1921
CONNERY_RUNNER_API_KEY=ADD_YOURS_HERE
2022
ELASTIC_URL=ADD_YOURS_HERE # http://127.0.0.1:9200

examples/package.json

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
"@gomomento/sdk": "^1.51.1",
3535
"@google/generative-ai": "^0.7.0",
3636
"@langchain/anthropic": "workspace:*",
37+
"@langchain/azure-dynamic-sessions": "workspace:^",
3738
"@langchain/azure-openai": "workspace:*",
3839
"@langchain/cloudflare": "workspace:*",
3940
"@langchain/cohere": "workspace:*",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
AZURE_CONTAINER_APP_SESSION_POOL_MANAGEMENT_ENDPOINT=<your_endpoint>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
import type { ChatPromptTemplate } from "@langchain/core/prompts";
2+
import { pull } from "langchain/hub";
3+
import { AgentExecutor, createToolCallingAgent } from "langchain/agents";
4+
import { SessionsPythonREPLTool } from "@langchain/azure-dynamic-sessions";
5+
import { AzureChatOpenAI } from "@langchain/openai";
6+
7+
const tools = [
8+
new SessionsPythonREPLTool({
9+
poolManagementEndpoint:
10+
process.env.AZURE_CONTAINER_APP_SESSION_POOL_MANAGEMENT_ENDPOINT || "",
11+
}),
12+
];
13+
14+
// Note: you need a model deployment that supports function calling,
15+
// like `gpt-35-turbo` version `1106`.
16+
const llm = new AzureChatOpenAI({
17+
temperature: 0,
18+
});
19+
20+
// Get the prompt to use - you can modify this!
21+
// If you want to see the prompt in full, you can at:
22+
// https://smith.langchain.com/hub/jacob/tool-calling-agent
23+
const prompt = await pull<ChatPromptTemplate>("jacob/tool-calling-agent");
24+
25+
const agent = await createToolCallingAgent({
26+
llm,
27+
tools,
28+
prompt,
29+
});
30+
31+
const agentExecutor = new AgentExecutor({
32+
agent,
33+
tools,
34+
});
35+
36+
const result = await agentExecutor.invoke({
37+
input:
38+
"Create a Python program that prints the Python version and return the result.",
39+
});
40+
41+
console.log(result);
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
import { SessionsPythonREPLTool } from "@langchain/azure-dynamic-sessions";
2+
3+
const tool = new SessionsPythonREPLTool({
4+
poolManagementEndpoint:
5+
process.env.AZURE_CONTAINER_APP_SESSION_POOL_MANAGEMENT_ENDPOINT || "",
6+
});
7+
8+
const result = await tool.invoke("print('Hello, World!')\n1+2");
9+
10+
console.log(result);
11+
12+
// {
13+
// stdout: "Hello, World!\n",
14+
// stderr: "",
15+
// result: 3,
16+
// }

langchain-core/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "@langchain/core",
3-
"version": "0.2.8",
3+
"version": "0.2.9",
44
"description": "Core LangChain.js abstractions and schemas",
55
"type": "module",
66
"engines": {

langchain-core/src/language_models/base.ts

+21
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,27 @@ export const getModelContextSize = (modelName: string): number => {
8282
}
8383
};
8484

85+
/**
86+
* Whether or not the input matches the OpenAI tool definition.
87+
* @param {unknown} tool The input to check.
88+
* @returns {boolean} Whether the input is an OpenAI tool definition.
89+
*/
90+
export function isOpenAITool(tool: unknown): tool is ToolDefinition {
91+
if (typeof tool !== "object" || !tool) return false;
92+
if (
93+
"type" in tool &&
94+
tool.type === "function" &&
95+
"function" in tool &&
96+
typeof tool.function === "object" &&
97+
tool.function &&
98+
"name" in tool.function &&
99+
"parameters" in tool.function
100+
) {
101+
return true;
102+
}
103+
return false;
104+
}
105+
85106
interface CalculateMaxTokenProps {
86107
prompt: string;
87108
modelName: TiktokenModel;

0 commit comments

Comments
 (0)