{"version":3,"file":"sql.cjs","names":["BaseToolkit","QuerySqlTool","InfoSqlTool","ListTablesSqlTool","QueryCheckerTool","SQL_PREFIX","SQL_SUFFIX","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;AAC5D,SAAO;AACP,OAAK,KAAK;AACV,OAAK,QAAQ;GACX,IAAIC,kBAAAA,aAAa,GAAG;GACpB,IAAIC,kBAAAA,YAAY,GAAG;GACnB,IAAIC,kBAAAA,kBAAkB,GAAG;GACzB,IAAIC,kBAAAA,iBAAiB,EAAE,KAAK,CAAC;GAC9B;;;AAIL,SAAgB,eACd,KACA,SACA,MACA;CACA,MAAM,EACJ,SAASC,eAAAA,YACT,SAASC,eAAAA,YACT,iBAAiB,CAAC,SAAS,mBAAmB,EAC9C,OAAO,OACL,QAAQ,EAAE;CACd,MAAM,EAAE,UAAU;CAClB,MAAM,mBAAA,GAAA,wBAAA,gBAAiC,QAAQ,YAAY;EACzD,SAAS,QAAQ;EACjB,OAAO;EACR,CAAC;CAQF,MAAM,QAAQ,IAAIC,cAAAA,cAAc;EAC9B,UAFY,IAAIC,kBAAAA,SAAS;GAAE,QALdD,cAAAA,cAAc,aAAa,OAAO;IAC/C,QAAQ;IACR;IACA;IACD,CAAC;GACmC;GAAK,CAAC;EAGzC,cAAc,MAAM,KAAK,MAAM,EAAE,KAAK;EACvC,CAAC;AACF,QAAOE,iBAAAA,cAAc,kBAAkB;EACrC;EACA;EACA,yBAAyB;EAC1B,CAAC"}