@luanpoppe/ai 1.0.2 → 1.0.4
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/dist/index.d.ts +17 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +27 -13
- package/dist/index.js.map +1 -1
- package/dist/langchain/models.d.ts +10 -4
- package/dist/langchain/models.d.ts.map +1 -1
- package/dist/langchain/models.js +22 -10
- package/dist/langchain/models.js.map +1 -1
- package/package.json +3 -2
- package/src/index.ts +42 -15
- package/src/langchain/models.ts +32 -12
package/dist/index.d.ts
CHANGED
|
@@ -1,40 +1,47 @@
|
|
|
1
|
-
import { LangchainModels } from "./langchain/models";
|
|
1
|
+
import { LangchainModels, LLMModelConfig } from "./langchain/models";
|
|
2
2
|
import { AIModelNames } from "./@types/model-names";
|
|
3
3
|
import z from "zod";
|
|
4
4
|
import { MessageInput } from "./langchain/messages";
|
|
5
5
|
import { AgentMiddleware, BaseMessage } from "langchain";
|
|
6
6
|
import { ClientTool, ServerTool } from "@langchain/core/tools";
|
|
7
7
|
import { LangchainMessages } from "./langchain/messages";
|
|
8
|
+
import { LangchainTools } from "./langchain/tools";
|
|
8
9
|
type LangchainConstructor = {
|
|
9
10
|
googleGeminiToken?: string;
|
|
10
11
|
openAIApiKey?: string;
|
|
11
12
|
};
|
|
12
|
-
export type
|
|
13
|
+
export type LangchainCallParams = {
|
|
14
|
+
agent: {
|
|
15
|
+
middleware?: AgentMiddleware[];
|
|
16
|
+
tools?: (ServerTool | ClientTool)[];
|
|
17
|
+
};
|
|
18
|
+
model: Omit<LLMModelConfig, "apiKey" | "model">;
|
|
13
19
|
aiModel: AIModelNames;
|
|
14
20
|
messages: MessageInput[];
|
|
15
21
|
systemPrompt?: string;
|
|
16
22
|
maxRetries?: number;
|
|
17
|
-
middleware?: AgentMiddleware[];
|
|
18
|
-
tools?: (ServerTool | ClientTool)[];
|
|
19
23
|
};
|
|
20
|
-
export type
|
|
24
|
+
export type LangchainCallReturn = Promise<{
|
|
21
25
|
text: string;
|
|
22
26
|
messages: BaseMessage[];
|
|
23
27
|
}>;
|
|
24
|
-
export type
|
|
28
|
+
export type LangchainCallStructuredOutputParams<T extends z.ZodSchema> = LangchainCallParams & {
|
|
25
29
|
outputSchema: T;
|
|
26
30
|
};
|
|
27
|
-
export type
|
|
31
|
+
export type LangchainCallStructuredOutputReturn<T> = Promise<{
|
|
28
32
|
response: z.infer<T>;
|
|
29
33
|
}>;
|
|
30
34
|
export declare class Langchain {
|
|
31
35
|
private tokens;
|
|
32
36
|
constructor(tokens: LangchainConstructor);
|
|
33
|
-
call(params:
|
|
34
|
-
callStructuredOutput<T extends z.ZodSchema>(params:
|
|
37
|
+
call(params: LangchainCallParams): LangchainCallReturn;
|
|
38
|
+
callStructuredOutput<T extends z.ZodSchema>(params: LangchainCallStructuredOutputParams<T>): LangchainCallStructuredOutputReturn<typeof params.outputSchema>;
|
|
39
|
+
getRawAgent(params: LangchainCallParams, outputSchema?: z.ZodSchema | undefined): {
|
|
40
|
+
agent: import("langchain").ReactAgent<Record<string, any>, import("@langchain/core/utils/types").InteropZodObject | import("langchain").AnyAnnotationRoot | undefined, import("@langchain/core/utils/types").InteropZodObject | import("langchain").AnyAnnotationRoot, readonly AgentMiddleware<any, any, any>[]>;
|
|
41
|
+
};
|
|
35
42
|
private getModel;
|
|
36
43
|
private standardAgent;
|
|
37
44
|
private standardMiddlewares;
|
|
38
45
|
}
|
|
39
|
-
export { LangchainModels, LangchainMessages };
|
|
46
|
+
export { LangchainModels, LangchainMessages, LangchainTools };
|
|
40
47
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,CAAC,MAAM,KAAK,CAAC;AACpB,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EACL,eAAe,EACf,WAAW,EAIZ,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AACzD,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAEnD,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,KAAK,EAAE;QACL,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC;KACrC,CAAC;IAEF,KAAK,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;IAEhD,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG,OAAO,CAAC;IACxC,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,mCAAmC,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,IACnE,mBAAmB,GAAG;IACpB,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC;AAEJ,MAAM,MAAM,mCAAmC,CAAC,CAAC,IAAI,OAAO,CAAC;IAC3D,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;CACtB,CAAC,CAAC;AAEH,qBAAa,SAAS;IACR,OAAO,CAAC,MAAM;gBAAN,MAAM,EAAE,oBAAoB;IAE1C,IAAI,CAAC,MAAM,EAAE,mBAAmB,GAAG,mBAAmB;IAiBtD,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAC9C,MAAM,EAAE,mCAAmC,CAAC,CAAC,CAAC,GAC7C,mCAAmC,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC;IAiBlE,WAAW,CACT,MAAM,EAAE,mBAAmB,EAC3B,YAAY,CAAC,EAAE,CAAC,CAAC,SAAS,GAAG,SAAS;;;IAUxC,OAAO,CAAC,QAAQ;IAyBhB,OAAO,CAAC,aAAa;IAmBrB,OAAO,CAAC,mBAAmB;CAU5B;AAED,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.LangchainMessages = exports.LangchainModels = exports.Langchain = void 0;
|
|
3
|
+
exports.LangchainTools = exports.LangchainMessages = exports.LangchainModels = exports.Langchain = void 0;
|
|
4
4
|
const models_1 = require("./langchain/models");
|
|
5
5
|
Object.defineProperty(exports, "LangchainModels", { enumerable: true, get: function () { return models_1.LangchainModels; } });
|
|
6
6
|
const langchain_1 = require("langchain");
|
|
7
7
|
const messages_1 = require("./langchain/messages");
|
|
8
8
|
Object.defineProperty(exports, "LangchainMessages", { enumerable: true, get: function () { return messages_1.LangchainMessages; } });
|
|
9
|
+
const tools_1 = require("./langchain/tools");
|
|
10
|
+
Object.defineProperty(exports, "LangchainTools", { enumerable: true, get: function () { return tools_1.LangchainTools; } });
|
|
9
11
|
class Langchain {
|
|
10
12
|
tokens;
|
|
11
13
|
constructor(tokens) {
|
|
@@ -18,7 +20,8 @@ class Langchain {
|
|
|
18
20
|
});
|
|
19
21
|
const response = await agent.invoke({ messages });
|
|
20
22
|
return {
|
|
21
|
-
text: response.messages
|
|
23
|
+
text: response.messages.at(-1)?.content ??
|
|
24
|
+
"Empty response from the model",
|
|
22
25
|
messages: response.messages,
|
|
23
26
|
};
|
|
24
27
|
}
|
|
@@ -34,24 +37,35 @@ class Langchain {
|
|
|
34
37
|
const parsedResponse = outputSchema.parse(response?.structuredResponse);
|
|
35
38
|
return { response: parsedResponse };
|
|
36
39
|
}
|
|
37
|
-
|
|
40
|
+
getRawAgent(params, outputSchema) {
|
|
41
|
+
const agent = (0, langchain_1.createAgent)({
|
|
42
|
+
...this.standardAgent(params),
|
|
43
|
+
responseFormat: outputSchema,
|
|
44
|
+
});
|
|
45
|
+
return { agent };
|
|
46
|
+
}
|
|
47
|
+
getModel(params) {
|
|
48
|
+
const { aiModel, model } = params;
|
|
49
|
+
const { maxTokens, temperature } = model;
|
|
50
|
+
const config = {
|
|
51
|
+
model: aiModel,
|
|
52
|
+
maxTokens: maxTokens,
|
|
53
|
+
temperature: temperature,
|
|
54
|
+
};
|
|
38
55
|
if (aiModel.startsWith("gpt")) {
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
apiKey: this.tokens.openAIApiKey,
|
|
42
|
-
});
|
|
56
|
+
config.apiKey = this.tokens.openAIApiKey;
|
|
57
|
+
return models_1.LangchainModels.gpt(config);
|
|
43
58
|
}
|
|
44
59
|
if (aiModel.startsWith("gemini")) {
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
apiKey: this.tokens.googleGeminiToken ?? "",
|
|
48
|
-
});
|
|
60
|
+
config.apiKey = this.tokens.googleGeminiToken;
|
|
61
|
+
return models_1.LangchainModels.gemini(config);
|
|
49
62
|
}
|
|
50
63
|
throw new Error("Model not supported");
|
|
51
64
|
}
|
|
52
65
|
standardAgent(params) {
|
|
53
|
-
const {
|
|
54
|
-
const
|
|
66
|
+
const { systemPrompt, maxRetries = 3 } = params;
|
|
67
|
+
const { middleware, tools } = params.agent;
|
|
68
|
+
const model = this.getModel(params);
|
|
55
69
|
return {
|
|
56
70
|
model,
|
|
57
71
|
systemPrompt: systemPrompt ?? "",
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
import { ChatGoogleGenerativeAI
|
|
2
|
-
import { ChatOpenAI
|
|
1
|
+
import { ChatGoogleGenerativeAI } from "@langchain/google-genai";
|
|
2
|
+
import { ChatOpenAI } from "@langchain/openai";
|
|
3
|
+
export type LLMModelConfig = {
|
|
4
|
+
model: string;
|
|
5
|
+
apiKey?: string | undefined;
|
|
6
|
+
maxTokens?: number | undefined;
|
|
7
|
+
temperature?: number | undefined;
|
|
8
|
+
};
|
|
3
9
|
export declare class LangchainModels {
|
|
4
|
-
static gpt(params:
|
|
5
|
-
static gemini(params:
|
|
10
|
+
static gpt(params: LLMModelConfig): ChatOpenAI<import("@langchain/openai").ChatOpenAICallOptions>;
|
|
11
|
+
static gemini(params: LLMModelConfig): ChatGoogleGenerativeAI;
|
|
6
12
|
}
|
|
7
13
|
//# sourceMappingURL=models.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/langchain/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/langchain/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EAEvB,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAoB,MAAM,mBAAmB,CAAC;AAEjE,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5B,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAClC,CAAC;AAEF,qBAAa,eAAe;IAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,cAAc;IAgBjC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,cAAc;CAkBrC"}
|
package/dist/langchain/models.js
CHANGED
|
@@ -5,20 +5,32 @@ const google_genai_1 = require("@langchain/google-genai");
|
|
|
5
5
|
const openai_1 = require("@langchain/openai");
|
|
6
6
|
class LangchainModels {
|
|
7
7
|
static gpt(params) {
|
|
8
|
-
|
|
8
|
+
const { model, apiKey, maxTokens, temperature } = params;
|
|
9
|
+
if (!apiKey)
|
|
9
10
|
throw new Error("OpenAI API key is not passed in the model parameters");
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
}
|
|
11
|
+
const options = {
|
|
12
|
+
model,
|
|
13
|
+
apiKey,
|
|
14
|
+
};
|
|
15
|
+
if (maxTokens)
|
|
16
|
+
options.maxTokens = maxTokens;
|
|
17
|
+
if (temperature)
|
|
18
|
+
options.temperature = temperature;
|
|
19
|
+
return new openai_1.ChatOpenAI(options);
|
|
14
20
|
}
|
|
15
21
|
static gemini(params) {
|
|
16
|
-
|
|
22
|
+
const { apiKey, maxTokens, model, temperature } = params;
|
|
23
|
+
if (!apiKey)
|
|
17
24
|
throw new Error("Google Gemini API key is not passed in the model parameters");
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
}
|
|
25
|
+
const options = {
|
|
26
|
+
model,
|
|
27
|
+
apiKey,
|
|
28
|
+
};
|
|
29
|
+
if (maxTokens)
|
|
30
|
+
options.maxOutputTokens = maxTokens;
|
|
31
|
+
if (temperature)
|
|
32
|
+
options.temperature = temperature;
|
|
33
|
+
return new google_genai_1.ChatGoogleGenerativeAI(options);
|
|
22
34
|
}
|
|
23
35
|
}
|
|
24
36
|
exports.LangchainModels = LangchainModels;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/langchain/models.ts"],"names":[],"mappings":";;;AAAA,0DAGiC;AACjC,8CAAiE;
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/langchain/models.ts"],"names":[],"mappings":";;;AAAA,0DAGiC;AACjC,8CAAiE;AASjE,MAAa,eAAe;IAC1B,MAAM,CAAC,GAAG,CAAC,MAAsB;QAC/B,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QACzD,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAE1E,MAAM,OAAO,GAAqB;YAChC,KAAK;YACL,MAAM;SACP,CAAC;QAEF,IAAI,SAAS;YAAE,OAAO,CAAC,SAAS,GAAG,SAAS,CAAC;QAC7C,IAAI,WAAW;YAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAEnD,OAAO,IAAI,mBAAU,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAsB;QAClC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,CAAC;QAEzD,IAAI,CAAC,MAAM;YACT,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QAEJ,MAAM,OAAO,GAAgC;YAC3C,KAAK;YACL,MAAM;SACP,CAAC;QAEF,IAAI,SAAS;YAAE,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC;QACnD,IAAI,WAAW;YAAE,OAAO,CAAC,WAAW,GAAG,WAAW,CAAC;QAEnD,OAAO,IAAI,qCAAsB,CAAC,OAAO,CAAC,CAAC;IAC7C,CAAC;CACF;AAnCD,0CAmCC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luanpoppe/ai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.4",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"keywords": [],
|
|
@@ -19,6 +19,7 @@
|
|
|
19
19
|
"typescript": "^5.9.3"
|
|
20
20
|
},
|
|
21
21
|
"scripts": {
|
|
22
|
-
"build": "tsc"
|
|
22
|
+
"build": "tsc",
|
|
23
|
+
"pub": "pnpm build && pnpm publish --access=public"
|
|
23
24
|
}
|
|
24
25
|
}
|
package/src/index.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LangchainModels } from "./langchain/models";
|
|
1
|
+
import { LangchainModels, LLMModelConfig } from "./langchain/models";
|
|
2
2
|
import { AIModelNames } from "./@types/model-names";
|
|
3
3
|
import z from "zod";
|
|
4
4
|
import { MessageInput } from "./langchain/messages";
|
|
@@ -19,12 +19,17 @@ type LangchainConstructor = {
|
|
|
19
19
|
};
|
|
20
20
|
|
|
21
21
|
export type LangchainCallParams = {
|
|
22
|
+
agent: {
|
|
23
|
+
middleware?: AgentMiddleware[];
|
|
24
|
+
tools?: (ServerTool | ClientTool)[];
|
|
25
|
+
};
|
|
26
|
+
|
|
27
|
+
model: Omit<LLMModelConfig, "apiKey" | "model">;
|
|
28
|
+
|
|
22
29
|
aiModel: AIModelNames;
|
|
23
30
|
messages: MessageInput[];
|
|
24
31
|
systemPrompt?: string;
|
|
25
32
|
maxRetries?: number;
|
|
26
|
-
middleware?: AgentMiddleware[];
|
|
27
|
-
tools?: (ServerTool | ClientTool)[];
|
|
28
33
|
};
|
|
29
34
|
|
|
30
35
|
export type LangchainCallReturn = Promise<{
|
|
@@ -54,7 +59,9 @@ export class Langchain {
|
|
|
54
59
|
const response = await agent.invoke({ messages });
|
|
55
60
|
|
|
56
61
|
return {
|
|
57
|
-
text:
|
|
62
|
+
text:
|
|
63
|
+
(response.messages.at(-1)?.content as string) ??
|
|
64
|
+
"Empty response from the model",
|
|
58
65
|
messages: response.messages,
|
|
59
66
|
};
|
|
60
67
|
}
|
|
@@ -78,19 +85,38 @@ export class Langchain {
|
|
|
78
85
|
return { response: parsedResponse };
|
|
79
86
|
}
|
|
80
87
|
|
|
81
|
-
|
|
88
|
+
getRawAgent(
|
|
89
|
+
params: LangchainCallParams,
|
|
90
|
+
outputSchema?: z.ZodSchema | undefined
|
|
91
|
+
) {
|
|
92
|
+
const agent = createAgent({
|
|
93
|
+
...this.standardAgent(params),
|
|
94
|
+
responseFormat: outputSchema as any,
|
|
95
|
+
});
|
|
96
|
+
|
|
97
|
+
return { agent };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private getModel(params: LangchainCallParams) {
|
|
101
|
+
const { aiModel, model } = params;
|
|
102
|
+
const { maxTokens, temperature } = model;
|
|
103
|
+
|
|
104
|
+
const config: LLMModelConfig = {
|
|
105
|
+
model: aiModel,
|
|
106
|
+
maxTokens: maxTokens,
|
|
107
|
+
temperature: temperature,
|
|
108
|
+
};
|
|
109
|
+
|
|
82
110
|
if (aiModel.startsWith("gpt")) {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
});
|
|
111
|
+
config.apiKey = this.tokens.openAIApiKey;
|
|
112
|
+
|
|
113
|
+
return LangchainModels.gpt(config);
|
|
87
114
|
}
|
|
88
115
|
|
|
89
116
|
if (aiModel.startsWith("gemini")) {
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
});
|
|
117
|
+
config.apiKey = this.tokens.googleGeminiToken;
|
|
118
|
+
|
|
119
|
+
return LangchainModels.gemini(config);
|
|
94
120
|
}
|
|
95
121
|
|
|
96
122
|
throw new Error("Model not supported");
|
|
@@ -99,9 +125,10 @@ export class Langchain {
|
|
|
99
125
|
private standardAgent(
|
|
100
126
|
params: LangchainCallParams
|
|
101
127
|
): Parameters<typeof createAgent>[0] {
|
|
102
|
-
const {
|
|
128
|
+
const { systemPrompt, maxRetries = 3 } = params;
|
|
129
|
+
const { middleware, tools } = params.agent;
|
|
103
130
|
|
|
104
|
-
const model = this.getModel(
|
|
131
|
+
const model = this.getModel(params);
|
|
105
132
|
return {
|
|
106
133
|
model,
|
|
107
134
|
systemPrompt: systemPrompt ?? "",
|
package/src/langchain/models.ts
CHANGED
|
@@ -4,26 +4,46 @@ import {
|
|
|
4
4
|
} from "@langchain/google-genai";
|
|
5
5
|
import { ChatOpenAI, ChatOpenAIFields } from "@langchain/openai";
|
|
6
6
|
|
|
7
|
+
export type LLMModelConfig = {
|
|
8
|
+
model: string;
|
|
9
|
+
apiKey?: string | undefined;
|
|
10
|
+
maxTokens?: number | undefined;
|
|
11
|
+
temperature?: number | undefined;
|
|
12
|
+
};
|
|
13
|
+
|
|
7
14
|
export class LangchainModels {
|
|
8
|
-
static gpt(params:
|
|
9
|
-
|
|
15
|
+
static gpt(params: LLMModelConfig) {
|
|
16
|
+
const { model, apiKey, maxTokens, temperature } = params;
|
|
17
|
+
if (!apiKey)
|
|
10
18
|
throw new Error("OpenAI API key is not passed in the model parameters");
|
|
11
19
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
}
|
|
20
|
+
const options: ChatOpenAIFields = {
|
|
21
|
+
model,
|
|
22
|
+
apiKey,
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
if (maxTokens) options.maxTokens = maxTokens;
|
|
26
|
+
if (temperature) options.temperature = temperature;
|
|
27
|
+
|
|
28
|
+
return new ChatOpenAI(options);
|
|
16
29
|
}
|
|
17
30
|
|
|
18
|
-
static gemini(params:
|
|
19
|
-
|
|
31
|
+
static gemini(params: LLMModelConfig) {
|
|
32
|
+
const { apiKey, maxTokens, model, temperature } = params;
|
|
33
|
+
|
|
34
|
+
if (!apiKey)
|
|
20
35
|
throw new Error(
|
|
21
36
|
"Google Gemini API key is not passed in the model parameters"
|
|
22
37
|
);
|
|
23
38
|
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
39
|
+
const options: GoogleGenerativeAIChatInput = {
|
|
40
|
+
model,
|
|
41
|
+
apiKey,
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
if (maxTokens) options.maxOutputTokens = maxTokens;
|
|
45
|
+
if (temperature) options.temperature = temperature;
|
|
46
|
+
|
|
47
|
+
return new ChatGoogleGenerativeAI(options);
|
|
28
48
|
}
|
|
29
49
|
}
|