-
Notifications
You must be signed in to change notification settings - Fork 45
Expand file tree
/
Copy pathlangchain.controller.ts
More file actions
173 lines (153 loc) · 4.38 KB
/
langchain.controller.ts
File metadata and controls
173 lines (153 loc) · 4.38 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
import { Request, Response } from 'express'
import { SendResponse } from '../utils/SendResponse.utils'
import langchainService from '../services/langchain.service'
/**
* LangChain Controller
*
* Handles HTTP requests for LangChain-powered AI operations.
* Provides endpoints for:
* - Simple chat with system + user prompts
* - User-only prompts
* - Custom template execution
* - Streaming responses
*/
class LangChainController {
/**
* Simple chat endpoint with system and user prompts
*
* POST /api/v1/langchain/chat
* Body: { systemPrompt: string, userPrompt: string }
*/
async chat(req: Request, res: Response) {
try {
const { systemPrompt, userPrompt } = req.body
if (!userPrompt) {
return SendResponse.error(res, 'userPrompt is required', 400)
}
const defaultSystemPrompt =
systemPrompt || 'You are a helpful AI assistant powered by LocalMind.'
const response = await langchainService.runSimplePrompt(defaultSystemPrompt, userPrompt)
SendResponse.success(
res,
'AI response generated successfully',
{
response,
systemPrompt: defaultSystemPrompt,
userPrompt,
},
200
)
} catch (error: any) {
console.error('LangChain chat error:', error)
SendResponse.error(res, 'Failed to generate AI response', 500, { error: error.message })
}
}
/**
* User prompt only (no system message)
*
* POST /api/v1/langchain/prompt
* Body: { prompt: string }
*/
async prompt(req: Request, res: Response) {
try {
const { prompt } = req.body
if (!prompt) {
return SendResponse.error(res, 'prompt is required', 400)
}
const response = await langchainService.runUserPrompt(prompt)
SendResponse.success(
res,
'AI response generated successfully',
{
response,
prompt,
},
200
)
} catch (error: any) {
console.error('LangChain prompt error:', error)
SendResponse.error(res, 'Failed to generate AI response', 500, { error: error.message })
}
}
/**
* Custom template with variables
*
* POST /api/v1/langchain/template
* Body: { template: string, variables: object }
*/
async customTemplate(req: Request, res: Response) {
try {
const { template, variables } = req.body
if (!template) {
return SendResponse.error(res, 'template is required', 400)
}
if (!variables || typeof variables !== 'object') {
return SendResponse.error(res, 'variables must be an object', 400)
}
const response = await langchainService.runCustomTemplate(template, variables)
SendResponse.success(
res,
'Template executed successfully',
{
response,
template,
variables,
},
200
)
} catch (error: any) {
console.error('LangChain template error:', error)
SendResponse.error(res, 'Failed to execute template', 500, { error: error.message })
}
}
/**
* Health check endpoint to verify LangChain is configured
*
* GET /api/v1/langchain/health
*/
async healthCheck(req: Request, res: Response) {
try {
const model = langchainService.getChatModel()
SendResponse.success(
res,
'LangChain is configured and ready',
{
status: 'operational',
model: model.modelName,
temperature: model.temperature,
maxTokens: model.maxTokens,
},
200
)
} catch (error: any) {
SendResponse.error(res, 'LangChain is not properly configured', 500, { error: error.message })
}
}
/**
* Test endpoint with a simple query
*
* GET /api/v1/langchain/test
*/
async test(req: Request, res: Response) {
try {
const testPrompt = 'Say hello in one sentence and confirm you are working correctly.'
const response = await langchainService.runSimplePrompt(
'You are a helpful AI assistant.',
testPrompt
)
SendResponse.success(
res,
'LangChain test successful',
{
testPrompt,
response,
timestamp: new Date().toISOString(),
},
200
)
} catch (error: any) {
SendResponse.error(res, 'LangChain test failed', 500, { error: error.message })
}
}
}
export default new LangChainController()