Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adds support for memory and prompt passing to a ChatConversationalAgent #374

Merged
merged 24 commits into from
Apr 17, 2023
Merged
Show file tree
Hide file tree
Changes from 14 commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
56b3677
Use OpenAIChat class to initialize gpt-4 models
Mar 17, 2023
c5fc36f
Formatting
Mar 17, 2023
78df0ca
Adds support for passing a prompt to a ChatConversationalAgent
Mar 18, 2023
a82b75c
Formatting
Mar 18, 2023
bde7350
Properly set memory when passed into AgentExecutor constructor, renam…
Mar 19, 2023
d198eb8
Formatting
Mar 19, 2023
403c22e
Update docs and tests to use new intializeAgentExecutorWithOptions me…
Mar 19, 2023
ec606d2
Merge in main
Mar 19, 2023
f03cf7b
Formatting
Mar 19, 2023
9d7f891
Merge branch 'main' of https://github.com/hwchase17/langchainjs into …
Mar 20, 2023
ccaa4ef
Update docs
Mar 20, 2023
8d65e65
Merge branch 'main' of https://github.com/jacoblee93/langchainjs into…
Mar 28, 2023
607f9ef
Merge branch 'main' of https://github.com/hwchase17/langchainjs into …
Mar 28, 2023
9352f69
Add returnIntermediateSteps, suffix to initializeAgentExecutorWithOpt…
Mar 28, 2023
07c1306
Remove test timeout
Mar 28, 2023
3d0fbc9
Revert renames, throw error if memory is passed in for unsupported ag…
Mar 28, 2023
622ea77
Merge branch 'main' of https://github.com/hwchase17/langchainjs into …
Mar 28, 2023
a092fd2
Merge branch 'main' into pr/jacoblee93/374
nfcampos Apr 17, 2023
6b68c5b
Fix import
nfcampos Apr 17, 2023
db79b9a
Do some tsc wizardry to make the initialise function only accept args…
nfcampos Apr 17, 2023
2ac4f4c
Merge branch 'main' into pr/jacoblee93/374
nfcampos Apr 17, 2023
800e517
Lint
nfcampos Apr 17, 2023
27f376d
Update examples added since
nfcampos Apr 17, 2023
ac7ae1f
Fix int tests
nfcampos Apr 17, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 4 additions & 6 deletions docs/docs/getting-started/guide-llm.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -169,17 +169,15 @@ Now we can get started!

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";

const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description"
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
});
console.log("Loaded agent.");

const input =
Expand Down
10 changes: 4 additions & 6 deletions docs/docs/modules/agents/executor/getting-started.md
Original file line number Diff line number Diff line change
Expand Up @@ -31,17 +31,15 @@ Now we can get started!

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";

const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description"
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
});
console.log("Loaded agent.");

const input =
Expand Down
10 changes: 4 additions & 6 deletions docs/docs/modules/agents/tools/agents_with_vectorstores.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ First, you want to import the relevant modules

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator, ChainTool } from "langchain/tools";
import { VectorDBQAChain } from "langchain/chains";
import { HNSWLib } from "langchain/vectorstores";
Expand Down Expand Up @@ -48,11 +48,9 @@ Now we can go about constructing and using the tool as we would any other tool!
```typescript
const tools = [new SerpAPI(), new Calculator(), qaTool];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description"
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
});
console.log("Loaded agent.");

const input = `What did biden say about ketanji brown jackson is the state of the union address?`;
Expand Down
10 changes: 4 additions & 6 deletions docs/docs/modules/agents/tools/index.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ See below for an example of defining and using `DynamicTool`s.

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { DynamicTool } from "langchain/tools";

export const run = async () => {
Expand All @@ -68,11 +68,9 @@ export const run = async () => {
}),
];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description"
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
});

console.log("Loaded agent.");

Expand Down
17 changes: 11 additions & 6 deletions docs/docs/modules/agents/tools/zapier_agent.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

Full docs here: https://nla.zapier.com/api/v1/dynamic/docs

**Zapier Natural Language Actions** gives you access to the 5k+ apps, 20k+ actions on Zapier's platform through a natural language API interface.
**Zapier Natural Language Actions** gives you access to the 5k+ apps and 20k+ actions on Zapier's platform through a natural language API interface.

NLA supports apps like Gmail, Salesforce, Trello, Slack, Asana, HubSpot, Google Sheets, Microsoft Teams, and thousands more apps: https://zapier.com/apps

Expand All @@ -16,23 +16,28 @@ User-facing (Oauth): for production scenarios where you are deploying an end-use

This quick start will focus on the server-side use case for brevity. Review full docs or reach out to nla@zapier.com for user-facing oauth developer support.

This example goes over how to use the Zapier integration an Agent. In code, below:
The example below demonstrates how to use the Zapier integration as an Agent:

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor, ZapierToolKit } from "langchain/agents";
import {
initializeAgentExecutorWithOptions,
ZapierToolKit,
} from "langchain/agents";
import { ZapierNLAWrapper } from "langchain/tools";

export const run = async () => {
const model = new OpenAI({ temperature: 0 });
const zapier = new ZapierNLAWrapper();
const toolkit = await ZapierToolKit.fromZapierNLAWrapper(zapier);

const executor = await initializeAgentExecutor(
const executor = await initializeAgentExecutorWithOptions(
toolkit.tools,
model,
"zero-shot-react-description",
true
{
agentType: "zero-shot-react-description",
verbose: true,
}
);
console.log("Loaded agent.");

Expand Down
36 changes: 15 additions & 21 deletions docs/docs/production/tracing.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ Here's an example of how to use tracing in `langchain.js`. All that needs to be

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";
import process from "process";

Expand All @@ -19,12 +19,10 @@ export const run = async () => {
const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand All @@ -41,7 +39,7 @@ We are actively working on improving tracing to work better with concurrency. Fo

```typescript
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";
import process from "process";
import {
Expand All @@ -55,12 +53,10 @@ export const run = async () => {
const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand Down Expand Up @@ -92,13 +88,11 @@ export const run = async () => {
for (const tool of tools) {
tool.callbackManager = callbackManager;
}
const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true,
callbackManager
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
callbackManager,
});
executor.agent.llmChain.callbackManager = callbackManager;
executors.push(executor);
}
Expand Down
20 changes: 9 additions & 11 deletions examples/src/agents/chat_convo_with_tracing.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { ChatOpenAI } from "langchain/chat_models";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";
import { BufferMemory } from "langchain/memory";

