@luanpoppe/ai 1.0.3 → 1.0.5

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 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";
@@ -11,12 +11,15 @@ type LangchainConstructor = {
11
11
  openAIApiKey?: string;
12
12
  };
13
13
  export type LangchainCallParams = {
14
+ agent?: {
15
+ middleware?: AgentMiddleware[];
16
+ tools?: (ServerTool | ClientTool)[];
17
+ };
18
+ modelConfig?: Omit<LLMModelConfig, "apiKey" | "model">;
14
19
  aiModel: AIModelNames;
15
20
  messages: MessageInput[];
16
21
  systemPrompt?: string;
17
22
  maxRetries?: number;
18
- middleware?: AgentMiddleware[];
19
- tools?: (ServerTool | ClientTool)[];
20
23
  };
21
24
  export type LangchainCallReturn = Promise<{
22
25
  text: string;
@@ -33,6 +36,9 @@ export declare class Langchain {
33
36
  constructor(tokens: LangchainConstructor);
34
37
  call(params: LangchainCallParams): LangchainCallReturn;
35
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
+ };
36
42
  private getModel;
37
43
  private standardAgent;
38
44
  private standardMiddlewares;
@@ -1 +1 @@
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;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,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,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;IAetD,oBAAoB,CAAC,CAAC,SAAS,CAAC,CAAC,SAAS,EAC9C,MAAM,EAAE,mCAAmC,CAAC,CAAC,CAAC,GAC7C,mCAAmC,CAAC,OAAO,MAAM,CAAC,YAAY,CAAC;IAiBlE,OAAO,CAAC,QAAQ;IAkBhB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,mBAAmB;CAU5B;AAED,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,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,CAAC,EAAE;QACN,UAAU,CAAC,EAAE,eAAe,EAAE,CAAC;QAC/B,KAAK,CAAC,EAAE,CAAC,UAAU,GAAG,UAAU,CAAC,EAAE,CAAC;KACrC,CAAC;IAEF,WAAW,CAAC,EAAE,IAAI,CAAC,cAAc,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;IAEvD,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;IAwBhB,OAAO,CAAC,aAAa;IAkBrB,OAAO,CAAC,mBAAmB;CAU5B;AAED,OAAO,EAAE,eAAe,EAAE,iBAAiB,EAAE,cAAc,EAAE,CAAC"}
package/dist/index.js CHANGED
@@ -20,7 +20,8 @@ class Langchain {
20
20
  });
21
21
  const response = await agent.invoke({ messages });
22
22
  return {
23
- text: response.messages.at(-1)?.text ?? "Empty response from the model",
23
+ text: response.messages.at(-1)?.content ??
24
+ "Empty response from the model",
24
25
  messages: response.messages,
25
26
  };
26
27
  }
@@ -36,32 +37,41 @@ class Langchain {
36
37
  const parsedResponse = outputSchema.parse(response?.structuredResponse);
37
38
  return { response: parsedResponse };
38
39
  }
39
- getModel(aiModel) {
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, modelConfig } = params;
49
+ const config = {
50
+ model: aiModel,
51
+ maxTokens: modelConfig?.maxTokens,
52
+ temperature: modelConfig?.temperature,
53
+ };
40
54
  if (aiModel.startsWith("gpt")) {
41
- return models_1.LangchainModels.gpt({
42
- modelName: aiModel,
43
- apiKey: this.tokens.openAIApiKey,
44
- });
55
+ config.apiKey = this.tokens.openAIApiKey;
56
+ return models_1.LangchainModels.gpt(config);
45
57
  }
46
58
  if (aiModel.startsWith("gemini")) {
47
- return models_1.LangchainModels.gemini({
48
- model: aiModel,
49
- apiKey: this.tokens.googleGeminiToken ?? "",
50
- });
59
+ config.apiKey = this.tokens.googleGeminiToken;
60
+ return models_1.LangchainModels.gemini(config);
51
61
  }
52
62
  throw new Error("Model not supported");
53
63
  }
