@luanpoppe/ai 1.0.3 → 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 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
+ model: 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,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
@@ -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,24 +37,35 @@ 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, model } = params;
49
+ const { maxTokens, temperature } = model;
50
+ const config = {
51
+ model: aiModel,
52
+ maxTokens: maxTokens,
53
+ temperature: temperature,
54
+ };
40
55
  if (aiModel.startsWith("gpt")) {
41
- return models_1.LangchainModels.gpt({
42
- modelName: aiModel,
43
- apiKey: this.tokens.openAIApiKey,
44
- });
56
+ config.apiKey = this.tokens.openAIApiKey;
57
+ return models_1.LangchainModels.gpt(config);
45
58
  }
46
59
  if (aiModel.startsWith("gemini")) {
47
- return models_1.LangchainModels.gemini({
48
- model: aiModel,
49
- apiKey: this.tokens.googleGeminiToken ?? "",
50
- });
60
+ config.apiKey = this.tokens.googleGeminiToken;
61
+ return models_1.LangchainModels.gemini(config);
51
62
  }
52
63
  throw new Error("Model not supported");
53
64
  }
54
65
  standardAgent(params) {
55
- const { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
56
- const model = this.getModel(aiModel);
66
+ const { systemPrompt, maxRetries = 3 } = params;
67
+ const { middleware, tools } = params.agent;
68
+ const model = this.getModel(params);
57
69
  return {
58
70
  model,
59
71
  systemPrompt: systemPrompt ?? "",
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.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<{
@@ -80,19 +85,38 @@ 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, model } = params;
102
+ const { maxTokens, temperature } = model;
103
+
104
+ const config: LLMModelConfig = {
105
+ model: aiModel,
106
+ maxTokens: maxTokens,
107
+ temperature: temperature,
108
+ };
109
+
84
110
  if (aiModel.startsWith("gpt")) {
85
- return LangchainModels.gpt({
86
- modelName: aiModel,
87
- apiKey: this.tokens.openAIApiKey,
88
- });
111
+ config.apiKey = this.tokens.openAIApiKey;
112
+
113
+ return LangchainModels.gpt(config);
89
114
  }
90
115
 
91
116
  if (aiModel.startsWith("gemini")) {
92
- return LangchainModels.gemini({
93
- model: aiModel,
94
- apiKey: this.tokens.googleGeminiToken ?? "",
95
- });
117
+ config.apiKey = this.tokens.googleGeminiToken;
118
+
119
+ return LangchainModels.gemini(config);
96
120
  }
97
121
 
98
122
  throw new Error("Model not supported");
@@ -101,9 +125,10 @@ export class Langchain {
101
125
  private standardAgent(
102
126
  params: LangchainCallParams
103
127
  ): Parameters<typeof createAgent>[0] {
104
- const { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
128
+ const { systemPrompt, maxRetries = 3 } = params;
129
+ const { middleware, tools } = params.agent;
105
130
 
106
- const model = this.getModel(aiModel);
131
+ const model = this.getModel(params);
107
132
  return {
108
133
  model,
109
134
  systemPrompt: systemPrompt ?? "",
@@ -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
  }