Expand All @@ -8,16 +8,14 @@ export const run = async () => {
const model = new ChatOpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"chat-conversational-react-description",
true
);
executor.memory = new BufferMemory({
returnMessages: true,
memoryKey: "chat_history",
inputKey: "input",
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "chat-conversational-react-description",
verbose: true,
memory: new BufferMemory({
returnMessages: true,
memoryKey: "chat_history",
inputKey: "input",
}),
});
console.log("Loaded agent.");

Expand Down
10 changes: 4 additions & 6 deletions examples/src/agents/chat_mrkl.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
import { ChatOpenAI } from "langchain/chat_models";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";

export const run = async () => {
const model = new ChatOpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"chat-zero-shot-react-description"
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "chat-zero-shot-react-description",
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand Down
12 changes: 5 additions & 7 deletions examples/src/agents/chat_mrkl_with_tracing.ts
Original file line number Diff line number Diff line change
@@ -1,18 +1,16 @@
import { ChatOpenAI } from "langchain/chat_models";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";

export const run = async () => {
process.env.LANGCHAIN_HANDLER = "langchain";
const model = new ChatOpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"chat-zero-shot-react-description",
true
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "chat-zero-shot-react-description",
verbose: true,
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand Down
24 changes: 10 additions & 14 deletions examples/src/agents/concurrent_mrkl.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";
import process from "process";
import {
Expand All @@ -13,12 +13,10 @@ export const run = async () => {
const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand Down Expand Up @@ -50,13 +48,11 @@ export const run = async () => {
for (const tool of tools) {
tool.callbackManager = callbackManager;
}
const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true,
callbackManager
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
callbackManager,
});
executor.agent.llmChain.callbackManager = callbackManager;
executors.push(executor);
}
Expand Down
10 changes: 4 additions & 6 deletions examples/src/agents/custom_tool.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { DynamicTool } from "langchain/tools";

export const run = async () => {
Expand All @@ -25,11 +25,9 @@ export const run = async () => {
}),
];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description"
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
});

console.log("Loaded agent.");

Expand Down
12 changes: 5 additions & 7 deletions examples/src/agents/mrkl.ts
Original file line number Diff line number Diff line change
@@ -1,17 +1,15 @@
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";

export const run = async () => {
const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand Down
12 changes: 5 additions & 7 deletions examples/src/agents/mrkl_with_tracing.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import { OpenAI } from "langchain";
import { initializeAgentExecutor } from "langchain/agents";
import { initializeAgentExecutorWithOptions } from "langchain/agents";
import { SerpAPI, Calculator } from "langchain/tools";
import process from "process";

Expand All @@ -8,12 +8,10 @@ export const run = async () => {
const model = new OpenAI({ temperature: 0 });
const tools = [new SerpAPI(), new Calculator()];

const executor = await initializeAgentExecutor(
tools,
model,
"zero-shot-react-description",
true
);
const executor = await initializeAgentExecutorWithOptions(tools, model, {
agentType: "zero-shot-react-description",
verbose: true,
});
console.log("Loaded agent.");

const input = `Who is Olivia Wilde's boyfriend? What is his current age raised to the 0.23 power?`;
Expand Down
Loading