@luanpoppe/ai 1.0.0 → 1.0.2
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/@types/model-names.d.ts.map +1 -0
- package/dist/{src/@types → @types}/model-names.js.map +1 -1
- package/dist/index.d.ts +11 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -25
- package/dist/index.js.map +1 -1
- package/dist/langchain/messages.d.ts.map +1 -0
- package/dist/langchain/messages.js.map +1 -0
- package/dist/langchain/models.d.ts.map +1 -0
- package/dist/{src/langchain → langchain}/models.js +4 -5
- package/dist/langchain/models.js.map +1 -0
- package/dist/langchain/tools.d.ts.map +1 -0
- package/dist/langchain/tools.js.map +1 -0
- package/package.json +3 -4
- package/{index.ts → src/index.ts} +28 -37
- package/src/langchain/models.ts +8 -5
- package/tsconfig.json +7 -4
- package/.env.example +0 -2
- package/dist/src/@types/model-names.d.ts.map +0 -1
- package/dist/src/core/env.d.ts +0 -6
- package/dist/src/core/env.d.ts.map +0 -1
- package/dist/src/core/env.js +0 -17
- package/dist/src/core/env.js.map +0 -1
- package/dist/src/langchain/messages.d.ts.map +0 -1
- package/dist/src/langchain/messages.js.map +0 -1
- package/dist/src/langchain/models.d.ts.map +0 -1
- package/dist/src/langchain/models.js.map +0 -1
- package/dist/src/langchain/tools.d.ts.map +0 -1
- package/dist/src/langchain/tools.js.map +0 -1
- package/src/core/env.ts +0 -13
- /package/dist/{src/@types → @types}/model-names.d.ts +0 -0
- /package/dist/{src/@types → @types}/model-names.js +0 -0
- /package/dist/{src/langchain → langchain}/messages.d.ts +0 -0
- /package/dist/{src/langchain → langchain}/messages.js +0 -0
- /package/dist/{src/langchain → langchain}/models.d.ts +0 -0
- /package/dist/{src/langchain → langchain}/tools.d.ts +0 -0
- /package/dist/{src/langchain → langchain}/tools.js +0 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-names.d.ts","sourceRoot":"","sources":["../../src/@types/model-names.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GACd,OAAO,GACP,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,KAAK,YAAY,GACb,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model-names.js","sourceRoot":"","sources":["
|
|
1
|
+
{"version":3,"file":"model-names.js","sourceRoot":"","sources":["../../src/@types/model-names.ts"],"names":[],"mappings":""}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,14 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { LangchainModels } from "./langchain/models";
|
|
2
|
+
import { AIModelNames } from "./@types/model-names";
|
|
2
3
|
import z from "zod";
|
|
3
|
-
import { MessageInput } from "./
|
|
4
|
+
import { MessageInput } from "./langchain/messages";
|
|
4
5
|
import { AgentMiddleware, BaseMessage } from "langchain";
|
|
5
6
|
import { ClientTool, ServerTool } from "@langchain/core/tools";
|
|
7
|
+
import { LangchainMessages } from "./langchain/messages";
|
|
8
|
+
type LangchainConstructor = {
|
|
9
|
+
googleGeminiToken?: string;
|
|
10
|
+
openAIApiKey?: string;
|
|
11
|
+
};
|
|
6
12
|
export type CallParams = {
|
|
7
13
|
aiModel: AIModelNames;
|
|
8
14
|
messages: MessageInput[];
|
|
@@ -22,11 +28,13 @@ export type CallStructuredOutputReturn<T> = Promise<{
|
|
|
22
28
|
response: z.infer<T>;
|
|
23
29
|
}>;
|
|
24
30
|
export declare class Langchain {
|
|
25
|
-
|
|
31
|
+
private tokens;
|
|
32
|
+
constructor(tokens: LangchainConstructor);
|
|
26
33
|
call(params: CallParams): CallReturn;
|
|
27
34
|
callStructuredOutput<T extends z.ZodSchema>(params: CallStructuredOutputParams<T>): CallStructuredOutputReturn<typeof params.outputSchema>;
|
|
28
35
|
private getModel;
|
|
29
36
|
private standardAgent;
|
|
30
37
|
private standardMiddlewares;
|
|
31
38
|
}
|
|
39
|
+
export { LangchainModels, LangchainMessages };
|
|
32
40
|
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,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;AAEzD,KAAK,oBAAoB,GAAG;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,OAAO,EAAE,YAAY,CAAC;IACtB,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;IAC/B,KAAK,CAAC,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG,OAAO,CAAC;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,WAAW,EAAE,CAAC;CACzB,CAAC,CAAC;AAEH,MAAM,MAAM,0BAA0B,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,IAAI,UAAU,GAAG;IAC3E,YAAY,EAAE,CAAC,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,0BAA0B,CAAC,CAAC,IAAI,OAAO,CAAC;IAClD,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,UAAU,GAAG,UAAU;IAepC,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAC9C,MAAM,EAAE,0BAA0B,CAAC,CAAC,CAAC,GACpC,0BAA0B,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC;IAiBzD,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,aAAa;IAgBrB,OAAO,CAAC,mBAAmB;CAU5B;AAED,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,CAAC"}
|
package/dist/index.js
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.Langchain = void 0;
|
|
7
|
-
const models_1 = require("./
|
|
8
|
-
|
|
9
|
-
const messages_1 = require("./src/langchain/messages");
|
|
3
|
+
exports.LangchainMessages = exports.LangchainModels = exports.Langchain = void 0;
|
|
4
|
+
const models_1 = require("./langchain/models");
|
|
5
|
+
Object.defineProperty(exports, "LangchainModels", { enumerable: true, get: function () { return models_1.LangchainModels; } });
|
|
10
6
|
const langchain_1 = require("langchain");
|
|
7
|
+
const messages_1 = require("./langchain/messages");
|
|
8
|
+
Object.defineProperty(exports, "LangchainMessages", { enumerable: true, get: function () { return messages_1.LangchainMessages; } });
|
|
11
9
|
class Langchain {
|
|
12
|
-
|
|
10
|
+
tokens;
|
|
11
|
+
constructor(tokens) {
|
|
12
|
+
this.tokens = tokens;
|
|
13
|
+
}
|
|
13
14
|
async call(params) {
|
|
14
15
|
const { messages } = params;
|
|
15
16
|
const agent = (0, langchain_1.createAgent)({
|
|
@@ -37,11 +38,13 @@ class Langchain {
|
|
|
37
38
|
if (aiModel.startsWith("gpt")) {
|
|
38
39
|
return models_1.LangchainModels.gpt({
|
|
39
40
|
modelName: aiModel,
|
|
41
|
+
apiKey: this.tokens.openAIApiKey,
|
|
40
42
|
});
|
|
41
43
|
}
|
|
42
44
|
if (aiModel.startsWith("gemini")) {
|
|
43
45
|
return models_1.LangchainModels.gemini({
|
|
44
46
|
model: aiModel,
|
|
47
|
+
apiKey: this.tokens.googleGeminiToken ?? "",
|
|
45
48
|
});
|
|
46
49
|
}
|
|
47
50
|
throw new Error("Model not supported");
|
|
@@ -72,21 +75,4 @@ class Langchain {
|
|
|
72
75
|
}
|
|
73
76
|
}
|
|
74
77
|
exports.Langchain = Langchain;
|
|
75
|
-
const example = async () => {
|
|
76
|
-
const langchain = new Langchain();
|
|
77
|
-
const outputSchema = zod_1.default.object({
|
|
78
|
-
answer: zod_1.default.string(),
|
|
79
|
-
});
|
|
80
|
-
const messages = [
|
|
81
|
-
messages_1.LangchainMessages.system("You are a helpful assistant."),
|
|
82
|
-
messages_1.LangchainMessages.human("What is the capital of France?"),
|
|
83
|
-
];
|
|
84
|
-
const { response } = await langchain.callStructuredOutput({
|
|
85
|
-
aiModel: "gemini-2.5-flash",
|
|
86
|
-
outputSchema,
|
|
87
|
-
messages,
|
|
88
|
-
});
|
|
89
|
-
console.log({ response });
|
|
90
|
-
};
|
|
91
|
-
example();
|
|
92
78
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqD;AA4H5C,gGA5HA,wBAAe,OA4HA;AAxHxB,yCAMmB;AAEnB,mDAAyD;AAgH/B,kGAhHjB,4BAAiB,OAgHiB;AAnF3C,MAAa,SAAS;IACA;IAApB,YAAoB,MAA4B;QAA5B,WAAM,GAAN,MAAM,CAAsB;IAAG,CAAC;IAEpD,KAAK,CAAC,IAAI,CAAC,MAAkB;QAC3B,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAE5B,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC;YACxB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;SAC9B,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC;QAElD,OAAO;YACL,IAAI,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,+BAA+B;YACnE,QAAQ,EAAE,QAAQ,CAAC,QAAQ;SAC5B,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,MAAqC;QAErC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,GAAG,MAAM,CAAC;QAE1C,MAAM,KAAK,GAAG,IAAA,uBAAW,EAAC;YACxB,GAAG,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;YAC7B,cAAc,EAAE,YAAmB;SACpC,CAAC,CAAC;QAEH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YAClC,QAAQ;SACT,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,CAAC,QAAQ,EAAE,kBAAkB,CAAC,CAAC;QAExE,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,CAAC;IACtC,CAAC;IAEO,QAAQ,CAAC,OAAqB;QACpC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YAC9B,OAAO,wBAAe,CAAC,GAAG,CAAC;gBACzB,SAAS,EAAE,OAAO;gBAClB,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,YAAY;aACjC,CAAC,CAAC;QACL,CAAC;QAED,IAAI,OAAO,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YACjC,OAAO,wBAAe,CAAC,MAAM,CAAC;gBAC5B,KAAK,EAAE,OAAO;gBACd,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE;aAC5C,CAAC,CAAC;QACL,CAAC;QAED,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACzC,CAAC;IAEO,aAAa,CAAC,MAAkB;QACtC,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,GAAG,MAAM,CAAC;QAE5E,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;QACrC,OAAO;YACL,KAAK;YACL,YAAY,EAAE,YAAY,IAAI,EAAE;YAChC,UAAU,EAAE;gBACV,GAAG,IAAI,CAAC,mBAAmB,CAAC,UAAU,CAAC;gBACvC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;aACtB;YACD,KAAK,EAAE,KAAK,IAAI,EAAE;YAClB,cAAc,EAAE,SAAgB;SACjC,CAAC;IACJ,CAAC;IAEO,mBAAmB,CAAC,UAAkB;QAC5C,OAAO;YACL,IAAA,gCAAoB,EAAC;gBACnB,UAAU;gBACV,aAAa,EAAE,GAAG;gBAClB,cAAc,EAAE,IAAI;aACrB,CAAC;YACF,IAAA,mCAAuB,EAAC,kBAAkB,EAAE,aAAa,CAAC;SAC3D,CAAC;IACJ,CAAC;CACF;AAjFD,8BAiFC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../src/langchain/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAEpE,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa;IAG7C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IAG3C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;CAGtC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../src/langchain/messages.ts"],"names":[],"mappings":";;;AAAA,yCAAmE;AAInE,MAAa,iBAAiB;IAC5B,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,IAAI,yBAAa,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,OAAe;QAC1B,OAAO,IAAI,wBAAY,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,OAAe;QACvB,OAAO,IAAI,qBAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;CACF;AAVD,8CAUC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/langchain/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAEjE,qBAAa,eAAe;IAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB;IAUnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B;CAWlD"}
|
|
@@ -3,21 +3,20 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.LangchainModels = void 0;
|
|
4
4
|
const google_genai_1 = require("@langchain/google-genai");
|
|
5
5
|
const openai_1 = require("@langchain/openai");
|
|
6
|
-
const env_1 = require("../core/env");
|
|
7
6
|
class LangchainModels {
|
|
8
7
|
static gpt(params) {
|
|
9
|
-
|
|
8
|
+
if (!params.apiKey)
|
|
9
|
+
throw new Error("OpenAI API key is not passed in the model parameters");
|
|
10
10
|
return new openai_1.ChatOpenAI({
|
|
11
|
-
temperature: 0,
|
|
12
11
|
maxTokens: 2048,
|
|
13
|
-
apiKey: env_1.env.OPENAI_API_KEY,
|
|
14
12
|
...params,
|
|
15
13
|
});
|
|
16
14
|
}
|
|
17
15
|
static gemini(params) {
|
|
16
|
+
if (!params.apiKey)
|
|
17
|
+
throw new Error("Google Gemini API key is not passed in the model parameters");
|
|
18
18
|
return new google_genai_1.ChatGoogleGenerativeAI({
|
|
19
19
|
maxOutputTokens: 2048,
|
|
20
|
-
apiKey: env_1.env.GOOGLE_GENAI_API_KEY,
|
|
21
20
|
...params,
|
|
22
21
|
});
|
|
23
22
|
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/langchain/models.ts"],"names":[],"mappings":";;;AAAA,0DAGiC;AACjC,8CAAiE;AAEjE,MAAa,eAAe;IAC1B,MAAM,CAAC,GAAG,CAAC,MAAwB;QACjC,IAAI,CAAC,MAAM,CAAC,MAAM;YAChB,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAE1E,OAAO,IAAI,mBAAU,CAAC;YACpB,SAAS,EAAE,IAAI;YACf,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAmC;QAC/C,IAAI,CAAC,MAAM,CAAC,MAAM;YAChB,MAAM,IAAI,KAAK,CACb,6DAA6D,CAC9D,CAAC;QAEJ,OAAO,IAAI,qCAAsB,CAAC;YAChC,eAAe,EAAE,IAAI;YACrB,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;CACF;AAtBD,0CAsBC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../src/langchain/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;CACrB,CAAC;AAEF,qBAAa,cAAc;IACzB,UAAU,CAAC,MAAM,EAAE,gBAAgB;CAUpC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/langchain/tools.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAUjC,MAAa,cAAc;IACzB,UAAU,CAAC,MAAwB;QACjC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE7C,OAAO,IAAA,gBAAI,EAAC,YAAY,EAAE;YACxB,IAAI;YACJ,WAAW;YACX,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF;AAXD,wCAWC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@luanpoppe/ai",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.2",
|
|
4
4
|
"description": "",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"keywords": [],
|
|
@@ -10,14 +10,13 @@
|
|
|
10
10
|
"@langchain/core": "^1.1.8",
|
|
11
11
|
"@langchain/google-genai": "^2.1.3",
|
|
12
12
|
"@langchain/openai": "^1.2.0",
|
|
13
|
-
"dotenv": "^17.2.3",
|
|
14
13
|
"langchain": "^1.2.3",
|
|
15
|
-
"typescript": "^5.9.3",
|
|
16
14
|
"zod": "^4.2.1"
|
|
17
15
|
},
|
|
18
16
|
"devDependencies": {
|
|
19
17
|
"@types/node": "^25.0.3",
|
|
20
|
-
"tsx": "^4.21.0"
|
|
18
|
+
"tsx": "^4.21.0",
|
|
19
|
+
"typescript": "^5.9.3"
|
|
21
20
|
},
|
|
22
21
|
"scripts": {
|
|
23
22
|
"build": "tsc"
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { LangchainModels } from "./
|
|
2
|
-
import { AIModelNames } from "
|
|
1
|
+
import { LangchainModels } from "./langchain/models";
|
|
2
|
+
import { AIModelNames } from "./@types/model-names";
|
|
3
3
|
import z from "zod";
|
|
4
|
-
import {
|
|
4
|
+
import { MessageInput } from "./langchain/messages";
|
|
5
5
|
import {
|
|
6
6
|
AgentMiddleware,
|
|
7
7
|
BaseMessage,
|
|
@@ -10,8 +10,15 @@ import {
|
|
|
10
10
|
modelRetryMiddleware,
|
|
11
11
|
} from "langchain";
|
|
12
12
|
import { ClientTool, ServerTool } from "@langchain/core/tools";
|
|
13
|
+
import { LangchainMessages } from "./langchain/messages";
|
|
14
|
+
import { LangchainTools } from "./langchain/tools";
|
|
13
15
|
|
|
14
|
-
|
|
16
|
+
type LangchainConstructor = {
|
|
17
|
+
googleGeminiToken?: string;
|
|
18
|
+
openAIApiKey?: string;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type LangchainCallParams = {
|
|
15
22
|
aiModel: AIModelNames;
|
|
16
23
|
messages: MessageInput[];
|
|
17
24
|
systemPrompt?: string;
|
|
@@ -20,23 +27,24 @@ export type CallParams = {
|
|
|
20
27
|
tools?: (ServerTool | ClientTool)[];
|
|
21
28
|
};
|
|
22
29
|
|
|
23
|
-
export type
|
|
30
|
+
export type LangchainCallReturn = Promise<{
|
|
24
31
|
text: string;
|
|
25
32
|
messages: BaseMessage[];
|
|
26
33
|
}>;
|
|
27
34
|
|
|
28
|
-
export type
|
|
29
|
-
|
|
30
|
-
|
|
35
|
+
export type LangchainCallStructuredOutputParams<T extends z.ZodSchema> =
|
|
36
|
+
LangchainCallParams & {
|
|
37
|
+
outputSchema: T;
|
|
38
|
+
};
|
|
31
39
|
|
|
32
|
-
export type
|
|
40
|
+
export type LangchainCallStructuredOutputReturn<T> = Promise<{
|
|
33
41
|
response: z.infer<T>;
|
|
34
42
|
}>;
|
|
35
43
|
|
|
36
44
|
export class Langchain {
|
|
37
|
-
constructor() {}
|
|
45
|
+
constructor(private tokens: LangchainConstructor) {}
|
|
38
46
|
|
|
39
|
-
async call(params:
|
|
47
|
+
async call(params: LangchainCallParams): LangchainCallReturn {
|
|
40
48
|
const { messages } = params;
|
|
41
49
|
|
|
42
50
|
const agent = createAgent({
|
|
@@ -46,14 +54,14 @@ export class Langchain {
|
|
|
46
54
|
const response = await agent.invoke({ messages });
|
|
47
55
|
|
|
48
56
|
return {
|
|
49
|
-
text: response.messages
|
|
57
|
+
text: response.messages.at(-1)?.text ?? "Empty response from the model",
|
|
50
58
|
messages: response.messages,
|
|
51
59
|
};
|
|
52
60
|
}
|
|
53
61
|
|
|
54
62
|
async callStructuredOutput<T extends z.ZodSchema>(
|
|
55
|
-
params:
|
|
56
|
-
):
|
|
63
|
+
params: LangchainCallStructuredOutputParams<T>
|
|
64
|
+
): LangchainCallStructuredOutputReturn<typeof params.outputSchema> {
|
|
57
65
|
const { outputSchema, messages } = params;
|
|
58
66
|
|
|
59
67
|
const agent = createAgent({
|
|
@@ -74,19 +82,23 @@ export class Langchain {
|
|
|
74
82
|
if (aiModel.startsWith("gpt")) {
|
|
75
83
|
return LangchainModels.gpt({
|
|
76
84
|
modelName: aiModel,
|
|
85
|
+
apiKey: this.tokens.openAIApiKey,
|
|
77
86
|
});
|
|
78
87
|
}
|
|
79
88
|
|
|
80
89
|
if (aiModel.startsWith("gemini")) {
|
|
81
90
|
return LangchainModels.gemini({
|
|
82
91
|
model: aiModel,
|
|
92
|
+
apiKey: this.tokens.googleGeminiToken ?? "",
|
|
83
93
|
});
|
|
84
94
|
}
|
|
85
95
|
|
|
86
96
|
throw new Error("Model not supported");
|
|
87
97
|
}
|
|
88
98
|
|
|
89
|
-
private standardAgent(
|
|
99
|
+
private standardAgent(
|
|
100
|
+
params: LangchainCallParams
|
|
101
|
+
): Parameters<typeof createAgent>[0] {
|
|
90
102
|
const { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
|
|
91
103
|
|
|
92
104
|
const model = this.getModel(aiModel);
|
|
@@ -114,25 +126,4 @@ export class Langchain {
|
|
|
114
126
|
}
|
|
115
127
|
}
|
|
116
128
|
|
|
117
|
-
|
|
118
|
-
const langchain = new Langchain();
|
|
119
|
-
|
|
120
|
-
const outputSchema = z.object({
|
|
121
|
-
answer: z.string(),
|
|
122
|
-
});
|
|
123
|
-
|
|
124
|
-
const messages = [
|
|
125
|
-
LangchainMessages.system("You are a helpful assistant."),
|
|
126
|
-
LangchainMessages.human("What is the capital of France?"),
|
|
127
|
-
];
|
|
128
|
-
|
|
129
|
-
const { response } = await langchain.callStructuredOutput({
|
|
130
|
-
aiModel: "gemini-2.5-flash",
|
|
131
|
-
outputSchema,
|
|
132
|
-
messages,
|
|
133
|
-
});
|
|
134
|
-
|
|
135
|
-
console.log({ response });
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
example();
|
|
129
|
+
export { LangchainModels, LangchainMessages, LangchainTools };
|
package/src/langchain/models.ts
CHANGED
|
@@ -3,23 +3,26 @@ import {
|
|
|
3
3
|
GoogleGenerativeAIChatInput,
|
|
4
4
|
} from "@langchain/google-genai";
|
|
5
5
|
import { ChatOpenAI, ChatOpenAIFields } from "@langchain/openai";
|
|
6
|
-
import { env } from "../core/env";
|
|
7
6
|
|
|
8
7
|
export class LangchainModels {
|
|
9
8
|
static gpt(params: ChatOpenAIFields) {
|
|
10
|
-
|
|
9
|
+
if (!params.apiKey)
|
|
10
|
+
throw new Error("OpenAI API key is not passed in the model parameters");
|
|
11
|
+
|
|
11
12
|
return new ChatOpenAI({
|
|
12
|
-
temperature: 0,
|
|
13
13
|
maxTokens: 2048,
|
|
14
|
-
apiKey: env.OPENAI_API_KEY,
|
|
15
14
|
...params,
|
|
16
15
|
});
|
|
17
16
|
}
|
|
18
17
|
|
|
19
18
|
static gemini(params: GoogleGenerativeAIChatInput) {
|
|
19
|
+
if (!params.apiKey)
|
|
20
|
+
throw new Error(
|
|
21
|
+
"Google Gemini API key is not passed in the model parameters"
|
|
22
|
+
);
|
|
23
|
+
|
|
20
24
|
return new ChatGoogleGenerativeAI({
|
|
21
25
|
maxOutputTokens: 2048,
|
|
22
|
-
apiKey: env.GOOGLE_GENAI_API_KEY,
|
|
23
26
|
...params,
|
|
24
27
|
});
|
|
25
28
|
}
|
package/tsconfig.json
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
// Visit https://aka.ms/tsconfig to read more about this file
|
|
3
3
|
"compilerOptions": {
|
|
4
4
|
// File Layout
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
"rootDir": "./src",
|
|
6
|
+
"outDir": "./dist",
|
|
7
7
|
|
|
8
8
|
// Environment Settings
|
|
9
9
|
// See also https://aka.ms/tsconfig/module
|
|
10
10
|
"module": "nodenext",
|
|
11
11
|
"target": "esnext",
|
|
12
|
-
"types": ["
|
|
12
|
+
"types": ["node"],
|
|
13
13
|
// For nodejs:
|
|
14
14
|
// "lib": ["esnext"],
|
|
15
15
|
// "types": ["node"],
|
|
@@ -39,5 +39,8 @@
|
|
|
39
39
|
"noUncheckedSideEffectImports": true,
|
|
40
40
|
"moduleDetection": "force",
|
|
41
41
|
"skipLibCheck": true
|
|
42
|
-
}
|
|
42
|
+
},
|
|
43
|
+
|
|
44
|
+
"include": ["src"],
|
|
45
|
+
"exclude": ["node_modules", "dist"]
|
|
43
46
|
}
|
package/.env.example
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"model-names.d.ts","sourceRoot":"","sources":["../../../src/@types/model-names.ts"],"names":[],"mappings":"AAAA,KAAK,aAAa,GACd,OAAO,GACP,QAAQ,GACR,SAAS,GACT,OAAO,GACP,SAAS,GACT,YAAY,GACZ,YAAY,CAAC;AAEjB,KAAK,YAAY,GACb,kBAAkB,GAClB,gBAAgB,GAChB,gBAAgB,GAChB,cAAc,CAAC;AAEnB,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,CAAC"}
|
package/dist/src/core/env.d.ts
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.d.ts","sourceRoot":"","sources":["../../../src/core/env.ts"],"names":[],"mappings":"AAAA,OAAO,eAAe,CAAC;AAYvB,eAAO,MAAM,GAAG;;;CAAO,CAAC"}
|
package/dist/src/core/env.js
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.env = void 0;
|
|
7
|
-
require("dotenv/config");
|
|
8
|
-
const zod_1 = __importDefault(require("zod"));
|
|
9
|
-
const envSchema = zod_1.default.object({
|
|
10
|
-
OPENAI_API_KEY: zod_1.default.string().optional().default(""),
|
|
11
|
-
GOOGLE_GENAI_API_KEY: zod_1.default.string().optional().default(""),
|
|
12
|
-
});
|
|
13
|
-
const { error, data } = envSchema.safeParse(process.env);
|
|
14
|
-
if (error)
|
|
15
|
-
throw new Error(`Invalid environment variables:\n${error.message}`);
|
|
16
|
-
exports.env = data;
|
|
17
|
-
//# sourceMappingURL=env.js.map
|
package/dist/src/core/env.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"env.js","sourceRoot":"","sources":["../../../src/core/env.ts"],"names":[],"mappings":";;;;;;AAAA,yBAAuB;AACvB,8CAAoB;AAEpB,MAAM,SAAS,GAAG,aAAC,CAAC,MAAM,CAAC;IACzB,cAAc,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;IACjD,oBAAoB,EAAE,aAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC;CACxD,CAAC,CAAC;AAEH,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,SAAS,CAAC,SAAS,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;AAEzD,IAAI,KAAK;IAAE,MAAM,IAAI,KAAK,CAAC,mCAAmC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;AAElE,QAAA,GAAG,GAAG,IAAI,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages.d.ts","sourceRoot":"","sources":["../../../src/langchain/messages.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEnE,MAAM,MAAM,YAAY,GAAG,aAAa,GAAG,YAAY,GAAG,SAAS,CAAC;AAEpE,qBAAa,iBAAiB;IAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,aAAa;IAG7C,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,MAAM,GAAG,YAAY;IAG3C,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS;CAGtC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"messages.js","sourceRoot":"","sources":["../../../src/langchain/messages.ts"],"names":[],"mappings":";;;AAAA,yCAAmE;AAInE,MAAa,iBAAiB;IAC5B,MAAM,CAAC,MAAM,CAAC,OAAe;QAC3B,OAAO,IAAI,yBAAa,CAAC,OAAO,CAAC,CAAC;IACpC,CAAC;IACD,MAAM,CAAC,KAAK,CAAC,OAAe;QAC1B,OAAO,IAAI,wBAAY,CAAC,OAAO,CAAC,CAAC;IACnC,CAAC;IACD,MAAM,CAAC,EAAE,CAAC,OAAe;QACvB,OAAO,IAAI,qBAAS,CAAC,OAAO,CAAC,CAAC;IAChC,CAAC;CACF;AAVD,8CAUC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../../src/langchain/models.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,2BAA2B,EAC5B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AAGjE,qBAAa,eAAe;IAC1B,MAAM,CAAC,GAAG,CAAC,MAAM,EAAE,gBAAgB;IAUnC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,2BAA2B;CAOlD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../../src/langchain/models.ts"],"names":[],"mappings":";;;AAAA,0DAGiC;AACjC,8CAAiE;AACjE,qCAAkC;AAElC,MAAa,eAAe;IAC1B,MAAM,CAAC,GAAG,CAAC,MAAwB;QACjC,OAAO,CAAC,GAAG,CAAC,EAAE,GAAG,EAAH,SAAG,EAAE,CAAC,CAAC;QACrB,OAAO,IAAI,mBAAU,CAAC;YACpB,WAAW,EAAE,CAAC;YACd,SAAS,EAAE,IAAI;YACf,MAAM,EAAE,SAAG,CAAC,cAAc;YAC1B,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;IAED,MAAM,CAAC,MAAM,CAAC,MAAmC;QAC/C,OAAO,IAAI,qCAAsB,CAAC;YAChC,eAAe,EAAE,IAAI;YACrB,MAAM,EAAE,SAAG,CAAC,oBAAoB;YAChC,GAAG,MAAM;SACV,CAAC,CAAC;IACL,CAAC;CACF;AAlBD,0CAkBC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.d.ts","sourceRoot":"","sources":["../../../src/langchain/tools.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,CAAC,MAAM,KAAK,CAAC;AAEpB,MAAM,MAAM,gBAAgB,GAAG;IAC7B,YAAY,EAAE,UAAU,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;IACzC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC;CACrB,CAAC;AAEF,qBAAa,cAAc;IACzB,UAAU,CAAC,MAAM,EAAE,gBAAgB;CAUpC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"tools.js","sourceRoot":"","sources":["../../../src/langchain/tools.ts"],"names":[],"mappings":";;;AAAA,yCAAiC;AAUjC,MAAa,cAAc;IACzB,UAAU,CAAC,MAAwB;QACjC,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,CAAC;QAChC,MAAM,EAAE,IAAI,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;QAE7C,OAAO,IAAA,gBAAI,EAAC,YAAY,EAAE;YACxB,IAAI;YACJ,WAAW;YACX,MAAM;SACP,CAAC,CAAC;IACL,CAAC;CACF;AAXD,wCAWC"}
|
package/src/core/env.ts
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import "dotenv/config";
|
|
2
|
-
import z from "zod";
|
|
3
|
-
|
|
4
|
-
const envSchema = z.object({
|
|
5
|
-
OPENAI_API_KEY: z.string().optional().default(""),
|
|
6
|
-
GOOGLE_GENAI_API_KEY: z.string().optional().default(""),
|
|
7
|
-
});
|
|
8
|
-
|
|
9
|
-
const { error, data } = envSchema.safeParse(process.env);
|
|
10
|
-
|
|
11
|
-
if (error) throw new Error(`Invalid environment variables:\n${error.message}`);
|
|
12
|
-
|
|
13
|
-
export const env = data;
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|