langwatch 0.1.7 → 0.3.0-prerelease.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +16 -0
- package/LICENSE +7 -0
- package/README.md +268 -1
- package/copy-types.sh +19 -8
- package/examples/langchain/.env.example +2 -0
- package/examples/langchain/README.md +42 -0
- package/examples/langchain/package-lock.json +2930 -0
- package/examples/langchain/package.json +27 -0
- package/examples/langchain/src/cli-markdown.d.ts +137 -0
- package/examples/langchain/src/index.ts +109 -0
- package/examples/langchain/tsconfig.json +25 -0
- package/examples/langgraph/.env.example +2 -0
- package/examples/langgraph/README.md +42 -0
- package/examples/langgraph/package-lock.json +3031 -0
- package/examples/langgraph/package.json +28 -0
- package/examples/langgraph/src/cli-markdown.d.ts +137 -0
- package/examples/langgraph/src/index.ts +196 -0
- package/examples/langgraph/tsconfig.json +25 -0
- package/examples/mastra/.env.example +2 -0
- package/examples/mastra/README.md +57 -0
- package/examples/mastra/package-lock.json +5296 -0
- package/examples/mastra/package.json +32 -0
- package/examples/mastra/src/cli-markdown.d.ts +137 -0
- package/examples/mastra/src/index.ts +120 -0
- package/examples/mastra/src/mastra/agents/weather-agent.ts +30 -0
- package/examples/mastra/src/mastra/index.ts +21 -0
- package/examples/mastra/src/mastra/tools/weather-tool.ts +102 -0
- package/examples/mastra/tsconfig.json +25 -0
- package/examples/vercel-ai/.env.example +2 -0
- package/examples/vercel-ai/README.md +38 -0
- package/examples/vercel-ai/package-lock.json +2571 -0
- package/examples/vercel-ai/package.json +27 -0
- package/examples/vercel-ai/src/cli-markdown.d.ts +137 -0
- package/examples/vercel-ai/src/index.ts +110 -0
- package/examples/vercel-ai/src/instrumentation.ts +9 -0
- package/examples/vercel-ai/tsconfig.json +25 -0
- package/package.json +80 -33
- package/src/__tests__/client-browser.test.ts +92 -0
- package/src/__tests__/client-node.test.ts +76 -0
- package/src/__tests__/client.test.ts +71 -0
- package/src/__tests__/integration/client-browser.test.ts +46 -0
- package/src/__tests__/integration/client-node.test.ts +46 -0
- package/src/client-browser.ts +70 -0
- package/src/client-node.ts +82 -0
- package/src/client-shared.ts +72 -0
- package/src/client.ts +119 -0
- package/src/evaluation/__tests__/record-evaluation.test.ts +112 -0
- package/src/evaluation/__tests__/run-evaluation.test.ts +171 -0
- package/src/evaluation/index.ts +2 -0
- package/src/evaluation/record-evaluation.ts +101 -0
- package/src/evaluation/run-evaluation.ts +133 -0
- package/src/evaluation/tracer.ts +3 -0
- package/src/evaluation/types.ts +23 -0
- package/src/index.ts +10 -591
- package/src/internal/api/__tests__/errors.test.ts +98 -0
- package/src/internal/api/client.ts +30 -0
- package/src/internal/api/errors.ts +32 -0
- package/src/internal/generated/types/.gitkeep +0 -0
- package/src/observability/__tests__/integration/base.test.ts +74 -0
- package/src/observability/__tests__/integration/browser-setup-ordering.test.ts +60 -0
- package/src/observability/__tests__/integration/complex-nested-spans.test.ts +29 -0
- package/src/observability/__tests__/integration/error-handling.test.ts +24 -0
- package/src/observability/__tests__/integration/langwatch-disabled-otel.test.ts +24 -0
- package/src/observability/__tests__/integration/langwatch-first-then-vercel.test.ts +24 -0
- package/src/observability/__tests__/integration/multiple-setup-attempts.test.ts +27 -0
- package/src/observability/__tests__/integration/otel-ordering.test.ts +27 -0
- package/src/observability/__tests__/integration/vercel-configurations.test.ts +20 -0
- package/src/observability/__tests__/integration/vercel-first-then-langwatch.test.ts +27 -0
- package/src/observability/__tests__/span.test.ts +214 -0
- package/src/observability/__tests__/trace.test.ts +180 -0
- package/src/observability/exporters/index.ts +1 -0
- package/src/observability/exporters/langwatch-exporter.ts +53 -0
- package/src/observability/index.ts +4 -0
- package/src/observability/instrumentation/langchain/__tests__/integration/langchain-chatbot.test.ts +112 -0
- package/src/observability/instrumentation/langchain/__tests__/langchain.test.ts +284 -0
- package/src/observability/instrumentation/langchain/index.ts +624 -0
- package/src/observability/processors/__tests__/filterable-batch-span-exporter.test.ts +98 -0
- package/src/observability/processors/filterable-batch-span-processor.ts +99 -0
- package/src/observability/processors/index.ts +1 -0
- package/src/observability/semconv/attributes.ts +185 -0
- package/src/observability/semconv/events.ts +42 -0
- package/src/observability/semconv/index.ts +16 -0
- package/src/observability/semconv/values.ts +159 -0
- package/src/observability/span.ts +728 -0
- package/src/observability/trace.ts +301 -0
- package/src/prompt/__tests__/prompt.test.ts +139 -0
- package/src/prompt/get-prompt-version.ts +49 -0
- package/src/prompt/get-prompt.ts +44 -0
- package/src/prompt/index.ts +3 -0
- package/src/prompt/prompt.ts +133 -0
- package/src/prompt/service.ts +221 -0
- package/src/prompt/tracer.ts +3 -0
- package/src/prompt/types.ts +0 -0
- package/ts-to-zod.config.js +11 -0
- package/tsconfig.json +3 -9
- package/tsup.config.ts +11 -1
- package/vitest.config.ts +1 -0
- package/dist/chunk-FWBCQQYZ.mjs +0 -711
- package/dist/chunk-FWBCQQYZ.mjs.map +0 -1
- package/dist/index.d.mts +0 -1010
- package/dist/index.d.ts +0 -1010
- package/dist/index.js +0 -27294
- package/dist/index.js.map +0 -1
- package/dist/index.mjs +0 -959
- package/dist/index.mjs.map +0 -1
- package/dist/utils-B0pgWcps.d.mts +0 -303
- package/dist/utils-B0pgWcps.d.ts +0 -303
- package/dist/utils.d.mts +0 -2
- package/dist/utils.d.ts +0 -2
- package/dist/utils.js +0 -703
- package/dist/utils.js.map +0 -1
- package/dist/utils.mjs +0 -11
- package/dist/utils.mjs.map +0 -1
- package/example/.env.example +0 -12
- package/example/.eslintrc.json +0 -26
- package/example/LICENSE +0 -13
- package/example/README.md +0 -12
- package/example/app/(chat)/chat/[id]/page.tsx +0 -60
- package/example/app/(chat)/layout.tsx +0 -14
- package/example/app/(chat)/page.tsx +0 -27
- package/example/app/actions.ts +0 -156
- package/example/app/globals.css +0 -76
- package/example/app/guardrails/page.tsx +0 -26
- package/example/app/langchain/page.tsx +0 -27
- package/example/app/langchain-rag/page.tsx +0 -28
- package/example/app/late-update/page.tsx +0 -27
- package/example/app/layout.tsx +0 -64
- package/example/app/login/actions.ts +0 -71
- package/example/app/login/page.tsx +0 -18
- package/example/app/manual/page.tsx +0 -27
- package/example/app/new/page.tsx +0 -5
- package/example/app/opengraph-image.png +0 -0
- package/example/app/share/[id]/page.tsx +0 -58
- package/example/app/signup/actions.ts +0 -111
- package/example/app/signup/page.tsx +0 -18
- package/example/app/twitter-image.png +0 -0
- package/example/auth.config.ts +0 -42
- package/example/auth.ts +0 -45
- package/example/components/button-scroll-to-bottom.tsx +0 -36
- package/example/components/chat-history.tsx +0 -49
- package/example/components/chat-list.tsx +0 -52
- package/example/components/chat-message-actions.tsx +0 -40
- package/example/components/chat-message.tsx +0 -80
- package/example/components/chat-panel.tsx +0 -139
- package/example/components/chat-share-dialog.tsx +0 -95
- package/example/components/chat.tsx +0 -84
- package/example/components/clear-history.tsx +0 -75
- package/example/components/empty-screen.tsx +0 -38
- package/example/components/external-link.tsx +0 -29
- package/example/components/footer.tsx +0 -19
- package/example/components/header.tsx +0 -114
- package/example/components/login-button.tsx +0 -42
- package/example/components/login-form.tsx +0 -97
- package/example/components/markdown.tsx +0 -9
- package/example/components/prompt-form.tsx +0 -115
- package/example/components/providers.tsx +0 -17
- package/example/components/sidebar-actions.tsx +0 -125
- package/example/components/sidebar-desktop.tsx +0 -19
- package/example/components/sidebar-footer.tsx +0 -16
- package/example/components/sidebar-item.tsx +0 -124
- package/example/components/sidebar-items.tsx +0 -42
- package/example/components/sidebar-list.tsx +0 -38
- package/example/components/sidebar-mobile.tsx +0 -31
- package/example/components/sidebar-toggle.tsx +0 -24
- package/example/components/sidebar.tsx +0 -21
- package/example/components/signup-form.tsx +0 -95
- package/example/components/stocks/events-skeleton.tsx +0 -31
- package/example/components/stocks/events.tsx +0 -30
- package/example/components/stocks/index.tsx +0 -36
- package/example/components/stocks/message.tsx +0 -134
- package/example/components/stocks/spinner.tsx +0 -16
- package/example/components/stocks/stock-purchase.tsx +0 -146
- package/example/components/stocks/stock-skeleton.tsx +0 -22
- package/example/components/stocks/stock.tsx +0 -210
- package/example/components/stocks/stocks-skeleton.tsx +0 -9
- package/example/components/stocks/stocks.tsx +0 -67
- package/example/components/tailwind-indicator.tsx +0 -14
- package/example/components/theme-toggle.tsx +0 -31
- package/example/components/ui/alert-dialog.tsx +0 -141
- package/example/components/ui/badge.tsx +0 -36
- package/example/components/ui/button.tsx +0 -57
- package/example/components/ui/codeblock.tsx +0 -148
- package/example/components/ui/dialog.tsx +0 -122
- package/example/components/ui/dropdown-menu.tsx +0 -205
- package/example/components/ui/icons.tsx +0 -507
- package/example/components/ui/input.tsx +0 -25
- package/example/components/ui/label.tsx +0 -26
- package/example/components/ui/select.tsx +0 -164
- package/example/components/ui/separator.tsx +0 -31
- package/example/components/ui/sheet.tsx +0 -140
- package/example/components/ui/sonner.tsx +0 -31
- package/example/components/ui/switch.tsx +0 -29
- package/example/components/ui/textarea.tsx +0 -24
- package/example/components/ui/tooltip.tsx +0 -30
- package/example/components/user-menu.tsx +0 -53
- package/example/components.json +0 -17
- package/example/instrumentation.ts +0 -11
- package/example/lib/chat/guardrails.tsx +0 -181
- package/example/lib/chat/langchain-rag.tsx +0 -191
- package/example/lib/chat/langchain.tsx +0 -112
- package/example/lib/chat/late-update.tsx +0 -208
- package/example/lib/chat/manual.tsx +0 -605
- package/example/lib/chat/vercel-ai.tsx +0 -576
- package/example/lib/hooks/use-copy-to-clipboard.tsx +0 -33
- package/example/lib/hooks/use-enter-submit.tsx +0 -23
- package/example/lib/hooks/use-local-storage.ts +0 -24
- package/example/lib/hooks/use-scroll-anchor.tsx +0 -86
- package/example/lib/hooks/use-sidebar.tsx +0 -60
- package/example/lib/hooks/use-streamable-text.ts +0 -25
- package/example/lib/types.ts +0 -41
- package/example/lib/utils.ts +0 -89
- package/example/middleware.ts +0 -8
- package/example/next-env.d.ts +0 -5
- package/example/next.config.js +0 -16
- package/example/package-lock.json +0 -9990
- package/example/package.json +0 -84
- package/example/pnpm-lock.yaml +0 -5712
- package/example/postcss.config.js +0 -6
- package/example/prettier.config.cjs +0 -34
- package/example/public/apple-touch-icon.png +0 -0
- package/example/public/favicon-16x16.png +0 -0
- package/example/public/favicon.ico +0 -0
- package/example/public/next.svg +0 -1
- package/example/public/thirteen.svg +0 -1
- package/example/public/vercel.svg +0 -1
- package/example/tailwind.config.ts +0 -81
- package/example/tsconfig.json +0 -35
- package/src/LangWatchExporter.ts +0 -91
- package/src/evaluations.ts +0 -219
- package/src/index.test.ts +0 -402
- package/src/langchain.ts +0 -557
- package/src/typeUtils.ts +0 -89
- package/src/types.ts +0 -79
- package/src/utils.ts +0 -205
- /package/src/{server/types → internal/generated/openapi}/.gitkeep +0 -0
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "langchain-sdk-example",
|
|
3
|
+
"description": "",
|
|
4
|
+
"main": "index.js",
|
|
5
|
+
"scripts": {
|
|
6
|
+
"start": "tsc && dotenv -- node dist/index.js",
|
|
7
|
+
"build": "tsc",
|
|
8
|
+
"test": "echo \"Error: no test specified\" && exit 1"
|
|
9
|
+
},
|
|
10
|
+
"keywords": [],
|
|
11
|
+
"author": "LangWatch",
|
|
12
|
+
"type": "module",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"dependencies": {
|
|
15
|
+
"@langchain/openai": "^0.6.3",
|
|
16
|
+
"@langchain/core": "^0.3.66",
|
|
17
|
+
"langchain": "^0.3.30",
|
|
18
|
+
"@opentelemetry/context-async-hooks": "^2.0.1",
|
|
19
|
+
"@opentelemetry/sdk-node": "^0.203.0",
|
|
20
|
+
"cli-markdown": "^3.5.1",
|
|
21
|
+
"dotenv-cli": "^10.0.0",
|
|
22
|
+
"langwatch": "file:../../"
|
|
23
|
+
},
|
|
24
|
+
"devDependencies": {
|
|
25
|
+
"typescript": "^5.9.2"
|
|
26
|
+
}
|
|
27
|
+
}
|
|
@@ -0,0 +1,137 @@
|
|
|
1
|
+
declare module 'cli-markdown' {
|
|
2
|
+
export interface CliMarkdownOptions {
|
|
3
|
+
/**
|
|
4
|
+
* Custom styles for different markdown elements
|
|
5
|
+
*/
|
|
6
|
+
styles?: {
|
|
7
|
+
/**
|
|
8
|
+
* Style for headings (h1, h2, h3, etc.)
|
|
9
|
+
*/
|
|
10
|
+
heading?: string;
|
|
11
|
+
/**
|
|
12
|
+
* Style for bold text
|
|
13
|
+
*/
|
|
14
|
+
bold?: string;
|
|
15
|
+
/**
|
|
16
|
+
* Style for italic text
|
|
17
|
+
*/
|
|
18
|
+
italic?: string;
|
|
19
|
+
/**
|
|
20
|
+
* Style for code blocks
|
|
21
|
+
*/
|
|
22
|
+
code?: string;
|
|
23
|
+
/**
|
|
24
|
+
* Style for inline code
|
|
25
|
+
*/
|
|
26
|
+
inlineCode?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Style for links
|
|
29
|
+
*/
|
|
30
|
+
link?: string;
|
|
31
|
+
/**
|
|
32
|
+
* Style for lists
|
|
33
|
+
*/
|
|
34
|
+
list?: string;
|
|
35
|
+
/**
|
|
36
|
+
* Style for blockquotes
|
|
37
|
+
*/
|
|
38
|
+
blockquote?: string;
|
|
39
|
+
/**
|
|
40
|
+
* Style for horizontal rules
|
|
41
|
+
*/
|
|
42
|
+
hr?: string;
|
|
43
|
+
};
|
|
44
|
+
/**
|
|
45
|
+
* Whether to preserve line breaks
|
|
46
|
+
*/
|
|
47
|
+
preserveLineBreaks?: boolean;
|
|
48
|
+
/**
|
|
49
|
+
* Custom renderer functions for different markdown elements
|
|
50
|
+
*/
|
|
51
|
+
renderers?: {
|
|
52
|
+
/**
|
|
53
|
+
* Custom renderer for headings
|
|
54
|
+
*/
|
|
55
|
+
heading?: (text: string, level: number) => string;
|
|
56
|
+
/**
|
|
57
|
+
* Custom renderer for paragraphs
|
|
58
|
+
*/
|
|
59
|
+
paragraph?: (text: string) => string;
|
|
60
|
+
/**
|
|
61
|
+
* Custom renderer for lists
|
|
62
|
+
*/
|
|
63
|
+
list?: (items: string[], ordered: boolean) => string;
|
|
64
|
+
/**
|
|
65
|
+
* Custom renderer for list items
|
|
66
|
+
*/
|
|
67
|
+
listItem?: (text: string, index: number) => string;
|
|
68
|
+
/**
|
|
69
|
+
* Custom renderer for code blocks
|
|
70
|
+
*/
|
|
71
|
+
code?: (code: string, language?: string) => string;
|
|
72
|
+
/**
|
|
73
|
+
* Custom renderer for inline code
|
|
74
|
+
*/
|
|
75
|
+
inlineCode?: (code: string) => string;
|
|
76
|
+
/**
|
|
77
|
+
* Custom renderer for links
|
|
78
|
+
*/
|
|
79
|
+
link?: (text: string, url: string) => string;
|
|
80
|
+
/**
|
|
81
|
+
* Custom renderer for images
|
|
82
|
+
*/
|
|
83
|
+
image?: (alt: string, url: string) => string;
|
|
84
|
+
/**
|
|
85
|
+
* Custom renderer for blockquotes
|
|
86
|
+
*/
|
|
87
|
+
blockquote?: (text: string) => string;
|
|
88
|
+
/**
|
|
89
|
+
* Custom renderer for horizontal rules
|
|
90
|
+
*/
|
|
91
|
+
hr?: () => string;
|
|
92
|
+
/**
|
|
93
|
+
* Custom renderer for emphasis (bold/italic)
|
|
94
|
+
*/
|
|
95
|
+
emphasis?: (text: string, type: 'bold' | 'italic') => string;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* Maximum width for text wrapping
|
|
99
|
+
*/
|
|
100
|
+
maxWidth?: number;
|
|
101
|
+
/**
|
|
102
|
+
* Whether to enable ANSI color codes
|
|
103
|
+
*/
|
|
104
|
+
colors?: boolean;
|
|
105
|
+
/**
|
|
106
|
+
* Custom color theme
|
|
107
|
+
*/
|
|
108
|
+
theme?: {
|
|
109
|
+
/**
|
|
110
|
+
* Color for headings
|
|
111
|
+
*/
|
|
112
|
+
heading?: string;
|
|
113
|
+
/**
|
|
114
|
+
* Color for links
|
|
115
|
+
*/
|
|
116
|
+
link?: string;
|
|
117
|
+
/**
|
|
118
|
+
* Color for code
|
|
119
|
+
*/
|
|
120
|
+
code?: string;
|
|
121
|
+
/**
|
|
122
|
+
* Color for blockquotes
|
|
123
|
+
*/
|
|
124
|
+
blockquote?: string;
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Converts markdown text to formatted CLI output
|
|
130
|
+
* @param markdown - The markdown text to convert
|
|
131
|
+
* @param options - Configuration options for the conversion
|
|
132
|
+
* @returns Formatted CLI text
|
|
133
|
+
*/
|
|
134
|
+
function cliMarkdown(markdown: string, options?: CliMarkdownOptions): string;
|
|
135
|
+
|
|
136
|
+
export = cliMarkdown;
|
|
137
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { setupLangWatch } from "langwatch/node";
|
|
2
|
+
import { LangWatchCallbackHandler } from "langwatch/observability/instrumentation/langchain";
|
|
3
|
+
import { getLangWatchTracer } from "langwatch";
|
|
4
|
+
import { semconv } from "langwatch/observability";
|
|
5
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
6
|
+
import { HumanMessage, SystemMessage } from "@langchain/core/messages";
|
|
7
|
+
import * as readline from "readline";
|
|
8
|
+
import cliMarkdown from "cli-markdown";
|
|
9
|
+
|
|
10
|
+
await setupLangWatch();
|
|
11
|
+
|
|
12
|
+
const tracer = getLangWatchTracer("langchain-sdk-example");
|
|
13
|
+
|
|
14
|
+
async function main() {
|
|
15
|
+
const threadId = crypto.randomUUID();
|
|
16
|
+
const langWatchCallback = new LangWatchCallbackHandler();
|
|
17
|
+
|
|
18
|
+
const rl = readline.createInterface({
|
|
19
|
+
input: process.stdin,
|
|
20
|
+
output: process.stdout,
|
|
21
|
+
});
|
|
22
|
+
|
|
23
|
+
console.log('🤖 AI Chatbot started! Type "quit" to exit.');
|
|
24
|
+
console.log("---");
|
|
25
|
+
|
|
26
|
+
// Initialize LangChain chat model
|
|
27
|
+
const chatModel = new ChatOpenAI({
|
|
28
|
+
modelName: "gpt-4o-mini",
|
|
29
|
+
temperature: 0.7,
|
|
30
|
+
callbacks: [langWatchCallback],
|
|
31
|
+
});
|
|
32
|
+
|
|
33
|
+
const conversationHistory: Array<HumanMessage | SystemMessage> = [
|
|
34
|
+
new SystemMessage(
|
|
35
|
+
"You are a helpful assistant that can answer questions and help with tasks. You may use markdown to format your responses."
|
|
36
|
+
),
|
|
37
|
+
];
|
|
38
|
+
|
|
39
|
+
while (true) {
|
|
40
|
+
let finish = false;
|
|
41
|
+
|
|
42
|
+
await tracer.withActiveSpan("iteration", {
|
|
43
|
+
attributes: {
|
|
44
|
+
[semconv.ATTR_LANGWATCH_THREAD_ID]: threadId,
|
|
45
|
+
},
|
|
46
|
+
}, async (span) => {
|
|
47
|
+
try {
|
|
48
|
+
// Get user input
|
|
49
|
+
const userInput = await new Promise<string>((resolve) => {
|
|
50
|
+
rl.question("You: ", resolve);
|
|
51
|
+
});
|
|
52
|
+
|
|
53
|
+
// Check for exit command
|
|
54
|
+
if (
|
|
55
|
+
userInput.toLowerCase() === "quit" ||
|
|
56
|
+
userInput.toLowerCase() === "exit"
|
|
57
|
+
) {
|
|
58
|
+
console.log("👋 Goodbye!");
|
|
59
|
+
finish = true;
|
|
60
|
+
return;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// Skip empty input
|
|
64
|
+
if (!userInput.trim()) {
|
|
65
|
+
return;
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
// Add user message to conversation history
|
|
69
|
+
conversationHistory.push(new HumanMessage(userInput));
|
|
70
|
+
|
|
71
|
+
// Generate AI response
|
|
72
|
+
console.log("🤖 Thinking...");
|
|
73
|
+
|
|
74
|
+
const result = await chatModel.invoke(conversationHistory, { callbacks: [] });
|
|
75
|
+
const aiResponse = result.content as string;
|
|
76
|
+
|
|
77
|
+
// Add AI response to conversation history
|
|
78
|
+
conversationHistory.push(result);
|
|
79
|
+
|
|
80
|
+
// Display AI response with markdown formatting
|
|
81
|
+
console.log("AI:");
|
|
82
|
+
console.log(
|
|
83
|
+
`${cliMarkdown(aiResponse, {
|
|
84
|
+
colors: true,
|
|
85
|
+
maxWidth: 80,
|
|
86
|
+
theme: {
|
|
87
|
+
heading: "cyan",
|
|
88
|
+
link: "blue",
|
|
89
|
+
code: "green",
|
|
90
|
+
blockquote: "yellow",
|
|
91
|
+
},
|
|
92
|
+
})}---`,
|
|
93
|
+
);
|
|
94
|
+
} catch (error) {
|
|
95
|
+
console.error("❌ Error:", error);
|
|
96
|
+
console.log("Please try again.");
|
|
97
|
+
}
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
if (finish) {
|
|
101
|
+
break;
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
rl.close();
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Run the chatbot
|
|
109
|
+
main().catch(console.error);
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
{
|
|
2
|
+
"compilerOptions": {
|
|
3
|
+
"target": "ES2022",
|
|
4
|
+
"module": "node16",
|
|
5
|
+
"moduleResolution": "node16",
|
|
6
|
+
"outDir": "./dist",
|
|
7
|
+
"rootDir": "./src",
|
|
8
|
+
"strict": true,
|
|
9
|
+
"esModuleInterop": true,
|
|
10
|
+
"skipLibCheck": true,
|
|
11
|
+
"forceConsistentCasingInFileNames": true,
|
|
12
|
+
"allowSyntheticDefaultImports": true,
|
|
13
|
+
"resolveJsonModule": true,
|
|
14
|
+
"declaration": true,
|
|
15
|
+
"declarationMap": true,
|
|
16
|
+
"sourceMap": true
|
|
17
|
+
},
|
|
18
|
+
"include": [
|
|
19
|
+
"src/**/*"
|
|
20
|
+
],
|
|
21
|
+
"exclude": [
|
|
22
|
+
"node_modules",
|
|
23
|
+
"dist"
|
|
24
|
+
]
|
|
25
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# LangGraph Example
|
|
2
|
+
|
|
3
|
+
This directory contains examples of AI apps built with the LangWatch SDK and LangGraph.
|
|
4
|
+
|
|
5
|
+
## Example
|
|
6
|
+
|
|
7
|
+
### Basic Chatbot (`src/index.ts`)
|
|
8
|
+
|
|
9
|
+
A simple chatbot that handles basic conversation flow using LangGraph:
|
|
10
|
+
|
|
11
|
+
- **Features:**
|
|
12
|
+
- Basic conversation loop
|
|
13
|
+
- User input handling
|
|
14
|
+
- AI response generation using LangGraph
|
|
15
|
+
- Conversation history management
|
|
16
|
+
- Error handling
|
|
17
|
+
- Exit commands (`quit`, `exit`)
|
|
18
|
+
|
|
19
|
+
- **Usage:**
|
|
20
|
+
```bash
|
|
21
|
+
npm run start
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Troubleshooting
|
|
25
|
+
|
|
26
|
+
### Common Issues:
|
|
27
|
+
|
|
28
|
+
1. **"Cannot find module 'langwatch/node'"**
|
|
29
|
+
- Make sure you've built the LangWatch SDK
|
|
30
|
+
- Check that the package is properly built
|
|
31
|
+
|
|
32
|
+
2. **OpenAI API errors**
|
|
33
|
+
- Verify your API key is set correctly
|
|
34
|
+
- Check your OpenAI account has sufficient credits
|
|
35
|
+
|
|
36
|
+
3. **TypeScript compilation errors**
|
|
37
|
+
- Run `npm run start` to check for type errors
|
|
38
|
+
- Ensure all dependencies are installed
|
|
39
|
+
|
|
40
|
+
4. **LangGraph import errors**
|
|
41
|
+
- Make sure all LangGraph dependencies are installed
|
|
42
|
+
- Check that the LangGraph version is compatible
|