@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 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 CallParams = {
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 CallReturn = Promise<{
24
+ export type LangchainCallReturn = Promise<{
21
25
  text: string;
22
26
  messages: BaseMessage[];
23
27
  }>;
24
- export type CallStructuredOutputParams<T extends z.ZodSchema> = CallParams & {
28
+ export type LangchainCallStructuredOutputParams<T extends z.ZodSchema> = LangchainCallParams & {
25
29
  outputSchema: T;
26
30
  };
27
- export type CallStructuredOutputReturn<T> = Promise<{
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: CallParams): CallReturn;
34
- callStructuredOutput<T extends z.ZodSchema>(params: CallStructuredOutputParams<T>): CallStructuredOutputReturn<typeof params.outputSchema>;
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
@@ -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;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"}
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[0]?.text ?? "Empty response from the model",
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
- 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
+ };
38
55
  if (aiModel.startsWith("gpt")) {
39
- return models_1.LangchainModels.gpt({
40
- modelName: aiModel,
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
- return models_1.LangchainModels.gemini({
46
- model: aiModel,
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 { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
54
- const model = this.getModel(aiModel);
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,+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"}
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.2",
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: response.messages.at(-1)?.text ?? "Empty response from the model",
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
- 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
+
82
110
  if (aiModel.startsWith("gpt")) {
83
- return LangchainModels.gpt({
84
- modelName: aiModel,
85
- apiKey: this.tokens.openAIApiKey,
86
- });
111
+ config.apiKey = this.tokens.openAIApiKey;
112
+
113
+ return LangchainModels.gpt(config);
87
114
  }
88
115
 
89
116
  if (aiModel.startsWith("gemini")) {
90
- return LangchainModels.gemini({
91
- model: aiModel,
92
- apiKey: this.tokens.googleGeminiToken ?? "",
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 { aiModel, systemPrompt, maxRetries = 3, middleware, tools } = params;
128
+ const { systemPrompt, maxRetries = 3 } = params;
129
+ const { middleware, tools } = params.agent;
103
130
 
104
- const model = this.getModel(aiModel);
131
+ const model = this.getModel(params);
105
132
  return {
106
133
  model,
107
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
  }