{"version":3,"file":"sql.cjs","names":["BaseToolkit","QuerySqlTool","InfoSqlTool","ListTablesSqlTool","QueryCheckerTool","SQL_PREFIX","SQL_SUFFIX","renderTemplate","ZeroShotAgent","LLMChain","AgentExecutor"],"sources":["../../../../src/agents/toolkits/sql/sql.ts"],"sourcesContent":["import type { BaseLanguageModelInterface } from \"@langchain/core/language_models/base\";\nimport { type ToolInterface, BaseToolkit } from \"@langchain/core/tools\";\nimport { renderTemplate } from \"@langchain/core/prompts\";\nimport {\n  InfoSqlTool,\n  ListTablesSqlTool,\n  QueryCheckerTool,\n  QuerySqlTool,\n} from \"../../../tools/sql.js\";\nimport { SQL_PREFIX, SQL_SUFFIX } from \"./prompt.js\";\nimport { LLMChain } from \"../../../chains/llm_chain.js\";\nimport { ZeroShotAgent, ZeroShotCreatePromptArgs } from \"../../mrkl/index.js\";\nimport { AgentExecutor } from \"../../executor.js\";\nimport { SqlDatabase } from \"../../../sql_db.js\";\n\n/**\n * Interface that extends ZeroShotCreatePromptArgs and adds an optional\n * topK parameter for specifying the number of results to return.\n */\nexport interface SqlCreatePromptArgs extends ZeroShotCreatePromptArgs {\n  /** Number of results to return. */\n  topK?: number;\n}\n\n/**\n * Class that represents a toolkit for working with SQL databases. It\n * initializes SQL tools based on the provided SQL database.\n * @example\n * ```typescript\n * const model = new ChatOpenAI({ model: \"gpt-4o-mini\" });\n * const toolkit = new SqlToolkit(sqlDb, model);\n * const executor = createSqlAgent(model, toolkit);\n * const result = await executor.invoke({ input: 'List the total sales per country. Which country's customers spent the most?' });\n * console.log(`Got output ${result.output}`);\n * ```\n */\nexport class SqlToolkit extends BaseToolkit {\n  tools: ToolInterface[];\n\n  db: SqlDatabase;\n\n  dialect = \"sqlite\";\n\n  constructor(db: SqlDatabase, llm: BaseLanguageModelInterface) {\n    super();\n    this.db = db;\n    this.tools = [\n      new QuerySqlTool(db),\n      new InfoSqlTool(db),\n      new ListTablesSqlTool(db),\n      new QueryCheckerTool({ llm }),\n    ];\n  }\n}\n\nexport function createSqlAgent(\n  llm: BaseLanguageModelInterface,\n  toolkit: SqlToolkit,\n  args?: SqlCreatePromptArgs\n) {\n  const {\n    prefix = SQL_PREFIX,\n    suffix = SQL_SUFFIX,\n    inputVariables = [\"input\", \"agent_scratchpad\"],\n    topK = 10,\n  } = args ?? {};\n  const { tools } = toolkit;\n  const formattedPrefix = renderTemplate(prefix, \"f-string\", {\n    dialect: toolkit.dialect,\n    top_k: topK,\n  });\n\n  const prompt = ZeroShotAgent.createPrompt(tools, {\n    prefix: formattedPrefix,\n    suffix,\n    inputVariables,\n  });\n  const chain = new LLMChain({ prompt, llm });\n  const agent = new ZeroShotAgent({\n    llmChain: chain,\n    allowedTools: tools.map((t) => t.name),\n  });\n  return AgentExecutor.fromAgentAndTools({\n    agent,\n    tools,\n    returnIntermediateSteps: true,\n  });\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;AAoCA,IAAa,aAAb,cAAgCA,sBAAAA,YAAY;CAC1C;CAEA;CAEA,UAAU;CAEV,YAAY,IAAiB,KAAiC;EAC5D,MAAM;EACN,KAAK,KAAK;EACV,KAAK,QAAQ;GACX,IAAIC,kBAAAA,aAAa,EAAE;GACnB,IAAIC,kBAAAA,YAAY,EAAE;GAClB,IAAIC,kBAAAA,kBAAkB,EAAE;GACxB,IAAIC,kBAAAA,iBAAiB,EAAE,IAAI,CAAC;EAC9B;CACF;AACF;AAEA,SAAgB,eACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,eAAAA,YACT,SAASC,eAAAA,YACT,iBAAiB,CAAC,SAAS,kBAAkB,GAC7C,OAAO,OACL,QAAQ,CAAC;CACb,MAAM,EAAE,UAAU;CAClB,MAAM,mBAAA,GAAkBC,wBAAAA,eAAAA,CAAe,QAAQ,YAAY;EACzD,SAAS,QAAQ;EACjB,OAAO;CACT,CAAC;CAED,MAAM,SAASC,cAAAA,cAAc,aAAa,OAAO;EAC/C,QAAQ;EACR;EACA;CACF,CAAC;CACD,MAAM,QAAQ,IAAIC,kBAAAA,SAAS;EAAE;EAAQ;CAAI,CAAC;CAC1C,MAAM,QAAQ,IAAID,cAAAA,cAAc;EAC9B,UAAU;EACV,cAAc,MAAM,KAAK,MAAM,EAAE,IAAI;CACvC,CAAC;CACD,OAAOE,iBAAAA,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;CAC3B,CAAC;AACH"}