54
64
  standardAgent(params) {
55
- const { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
56
- const model = this.getModel(aiModel);
65
+ const { systemPrompt, maxRetries = 3 } = params;
66
+ const model = this.getModel(params);
57
67
  return {
58
68
  model,
59
69
  systemPrompt: systemPrompt ?? "",
60
70
  middleware: [
61
71
  ...this.standardMiddlewares(maxRetries),
62
- ...(middleware ?? []),
72
+ ...(params.agent?.middleware ?? []),
63
73
  ],
64
- tools: tools ?? [],
74
+ tools: params.agent?.tools ?? [],
65
75
  responseFormat: undefined,
66
76
  };
67
77
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,13 @@
1
- import { ChatGoogleGenerativeAI, GoogleGenerativeAIChatInput } from "@langchain/google-genai";
2
- import { ChatOpenAI, ChatOpenAIFields } from "@langchain/openai";
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: ChatOpenAIFields): ChatOpenAI<import("@langchain/openai").ChatOpenAICallOptions>;
5
- static gemini(params: GoogleGenerativeAIChatInput): ChatGoogleGenerativeAI;
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,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"}
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"}
@@ -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
- if (!params.apiKey)
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
- return new openai_1.ChatOpenAI({
11
- maxTokens: 2048,
12
- ...params,
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
- if (!params.apiKey)
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
- return new google_genai_1.ChatGoogleGenerativeAI({
19
- maxOutputTokens: 2048,
20
- ...params,
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;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"}
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",
3
+ "version": "1.0.5",
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
+ modelConfig?: 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<{
@@ -80,19 +85,37 @@ export class Langchain {
80
85
  return { response: parsedResponse };
81
86
  }
82
87
 
83
- private getModel(aiModel: AIModelNames) {
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, modelConfig } = params;
102
+
103
+ const config: LLMModelConfig = {
104
+ model: aiModel,
105
+ maxTokens: modelConfig?.maxTokens,
106
+ temperature: modelConfig?.temperature,
107
+ };
108
+
84
109
  if (aiModel.startsWith("gpt")) {
85
- return LangchainModels.gpt({
86
- modelName: aiModel,
87
- apiKey: this.tokens.openAIApiKey,
88
- });
110
+ config.apiKey = this.tokens.openAIApiKey;
111
+
112
+ return LangchainModels.gpt(config);
89
113
  }
90
114
 
91
115
  if (aiModel.startsWith("gemini")) {
92
- return LangchainModels.gemini({
93
- model: aiModel,
94
- apiKey: this.tokens.googleGeminiToken ?? "",
95
- });
116
+ config.apiKey = this.tokens.googleGeminiToken;
117
+
118
+ return LangchainModels.gemini(config);
96
119
  }
97
120
 
98
121
  throw new Error("Model not supported");
@@ -101,17 +124,17 @@ export class Langchain {
101
124
  private standardAgent(
102
125
  params: LangchainCallParams
103
126
  ): Parameters<typeof createAgent>[0] {
104
- const { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
127
+ const { systemPrompt, maxRetries = 3 } = params;
105
128
 
106
- const model = this.getModel(aiModel);
129
+ const model = this.getModel(params);
107
130
  return {
108
131
  model,
109
132
  systemPrompt: systemPrompt ?? "",
110
133
  middleware: [
111
134
  ...this.standardMiddlewares(maxRetries),
112
- ...(middleware ?? []),
135
+ ...(params.agent?.middleware ?? []),
113
136
  ],
114
- tools: tools ?? [],
137
+ tools: params.agent?.tools ?? [],
115
138
  responseFormat: undefined as any,
116
139
  };
117
140
  }
@@ -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: ChatOpenAIFields) {
9
- if (!params.apiKey)
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
- return new ChatOpenAI({
13
- maxTokens: 2048,
14
- ...params,
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: GoogleGenerativeAIChatInput) {
19
- if (!params.apiKey)
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
- return new ChatGoogleGenerativeAI({
25
- maxOutputTokens: 2048,
26
- ...params,
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
  }