docs: add TS example in core (#824)

This commit is contained in:
cthomas 2025-01-28 18:08:29 -08:00 committed by GitHub
parent 5fcca8a010
commit 1bc102e754
4 changed files with 1488 additions and 0 deletions

View File

@ -0,0 +1,138 @@
import { LettaClient } from '@letta-ai/letta-client';
import {
AssistantMessage,
ReasoningMessage,
ToolCallMessage,
ToolReturnMessage,
} from '@letta-ai/letta-client/api/types';
// Start letta server and run `npm run example`
const client = new LettaClient({
baseUrl: 'http://localhost:8283',
});
const agent = await client.agents.create({
memoryBlocks: [
{
value: 'name: Caren',
label: 'human',
},
],
model: 'openai/gpt-4o-mini',
embedding: 'openai/text-embedding-ada-002',
});
console.log('Created agent with name', agent.name);
let messageText = "What's my name?";
let response = await client.agents.messages.create(agent.id, {
messages: [
{
role: 'user',
content: messageText,
},
],
});
console.log(`Sent message to agent ${agent.name}: ${messageText}`);
console.log(
'Agent thoughts:',
(response.messages[0] as ReasoningMessage).reasoning,
);
console.log(
'Agent response:',
(response.messages[1] as AssistantMessage).content,
);
const custom_tool_source_code = `
def secret_message():
"""Return a secret message."""
return "Hello world!"
`.trim();
const tool = await client.tools.upsert({
sourceCode: custom_tool_source_code,
});
await client.agents.tools.attach(agent.id, tool.id!);
console.log(
`Created tool with name ${tool.name} and attached to agent ${agent.name}`,
);
messageText = 'Run secret message tool and tell me what it returns';
response = await client.agents.messages.create(agent.id, {
messages: [
{
role: 'user',
content: messageText,
},
],
});
console.log('Sent message to agent:', messageText);
console.log(
'Agent thoughts',
(response.messages[0] as ReasoningMessage).reasoning,
);
console.log(
'Tool call information',
(response.messages[1] as ToolCallMessage).toolCall,
);
console.log(
'Tool response information',
(response.messages[2] as ToolReturnMessage).status,
);
console.log(
'Agent thoughts',
(response.messages[3] as ReasoningMessage).reasoning,
);
console.log(
'Agent response:',
(response.messages[4] as AssistantMessage).content,
);
let agentCopy = await client.agents.create({
model: 'openai/gpt-4o-mini',
embedding: 'openai/text-embedding-ada-002',
});
let block = await client.agents.coreMemory.retrieveBlock(agent.id, 'human');
agentCopy = await client.agents.coreMemory.attachBlock(agentCopy.id, block.id!);
console.log('Created agent copy with shared memory named', agentCopy.name);
messageText =
"My name isn't Caren, it's Sarah. Please update your core memory with core_memory_replace";
console.log(`Sent message to agent ${agentCopy.name}: ${messageText}`);
response = await client.agents.messages.create(agentCopy.id, {
messages: [
{
role: 'user',
content: messageText,
},
],
});
block = await client.agents.coreMemory.retrieveBlock(agentCopy.id, 'human');
console.log(`New core memory for agent ${agentCopy.name}: ${block.value}`);
messageText = "What's my name?";
response = await client.agents.messages.create(agentCopy.id, {
messages: [
{
role: 'user',
content: messageText,
},
],
});
console.log(`Sent message to agent ${agentCopy.name}: ${messageText}`);
console.log(
'Agent thoughts:',
(response.messages[0] as ReasoningMessage).reasoning,
);
console.log(
'Agent response:',
(response.messages[1] as AssistantMessage).content,
);

1314
examples/docs/node/package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,18 @@
{
"name": "@letta-ai/core",
"version": "0.1.0",
"private": true,
"type": "module",
"scripts": {
"example": "node --no-warnings --import 'data:text/javascript,import { register } from \"node:module\"; import { pathToFileURL } from \"node:url\"; register(\"ts-node/esm\", pathToFileURL(\"./\"));' example.ts",
"build": "tsc"
},
"dependencies": {
"@letta-ai/letta-client": "^0.1.17"
},
"devDependencies": {
"@types/node": "^22.12.0",
"ts-node": "^10.9.2",
"typescript": "^5.7.3"
}
}

View File

@ -0,0 +1,18 @@
{
"compilerOptions": {
"target": "es2017",
"module": "esnext",
"lib": ["es2017", "dom"],
"declaration": true,
"strict": true,
"moduleResolution": "node",
"esModuleInterop": true,
"skipLibCheck": true,
"forceConsistentCasingInFileNames": true,
"outDir": "./dist",
"rootDir": ".",
"resolveJsonModule": true
},
"include": ["*.ts"],
"exclude": ["node_modules", "dist"]
}