@smythos/sre 1.5.21 → 1.5.23

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.js CHANGED
@@ -1,4 +1,4 @@
1
- import dotenv from"dotenv";import Joi from"joi";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import pLimit from"p-limit";import axios,{AxiosHeaders}from"axios";import*as fs from"fs";import fs__default,{existsSync,mkdirSync,writeFileSync,readFileSync,unlinkSync}from"fs";import*as FileType from"file-type";import{fileTypeFromBuffer}from"file-type";import{isBinaryFileSync}from"isbinaryfile";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID}from"crypto";import{encode,encodeChat}from"gpt-tokenizer";import path from"path";import os from"os";import"process";import mime from"mime";import{Readable}from"stream";import xxhash from"xxhashjs";import{jsonrepair}from"jsonrepair";import yaml from"js-yaml";import{EventSource}from"eventsource";import*as acorn from"acorn";import dayjs from"dayjs";import querystring from"querystring";import{HfInference}from"@huggingface/inference";import{Runware}from"@runware/sdk-js";import FormData from"form-data";import{SocksProxyAgent}from"socks-proxy-agent";import OAuth from"oauth-1.0a";import zl from"zip-lib";import{LambdaClient,GetFunctionCommand,UpdateFunctionCodeCommand,Runtime,CreateFunctionCommand,InvokeCommand}from"@aws-sdk/client-lambda";import{IAMClient,GetRoleCommand,CreateRoleCommand}from"@aws-sdk/client-iam";import{Client}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport}from"@modelcontextprotocol/sdk/client/sse.js";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import imageSize from"image-size";import{execSync}from"child_process";import{Pinecone}from"@pinecone-database/pinecone";import OpenAI,{toFile,OpenAI as OpenAI$1}from"openai";import{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenerativeAI}from"@google/generative-ai";import{GoogleAIFileManager,FileState}from"@google/generative-ai/server";import Anthropic from"@anthropic-ai/sdk";import Groq from"groq-sdk";import{BedrockRuntimeClient,ConverseCommand,ConverseStreamCommand}from"@aws-sdk/client-bedrock-runtime";import{VertexAI}from"@google-cloud/vertexai";import chokidar from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";import*as readlineSync from"readline-sync";var version="1.5.21";dotenv.config();const config={env:{LOG_LEVEL:process.env.LOG_LEVEL||"none",LOG_FILTER:process.env.LOG_FILTER||"",NODE_ENV:process.env?.NODE_ENV}},REQUEST_METHODS=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],REQUEST_CONTENT_TYPES={none:"none",urlEncodedFormData:"application/x-www-form-urlencoded",multipartFormData:"multipart/form-data",json:"application/json",text:"text/plain",xml:"application/xml",binary:"binary"};var EMBODIMENT_TYPES=(EMBODIMENT_TYPES2=>(EMBODIMENT_TYPES2.ChatBot="chatBot",EMBODIMENT_TYPES2.ChatGPT="chatGPT",EMBODIMENT_TYPES2))(EMBODIMENT_TYPES||{});const ERR_MSG_INVALID_IMAGE_SOURCE="Please provide a valid Image Source. Supported image sources are: HTTP(S) URL, Base64 string, Data URL, Output Image from other component(s).",ERR_MSG_INVALID_BINARY="Please provide a valid data that is either a Blob, SmythFileObject (Binary Output from any Component), ArrayBuffer, Buffer, Base64 string, Data URL, or HTTP(s) URL",ERR_MSG_MAX_DEPTH="The maximum depth has been exceeded for the provided array or object.",ERR_MSG_MAX_ARRAY_SIZE="The maximum array size has been exceeded for the provided array.",ERR_MSG_MAX_OBJECT_SIZE="The maximum object size has been exceeded for the provided object.",MAX_DEPTH=10,MAX_OBJECT_SIZE=1e3,MAX_ARRAY_SIZE=1e3,MAX_FILE_SIZE=10*1024*1024,MAX_FILE_COUNT=10,DEFAULT_MAX_TOKENS_FOR_LLM=2048,S3_DAILY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteDaily",S3_WEEKLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteWeekly",S3_MONTHLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteMonthly",TOOL_USE_DEFAULT_MODEL="gpt-4o-mini",COMP_NAMES={apiCall:"APICall",code:"Code",llmPrompt:"PromptGenerator",visionLLM:"VisionLLM"},JSON_RESPONSE_INSTRUCTION=`
1
+ import dotenv from"dotenv";import Joi from"joi";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import pLimit from"p-limit";import axios,{AxiosHeaders}from"axios";import*as fs from"fs";import fs__default,{existsSync,mkdirSync,writeFileSync,readFileSync,unlinkSync}from"fs";import*as FileType from"file-type";import{fileTypeFromBuffer}from"file-type";import{isBinaryFileSync}from"isbinaryfile";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID}from"crypto";import{encode,encodeChat}from"gpt-tokenizer";import path from"path";import os from"os";import"process";import mime from"mime";import{Readable}from"stream";import xxhash from"xxhashjs";import{jsonrepair}from"jsonrepair";import yaml from"js-yaml";import{EventSource}from"eventsource";import*as acorn from"acorn";import dayjs from"dayjs";import querystring from"querystring";import{HfInference}from"@huggingface/inference";import{Runware}from"@runware/sdk-js";import FormData from"form-data";import{SocksProxyAgent}from"socks-proxy-agent";import OAuth from"oauth-1.0a";import{Client}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport}from"@modelcontextprotocol/sdk/client/sse.js";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import zl from"zip-lib";import{LambdaClient,GetFunctionCommand,UpdateFunctionCodeCommand,Runtime,CreateFunctionCommand,InvokeCommand}from"@aws-sdk/client-lambda";import{IAMClient,GetRoleCommand,CreateRoleCommand}from"@aws-sdk/client-iam";import imageSize from"image-size";import{execSync}from"child_process";import{Pinecone}from"@pinecone-database/pinecone";import OpenAI,{toFile,OpenAI as OpenAI$1}from"openai";import{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenerativeAI}from"@google/generative-ai";import{GoogleAIFileManager,FileState}from"@google/generative-ai/server";import Anthropic from"@anthropic-ai/sdk";import Groq from"groq-sdk";import{BedrockRuntimeClient,ConverseCommand,ConverseStreamCommand}from"@aws-sdk/client-bedrock-runtime";import{VertexAI}from"@google-cloud/vertexai";import chokidar from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";import*as readlineSync from"readline-sync";var version="1.5.23";dotenv.config();const config={env:{LOG_LEVEL:process.env.LOG_LEVEL||"none",LOG_FILTER:process.env.LOG_FILTER||"",NODE_ENV:process.env?.NODE_ENV}},REQUEST_METHODS=["GET","POST","PUT","PATCH","DELETE","HEAD","OPTIONS"],REQUEST_CONTENT_TYPES={none:"none",urlEncodedFormData:"application/x-www-form-urlencoded",multipartFormData:"multipart/form-data",json:"application/json",text:"text/plain",xml:"application/xml",binary:"binary"};var EMBODIMENT_TYPES=(EMBODIMENT_TYPES2=>(EMBODIMENT_TYPES2.ChatBot="chatBot",EMBODIMENT_TYPES2.ChatGPT="chatGPT",EMBODIMENT_TYPES2))(EMBODIMENT_TYPES||{});const ERR_MSG_INVALID_IMAGE_SOURCE="Please provide a valid Image Source. Supported image sources are: HTTP(S) URL, Base64 string, Data URL, Output Image from other component(s).",ERR_MSG_INVALID_BINARY="Please provide a valid data that is either a Blob, SmythFileObject (Binary Output from any Component), ArrayBuffer, Buffer, Base64 string, Data URL, or HTTP(s) URL",ERR_MSG_MAX_DEPTH="The maximum depth has been exceeded for the provided array or object.",ERR_MSG_MAX_ARRAY_SIZE="The maximum array size has been exceeded for the provided array.",ERR_MSG_MAX_OBJECT_SIZE="The maximum object size has been exceeded for the provided object.",MAX_DEPTH=10,MAX_OBJECT_SIZE=1e3,MAX_ARRAY_SIZE=1e3,MAX_FILE_SIZE=10*1024*1024,MAX_FILE_COUNT=10,DEFAULT_MAX_TOKENS_FOR_LLM=2048,S3_DAILY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteDaily",S3_WEEKLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteWeekly",S3_MONTHLY_PURGE_LIFECYCLE_TAG="ExpirationPolicy=DeleteMonthly",TOOL_USE_DEFAULT_MODEL="gpt-4o-mini",COMP_NAMES={apiCall:"APICall",code:"Code",llmPrompt:"PromptGenerator",visionLLM:"VisionLLM"},JSON_RESPONSE_INSTRUCTION=`
2
2
  Respond ONLY with a valid, parsable JSON object. Follow these strict guidelines:
3
3
  1. The response must begin with '{' and end with '}'.
4
4
  2. Use double quotes for all keys and string values.
@@ -136,32 +136,13 @@ ${prompt}
136
136
  ${_error}
137
137
  `),{Output:void 0,_error,_debug:logger2.output}}}async scrapeURL(url,data,key){try{const response=await axios({method:"get",url:"https://api.scrapfly.io/scrape",params:{url:encodeURIComponent(url),key,cost_budget:80,...data.format?{format:data.format}:{format:"markdown"},...data.antiScrapingProtection&&{asp:!0},...data.javascriptRendering&&{render_js:!0},...data.autoScroll&&{auto_scroll:!0,render_js:!0}}});return{content:response.data?.result?.content,success:!0,url,cost:response.data?.context?.cost?.total||0}}catch(error){return{content:void 0,success:!1,error:error?.response?.data?.result?.error?.message||"Failed to scrape URL",url,cost:0}}}extractUrls(input){const scrapeUrls=[];for(const key in input)if(Object.prototype.hasOwnProperty.call(input,key)){const inputItem=input[key];if(typeof inputItem=="string")try{let urls=JSON.parse(inputItem);for(const url of urls)this.isValidUrl(url)&&scrapeUrls.push(url.trim())}catch{const commaSeparatedUrls=inputItem.split(",");for(const url of commaSeparatedUrls)this.isValidUrl(url)&&scrapeUrls.push(url.trim())}else if(typeof inputItem=="object")for(const url of inputItem)this.isValidUrl(url)&&scrapeUrls.push(url.trim())}return scrapeUrls}isValidUrl(urlString){try{const urlToCheck=urlString;return new URL(urlToCheck),!0}catch{return!1}}reportUsage({urlsScraped,agentId,teamId,totalCredits}){SystemEvents.emit("USAGE:API",{sourceId:"api:webscrape.smyth",credits:totalCredits,agentId,teamId})}}var __defProp$N=Object.defineProperty,__defNormalProp$N=(obj,key,value)=>key in obj?__defProp$N(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$N=(obj,key,value)=>__defNormalProp$N(obj,typeof key!="symbol"?key+"":key,value);class TavilyWebSearch extends Component{constructor(){super(),__publicField$N(this,"schema",{name:"TavilyWebSearch",description:"Use this component to generate a responses from an LLM",inputs:{SearchQuery:{type:"Text",description:"The search query to get the web search results of",default:!0}},outputs:{Results:{type:"Array",description:"The web search results",default:!0}}}),__publicField$N(this,"configSchema",Joi.object({includeImages:Joi.boolean().default(!1).label("Include Image Results"),sourcesLimit:Joi.number().integer().default(10).label("Sources Limit"),searchTopic:Joi.string().valid("general","news").label("Search Topic"),includeQAs:Joi.boolean().default(!1).label("Include QAs"),timeRange:Joi.string().valid("None","day","week","month","year").label("Time Range"),includeRawContent:Joi.boolean().default(!1).label("Include Raw Content"),excludeDomains:Joi.string().allow("").label("Exclude Domains")}))}init(){}async process(input,config2,agent){await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{logger2.debug("=== Web Scrape Log ===");let Output={},_error,searchQuery=input.SearchQuery;const teamId=agent.teamId,api_key=await getCredentials(AccessCandidate.team(teamId),"tavily");logger2.debug("Payload:",JSON.stringify(config2.data));const response=await axios({method:"post",url:"https://api.tavily.com/search",data:{api_key,query:searchQuery,topic:config2.data.searchTopic,exclude_domains:config2.data.excludeDomains?.length?config2.data.excludeDomains.split(","):[],max_results:config2.data.sourcesLimit,...config2.data.timeRange!=="None"?{time_range:config2.data.timeRange}:{},...config2.data.includeImages?{include_images:!0}:{},...config2.data.includeQAs?{include_answer:!0}:{},...config2.data.includeRawContent?{include_raw_content:!0}:{}}});return Output={Results:response.data.results,...config2.data.includeImages?{Images:response.data.images}:{},...config2.data.includeQAs?{Answer:response.data.answer}:{}},this.reportUsage({agentId:agent.id,teamId:agent.teamId}),{...Output,_error,_debug:logger2.output}}catch(err){const _error=err?.message||err?.response?.data||err.toString();return logger2.error(` Error scraping web
138
138
  ${JSON.stringify(_error)}
139
- `),{Output:void 0,_error,_debug:logger2.output}}}reportUsage({agentId,teamId}){SystemEvents.emit("USAGE:API",{sourceId:"api:websearch.smyth",credits:1,agentId,teamId})}}const cachePrefix="serverless_code",cacheTTL=60*60*24*16,PER_SECOND_COST=1e-4;function getLambdaFunctionName(agentId,componentId){return`${agentId}-${componentId}`}function generateCodeHash(code_body,code_imports,codeInputs){const importsHash=getSanitizeCodeHash(code_imports),bodyHash=getSanitizeCodeHash(code_body),inputsHash=getSanitizeCodeHash(JSON.stringify(codeInputs));return`imports-${importsHash}__body-${bodyHash}__inputs-${inputsHash}`}function getSanitizeCodeHash(code){let output="",isSingleQuote=!1,isDoubleQuote=!1,isTemplateLiteral=!1,isComment=!1,prevChar="";for(let i=0;i<code.length;i++){let char=code[i],nextChar=code[i+1];if(char==="'"&&!isDoubleQuote&&!isTemplateLiteral&&prevChar!=="\\"&&(isSingleQuote=!isSingleQuote),char==='"'&&!isSingleQuote&&!isTemplateLiteral&&prevChar!=="\\"&&(isDoubleQuote=!isDoubleQuote),char==="`"&&!isSingleQuote&&!isDoubleQuote&&prevChar!=="\\"&&(isTemplateLiteral=!isTemplateLiteral),char==="/"&&nextChar==="/"&&!isSingleQuote&&!isDoubleQuote&&!isTemplateLiteral&&(isComment=!0),char==="/"&&nextChar==="*"&&!isSingleQuote&&!isDoubleQuote&&!isTemplateLiteral&&(isComment=!0),char==="*"&&nextChar==="/"&&isComment){isComment=!1,i++;continue}char===`
140
- `&&isComment&&(isComment=!1),isComment||(output+=char),prevChar=char}return crypto$1.createHash("md5").update(output.replace(/\s+/g," ").trim()).digest("hex")}async function getDeployedCodeHash(agentId,componentId){return await ConnectorService.getCacheConnector().user(AccessCandidate.agent(agentId)).get(`${cachePrefix}_${agentId}-${componentId}`)}async function setDeployedCodeHash(agentId,componentId,codeHash){await ConnectorService.getCacheConnector().user(AccessCandidate.agent(agentId)).set(`${cachePrefix}_${agentId}-${componentId}`,codeHash,null,null,cacheTTL)}function extractNpmImports(code){const importRegex=/import\s+(?:[\w*\s{},]*\s+from\s+)?['"]([^'"]+)['"]/g,requireRegex=/require\(['"]([^'"]+)['"]\)/g,dynamicImportRegex=/import\(['"]([^'"]+)['"]\)/g;let libraries=new Set,match;function extractPackageName(modulePath){return modulePath.startsWith("@")?modulePath.split("/").slice(0,2).join("/"):modulePath.split("/")[0]}for(;(match=importRegex.exec(code))!==null;)libraries.add(extractPackageName(match[1]));for(;(match=requireRegex.exec(code))!==null;)libraries.add(extractPackageName(match[1]));for(;(match=dynamicImportRegex.exec(code))!==null;)libraries.add(extractPackageName(match[1]));return Array.from(libraries)}function generateLambdaCode(code_imports,code_body,input_variables){return`${code_imports}
141
- export const handler = async (event, context) => {
142
- try {
143
- context.callbackWaitsForEmptyEventLoop = false;
144
- let startTime = Date.now();
145
- const result = await (async () => {
146
- ${input_variables&&input_variables.length?input_variables.map(variable=>`const ${variable} = event.${variable};`).join(`
147
- `):""}
148
- ${code_body}
149
- })();
150
- let endTime = Date.now();
151
- return {
152
- result,
153
- executionTime: endTime - startTime
154
- }
155
- } catch (e) {
156
- throw e;
157
- }
158
- };`}async function zipCode(directory){return new Promise((resolve,reject)=>{zl.archiveFolder(directory,`${directory}.zip`).then(function(){resolve(`${directory}.zip`)},function(err){reject(err)})})}async function createOrUpdateLambdaFunction(functionName,zipFilePath,awsConfigs){const client=new LambdaClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),functionContent=fs__default.readFileSync(zipFilePath);try{const exisitingFunction=await getDeployedFunction(functionName,awsConfigs);if(exisitingFunction){exisitingFunction.status==="InProgress"&&await verifyFunctionDeploymentStatus(functionName,client);const updateCodeParams={FunctionName:functionName,ZipFile:functionContent},updateFunctionCodeCommand=new UpdateFunctionCodeCommand(updateCodeParams);await client.send(updateFunctionCodeCommand),await verifyFunctionDeploymentStatus(functionName,client)}else{let roleArn="";try{const iamClient=new IAMClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),getRoleCommand=new GetRoleCommand({RoleName:`smyth-${functionName}-role`});roleArn=(await iamClient.send(getRoleCommand)).Role.Arn}catch(error){if(error.name==="NoSuchEntityException"){const iamClient=new IAMClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),createRoleCommand=new CreateRoleCommand({RoleName:`smyth-${functionName}-role`,AssumeRolePolicyDocument:getLambdaRolePolicy()}),roleResponse=await iamClient.send(createRoleCommand);await waitForRoleDeploymentStatus(`smyth-${functionName}-role`,iamClient),roleArn=roleResponse.Role.Arn}else throw error}const functionParams={Code:{ZipFile:functionContent},FunctionName:functionName,Handler:"index.handler",Role:roleArn,Runtime:Runtime.nodejs18x,Layers:[],Timeout:900,Tags:{"auto-delete":"true"},MemorySize:256},functionCreateCommand=new CreateFunctionCommand(functionParams),functionResponse=await client.send(functionCreateCommand);await verifyFunctionDeploymentStatus(functionName,client)}}catch(error){throw error}}async function waitForRoleDeploymentStatus(roleName,client){return new Promise((resolve,reject)=>{try{let interval=setInterval(async()=>{const getRoleCommand=new GetRoleCommand({RoleName:roleName});if((await client.send(getRoleCommand)).Role.AssumeRolePolicyDocument)return clearInterval(interval),resolve(!0)},7e3)}catch{return!1}})}async function verifyFunctionDeploymentStatus(functionName,client){return new Promise((resolve,reject)=>{try{let interval=setInterval(async()=>{const getFunctionCommand=new GetFunctionCommand({FunctionName:functionName});if((await client.send(getFunctionCommand)).Configuration.LastUpdateStatus==="Successful")return clearInterval(interval),resolve(!0)},5e3)}catch{return!1}})}function getLambdaRolePolicy(){return JSON.stringify({Version:"2012-10-17",Statement:[{Effect:"Allow",Principal:{Service:"lambda.amazonaws.com"},Action:"sts:AssumeRole"}]})}async function updateDeployedCodeTTL(agentId,componentId,ttl){await ConnectorService.getCacheConnector().user(AccessCandidate.agent(agentId)).updateTTL(`${cachePrefix}_${agentId}-${componentId}`,ttl)}async function invokeLambdaFunction(functionName,inputs,awsCredentials){try{const client=new LambdaClient({region:awsCredentials.region,...awsCredentials.accessKeyId&&{credentials:{accessKeyId:awsCredentials.accessKeyId,secretAccessKey:awsCredentials.secretAccessKey}}}),invokeCommand=new InvokeCommand({FunctionName:functionName,Payload:new TextEncoder().encode(`${JSON.stringify(inputs)}`),InvocationType:"RequestResponse"}),response=await client.send(invokeCommand);if(response.FunctionError)throw new Error(new TextDecoder().decode(response.Payload));return new TextDecoder().decode(response.Payload)}catch(error){throw error}}async function getDeployedFunction(functionName,awsConfigs){try{const client=new LambdaClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),getFunctionCommand=new GetFunctionCommand({FunctionName:functionName}),lambdaResponse=await client.send(getFunctionCommand);return{status:lambdaResponse.Configuration.LastUpdateStatus,functionName:lambdaResponse.Configuration.FunctionName,functionVersion:lambdaResponse.Configuration.Version,updatedAt:lambdaResponse.Configuration.LastModified,role:lambdaResponse.Configuration.Role,runtime:lambdaResponse.Configuration.Runtime,version:lambdaResponse.Configuration.Version}}catch{return null}}async function getLambdaCredentials(agent,config2){let awsAccessKeyId=null,awsSecretAccessKey=null,awsRegion=null,userProvidedKeys=!1;return config2.data.accessKeyId&&config2.data.secretAccessKey&&config2.data.region&&config2.data.use_own_keys&&(userProvidedKeys=!0,[awsAccessKeyId,awsSecretAccessKey]=await Promise.all([VaultHelper.getTeamKey(extractKeyFromTemplateVar(config2.data.accessKeyId),agent?.teamId),VaultHelper.getTeamKey(extractKeyFromTemplateVar(config2.data.secretAccessKey),agent?.teamId)]),awsRegion=config2.data.region),{accessKeyId:awsAccessKeyId,secretAccessKey:awsSecretAccessKey,region:awsRegion,isUserProvidedKeys:userProvidedKeys}}function calculateExecutionCost(executionTime){return executionTime/1e3*Number(PER_SECOND_COST)}function extractKeyFromTemplateVar(input){const regex=/\{\{KEY\((.*?)\)\}\}/,match=input.match(regex);return match?match[1]:input}function reportUsage({cost,agentId,teamId}){SystemEvents.emit("USAGE:API",{sourceId:"api:serverless_code.smyth",cost,agentId,teamId})}var __defProp$M=Object.defineProperty,__defNormalProp$M=(obj,key,value)=>key in obj?__defProp$M(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$M=(obj,key,value)=>__defNormalProp$M(obj,key+"",value);class ServerlessCode extends Component{constructor(){super(),__publicField$M(this,"configSchema",Joi.object({code_imports:Joi.string().max(1e3).allow("").label("Imports"),code_body:Joi.string().max(5e5).allow("").label("Code"),deploy_btn:Joi.string().max(5e5).allow("").label("Deploy").optional(),accessKeyId:Joi.string().max(100).allow("").label("AWS Access Key ID").optional(),secretAccessKey:Joi.string().max(200).allow("").label("AWS Secret Access Key").optional(),region:Joi.string().label("AWS Region").optional(),_templateSettings:Joi.object().allow(null).label("Template Settings"),_templateVars:Joi.object().allow(null).label("Template Variables"),function_label:Joi.string().max(100).allow("").label("Function Label").optional(),function_label_end:Joi.string().allow(null).label("Function Label End").optional(),use_own_keys:Joi.boolean().label("Use Own Keys").optional(),pricing_note:Joi.string().allow(null).label("Pricing Note").optional()}))}init(){}async process(input,config2,agent){await new Promise(resolve=>setTimeout(resolve,1e4)),await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{logger2.debug("=== Serverless Code Log ===");let Output={},_error;const componentInputs=agent.components[config2.id]?.inputs||{};let codeInputs={};for(let field of componentInputs)switch(typeof input[field.name]){case"string":try{codeInputs[field.name]=JSON.parse(input[field.name].replace(/\\"/g,'"'))}catch{codeInputs[field.name]=`${input[field.name]}`}break;case"number":case"boolean":codeInputs[field.name]=input[field.name];break;default:codeInputs[field.name]=input[field.name];break}logger2.debug(`
139
+ `),{Output:void 0,_error,_debug:logger2.output}}}reportUsage({agentId,teamId}){SystemEvents.emit("USAGE:API",{sourceId:"api:websearch.smyth",credits:1,agentId,teamId})}}var __defProp$M=Object.defineProperty,__defNormalProp$M=(obj,key,value)=>key in obj?__defProp$M(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$M=(obj,key,value)=>__defNormalProp$M(obj,key+"",value);class ServerlessCode extends Component{constructor(){super(),__publicField$M(this,"configSchema",Joi.object({code_imports:Joi.string().max(1e3).allow("").label("Imports"),code_body:Joi.string().max(5e5).allow("").label("Code"),deploy_btn:Joi.string().max(5e5).allow("").label("Deploy").optional(),accessKeyId:Joi.string().max(100).allow("").label("AWS Access Key ID").optional(),secretAccessKey:Joi.string().max(200).allow("").label("AWS Secret Access Key").optional(),region:Joi.string().label("AWS Region").optional(),_templateSettings:Joi.object().allow(null).label("Template Settings"),_templateVars:Joi.object().allow(null).label("Template Variables"),function_label:Joi.string().max(100).allow("").label("Function Label").optional(),function_label_end:Joi.string().allow(null).label("Function Label End").optional(),use_own_keys:Joi.boolean().label("Use Own Keys").optional(),pricing_note:Joi.string().allow(null).label("Pricing Note").optional()}))}init(){}async process(input,config2,agent){await new Promise(resolve=>setTimeout(resolve,1e4)),await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{logger2.debug("=== Serverless Code Log ===");let Output={},_error;const componentInputs=agent.components[config2.id]?.inputs||{};let codeInputs={};for(let field of componentInputs)switch(typeof input[field.name]){case"string":try{codeInputs[field.name]=JSON.parse(input[field.name].replace(/\\"/g,'"'))}catch{codeInputs[field.name]=`${input[field.name]}`}break;case"number":case"boolean":codeInputs[field.name]=input[field.name];break;default:codeInputs[field.name]=input[field.name];break}logger2.debug(`
159
140
  Input Variables:
160
141
  ${JSON.stringify(codeInputs,null,2)}
161
- `);let codeConnector=ConnectorService.getCodeConnector(),codeCredentials=await getLambdaCredentials(agent,config2);codeCredentials.isUserProvidedKeys&&(codeConnector=codeConnector.instance({region:codeCredentials.region,accessKeyId:codeCredentials.accessKeyId,secretAccessKey:codeCredentials.secretAccessKey})),await codeConnector.agent(agent.id).deploy(config2.id,{code:config2?.data?.code_body,dependencies:config2?.data?.code_imports,inputs:codeInputs},{runtime:"nodejs"});try{const executionResponse=await codeConnector.agent(agent.id).execute(config2.id,codeInputs),executionTime=executionResponse.executionTime;logger2.debug(`Code result:
142
+ `);let codeConnector=ConnectorService.getCodeConnector();await codeConnector.agent(agent.id).deploy(config2.id,{code:config2?.data?.code_body,dependencies:config2?.data?.code_imports,inputs:codeInputs},{runtime:"nodejs"});try{const executionResponse=await codeConnector.agent(agent.id).execute(config2.id,codeInputs),executionTime=executionResponse.executionTime;logger2.debug(`Code result:
162
143
  ${typeof executionResponse.output=="object"?JSON.stringify(executionResponse.output,null,2):executionResponse.output}
163
144
  `),logger2.debug(`Execution time: ${executionTime}ms
164
- `);const cost=calculateExecutionCost(executionTime);if(!codeCredentials.isUserProvidedKeys){const agentTeam=await ConnectorService.getAccountConnector().getCandidateTeam(agent.id);reportUsage({cost,agentId:agent.id,teamId:agentTeam})}executionResponse.success?Output=executionResponse.output:(Output=void 0,_error=executionResponse.errors)}catch(error){logger2.error(`Error running code
145
+ `),executionResponse.success?Output=executionResponse.output:(Output=void 0,_error=executionResponse.errors)}catch(error){logger2.error(`Error running code
165
146
  ${error}
166
147
  `),_error=error?.response?.data||error?.message||error.toString(),Output=void 0}return{Output,_error,_debug:logger2.output}}catch(err){const _error=err?.response?.data||err?.message||err.toString();return logger2.error(` Error running code
167
148
  ${_error}
@@ -171,7 +152,7 @@ ${_error}
171
152
  ${error?.message||JSON.stringify(error)}`,_debug:logger2.output}}}}var __defProp$K=Object.defineProperty,__defNormalProp$K=(obj,key,value)=>key in obj?__defProp$K(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$K=(obj,key,value)=>__defNormalProp$K(obj,key+"",value);class OpenAPI extends Component{constructor(){super(),__publicField$K(this,"configSchema",Joi.object({model:Joi.string().optional(),openAiModel:Joi.string().optional(),specUrl:Joi.string().max(2048).uri().required().description("URL of the OpenAPI specification"),descForModel:Joi.string().max(5e3).required().allow("").label("Description for Model"),name:Joi.string().max(500).required().allow(""),desc:Joi.string().max(5e3).required().allow("").label("Description"),logoUrl:Joi.string().max(8192).allow(""),id:Joi.string().max(200),version:Joi.string().max(100).allow(""),domain:Joi.string().max(253).allow("")}))}init(){}async process(input,config2,agent){await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);logger2.debug("=== Open API Log ===");try{const specUrl=config2?.data?.specUrl;if(!specUrl)return{_error:"Please provide a Open API Specification URL!",_debug:logger2.output};const model=config2?.data?.model||config2?.data?.openAiModel,descForModel=TemplateString(config2?.data?.descForModel).parse(input).result;let prompt="";if(input?.Prompt?prompt=typeof input?.Prompt=="string"?input?.Prompt:JSON.stringify(input?.Prompt):input?.Query&&(prompt=typeof input?.Query=="string"?input?.Query:JSON.stringify(input?.Query)),!prompt)return{_error:"Please provide a prompt",_debug:logger2.output};const result=await new Conversation(model,specUrl,{systemPrompt:descForModel,agentId:agent?.id}).prompt(prompt);return logger2.debug(`Response:
172
153
  `,result,`
173
154
  `),{Output:result,_debug:logger2.output}}catch(error){return console.error("Error on running Open API: ",error),{_error:`Error on running Open API!
174
- ${error?.message||JSON.stringify(error)}`,_debug:logger2.output}}}}const components={Component:new Component,Note:new Component,APIEndpoint:new APIEndpoint,APIOutput:new APIOutput,PromptGenerator:new PromptGenerator,LLMPrompt:new PromptGenerator,APICall:new APICall,VisionLLM:new VisionLLM,FSleep:new FSleep,FHash:new FHash,FEncDec:new FEncDec,FSign:new FSign,FTimestamp:new FTimestamp,DataSourceLookup:new DataSourceLookup,DataSourceIndexer:new DataSourceIndexer,DataSourceCleaner:new DataSourceCleaner,JSONFilter:new JSONFilter,LogicAND:new LogicAND,LogicOR:new LogicOR,LogicXOR:new LogicXOR,LogicAtLeast:new LogicAtLeast,LogicAtMost:new LogicAtMost,AgentPlugin:new AgentPlugin,LLMAssistant:new LLMAssistant,Async:new Async,Await:new Await,ForEach:new ForEach,HuggingFace:new HuggingFace,ZapierAction:new ZapierAction,GPTPlugin:new GPTPlugin,Classifier:new Classifier,MultimodalLLM:new MultimodalLLM,GenAILLM:new GenAILLM,FileStore:new FileStore,WebSearch:new TavilyWebSearch,WebScrape:new ScrapflyWebScrape,TavilyWebSearch:new TavilyWebSearch,ScrapflyWebScrape:new ScrapflyWebScrape,ComponentHost:new ComponentHost,ServerlessCode:new ServerlessCode,ImageGenerator:new ImageGenerator,MCPClient:new MCPClient,OpenAPI:new OpenAPI},ComponentInstances=components,console$n=Logger("S3Cache");function generateLifecycleRules(){const rules=[];for(let i=1;i<100;i++)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});for(let i=100;i<1e3;i+=10)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});for(let i=1e3;i<=1e4;i+=100)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});return rules}function generateExpiryMetadata(expiryDays){let metadataValue;if(expiryDays>=1&&expiryDays<100)metadataValue=`ExpireAfter${expiryDays}Days`;else if(expiryDays>=100&&expiryDays<1e3)metadataValue=`ExpireAfter${Math.ceil(expiryDays/10)*10}Days`;else if(expiryDays>=1e3&&expiryDays<=1e4)metadataValue=`ExpireAfter${Math.ceil(expiryDays/100)*100}Days`;else throw new Error("Invalid expiry days. Please provide a valid expiry days value.");return{Key:"Expiry",Value:metadataValue}}function getNonExistingRules(existingRules,newRules){return newRules.filter(rule=>!existingRules.some(existingRule=>existingRule.ID===rule.ID))}function ttlToExpiryDays(ttl){return Math.ceil(ttl/(60*60*24))}async function checkAndInstallLifecycleRules(bucketName,s3Client){if(!bucketName||bucketName.trim()==="")throw new Error("Bucket name is required and cannot be empty");if(!s3Client)throw new Error("S3Client is required");console$n.log(`Checking lifecycle rules for bucket: ${bucketName}`);try{const getLifecycleCommand=new GetBucketLifecycleConfigurationCommand({Bucket:bucketName}),existingRules=(await s3Client.send(getLifecycleCommand)).Rules,newRules=generateLifecycleRules(),nonExistingNewRules=getNonExistingRules(existingRules,newRules);if(nonExistingNewRules.length>0){const params={Bucket:bucketName,LifecycleConfiguration:{Rules:[...existingRules,...nonExistingNewRules]}},putLifecycleCommand=new PutBucketLifecycleConfigurationCommand(params);await s3Client.send(putLifecycleCommand),console$n.log(`Added ${nonExistingNewRules.length} new lifecycle rules to bucket: ${bucketName}`)}else console$n.log("Lifecycle configuration already exists")}catch(error){if(error.code==="NoSuchLifecycleConfiguration"){console$n.log("No lifecycle configuration found. Creating new configuration...");const lifecycleRules=generateLifecycleRules(),params={Bucket:bucketName,LifecycleConfiguration:{Rules:lifecycleRules}},putLifecycleCommand=new PutBucketLifecycleConfigurationCommand(params);await s3Client.send(putLifecycleCommand),console$n.log("Lifecycle configuration created successfully.")}else console$n.error("Error checking lifecycle configuration:",error),console$n.error("Bucket name provided:",bucketName),console$n.error("Error details:",{name:error.name,message:error.message,code:error.code})}}var __defProp$J=Object.defineProperty,__getOwnPropDesc$j=Object.getOwnPropertyDescriptor,__defNormalProp$J=(obj,key,value)=>key in obj?__defProp$J(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$j=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$j(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$J(target,key,result),result},__publicField$J=(obj,key,value)=>__defNormalProp$J(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(global,"crypto",{value:{getRandomValues:arr=>crypto$1.randomBytes(arr.length)}});const console$m=Logger("S3Storage");class S3Storage extends StorageConnector{constructor(_settings){if(super(_settings),this._settings=_settings,__publicField$J(this,"name","S3Storage"),__publicField$J(this,"client"),__publicField$J(this,"bucket"),__publicField$J(this,"isInitialized",!1),__publicField$J(this,"initializationPromise",null),!_settings.bucket||_settings.bucket.trim()===""){console$m.warn("S3 bucket name is required and cannot be empty, connector not initialized");return}this.bucket=_settings.bucket;const clientConfig={};_settings.region&&(clientConfig.region=_settings.region),_settings.accessKeyId&&_settings.secretAccessKey&&(clientConfig.credentials={accessKeyId:_settings.accessKeyId,secretAccessKey:_settings.secretAccessKey}),this.client=new S3Client(clientConfig)}async ensureInitialized(){if(!this.isInitialized)return this.initializationPromise?this.initializationPromise:(this.initializationPromise=this.initialize(),this.initializationPromise)}async initialize(){if(!this.client){console$m.warn("S3 client not initialized");return}if(!this.isInitialized)try{await checkAndInstallLifecycleRules(this.bucket,this.client),this.isInitialized=!0}catch(error){throw console$m.error("Failed to initialize S3Storage:",error),this.initializationPromise=null,error}}async read(acRequest,resourceId){await this.ensureInitialized();const params={Bucket:this.bucket,Key:resourceId},s3HeadCommand=new HeadObjectCommand(params),expirationHeader=(await this.client.send(s3HeadCommand))?.Expiration;if(expirationHeader){const expirationDateMatch=expirationHeader.match(/expiry-date="([^"]+)"/);if(expirationDateMatch){const expirationDate=new Date(expirationDateMatch[1]);if(new Date>expirationDate){const s3DeleteCommand=new DeleteObjectCommand(params);await this.client.send(s3DeleteCommand);return}}}const command=new GetObjectCommand(params);try{const response=await this.client.send(command);return await streamToBuffer(response.Body)}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$m.error("Error reading object from S3",error.name,error.message),error}}async getMetadata(acRequest,resourceId){await this.ensureInitialized();try{return await this.getS3Metadata(resourceId)}catch(error){throw console$m.error("Error getting access rights in S3",error.name,error.message),error}}async setMetadata(acRequest,resourceId,metadata){await this.ensureInitialized();try{let s3Metadata=await this.getS3Metadata(resourceId);s3Metadata||(s3Metadata={}),s3Metadata={...s3Metadata,...metadata},await this.setS3Metadata(resourceId,s3Metadata)}catch(error){throw console$m.error("Error setting access rights in S3",error),error}}async write(acRequest,resourceId,value,acl,metadata){await this.ensureInitialized();const accessCandidate=acRequest.candidate;let amzACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,s3Metadata={...metadata,"x-amz-meta-acl":amzACL};const command=new PutObjectCommand({Bucket:this.bucket,Key:resourceId,Body:value,Metadata:this.serializeS3Metadata(s3Metadata),ContentType:s3Metadata.ContentType});try{const result=await this.client.send(command)}catch(error){throw console$m.error("Error writing object to S3",error.name,error.message),error}}async delete(acRequest,resourceId){await this.ensureInitialized();const command=new DeleteObjectCommand({Bucket:this.bucket,Key:resourceId});try{await this.client.send(command)}catch(error){throw console$m.error("Error deleting object from S3",error.name,error.message),error}}async exists(acRequest,resourceId){await this.ensureInitialized();const command=new HeadObjectCommand({Bucket:this.bucket,Key:resourceId});try{return await this.client.send(command),!0}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return!1;throw console$m.error("Error checking object existence in S3",error.name,error.message),error}}async getResourceACL(resourceId,candidate){await this.ensureInitialized();const s3Metadata=await this.getS3Metadata(resourceId);return s3Metadata!==void 0?ACL.from(s3Metadata?.["x-amz-meta-acl"]):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async getACL(acRequest,resourceId){await this.ensureInitialized();try{const s3Metadata=await this.getS3Metadata(resourceId);return ACL.from(s3Metadata?.["x-amz-meta-acl"])}catch(error){throw console$m.error("Error getting access rights in S3",error.name,error.message),error}}async setACL(acRequest,resourceId,acl){await this.ensureInitialized();try{let s3Metadata=await this.getS3Metadata(resourceId);s3Metadata||(s3Metadata={}),s3Metadata["x-amz-meta-acl"]=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setS3Metadata(resourceId,s3Metadata)}catch(error){throw console$m.error("Error setting access rights in S3",error),error}}async expire(acRequest,resourceId,ttl){await this.ensureInitialized();const expiryMetadata=generateExpiryMetadata(ttlToExpiryDays(ttl)),s3PutObjectTaggingCommand=new PutObjectTaggingCommand({Bucket:this.bucket,Key:resourceId,Tagging:{TagSet:[{Key:expiryMetadata.Key,Value:expiryMetadata.Value}]}});await this.client.send(s3PutObjectTaggingCommand)}migrateMetadata(metadata){if(!metadata.agentid&&!metadata.teamid&&!metadata.userid)return metadata;{const convertibleItems=["agentid","teamid","userid"],aclHelper=new ACL;for(let key of convertibleItems){if(!metadata[key])continue;const role=key==="agentid"?TAccessRole.Agent:key==="teamid"?TAccessRole.Team:TAccessRole.User;aclHelper.addAccess(role,metadata[key].toString(),[TAccessLevel.Owner,TAccessLevel.Read,TAccessLevel.Write]),delete metadata[key]}aclHelper.migrated=!0;const newMetadata={"x-amz-meta-acl":aclHelper.ACL};for(let key in metadata)newMetadata[key]=metadata[key];return newMetadata}}serializeS3Metadata(s3Metadata){let amzMetadata={};s3Metadata["x-amz-meta-acl"]&&(s3Metadata["x-amz-meta-acl"]&&(amzMetadata["x-amz-meta-acl"]=typeof s3Metadata["x-amz-meta-acl"]=="string"?s3Metadata["x-amz-meta-acl"]:ACL.from(s3Metadata["x-amz-meta-acl"]).serializedACL),delete s3Metadata["x-amz-meta-acl"]);for(let key in s3Metadata)key!="ContentType"&&(amzMetadata[key]=typeof s3Metadata[key]=="string"?s3Metadata[key]:JSON.stringify(s3Metadata[key]));return amzMetadata}deserializeS3Metadata(amzMetadata){let metadata={};for(let key in amzMetadata){if(key==="x-amz-meta-acl"){metadata[key]=ACL.from(amzMetadata[key]).ACL;continue}try{metadata[key]=JSON.parse(amzMetadata[key])}catch{metadata[key]=amzMetadata[key]}}return metadata=this.migrateMetadata(metadata),metadata}async getS3Metadata(resourceId){try{const command=new HeadObjectCommand({Bucket:this.bucket,Key:resourceId}),response=await this.client.send(command),s3RawMetadata=response.Metadata;if(!s3RawMetadata||Object.keys(s3RawMetadata).length===0)return{};let metadata=this.deserializeS3Metadata(s3RawMetadata);return metadata.ContentType||(metadata.ContentType=response.ContentType?response.ContentType:"application/octet-stream"),metadata}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$m.error("Error reading object metadata from S3",error.name,error.message),error}}async setS3Metadata(resourceId,metadata){try{const getObjectCommand=new GetObjectCommand({Bucket:this.bucket,Key:resourceId}),objectData=await this.client.send(getObjectCommand),bufferBody=await streamToBuffer(objectData.Body),amzMetadata=this.serializeS3Metadata(metadata),putObjectCommand=new PutObjectCommand({Bucket:this.bucket,Key:resourceId,Body:bufferBody,Metadata:amzMetadata});await this.client.send(putObjectCommand)}catch(error){throw console$m.error("Error setting object metadata in S3",error.name,error.message),error}}}__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"read"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"getMetadata"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"setMetadata"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"write"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"delete"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"exists"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"getACL"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"setACL"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"expire");var __defProp$I=Object.defineProperty,__getOwnPropDesc$i=Object.getOwnPropertyDescriptor,__defNormalProp$I=(obj,key,value)=>key in obj?__defProp$I(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$i=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$i(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$I(target,key,result),result},__publicField$I=(obj,key,value)=>__defNormalProp$I(obj,typeof key!="symbol"?key+"":key,value);const console$l=Logger("LocalStorage");class LocalStorage extends StorageConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$I(this,"name","LocalStorage"),__publicField$I(this,"folder"),__publicField$I(this,"storagePrefix","local"),__publicField$I(this,"metadataPrefix",".local.metadata"),__publicField$I(this,"isInitialized",!1),this.folder=this.findStorageFolder(_settings?.folder),this.initialize(),fs__default.existsSync(this.folder)||console$l.error(`Invalid folder provided: ${this.folder}`)}findStorageFolder(folder){let _storageFolder=folder;return fs__default.existsSync(_storageFolder)?_storageFolder:(_storageFolder=findSmythPath("storage"),fs__default.existsSync(_storageFolder)?(console$l.warn("Using alternative storage folder found in : ",_storageFolder),_storageFolder):(console$l.warn("!!! All attempts to find an existing storage folder failed !!!"),console$l.warn("!!! I will use this folder: ",_storageFolder),_storageFolder))}async read(acRequest,resourceId){this.isInitialized||await this.initialize();try{const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);return fs__default.existsSync(filePath)?fs__default.readFileSync(filePath,null):void 0}catch(error){throw console$l.error("Error reading object from local storage",error.name,error.message),error}}async getMetadata(acRequest,resourceId){try{const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId);if(!fs__default.existsSync(metadataFilePath))return;const data=fs__default.readFileSync(metadataFilePath,"utf-8");return this.deserializeMetadata(JSON.parse(data))}catch(error){throw console$l.error("Error reading metadata from LocalStorage",error.name,error.message),error}}async setMetadata(acRequest,resourceId,metadata){try{let fileMetadata=await this.getMetadata(acRequest,resourceId);fileMetadata||(fileMetadata={}),fileMetadata={...fileMetadata,...metadata};const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId,!0),serializedMetadata=this.serializeMetadata(fileMetadata);fs__default.writeFileSync(metadataFilePath,JSON.stringify(serializedMetadata))}catch(error){throw console$l.error("Error setting metadata in local storage",error.name,error.message),error}}async write(acRequest,resourceId,value,acl,metadata){this.isInitialized||await this.initialize();const accessCandidate=acRequest.candidate;let localACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,fileMetadata={...metadata,acl:localACL};const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId,!0);fs__default.writeFileSync(filePath,value),await this.setMetadata(acRequest,resourceId,fileMetadata)}async delete(acRequest,resourceId){try{const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);fs__default.existsSync(filePath)&&fs__default.unlinkSync(filePath);const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId);fs__default.existsSync(metadataFilePath)&&fs__default.unlinkSync(metadataFilePath)}catch(error){throw console$l.error("Error deleting object from local storage",error.name,error.message),error}}async exists(acRequest,resourceId){this.isInitialized||await this.initialize();const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);return!!fs__default.existsSync(filePath)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const metadataFilePath=this.getMetadataFilePath(candidate.id,resourceId);if(!fs__default.existsSync(metadataFilePath))return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);const metadata=fs__default.readFileSync(metadataFilePath,"utf-8");if(metadata===void 0)return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);try{let metadataObject=JSON.parse(metadata);return ACL.from(metadataObject?.acl)}catch(error){throw console$l.error("Error parsing metadata in local storage",error.name,error.message),error}}async getACL(acRequest,resourceId){try{const fileMetadata=await this.getMetadata(acRequest,resourceId);return ACL.from(fileMetadata?.acl)}catch(error){throw console$l.error("Error getting access rights in local storage",error.name,error.message),error}}async setACL(acRequest,resourceId,acl){try{let fileMetadata=await this.getMetadata(acRequest,resourceId);fileMetadata||(fileMetadata={}),fileMetadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,resourceId,fileMetadata)}catch(error){throw console$l.error("Error setting access rights in local storage",error),error}}async expire(acRequest,resourceId,ttl){console$l.warn(`LocalStorage.expire is not implemented, request will be ignored for resource ${resourceId} and ttl ${ttl}`)}async initialize(){const storageFolderPath=path.join(this.folder,this.storagePrefix);existsSync(storageFolderPath)||fs__default.mkdirSync(storageFolderPath,{recursive:!0});const metadataFolderPath=path.join(this.folder,this.metadataPrefix);existsSync(metadataFolderPath)||(fs__default.mkdirSync(metadataFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(metadataFolderPath,"README_IMPORTANT.txt"),"This folder is used for smythOS metadata, do not delete it, it will break SmythOS local filesystem")),this.isInitialized=!0}getStorageFilePath(candidateId,resourceId,createFoldersIfNotExists=!1){const fullPath=path.join(this.folder,this.storagePrefix,resourceId),folder=path.dirname(fullPath);return createFoldersIfNotExists&&!fs__default.existsSync(folder)&&fs__default.mkdirSync(folder,{recursive:!0}),fullPath}getMetadataFilePath(candidateId,resourceId,createFoldersIfNotExists=!1){const fullPath=path.join(this.folder,this.metadataPrefix,resourceId),folder=path.dirname(fullPath);return createFoldersIfNotExists&&!fs__default.existsSync(folder)&&fs__default.mkdirSync(folder,{recursive:!0}),fullPath}serializeMetadata(metadata){let updatedMetadata={};metadata.acl&&(metadata.acl&&(updatedMetadata.acl=typeof metadata.acl=="string"?metadata.acl:ACL.from(metadata.acl).serializedACL),delete metadata.acl);for(let key in metadata)updatedMetadata[key]=typeof metadata[key]=="string"?metadata[key]:JSON.stringify(metadata[key]);return updatedMetadata}deserializeMetadata(metadata){let deserializedMetadata={};for(let key in metadata){if(key==="acl"){deserializedMetadata[key]=ACL.from(metadata[key]).ACL;continue}try{deserializedMetadata[key]=JSON.parse(metadata[key])}catch{deserializedMetadata[key]=metadata[key]}}return deserializedMetadata}}__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"read"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"getMetadata"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"setMetadata"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"write"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"delete"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"exists"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"getACL"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"setACL"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"expire");class StorageService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Storage,"S3",S3Storage),ConnectorService.register(TConnectorService.Storage,"LocalStorage",LocalStorage)}}async function getLLMCredentials(candidate,modelInfo){const credentialsList=Array.isArray(modelInfo.credentials)?modelInfo.credentials||[TLLMCredentials.None]:[modelInfo.credentials];for(let credentialsMode of credentialsList){if(typeof credentialsMode=="object")return credentialsMode;switch(credentialsMode){case TLLMCredentials.None:return{apiKey:""};case TLLMCredentials.Internal:case TLLMCredentials.Vault:{const credentials=await getStandardLLMCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.BedrockVault:{const credentials=await getBedrockCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.VertexAIVault:{const credentials=await getVertexAICredentials(candidate,modelInfo);if(credentials)return credentials;break}}}return{}}async function getStandardLLMCredentials(candidate,modelInfo){const provider=(modelInfo.provider||modelInfo.llm)?.toLowerCase(),apiKey=await ConnectorService.getVaultConnector().requester(candidate).get(provider).catch(()=>"");return apiKey?{apiKey,isUserKey:!0}:null}async function getBedrockCredentials(candidate,modelInfo){const keyIdName=modelInfo.settings?.keyIDName,secretKeyName=modelInfo.settings?.secretKeyName,sessionKeyName=modelInfo.settings?.sessionKeyName,vaultConnector=ConnectorService.getVaultConnector(),[accessKeyId,secretAccessKey,sessionToken]=await Promise.all([vaultConnector.requester(candidate).get(keyIdName).catch(()=>""),vaultConnector.requester(candidate).get(secretKeyName).catch(()=>""),vaultConnector.requester(candidate).get(sessionKeyName).catch(()=>"")]);let credentials={accessKeyId,secretAccessKey,isUserKey:!0};return sessionToken&&(credentials.sessionToken=sessionToken),!accessKeyId||!secretAccessKey?null:credentials}async function getVertexAICredentials(candidate,modelInfo){const jsonCredentialsName=modelInfo.settings?.jsonCredentialsName;let jsonCredentials=await ConnectorService.getVaultConnector().requester(candidate).get(jsonCredentialsName).catch(()=>"");const credentials=JSON.parse(jsonCredentials);return credentials?{...credentials,isUserKey:!0}:null}var __defProp$H=Object.defineProperty,__defNormalProp$H=(obj,key,value)=>key in obj?__defProp$H(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$H=(obj,key,value)=>__defNormalProp$H(obj,typeof key!="symbol"?key+"":key,value);const console$k=Logger("LLMConnector");class LLMStream extends Readable{constructor(options){super(options),__publicField$H(this,"dataQueue"),__publicField$H(this,"toolsData"),__publicField$H(this,"hasData"),__publicField$H(this,"isReading"),this.dataQueue=[],this.toolsData=[],this.isReading=!0}_read(size){if(this.dataQueue.length>0)for(;this.dataQueue.length>0;){const chunk=this.dataQueue.shift();if(!this.push(chunk))break}else this.push(null)}enqueueData(data){this.dataQueue.push(data),this.read(0)}endStream(){this.isReading=!1,this.push(null)}}class LLMConnector extends Connector{constructor(){super(...arguments),__publicField$H(this,"vaultConnector")}imageGenRequest({acRequest,body,context}){return Promise.reject(new Error("Image edit not supported by this model"))}imageEditRequest({acRequest,body,context}){return Promise.reject(new Error("Image edit not supported by this model"))}requester(candidate){return this.vaultConnector=ConnectorService.getVaultConnector(),(!this.vaultConnector||!this.vaultConnector.valid)&&console$k.warn(`Vault Connector unavailable for ${candidate.id} `),{request:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.request({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,agentId:preparedParams.agentId,teamId:preparedParams.teamId,isUserKey:preparedParams.credentials?.isUserKey||preparedParams.isUserKey,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})},streamRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params),requestParams={acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,agentId:preparedParams.agentId,teamId:preparedParams.teamId,isUserKey:preparedParams.isUserKey,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}};let response;return preparedParams.capabilities?.search===!0&&preparedParams.useWebSearch===!0?response=await this.webSearchRequest(requestParams):response=await this.streamRequest(requestParams),response},imageGenRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.imageGenRequest({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,isUserKey:preparedParams.isUserKey,agentId:preparedParams.agentId,teamId:preparedParams.teamId,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})},imageEditRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.imageEditRequest({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,isUserKey:preparedParams.isUserKey,agentId:preparedParams.agentId,teamId:preparedParams.teamId,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})}}}enhancePrompt(prompt,config2){if(!prompt)return prompt;let newPrompt=prompt;const outputs={};if(config2?.outputs)for(let con of config2.outputs)con.default||(outputs[con.name]=con?.description?` (${con?.description})`:"");const excludedKeys=["_debug","_error"],outputKeys=Object.keys(outputs).filter(key=>!excludedKeys.includes(key));if(outputKeys.length>0){const outputFormat={};outputKeys.forEach(key=>outputFormat[key]=(config2.name==="Classifier"?"<Boolean|String>":"<value>")+(outputs[key]||"")),newPrompt+=`
155
+ ${error?.message||JSON.stringify(error)}`,_debug:logger2.output}}}}const components={Component:new Component,Note:new Component,APIEndpoint:new APIEndpoint,APIOutput:new APIOutput,PromptGenerator:new PromptGenerator,LLMPrompt:new PromptGenerator,APICall:new APICall,VisionLLM:new VisionLLM,FSleep:new FSleep,FHash:new FHash,FEncDec:new FEncDec,FSign:new FSign,FTimestamp:new FTimestamp,DataSourceLookup:new DataSourceLookup,DataSourceIndexer:new DataSourceIndexer,DataSourceCleaner:new DataSourceCleaner,JSONFilter:new JSONFilter,LogicAND:new LogicAND,LogicOR:new LogicOR,LogicXOR:new LogicXOR,LogicAtLeast:new LogicAtLeast,LogicAtMost:new LogicAtMost,AgentPlugin:new AgentPlugin,LLMAssistant:new LLMAssistant,Async:new Async,Await:new Await,ForEach:new ForEach,HuggingFace:new HuggingFace,ZapierAction:new ZapierAction,GPTPlugin:new GPTPlugin,Classifier:new Classifier,MultimodalLLM:new MultimodalLLM,GenAILLM:new GenAILLM,FileStore:new FileStore,WebSearch:new TavilyWebSearch,WebScrape:new ScrapflyWebScrape,TavilyWebSearch:new TavilyWebSearch,ScrapflyWebScrape:new ScrapflyWebScrape,ComponentHost:new ComponentHost,ServerlessCode:new ServerlessCode,ImageGenerator:new ImageGenerator,MCPClient:new MCPClient,OpenAPI:new OpenAPI},ComponentInstances=components,console$n=Logger("S3Cache");function generateLifecycleRules(){const rules=[];for(let i=1;i<100;i++)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});for(let i=100;i<1e3;i+=10)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});for(let i=1e3;i<=1e4;i+=100)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});return rules}function generateExpiryMetadata(expiryDays){let metadataValue;if(expiryDays>=1&&expiryDays<100)metadataValue=`ExpireAfter${expiryDays}Days`;else if(expiryDays>=100&&expiryDays<1e3)metadataValue=`ExpireAfter${Math.ceil(expiryDays/10)*10}Days`;else if(expiryDays>=1e3&&expiryDays<=1e4)metadataValue=`ExpireAfter${Math.ceil(expiryDays/100)*100}Days`;else throw new Error("Invalid expiry days. Please provide a valid expiry days value.");return{Key:"Expiry",Value:metadataValue}}function getNonExistingRules(existingRules,newRules){return newRules.filter(rule=>!existingRules.some(existingRule=>existingRule.ID===rule.ID))}function ttlToExpiryDays(ttl){return Math.ceil(ttl/(60*60*24))}async function checkAndInstallLifecycleRules(bucketName,s3Client){if(!bucketName||bucketName.trim()==="")throw new Error("Bucket name is required and cannot be empty");if(!s3Client)throw new Error("S3Client is required");console$n.log(`Checking lifecycle rules for bucket: ${bucketName}`);try{const getLifecycleCommand=new GetBucketLifecycleConfigurationCommand({Bucket:bucketName}),existingRules=(await s3Client.send(getLifecycleCommand)).Rules,newRules=generateLifecycleRules(),nonExistingNewRules=getNonExistingRules(existingRules,newRules);if(nonExistingNewRules.length>0){const params={Bucket:bucketName,LifecycleConfiguration:{Rules:[...existingRules,...nonExistingNewRules]}},putLifecycleCommand=new PutBucketLifecycleConfigurationCommand(params);await s3Client.send(putLifecycleCommand),console$n.log(`Added ${nonExistingNewRules.length} new lifecycle rules to bucket: ${bucketName}`)}else console$n.log("Lifecycle configuration already exists")}catch(error){if(error.code==="NoSuchLifecycleConfiguration"){console$n.log("No lifecycle configuration found. Creating new configuration...");const lifecycleRules=generateLifecycleRules(),params={Bucket:bucketName,LifecycleConfiguration:{Rules:lifecycleRules}},putLifecycleCommand=new PutBucketLifecycleConfigurationCommand(params);await s3Client.send(putLifecycleCommand),console$n.log("Lifecycle configuration created successfully.")}else console$n.error("Error checking lifecycle configuration:",error),console$n.error("Bucket name provided:",bucketName),console$n.error("Error details:",{name:error.name,message:error.message,code:error.code})}}var __defProp$J=Object.defineProperty,__getOwnPropDesc$j=Object.getOwnPropertyDescriptor,__defNormalProp$J=(obj,key,value)=>key in obj?__defProp$J(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$j=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$j(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$J(target,key,result),result},__publicField$J=(obj,key,value)=>__defNormalProp$J(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(global,"crypto",{value:{getRandomValues:arr=>crypto$1.randomBytes(arr.length)}});const console$m=Logger("S3Storage");class S3Storage extends StorageConnector{constructor(_settings){if(super(_settings),this._settings=_settings,__publicField$J(this,"name","S3Storage"),__publicField$J(this,"client"),__publicField$J(this,"bucket"),__publicField$J(this,"isInitialized",!1),__publicField$J(this,"initializationPromise",null),!_settings.bucket||_settings.bucket.trim()===""){console$m.warn("S3 bucket name is required and cannot be empty, connector not initialized");return}this.bucket=_settings.bucket;const clientConfig={};_settings.region&&(clientConfig.region=_settings.region),_settings.accessKeyId&&_settings.secretAccessKey&&(clientConfig.credentials={accessKeyId:_settings.accessKeyId,secretAccessKey:_settings.secretAccessKey}),this.client=new S3Client(clientConfig)}async ensureInitialized(){if(!this.isInitialized)return this.initializationPromise?this.initializationPromise:(this.initializationPromise=this.initialize(),this.initializationPromise)}async initialize(){if(!this.client){console$m.warn("S3 client not initialized");return}if(!this.isInitialized)try{await checkAndInstallLifecycleRules(this.bucket,this.client),this.isInitialized=!0}catch(error){throw console$m.error("Failed to initialize S3Storage:",error),this.initializationPromise=null,error}}async read(acRequest,resourceId){await this.ensureInitialized();const params={Bucket:this.bucket,Key:resourceId},s3HeadCommand=new HeadObjectCommand(params),expirationHeader=(await this.client.send(s3HeadCommand))?.Expiration;if(expirationHeader){const expirationDateMatch=expirationHeader.match(/expiry-date="([^"]+)"/);if(expirationDateMatch){const expirationDate=new Date(expirationDateMatch[1]);if(new Date>expirationDate){const s3DeleteCommand=new DeleteObjectCommand(params);await this.client.send(s3DeleteCommand);return}}}const command=new GetObjectCommand(params);try{const response=await this.client.send(command);return await streamToBuffer(response.Body)}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$m.error("Error reading object from S3",error.name,error.message),error}}async getMetadata(acRequest,resourceId){await this.ensureInitialized();try{return await this.getS3Metadata(resourceId)}catch(error){throw console$m.error("Error getting access rights in S3",error.name,error.message),error}}async setMetadata(acRequest,resourceId,metadata){await this.ensureInitialized();try{let s3Metadata=await this.getS3Metadata(resourceId);s3Metadata||(s3Metadata={}),s3Metadata={...s3Metadata,...metadata},await this.setS3Metadata(resourceId,s3Metadata)}catch(error){throw console$m.error("Error setting access rights in S3",error),error}}async write(acRequest,resourceId,value,acl,metadata){await this.ensureInitialized();const accessCandidate=acRequest.candidate;let amzACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,s3Metadata={...metadata,"x-amz-meta-acl":amzACL};const command=new PutObjectCommand({Bucket:this.bucket,Key:resourceId,Body:value,Metadata:this.serializeS3Metadata(s3Metadata),ContentType:s3Metadata.ContentType});try{const result=await this.client.send(command)}catch(error){throw console$m.error("Error writing object to S3",error.name,error.message),error}}async delete(acRequest,resourceId){await this.ensureInitialized();const command=new DeleteObjectCommand({Bucket:this.bucket,Key:resourceId});try{await this.client.send(command)}catch(error){throw console$m.error("Error deleting object from S3",error.name,error.message),error}}async exists(acRequest,resourceId){await this.ensureInitialized();const command=new HeadObjectCommand({Bucket:this.bucket,Key:resourceId});try{return await this.client.send(command),!0}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return!1;throw console$m.error("Error checking object existence in S3",error.name,error.message),error}}async getResourceACL(resourceId,candidate){await this.ensureInitialized();const s3Metadata=await this.getS3Metadata(resourceId);return s3Metadata!==void 0?ACL.from(s3Metadata?.["x-amz-meta-acl"]):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async getACL(acRequest,resourceId){await this.ensureInitialized();try{const s3Metadata=await this.getS3Metadata(resourceId);return ACL.from(s3Metadata?.["x-amz-meta-acl"])}catch(error){throw console$m.error("Error getting access rights in S3",error.name,error.message),error}}async setACL(acRequest,resourceId,acl){await this.ensureInitialized();try{let s3Metadata=await this.getS3Metadata(resourceId);s3Metadata||(s3Metadata={}),s3Metadata["x-amz-meta-acl"]=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setS3Metadata(resourceId,s3Metadata)}catch(error){throw console$m.error("Error setting access rights in S3",error),error}}async expire(acRequest,resourceId,ttl){await this.ensureInitialized();const expiryMetadata=generateExpiryMetadata(ttlToExpiryDays(ttl)),s3PutObjectTaggingCommand=new PutObjectTaggingCommand({Bucket:this.bucket,Key:resourceId,Tagging:{TagSet:[{Key:expiryMetadata.Key,Value:expiryMetadata.Value}]}});await this.client.send(s3PutObjectTaggingCommand)}migrateMetadata(metadata){if(!metadata.agentid&&!metadata.teamid&&!metadata.userid)return metadata;{const convertibleItems=["agentid","teamid","userid"],aclHelper=new ACL;for(let key of convertibleItems){if(!metadata[key])continue;const role=key==="agentid"?TAccessRole.Agent:key==="teamid"?TAccessRole.Team:TAccessRole.User;aclHelper.addAccess(role,metadata[key].toString(),[TAccessLevel.Owner,TAccessLevel.Read,TAccessLevel.Write]),delete metadata[key]}aclHelper.migrated=!0;const newMetadata={"x-amz-meta-acl":aclHelper.ACL};for(let key in metadata)newMetadata[key]=metadata[key];return newMetadata}}serializeS3Metadata(s3Metadata){let amzMetadata={};s3Metadata["x-amz-meta-acl"]&&(s3Metadata["x-amz-meta-acl"]&&(amzMetadata["x-amz-meta-acl"]=typeof s3Metadata["x-amz-meta-acl"]=="string"?s3Metadata["x-amz-meta-acl"]:ACL.from(s3Metadata["x-amz-meta-acl"]).serializedACL),delete s3Metadata["x-amz-meta-acl"]);for(let key in s3Metadata)key!="ContentType"&&(amzMetadata[key]=typeof s3Metadata[key]=="string"?s3Metadata[key]:JSON.stringify(s3Metadata[key]));return amzMetadata}deserializeS3Metadata(amzMetadata){let metadata={};for(let key in amzMetadata){if(key==="x-amz-meta-acl"){metadata[key]=ACL.from(amzMetadata[key]).ACL;continue}try{metadata[key]=JSON.parse(amzMetadata[key])}catch{metadata[key]=amzMetadata[key]}}return metadata=this.migrateMetadata(metadata),metadata}async getS3Metadata(resourceId){try{const command=new HeadObjectCommand({Bucket:this.bucket,Key:resourceId}),response=await this.client.send(command),s3RawMetadata=response.Metadata;if(!s3RawMetadata||Object.keys(s3RawMetadata).length===0)return{};let metadata=this.deserializeS3Metadata(s3RawMetadata);return metadata.ContentType||(metadata.ContentType=response.ContentType?response.ContentType:"application/octet-stream"),metadata}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$m.error("Error reading object metadata from S3",error.name,error.message),error}}async setS3Metadata(resourceId,metadata){try{const getObjectCommand=new GetObjectCommand({Bucket:this.bucket,Key:resourceId}),objectData=await this.client.send(getObjectCommand),bufferBody=await streamToBuffer(objectData.Body),amzMetadata=this.serializeS3Metadata(metadata),putObjectCommand=new PutObjectCommand({Bucket:this.bucket,Key:resourceId,Body:bufferBody,Metadata:amzMetadata});await this.client.send(putObjectCommand)}catch(error){throw console$m.error("Error setting object metadata in S3",error.name,error.message),error}}}__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"read"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"getMetadata"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"setMetadata"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"write"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"delete"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"exists"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"getACL"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"setACL"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"expire");var __defProp$I=Object.defineProperty,__getOwnPropDesc$i=Object.getOwnPropertyDescriptor,__defNormalProp$I=(obj,key,value)=>key in obj?__defProp$I(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$i=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$i(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$I(target,key,result),result},__publicField$I=(obj,key,value)=>__defNormalProp$I(obj,typeof key!="symbol"?key+"":key,value);const console$l=Logger("LocalStorage");class LocalStorage extends StorageConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$I(this,"name","LocalStorage"),__publicField$I(this,"folder"),__publicField$I(this,"storagePrefix","local"),__publicField$I(this,"metadataPrefix",".local.metadata"),__publicField$I(this,"isInitialized",!1),this.folder=this.findStorageFolder(_settings?.folder),this.initialize(),fs__default.existsSync(this.folder)||console$l.error(`Invalid folder provided: ${this.folder}`)}findStorageFolder(folder){let _storageFolder=folder;return fs__default.existsSync(_storageFolder)?_storageFolder:(_storageFolder=findSmythPath("storage"),fs__default.existsSync(_storageFolder)?(console$l.warn("Using alternative storage folder found in : ",_storageFolder),_storageFolder):(console$l.warn("!!! All attempts to find an existing storage folder failed !!!"),console$l.warn("!!! I will use this folder: ",_storageFolder),_storageFolder))}async read(acRequest,resourceId){this.isInitialized||await this.initialize();try{const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);return fs__default.existsSync(filePath)?fs__default.readFileSync(filePath,null):void 0}catch(error){throw console$l.error("Error reading object from local storage",error.name,error.message),error}}async getMetadata(acRequest,resourceId){try{const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId);if(!fs__default.existsSync(metadataFilePath))return;const data=fs__default.readFileSync(metadataFilePath,"utf-8");return this.deserializeMetadata(JSON.parse(data))}catch(error){throw console$l.error("Error reading metadata from LocalStorage",error.name,error.message),error}}async setMetadata(acRequest,resourceId,metadata){try{let fileMetadata=await this.getMetadata(acRequest,resourceId);fileMetadata||(fileMetadata={}),fileMetadata={...fileMetadata,...metadata};const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId,!0),serializedMetadata=this.serializeMetadata(fileMetadata);fs__default.writeFileSync(metadataFilePath,JSON.stringify(serializedMetadata))}catch(error){throw console$l.error("Error setting metadata in local storage",error.name,error.message),error}}async write(acRequest,resourceId,value,acl,metadata){this.isInitialized||await this.initialize();const accessCandidate=acRequest.candidate;let localACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,fileMetadata={...metadata,acl:localACL};const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId,!0);fs__default.writeFileSync(filePath,value),await this.setMetadata(acRequest,resourceId,fileMetadata)}async delete(acRequest,resourceId){try{const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);fs__default.existsSync(filePath)&&fs__default.unlinkSync(filePath);const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId);fs__default.existsSync(metadataFilePath)&&fs__default.unlinkSync(metadataFilePath)}catch(error){throw console$l.error("Error deleting object from local storage",error.name,error.message),error}}async exists(acRequest,resourceId){this.isInitialized||await this.initialize();const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);return!!fs__default.existsSync(filePath)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const metadataFilePath=this.getMetadataFilePath(candidate.id,resourceId);if(!fs__default.existsSync(metadataFilePath))return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);const metadata=fs__default.readFileSync(metadataFilePath,"utf-8");if(metadata===void 0)return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);try{let metadataObject=JSON.parse(metadata);return ACL.from(metadataObject?.acl)}catch(error){throw console$l.error("Error parsing metadata in local storage",error.name,error.message),error}}async getACL(acRequest,resourceId){try{const fileMetadata=await this.getMetadata(acRequest,resourceId);return ACL.from(fileMetadata?.acl)}catch(error){throw console$l.error("Error getting access rights in local storage",error.name,error.message),error}}async setACL(acRequest,resourceId,acl){try{let fileMetadata=await this.getMetadata(acRequest,resourceId);fileMetadata||(fileMetadata={}),fileMetadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,resourceId,fileMetadata)}catch(error){throw console$l.error("Error setting access rights in local storage",error),error}}async expire(acRequest,resourceId,ttl){console$l.warn(`LocalStorage.expire is not implemented, request will be ignored for resource ${resourceId} and ttl ${ttl}`)}async initialize(){const storageFolderPath=path.join(this.folder,this.storagePrefix);existsSync(storageFolderPath)||fs__default.mkdirSync(storageFolderPath,{recursive:!0});const metadataFolderPath=path.join(this.folder,this.metadataPrefix);existsSync(metadataFolderPath)||(fs__default.mkdirSync(metadataFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(metadataFolderPath,"README_IMPORTANT.txt"),"This folder is used for smythOS metadata, do not delete it, it will break SmythOS local filesystem")),this.isInitialized=!0}getStorageFilePath(candidateId,resourceId,createFoldersIfNotExists=!1){const fullPath=path.join(this.folder,this.storagePrefix,resourceId),folder=path.dirname(fullPath);return createFoldersIfNotExists&&!fs__default.existsSync(folder)&&fs__default.mkdirSync(folder,{recursive:!0}),fullPath}getMetadataFilePath(candidateId,resourceId,createFoldersIfNotExists=!1){const fullPath=path.join(this.folder,this.metadataPrefix,resourceId),folder=path.dirname(fullPath);return createFoldersIfNotExists&&!fs__default.existsSync(folder)&&fs__default.mkdirSync(folder,{recursive:!0}),fullPath}serializeMetadata(metadata){let updatedMetadata={};metadata.acl&&(metadata.acl&&(updatedMetadata.acl=typeof metadata.acl=="string"?metadata.acl:ACL.from(metadata.acl).serializedACL),delete metadata.acl);for(let key in metadata)updatedMetadata[key]=typeof metadata[key]=="string"?metadata[key]:JSON.stringify(metadata[key]);return updatedMetadata}deserializeMetadata(metadata){let deserializedMetadata={};for(let key in metadata){if(key==="acl"){deserializedMetadata[key]=ACL.from(metadata[key]).ACL;continue}try{deserializedMetadata[key]=JSON.parse(metadata[key])}catch{deserializedMetadata[key]=metadata[key]}}return deserializedMetadata}}__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"read"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"getMetadata"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"setMetadata"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"write"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"delete"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"exists"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"getACL"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"setACL"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"expire");class StorageService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Storage,"S3",S3Storage),ConnectorService.register(TConnectorService.Storage,"LocalStorage",LocalStorage)}}async function getLLMCredentials(candidate,modelInfo){const credentialsList=Array.isArray(modelInfo.credentials)?modelInfo.credentials||[TLLMCredentials.None]:[modelInfo.credentials];for(let credentialsMode of credentialsList){if(typeof credentialsMode=="object")return credentialsMode;switch(credentialsMode){case TLLMCredentials.None:return{apiKey:""};case TLLMCredentials.Internal:{const credentials=await getEnvCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.Vault:{const credentials=await getStandardLLMCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.BedrockVault:{const credentials=await getBedrockCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.VertexAIVault:{const credentials=await getVertexAICredentials(candidate,modelInfo);if(credentials)return credentials;break}}}return{}}const SMYTHOS_API_KEYS={echo:"",openai:process.env.OPENAI_API_KEY,anthropic:process.env.ANTHROPIC_API_KEY,googleai:process.env.GOOGLE_AI_API_KEY,togetherai:process.env.TOGETHER_AI_API_KEY,groq:process.env.GROQ_API_KEY,xai:process.env.XAI_API_KEY,perplexity:process.env.PERPLEXITY_API_KEY};async function getEnvCredentials(candidate,modelInfo){const provider=(modelInfo.provider||modelInfo.llm)?.toLowerCase(),apiKey=SMYTHOS_API_KEYS?.[provider]||"";return apiKey?{apiKey}:null}async function getStandardLLMCredentials(candidate,modelInfo){const provider=(modelInfo.provider||modelInfo.llm)?.toLowerCase(),apiKey=await ConnectorService.getVaultConnector().requester(candidate).get(provider).catch(()=>"");return apiKey?{apiKey,isUserKey:!0}:null}async function getBedrockCredentials(candidate,modelInfo){const keyIdName=modelInfo.settings?.keyIDName,secretKeyName=modelInfo.settings?.secretKeyName,sessionKeyName=modelInfo.settings?.sessionKeyName,vaultConnector=ConnectorService.getVaultConnector(),[accessKeyId,secretAccessKey,sessionToken]=await Promise.all([vaultConnector.requester(candidate).get(keyIdName).catch(()=>""),vaultConnector.requester(candidate).get(secretKeyName).catch(()=>""),vaultConnector.requester(candidate).get(sessionKeyName).catch(()=>"")]);let credentials={accessKeyId,secretAccessKey,isUserKey:!0};return sessionToken&&(credentials.sessionToken=sessionToken),!accessKeyId||!secretAccessKey?null:credentials}async function getVertexAICredentials(candidate,modelInfo){const jsonCredentialsName=modelInfo.settings?.jsonCredentialsName;let jsonCredentials=await ConnectorService.getVaultConnector().requester(candidate).get(jsonCredentialsName).catch(()=>"");const credentials=JSON.parse(jsonCredentials);return credentials?{...credentials,isUserKey:!0}:null}var __defProp$H=Object.defineProperty,__defNormalProp$H=(obj,key,value)=>key in obj?__defProp$H(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$H=(obj,key,value)=>__defNormalProp$H(obj,typeof key!="symbol"?key+"":key,value);const console$k=Logger("LLMConnector");class LLMStream extends Readable{constructor(options){super(options),__publicField$H(this,"dataQueue"),__publicField$H(this,"toolsData"),__publicField$H(this,"hasData"),__publicField$H(this,"isReading"),this.dataQueue=[],this.toolsData=[],this.isReading=!0}_read(size){if(this.dataQueue.length>0)for(;this.dataQueue.length>0;){const chunk=this.dataQueue.shift();if(!this.push(chunk))break}else this.push(null)}enqueueData(data){this.dataQueue.push(data),this.read(0)}endStream(){this.isReading=!1,this.push(null)}}class LLMConnector extends Connector{constructor(){super(...arguments),__publicField$H(this,"vaultConnector")}imageGenRequest({acRequest,body,context}){return Promise.reject(new Error("Image edit not supported by this model"))}imageEditRequest({acRequest,body,context}){return Promise.reject(new Error("Image edit not supported by this model"))}requester(candidate){return this.vaultConnector=ConnectorService.getVaultConnector(),(!this.vaultConnector||!this.vaultConnector.valid)&&console$k.warn(`Vault Connector unavailable for ${candidate.id} `),{request:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.request({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,agentId:preparedParams.agentId,teamId:preparedParams.teamId,isUserKey:preparedParams.credentials?.isUserKey||preparedParams.isUserKey,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})},streamRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params),requestParams={acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,agentId:preparedParams.agentId,teamId:preparedParams.teamId,isUserKey:preparedParams.isUserKey,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}};let response;return preparedParams.capabilities?.search===!0&&preparedParams.useWebSearch===!0?response=await this.webSearchRequest(requestParams):response=await this.streamRequest(requestParams),response},imageGenRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.imageGenRequest({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,isUserKey:preparedParams.isUserKey,agentId:preparedParams.agentId,teamId:preparedParams.teamId,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})},imageEditRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.imageEditRequest({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,isUserKey:preparedParams.isUserKey,agentId:preparedParams.agentId,teamId:preparedParams.teamId,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})}}}enhancePrompt(prompt,config2){if(!prompt)return prompt;let newPrompt=prompt;const outputs={};if(config2?.outputs)for(let con of config2.outputs)con.default||(outputs[con.name]=con?.description?` (${con?.description})`:"");const excludedKeys=["_debug","_error"],outputKeys=Object.keys(outputs).filter(key=>!excludedKeys.includes(key));if(outputKeys.length>0){const outputFormat={};outputKeys.forEach(key=>outputFormat[key]=(config2.name==="Classifier"?"<Boolean|String>":"<value>")+(outputs[key]||"")),newPrompt+=`
175
156
  ##
176
157
  Expected output format = `+JSON.stringify(outputFormat)+`
177
158
  The output JSON should only use the entries from the output format.`}return newPrompt}postProcess(response){try{return JSONContent(response).tryParse()}catch{return{error:"Invalid JSON response",data:response,details:"The response from the model is not a valid JSON object. Please check the model output and try again."}}}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){throw new Error("This model does not support tools")}transformToolMessageBlocks({messageBlock,toolsData}){throw new Error("This model does not support tools")}getConsistentMessages(messages){return messages}async prepareParams(candidate,params){const modelsProvider=ConnectorService.getModelsProviderConnector(),files=params?.files;delete params?.files;const clonedParams=JSON.parse(JSON.stringify(params)),_params=this.formatParamValues(clonedParams),model=_params.model,teamId=await this.getTeamId(candidate);_params.modelEntryName=typeof model=="string"?model:model.modelId,_params.teamId=teamId;const modelProviderCandidate=modelsProvider.requester(candidate),modelInfo=await modelProviderCandidate.getModelInfo(model);if(modelInfo.params)for(let key in modelInfo.params)typeof _params[key]>"u"&&(_params[key]=modelInfo.params[key]);await modelProviderCandidate.isStandardLLM(model),await modelProviderCandidate.getProvider(model),_params.credentials=await getLLMCredentials(candidate,modelInfo),_params.baseURL=modelInfo?.baseURL,_params.modelInfo=modelInfo,_params.maxTokens?_params.maxTokens=await modelProviderCandidate.adjustMaxCompletionTokens(model,_params.maxTokens,_params?.isUserKey):_params.maxTokens=await modelProviderCandidate.getMaxCompletionTokens(model,_params?.isUserKey),_params.model=await modelProviderCandidate.getModelId(model),_params.files=files;const features=modelInfo?.features||[];_params.capabilities={search:features.includes("search"),reasoning:features.includes("reasoning"),imageGeneration:features.includes("image-generation")},_params.agentId=candidate.id;const body=await this.reqBodyAdapter(_params);return{..._params,body}}formatParamValues(params){let _params={};for(const[key,value]of Object.entries(params)){let _value=value;key==="stopSequences"&&(_value=_value?Array.isArray(_value)?_value:_value?.split(","):null),typeof _value=="string"&&_value.trim()!==""&&!isNaN(Number(_value))&&(_value=+_value),key==="messages"&&(_value=this.getConsistentMessages(_value)),_params[key]=_value}return _params}async getTeamId(candidate){const accountConnector=ConnectorService.getAccountConnector();if(!accountConnector)throw new Error("Account Connector unavailable, cannot proceed");return await accountConnector.getCandidateTeam(candidate)}}var __defProp$G=Object.defineProperty,__defNormalProp$G=(obj,key,value)=>key in obj?__defProp$G(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$G=(obj,key,value)=>__defNormalProp$G(obj,key+"",value);class EchoConnector extends LLMConnector{constructor(){super(...arguments),__publicField$G(this,"name","LLM:Echo")}async request({acRequest,body,context}){const content=body?.messages?.[0]?.content;return{content,finishReason:"stop",useTool:!1,toolsData:[],message:{content,role:"assistant"},usage:{}}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1;let content="";return Array.isArray(body?.messages)&&(content=body?.messages?.filter(m=>m.role==="user").pop()?.content),(async()=>{const chunks=content.split(" ");for(let i=0;i<chunks.length;i++){await new Promise(resolve=>setTimeout(resolve,50));const isLastChunk=i===chunks.length-1,delta={content:chunks[i]+(isLastChunk?"":" ")};emitter.emit("data",delta),emitter.emit("content",delta.content)}setTimeout(()=>{emitter.emit("end",[],[])},100)})(),emitter}async webSearchRequest({acRequest,body,context}){throw new Error("Web search is not supported for Echo")}async reqBodyAdapter(params){return params}enhancePrompt(prompt,config2){return prompt}postProcess(response){try{const result=JSONContent(response).tryFullParse();return result?.error?response:result}catch{return response}}reportUsage(usage,metadata){}}class LLMHelper{static hasSystemMessage(messages){return Array.isArray(messages)?messages?.some(message=>message.role==="system"):!1}static separateSystemMessages(messages){const systemMessage=messages.find(message=>message.role==="system")||{},otherMessages=messages.filter(message=>message.role!=="system");return{systemMessage,otherMessages}}static async countVisionPromptTokens(prompt){let tokens=0;const textObj=prompt?.filter(item=>item.type==="text"),textTokens=encode(textObj?.[0]?.text).length,images=prompt?.filter(item=>item.type==="image_url");let imageTokens=0;for(const image of images){const imageUrl=image?.image_url?.url,{width,height}=await this.getImageDimensions(imageUrl),tokens2=this.countImageTokens(width,height);imageTokens+=tokens2}return tokens=textTokens+imageTokens,tokens}static async getImageDimensions(imageUrl){try{let buffer;if(isBase64FileUrl(imageUrl)){const base64Data=imageUrl.replace(/^data:image\/\w+;base64,/,"");buffer=Buffer.from(base64Data,"base64")}else if(isUrl(imageUrl)){const response=await axios.get(imageUrl,{responseType:"arraybuffer"});buffer=Buffer.from(response.data)}else throw new Error("Please provide a valid image url!");const dimensions=imageSize(buffer);return{width:dimensions?.width||0,height:dimensions?.height||0}}catch(error){throw console.error("Error getting image dimensions",error),new Error("Please provide a valid image url!")}}static countImageTokens(width,height,detailMode="auto"){if(detailMode==="low")return 85;const maxDimension=Math.max(width,height),minDimension=Math.min(width,height);let scaledMinDimension=minDimension;maxDimension>2048&&(scaledMinDimension=2048/maxDimension*minDimension),scaledMinDimension=Math.floor(768/1024*scaledMinDimension);let tileSize=512,tiles=Math.ceil(scaledMinDimension/tileSize);return minDimension!==scaledMinDimension&&(tiles*=Math.ceil(scaledMinDimension*(maxDimension/minDimension)/tileSize)),tiles*170+85}static removeDuplicateUserMessages(messages){const _messages=JSON.parse(JSON.stringify(messages));return _messages.length>1&&_messages[0].role===TLLMMessageRole.User&&_messages[1].role===TLLMMessageRole.User&&_messages.shift(),_messages.length>1&&_messages[_messages.length-1].role===TLLMMessageRole.User&&_messages[_messages.length-2].role===TLLMMessageRole.User&&_messages.pop(),_messages}}var __defProp$F=Object.defineProperty,__defNormalProp$F=(obj,key,value)=>key in obj?__defProp$F(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$F=(obj,key,value)=>__defNormalProp$F(obj,typeof key!="symbol"?key+"":key,value);const MODELS_WITH_JSON_RESPONSE=["gpt-4.5-preview","gpt-4o-2024-08-06","gpt-4o-mini-2024-07-18","gpt-4-turbo","gpt-3.5-turbo"],costForNormalModels={low:30/1e3,medium:35/1e3,high:50/1e3},costForMiniModels={low:25/1e3,medium:27.5/1e3,high:30/1e3},SEARCH_TOOL={type:"web_search_preview",cost:{"gpt-4.1":costForNormalModels,"gpt-4o":costForNormalModels,"gpt-4o-search":costForNormalModels,"gpt-4.1-mini":costForMiniModels,"gpt-4o-mini":costForMiniModels,"gpt-4o-mini-search":costForMiniModels}};class OpenAIConnector extends LLMConnector{constructor(){super(...arguments),__publicField$F(this,"name","LLM:OpenAI"),__publicField$F(this,"validImageMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.image),__publicField$F(this,"validDocumentMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.document)}async getClient(params){const apiKey=params.credentials?.apiKey,baseURL=params?.modelInfo?.baseURL;if(!apiKey)throw new Error("Please provide an API key for OpenAI");return new OpenAI({baseURL,apiKey})}async request({acRequest,body,context}){const _body=body;try{const openai=await this.getClient(context),messages=_body?.messages||[],lastMessage=messages[messages.length-1],promptTokens=context?.hasFiles?await LLMHelper.countVisionPromptTokens(lastMessage?.content):encodeChat(messages,"gpt-4")?.length;await this.validateTokenLimit({acRequest,promptTokens,context,maxTokens:_body.max_completion_tokens});const result=await openai.chat.completions.create(_body),message=result?.choices?.[0]?.message,finishReason=result?.choices?.[0]?.finish_reason;let toolsData=[],useTool=!1;finishReason==="tool_calls"&&(toolsData=message?.tool_calls?.map((tool,index)=>({index,id:tool?.id,type:tool?.type,name:tool?.function?.name,arguments:tool?.function?.arguments,role:"tool"}))||[],useTool=!0);const usage=result?.usage;return this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}),{content:message?.content??"",finishReason,useTool,toolsData,message,usage}}catch(error){throw error}}async streamRequest({acRequest,body,context}){const _body=body,emitter=new EventEmitter$1,usage_data=[],reportedUsage=[];try{const openai=await this.getClient(context),messages=_body?.messages||[],lastMessage=messages[messages.length-1],promptTokens=context?.hasFiles?await LLMHelper.countVisionPromptTokens(lastMessage?.content):encodeChat(messages,"gpt-4")?.length;await this.validateTokenLimit({acRequest,promptTokens,context,maxTokens:_body.max_completion_tokens});let finishReason="stop";const stream=await openai.chat.completions.create({..._body,stream:!0,stream_options:{include_usage:!0}});return(async()=>{let delta={},toolsData=[];for await(const part of stream){delta=part.choices[0]?.delta;const usage=part.usage;if(usage&&usage_data.push(usage),emitter.emit("data",delta),!delta?.tool_calls&&delta?.content&&emitter.emit("content",delta?.content,delta?.role),delta?.tool_calls){const toolCall=delta?.tool_calls?.[0],index=toolCall?.index;toolsData[index]={index,role:"tool",id:(toolsData?.[index]?.id||"")+(toolCall?.id||""),type:(toolsData?.[index]?.type||"")+(toolCall?.type||""),name:(toolsData?.[index]?.name||"")+(toolCall?.function?.name||""),arguments:(toolsData?.[index]?.arguments||"")+(toolCall?.function?.arguments||"")};continue}part.choices[0]?.finish_reason&&(finishReason=part.choices[0]?.finish_reason)}if(toolsData?.length>0){for(let tool of toolsData)tool.type.includes("functionfunction")&&(tool.type="function");emitter.emit(TLLMEvent.ToolInfo,toolsData)}usage_data.forEach(usage=>{const _reported=this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId});reportedUsage.push(_reported)}),finishReason!=="stop"&&emitter.emit("interrupted",finishReason),setTimeout(()=>{emitter.emit("end",toolsData,reportedUsage,finishReason)},100)})(),emitter}catch(error){throw error}}async webSearchRequest({acRequest,body,context}){const _body=body,emitter=new EventEmitter$1,usage_data=[],reportedUsage=[];try{const openai=await this.getClient(context);let finishReason="stop";const stream=await openai.responses.create(_body);return(async()=>{let toolsData=[],currentToolCall=null;for await(const part of stream){if("type"in part)switch(part.type){case"response.output_text.delta":{if(part?.delta){const deltaMsg={role:"assistant",content:part.delta};emitter.emit("data",deltaMsg),emitter.emit("content",part.delta,"assistant")}break}default:break}"response"in part&&part.response?.usage&&usage_data.push(part.response.usage)}const modelName=context.modelEntryName?.replace(BUILT_IN_MODEL_PREFIX,""),searchTool=_body.tools?.[0],cost=SEARCH_TOOL.cost?.[modelName]?.[searchTool?.search_context_size]||0;this.reportUsage({cost,completion_tokens:0,prompt_tokens:0,total_tokens:0},{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}),finishReason!=="stop"&&emitter.emit("interrupted",finishReason),setTimeout(()=>{emitter.emit("end",toolsData,reportedUsage,finishReason)},100)})(),emitter}catch(error){throw error}}async imageGenRequest({acRequest,body,context}){try{return await(await this.getClient(context)).images.generate(body)}catch(error){throw error}}async imageEditRequest({acRequest,body,context}){const _body=body;try{return await(await this.getClient(context)).images.edit(_body)}catch(error){throw error}}async processImageData(files,agentId){const validSources=this.getValidImageFiles(files);return validSources.length===0?[]:await this.getImageData(validSources,agentId)}getValidDocumentFiles(files){const validSources=[];for(let file of files)this.validDocumentMimeTypes.includes(file?.mimetype)&&validSources.push(file);return validSources}async processDocumentData(files,agentId){const validSources=this.getValidDocumentFiles(files);return validSources.length===0?[]:await this.getDocumentData(validSources,agentId)}async reqBodyAdapter(params){return params?.useWebSearch&&params.capabilities?.search===!0?this.prepareBodyForWebSearchRequest(params):params.capabilities?.imageGeneration===!0?params?.files?.length>0?this.prepareBodyForImageEditRequest(params):this.prepareBodyForImageGenRequest(params):(params.capabilities?.imageEditing,this.prepareBody(params))}reportUsage(usage,metadata){const modelName=metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,""),inputTokens=usage?.input_tokens||usage?.prompt_tokens-(usage?.prompt_tokens_details?.cached_tokens||0),outputTokens=usage?.output_tokens||usage?.completion_tokens||0,cachedInputTokens=usage?.input_tokens_details?.cached_tokens||usage?.prompt_tokens_details?.cached_tokens||0,usageData={sourceId:`llm:${modelName}`,input_tokens:inputTokens,output_tokens:outputTokens,input_tokens_cache_write:0,input_tokens_cache_read:cachedInputTokens,cost:usage?.cost||0,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){let tools=[];return type==="function"&&(tools=toolDefinitions.map(tool=>{const{name,description,properties,requiredFields}=tool;return{type:"function",function:{name,description,parameters:{type:"object",properties,required:requiredFields}}}})),tools?.length>0?{tools,tool_choice:toolChoice||"auto"}:{}}transformToolMessageBlocks({messageBlock,toolsData}){const messageBlocks=[];if(messageBlock){const transformedMessageBlock={...messageBlock,content:typeof messageBlock.content=="object"?JSON.stringify(messageBlock.content):messageBlock.content};if(transformedMessageBlock.tool_calls)for(let toolCall of transformedMessageBlock.tool_calls)toolCall.function.arguments=typeof toolCall.function.arguments=="object"?JSON.stringify(toolCall.function.arguments):toolCall.function.arguments;messageBlocks.push(transformedMessageBlock)}const transformedToolsData=toolsData.map(toolData=>({tool_call_id:toolData.id,role:TLLMMessageRole.Tool,name:toolData.name,content:typeof toolData.result=="string"?toolData.result:JSON.stringify(toolData.result)}));return[...messageBlocks,...transformedToolsData]}getConsistentMessages(messages){return LLMHelper.removeDuplicateUserMessages(messages).map(message=>{const _message={...message};let textContent="";return message?.parts?textContent=message.parts.map(textBlock=>textBlock?.text||"").join(" "):Array.isArray(message?.content)?textContent=message.content.map(textBlock=>textBlock?.text||"").join(" "):message?.content&&(textContent=message.content),_message.content=textContent,_message})}getValidImageFiles(files){const validSources=[];for(let file of files)this.validImageMimeTypes.includes(file?.mimetype)&&validSources.push(file);return validSources}async getImageData(files,agentId){try{const imageData=[];for(let file of files){const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),url=`data:${file.mimetype};base64,${base64Data}`;imageData.push({type:"image_url",image_url:{url}})}return imageData}catch(error){throw error}}async getDocumentData(files,agentId){try{const documentData=[];for(let file of files){const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),fileData=`data:${file.mimetype};base64,${base64Data}`;documentData.push({type:"file",file:{file_data:fileData,filename:await file.getName()}})}return documentData}catch(error){throw error}}getWebSearchTool(params){const searchCity=params?.webSearchCity,searchCountry=params?.webSearchCountry,searchRegion=params?.webSearchRegion,searchTimezone=params?.webSearchTimezone,location={type:"approximate"};searchCity&&(location.city=searchCity),searchCountry&&(location.country=searchCountry),searchRegion&&(location.region=searchRegion),searchTimezone&&(location.timezone=searchTimezone);const searchTool={type:SEARCH_TOOL.type,search_context_size:params?.webSearchContextSize||"medium"};return Object.keys(location).length>1&&(searchTool.user_location=location),searchTool}async validateTokenLimit({acRequest,maxTokens,promptTokens,context}){await(await this.getProvider(acRequest,context.modelEntryName)).validateTokensLimit({model:context.modelEntryName,promptTokens,completionTokens:maxTokens,hasAPIKey:context.isUserKey})}async getProvider(acRequest,modelEntryName){return ConnectorService.getModelsProviderConnector().requester(acRequest.candidate)}async prepareBodyForWebSearchRequest(params){const body={model:params.model,input:params.messages,stream:!0};params?.max_output_tokens!==void 0&&(body.max_output_tokens=params.max_output_tokens);const searchTool=this.getWebSearchTool(params);return body.tools=[searchTool],params?.toolsConfig?.tool_choice&&(body.tool_choice=params.toolsConfig.tool_choice),body}async prepareBodyForImageGenRequest(params){const{model,size,quality,n,responseFormat,style}=params,body={prompt:params.prompt,model,size,n:n||1};return quality&&(body.quality=quality),responseFormat&&(body.response_format=responseFormat),style&&(body.style=style),body}async prepareBodyForImageEditRequest(params){const{model,size,n,responseFormat}=params,body={prompt:params.prompt,model,size,n:n||1,image:null};responseFormat&&(body.response_format=responseFormat);const files=params?.files||[];if(files.length>0){const images=await Promise.all(files.map(async file=>await toFile(await file.getReadStream(),await file.getName(),{type:file.mimetype})));body.image=images}return body}async prepareBody(params){const messages=await this.prepareMessages(params);(params?.responseFormat||"")==="json"&&(messages?.[0]?.role===TLLMMessageRole.System?messages[0].content+=JSON_RESPONSE_INSTRUCTION:messages.unshift({role:TLLMMessageRole.System,content:JSON_RESPONSE_INSTRUCTION}),MODELS_WITH_JSON_RESPONSE.includes(params.model)?params.responseFormat={type:"json_object"}:params.responseFormat=void 0);const body={model:params.model,messages};return params?.toolsConfig?.tools&&params?.toolsConfig?.tools?.length>0&&(body.tools=params?.toolsConfig?.tools),params?.toolsConfig?.tool_choice&&(body.tool_choice=params?.toolsConfig?.tool_choice),params?.maxTokens!==void 0&&(body.max_completion_tokens=params.maxTokens),params?.temperature!==void 0&&(body.temperature=params.temperature),params?.topP!==void 0&&(body.top_p=params.topP),params?.frequencyPenalty!==void 0&&(body.frequency_penalty=params.frequencyPenalty),params?.presencePenalty!==void 0&&(body.presence_penalty=params.presencePenalty),params?.responseFormat&&(body.response_format=params.responseFormat),params?.stopSequences?.length&&(body.stop=params.stopSequences),body}async prepareMessages(params){const messages=params?.messages||[],files=params?.files||[];if(files.length>0){const promises=[],_files=[];for(let image of files){const binaryInput=BinaryInput.from(image);promises.push(binaryInput.upload(AccessCandidate.agent(params.agentId))),_files.push(binaryInput)}await Promise.all(promises);const validImageFiles=this.getValidImageFiles(_files),validDocumentFiles=this.getValidDocumentFiles(_files),imageData=validImageFiles.length>0?await this.processImageData(validImageFiles,params.agentId):[],documentData=validDocumentFiles.length>0?await this.processDocumentData(validDocumentFiles,params.agentId):[],promptData=[{type:"text",text:(Array.isArray(messages)?messages.pop():{})?.content||""||""},...imageData,...documentData];messages.push({role:"user",content:promptData})}return messages}}var __defProp$E=Object.defineProperty,__defNormalProp$E=(obj,key,value)=>key in obj?__defProp$E(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$E=(obj,key,value)=>__defNormalProp$E(obj,typeof key!="symbol"?key+"":key,value);const MODELS_SUPPORT_SYSTEM_INSTRUCTION=["gemini-1.5-pro-exp-0801","gemini-1.5-pro-latest","gemini-1.5-pro-latest","gemini-1.5-pro","gemini-1.5-pro-001","gemini-1.5-flash-latest","gemini-1.5-flash-001","gemini-1.5-flash"],MODELS_SUPPORT_JSON_RESPONSE=MODELS_SUPPORT_SYSTEM_INSTRUCTION,VALID_MIME_TYPES=[...SUPPORTED_MIME_TYPES_MAP.GoogleAI.image,...SUPPORTED_MIME_TYPES_MAP.GoogleAI.audio,...SUPPORTED_MIME_TYPES_MAP.GoogleAI.video,...SUPPORTED_MIME_TYPES_MAP.GoogleAI.document];class GoogleAIConnector extends LLMConnector{constructor(){super(...arguments),__publicField$E(this,"name","LLM:GoogleAI"),__publicField$E(this,"validMimeTypes",{all:VALID_MIME_TYPES,image:SUPPORTED_MIME_TYPES_MAP.GoogleAI.image})}async getClient(params){const apiKey=params.credentials?.apiKey;if(!apiKey)throw new Error("Please provide an API key for Google AI");return new GoogleGenerativeAI(apiKey)}async request({acRequest,body,context}){try{const prompt=body.messages;delete body.messages;const response=await(await(await this.getClient(context)).getGenerativeModel(body).generateContent(prompt)).response,content=response.text(),finishReason=response.candidates[0].finishReason||"stop",usage=response?.usageMetadata;this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId});const toolCalls=response.candidates[0]?.content?.parts?.filter(part=>part.functionCall);let toolsData=[],useTool=!1;return toolCalls&&toolCalls.length>0&&(toolsData=toolCalls.map((toolCall,index)=>({index,id:`tool-${index}`,type:"function",name:toolCall.functionCall.name,arguments:JSON.stringify(toolCall.functionCall.args),role:TLLMMessageRole.Assistant})),useTool=!0),{content,finishReason,useTool,toolsData,message:{content,role:"assistant"},usage}}catch(error){throw error}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1,prompt=body.messages;delete body.messages;const $model=(await this.getClient(context)).getGenerativeModel(body);try{const result=await $model.generateContentStream(prompt);let toolsData=[],usage;return(async()=>{for await(const chunk of result.stream){const chunkText2=chunk.text();if(emitter.emit("content",chunkText2),chunk.candidates[0]?.content?.parts){const toolCalls=chunk.candidates[0].content.parts.filter(part=>part.functionCall);toolCalls.length>0&&(toolsData=toolCalls.map((toolCall,index)=>({index,id:`tool-${index}`,type:"function",name:toolCall.functionCall.name,arguments:JSON.stringify(toolCall.functionCall.args),role:TLLMMessageRole.Assistant})),emitter.emit(TLLMEvent.ToolInfo,toolsData))}chunk?.usageMetadata&&(usage=chunk.usageMetadata)}usage&&this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}),setTimeout(()=>{emitter.emit("end",toolsData)},100)})(),emitter}catch(error){throw error}}async webSearchRequest({acRequest,body,context}){throw new Error("Web search is not supported for Google AI")}async reqBodyAdapter(params){const model=params?.model,messages=await this.prepareMessages(params);let body={model,messages};const responseFormat=params?.responseFormat||"";let responseMimeType="",systemInstruction="";responseFormat==="json"&&(systemInstruction+=JSON_RESPONSE_INSTRUCTION,MODELS_SUPPORT_JSON_RESPONSE.includes(model)&&(responseMimeType="application/json"));const config2={};return params.maxTokens!==void 0&&(config2.maxOutputTokens=params.maxTokens),params.temperature!==void 0&&(config2.temperature=params.temperature),params.topP!==void 0&&(config2.topP=params.topP),params.topK!==void 0&&(config2.topK=params.topK),params.stopSequences?.length&&(config2.stopSequences=params.stopSequences),responseMimeType&&(config2.responseMimeType=responseMimeType),systemInstruction&&(body.systemInstruction=systemInstruction),Object.keys(config2).length>0&&(body.generationConfig=config2),body}reportUsage(usage,metadata){const modelEntryName=metadata.modelEntryName;let tier="";const tierThresholds={"gemini-1.5-pro":128e3,"gemini-2.5-pro":2e5},textInputTokens=usage?.promptTokensDetails?.find(detail=>detail.modality==="TEXT")?.tokenCount||usage?.promptTokenCount||0,audioInputTokens=usage?.promptTokensDetails?.find(detail=>detail.modality==="AUDIO")?.tokenCount||0,modelWithTier=Object.keys(tierThresholds).find(model=>modelEntryName.includes(model));modelWithTier&&(tier=textInputTokens<tierThresholds[modelWithTier]?"tier1":"tier2");const usageData={sourceId:`llm:${metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,"")}`,input_tokens:textInputTokens,output_tokens:usage.candidatesTokenCount,input_tokens_audio:audioInputTokens,input_tokens_cache_read:usage.cachedContentTokenCount||0,input_tokens_cache_write:0,reasoning_tokens:usage.thoughtsTokenCount,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId,tier};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({toolDefinitions,toolChoice="auto"}){return{tools:toolDefinitions.map(tool=>{const{name,description,properties,requiredFields}=tool,validName=this.sanitizeFunctionName(name),validProperties=properties&&Object.keys(properties).length>0?properties:{dummy:{type:"string"}};return{functionDeclarations:[{name:validName,description:description||"",parameters:{type:"OBJECT",properties:validProperties,required:requiredFields||[]}}]}}),toolChoice:{type:toolChoice}}}transformToolMessageBlocks({messageBlock,toolsData}){const messageBlocks=[];if(messageBlock){const content=[];if(typeof messageBlock.content=="string"?content.push({text:messageBlock.content}):Array.isArray(messageBlock.content)&&content.push(...messageBlock.content),messageBlock.parts){const functionCalls=messageBlock.parts.filter(part=>part.functionCall);functionCalls.length>0&&content.push(...functionCalls.map(call=>({functionCall:{name:call.functionCall.name,args:JSON.parse(call.functionCall.args)}})))}messageBlocks.push({role:messageBlock.role,parts:content})}const transformedToolsData=toolsData.map(toolData=>({role:TLLMMessageRole.Function,parts:[{functionResponse:{name:toolData.name,response:{name:toolData.name,content:typeof toolData.result=="string"?toolData.result:JSON.stringify(toolData.result)}}}]}));return[...messageBlocks,...transformedToolsData]}getConsistentMessages(messages){return LLMHelper.removeDuplicateUserMessages(messages).map(message=>{const _message={...message};let textContent="";switch(_message.role){case TLLMMessageRole.Assistant:case TLLMMessageRole.System:_message.role=TLLMMessageRole.Model;break;case TLLMMessageRole.User:break;default:_message.role=TLLMMessageRole.User}return _message?.parts?textContent=_message.parts.map(textBlock=>textBlock?.text||"...").join(" "):Array.isArray(_message?.content)?textContent=_message.content.map(textBlock=>textBlock?.text||"...").join(" "):_message?.content&&(textContent=_message.content||"..."),_message.parts=[{text:textContent||"..."}],delete _message.content,_message})}async prepareMessages(params){let messages=params?.messages||"";return(params?.files||[]).length>0?messages=await this.prepareMessagesWithFiles(params):params?.toolsConfig?.tools?.length>0?messages=await this.prepareMessagesWithTools(params):messages=await this.prepareMessagesWithTextQuery(params),messages}async prepareMessagesWithFiles(params){const model=params.model;let messages=params?.messages||"",systemInstruction="";const files=params?.files||[],promises=[],_files=[];for(let image of files){const binaryInput=BinaryInput.from(image);promises.push(binaryInput.upload(AccessCandidate.agent(params.agentId))),_files.push(binaryInput)}await Promise.all(promises);const validFiles=this.getValidFiles(_files,"all");if(validFiles.some(file=>file?.mimetype?.includes("video"))&&validFiles.length>1)throw new Error("Only one video file is supported at a time.");const fileUploadingTasks=validFiles.map(file=>async()=>{try{return{url:(await this.uploadFile({file,apiKey:params.credentials.apiKey,agentId:params.agentId})).url,mimetype:file.mimetype}}catch{return null}}),uploadedFiles=await processWithConcurrencyLimit(fileUploadingTasks);if(uploadedFiles&&uploadedFiles?.length===0)throw new Error("There is an issue during upload file in Google AI Server!");const fileData=this.getFileData(uploadedFiles);let prompt=(Array.isArray(messages)?messages.pop():{role:TLLMMessageRole.User,content:""})?.content||"";return MODELS_SUPPORT_SYSTEM_INSTRUCTION.includes(model)||(prompt=`${prompt}
@@ -180,10 +161,29 @@ ${systemInstruction}`),messages=fileData.length===1?[...fileData,{text:prompt}]:
180
161
  ${systemInstruction}`),prompt}sanitizeFunctionName(name){if(name==null)return"_unnamed_function";let sanitized=name.replace(/[^a-zA-Z0-9_.-]/g,"");return/^[a-zA-Z_]/.test(sanitized)||(sanitized="_"+sanitized),sanitized===""&&(sanitized="_unnamed_function"),sanitized=sanitized.slice(0,64),sanitized}async uploadFile({file,apiKey,agentId}){try{if(!apiKey||!file?.mimetype)throw new Error("Missing required parameters to save file for Google AI!");const tempDir=os.tmpdir(),fileName=uid(),tempFilePath=path.join(tempDir,fileName),bufferData=await file.readData(AccessCandidate.agent(agentId));await fs__default.promises.writeFile(tempFilePath,new Uint8Array(bufferData));const fileManager=new GoogleAIFileManager(apiKey),uploadResponse=await fileManager.uploadFile(tempFilePath,{mimeType:file.mimetype,displayName:fileName}),name=uploadResponse.file.name;let uploadedFile=await fileManager.getFile(name);for(;uploadedFile.state===FileState.PROCESSING;)process.stdout.write("."),await new Promise(resolve=>setTimeout(resolve,1e4)),uploadedFile=await fileManager.getFile(name);if(uploadedFile.state===FileState.FAILED)throw new Error("File processing failed.");return await fs__default.promises.unlink(tempFilePath),{url:uploadResponse.file.uri||""}}catch(error){throw new Error(`Error uploading file for Google AI: ${error.message}`)}}getValidFiles(files,type){const validSources=[];for(let file of files)this.validMimeTypes[type].includes(file?.mimetype)&&validSources.push(file);if(validSources?.length===0)throw new Error(`Unsupported file(s). Please make sure your file is one of the following types: ${this.validMimeTypes[type].join(", ")}`);return validSources}getFileData(files){try{const imageData=[];for(let file of files)imageData.push({fileData:{mimeType:file.mimetype,fileUri:file.url}});return imageData}catch(error){throw error}}}var __defProp$D=Object.defineProperty,__defNormalProp$D=(obj,key,value)=>key in obj?__defProp$D(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$D=(obj,key,value)=>__defNormalProp$D(obj,typeof key!="symbol"?key+"":key,value);const PREFILL_TEXT_FOR_JSON_RESPONSE="{",LEGACY_THINKING_MODELS=["smythos/claude-3.7-sonnet-thinking","claude-3.7-sonnet-thinking"];class AnthropicConnector extends LLMConnector{constructor(){super(...arguments),__publicField$D(this,"name","LLM:Anthropic"),__publicField$D(this,"validImageMimeTypes",SUPPORTED_MIME_TYPES_MAP.Anthropic.image)}async getClient(params){const apiKey=params.credentials?.apiKey;if(!apiKey)throw new Error("Please provide an API key for Anthropic");return new Anthropic({apiKey})}async request({acRequest,body,context}){try{const result=await(await this.getClient(context)).messages.create(body),message={role:result?.role||TLLMMessageRole.User,content:result?.content||""},stopReason=result?.stop_reason;let toolsData=[],useTool=!1;if(stopReason==="tool_use"){const toolUseContentBlocks=result?.content?.filter(c=>c.type==="tool_use");if(toolUseContentBlocks?.length===0)return;toolUseContentBlocks.forEach((toolUseBlock,index)=>{toolsData.push({index,id:toolUseBlock?.id,type:"function",name:toolUseBlock?.name,arguments:toolUseBlock?.input,role:result?.role})}),useTool=!0}const content=result?.content?.find(block=>block.type==="text")?.text||"",usage=result?.usage;return this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}),{content,finishReason:result?.stop_reason,useTool,toolsData,message,usage}}catch(error){throw error}}async streamRequest({acRequest,body,context}){try{const emitter=new EventEmitter$1,usage_data=[];let stream=(await this.getClient(context)).messages.stream(body),toolsData=[],thinkingBlocks=[];return stream.on("streamEvent",event=>{event.message?.usage}),stream.on("error",error=>{emitter.emit("error",error)}),stream.on("text",text=>{emitter.emit("content",text)}),stream.on("thinking",thinking=>{emitter.emit("thinking",thinking)}),stream.on("finalMessage",finalMessage=>{let finishReason="stop";thinkingBlocks=finalMessage.content.filter(block=>block.type==="thinking"||block.type==="redacted_thinking");const toolUseContentBlocks=finalMessage.content.filter(c=>c.type==="tool_use");if(toolUseContentBlocks?.length>0?(toolUseContentBlocks.forEach((toolUseBlock,index)=>{toolsData.push({index,id:toolUseBlock?.id,type:"function",name:toolUseBlock?.name,arguments:toolUseBlock?.input,role:finalMessage?.role})}),emitter.emit(TLLMEvent.ToolInfo,toolsData,thinkingBlocks)):finishReason=finalMessage.stop_reason,finalMessage?.usage){const usage=finalMessage.usage,reportedUsage=this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId});usage_data.push(reportedUsage)}finishReason!=="stop"&&finishReason!=="end_turn"&&emitter.emit("interrupted",finishReason),setTimeout(()=>{emitter.emit("end",toolsData,usage_data,finishReason)},100)}),emitter}catch(error){throw error}}async webSearchRequest({acRequest,body,context}){throw new Error("Web search requests are not supported by Anthropic")}async reqBodyAdapter(params){const body=await this.prepareBody(params);return await this.shouldUseThinkingMode(params)?await this.prepareBodyForThinkingRequest({body,maxThinkingTokens:params.maxThinkingTokens,toolChoice:params?.toolsConfig?.tool_choice}):body}reportUsage(usage,metadata){const usageData={sourceId:`llm:${metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,"")}`,input_tokens:usage.input_tokens,output_tokens:usage.output_tokens,input_tokens_cache_write:usage.cache_creation_input_tokens,input_tokens_cache_read:usage.cache_read_input_tokens,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){let tools=[];return type==="function"&&(tools=toolDefinitions.map(tool=>{const{name,description,properties,requiredFields}=tool;return{name,description,input_schema:{type:"object",properties,required:requiredFields}}})),tools?.length>0?{tools}:{}}transformToolMessageBlocks({messageBlock,toolsData}){const messageBlocks=[];if(messageBlock){const content=[];if(messageBlock.thinkingBlocks?.length>0&&content.push(...messageBlock.thinkingBlocks),Array.isArray(messageBlock.content)?content.push(...messageBlock.content):messageBlock.content&&content.push({type:"text",text:messageBlock.content}),messageBlock.tool_calls){const calls=messageBlock.tool_calls.map(toolCall=>{const args=toolCall?.function?.arguments;return{type:"tool_use",id:toolCall.id,name:toolCall?.function?.name,input:typeof args=="string"?JSONContent(args||"{}").tryParse():args||{}}});content.push(...calls)}messageBlocks.push({role:messageBlock?.role,content})}const toolResultsContent=toolsData.map(toolData=>({type:"tool_result",tool_use_id:toolData.id,content:toolData.result}));return toolResultsContent.length>0&&messageBlocks.push({role:TLLMMessageRole.User,content:toolResultsContent}),messageBlocks}getConsistentMessages(messages){let _messages=JSON.parse(JSON.stringify(messages)),systemMessage=null;return _messages[0]?.role===TLLMMessageRole.System&&(systemMessage=_messages.shift()),_messages=LLMHelper.removeDuplicateUserMessages(_messages),_messages=_messages.map(message=>{let content;return message?.parts?content=message.parts.map(textBlock=>textBlock?.text||"").join(" "):Array.isArray(message?.content)?Array.isArray(message.content)?message.content.filter(item=>typeof item=="object"&&"type"in item&&(item.type==="tool_use"||item.type==="tool_result"))?.length>0?content=message.content.map(item=>item.type==="text"&&(!item.text||item.text.trim()==="")?{...item,text:"..."}:item):content=message.content.map(block=>block?.text||"").join(" ").trim():content=message.content:message?.content&&(content=message.content),message.content=content||"...",message}),_messages[0]?.role===TLLMMessageRole.User&&Array.isArray(_messages[0].content)&&_messages[0].content.find(content=>"type"in content&&content.type==="tool_result")&&_messages.shift(),_messages[0]?.role!==TLLMMessageRole.User&&_messages.unshift({role:TLLMMessageRole.User,content:"continue"}),systemMessage&&systemMessage.content&&_messages.unshift(systemMessage),_messages}async prepareBody(params){let messages=await this.prepareMessages(params),body={model:params.model,messages,max_tokens:params.maxTokens};const{systemMessage,otherMessages}=LLMHelper.separateSystemMessages(messages);if("content"in systemMessage&&(body.system=systemMessage?.content),messages=otherMessages,(params?.responseFormat||"")==="json"&&(body.system=body.system?`${body.system} ${JSON_RESPONSE_INSTRUCTION}`:JSON_RESPONSE_INSTRUCTION,messages.push({role:TLLMMessageRole.Assistant,content:PREFILL_TEXT_FOR_JSON_RESPONSE})),LLMHelper.hasSystemMessage(messages)){const{systemMessage:systemMessage2,otherMessages:otherMessages2}=LLMHelper.separateSystemMessages(messages);"content"in systemMessage2&&(body.system=await this.prepareSystemPrompt(systemMessage2,params)),messages=otherMessages2}params?.temperature!==void 0&&(body.temperature=params.temperature),params?.topP!==void 0&&(body.top_p=params.topP),params?.topK!==void 0&&(body.top_k=params.topK),params?.stopSequences?.length&&(body.stop_sequences=params.stopSequences),params?.toolsConfig?.tools&&params?.toolsConfig?.tools.length>0&&(body.tools=params?.toolsConfig?.tools,params?.cache&&(body.tools[body.tools.length-1].cache_control={type:"ephemeral"}));const toolChoice=params?.toolsConfig?.tool_choice;return toolChoice&&(body.tool_choice=toolChoice),body.messages=messages,body}async prepareBodyForThinkingRequest({body,maxThinkingTokens,toolChoice=null}){let messages=body.messages.filter(message=>message?.role!==TLLMMessageRole.Assistant&&message?.content!==PREFILL_TEXT_FOR_JSON_RESPONSE),budget_tokens=Math.min(maxThinkingTokens,body.max_tokens);budget_tokens===body.max_tokens&&(budget_tokens=Math.floor(budget_tokens*.8));const thinkingBody={model:body.model,messages,max_tokens:body.max_tokens,thinking:{type:"enabled",budget_tokens}};return toolChoice&&(["any","tool"].includes(toolChoice.type)?thinkingBody.tool_choice={type:"auto"}:thinkingBody.tool_choice=toolChoice),thinkingBody}async prepareMessages(params){const messages=params?.messages||[],files=params?.files||[];if(files?.length>0){const promises=[],_files=[];for(let image of files){const binaryInput=BinaryInput.from(image);promises.push(binaryInput.upload(AccessCandidate.agent(params.agentId))),_files.push(binaryInput)}await Promise.all(promises);const validSources=this.getValidImageFiles(_files),imageData=await this.getImageData(validSources,params.agentId),content=[{type:"text",text:(Array.isArray(messages)?messages.pop():{})?.content||""},...imageData];messages.push({role:TLLMMessageRole.User,content})}return messages}async prepareSystemPrompt(systemMessage,params){let systemPrompt=systemMessage?.content;return typeof systemPrompt=="string"&&(systemPrompt=[{type:"text",text:systemPrompt}]),systemPrompt.unshift({type:"text",text:'If you need to call a function, Do NOT inform the user that you are about to do so, and do not thank the user after you get the response. Just say something like "Give me a moment...", then when you get the response, Just continue answering the user without saying anything about the function you just called'}),params?.cache&&(systemPrompt[systemPrompt.length-1].cache_control={type:"ephemeral"}),systemPrompt}async shouldUseThinkingMode(params){return LEGACY_THINKING_MODELS.includes(params.modelEntryName)?!0:params?.useReasoning&&params.capabilities?.reasoning===!0}getValidImageFiles(files){const validSources=[];for(let file of files)this.validImageMimeTypes.includes(file?.mimetype)&&validSources.push(file);if(validSources?.length===0)throw new Error(`Unsupported file(s). Please make sure your file is one of the following types: ${this.validImageMimeTypes.join(", ")}`);return validSources}async getImageData(files,agentId){try{const imageData=[];for(let file of files){const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64");imageData.push({type:"image",source:{type:"base64",data:base64Data,media_type:file.mimetype}})}return imageData}catch(error){throw error}}}var __defProp$C=Object.defineProperty,__defNormalProp$C=(obj,key,value)=>key in obj?__defProp$C(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$C=(obj,key,value)=>__defNormalProp$C(obj,key+"",value);class GroqConnector extends LLMConnector{constructor(){super(...arguments),__publicField$C(this,"name","LLM:Groq")}async getClient(params){const apiKey=params.credentials?.apiKey;if(!apiKey)throw new Error("Please provide an API key for Groq");return new Groq({apiKey})}async request({acRequest,body,context}){try{const result=await(await this.getClient(context)).chat.completions.create(body),message=result?.choices?.[0]?.message,finishReason=result?.choices?.[0]?.finish_reason,toolCalls=message?.tool_calls,usage=result.usage;this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId});let toolsData=[],useTool=!1;return toolCalls&&(toolsData=toolCalls.map((tool,index)=>({index,id:tool.id,type:tool.type,name:tool.function.name,arguments:tool.function.arguments,role:TLLMMessageRole.Assistant})),useTool=!0),{content:message?.content??"",finishReason,useTool,toolsData,message,usage}}catch(error){throw error}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1,usage_data=[];try{const stream=await(await this.getClient(context)).chat.completions.create({...body,stream:!0,stream_options:{include_usage:!0}});let toolsData=[];return(async()=>{for await(const chunk of stream){const delta=chunk.choices[0]?.delta,usage=chunk.x_groq?.usage||chunk.usage;usage&&usage_data.push(usage),emitter.emit("data",delta),delta?.content&&emitter.emit("content",delta.content),delta?.tool_calls&&delta.tool_calls.forEach((toolCall,index)=>{toolsData[index]?toolsData[index].arguments+=toolCall.function?.arguments||"":toolsData[index]={index,id:toolCall.id,type:toolCall.type,name:toolCall.function?.name,arguments:toolCall.function?.arguments,role:"assistant"}})}toolsData.length>0&&emitter.emit(TLLMEvent.ToolInfo,toolsData),usage_data.forEach(usage=>{this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId})}),setTimeout(()=>{emitter.emit("end",toolsData)},100)})(),emitter}catch(error){throw error}}async webSearchRequest({acRequest,body,context}){throw new Error("Web search is not supported for Groq")}async reqBodyAdapter(params){const messages=params?.messages||[],body={model:params.model,messages};return(params?.responseFormat||"")==="json"&&(messages?.[0]?.role==="system"?messages[0].content+=JSON_RESPONSE_INSTRUCTION:messages.unshift({role:"system",content:JSON_RESPONSE_INSTRUCTION})),params.maxTokens!==void 0&&(body.max_tokens=params.maxTokens),params.temperature!==void 0&&(body.temperature=params.temperature),params.topP!==void 0&&(body.top_p=params.topP),params.stopSequences?.length&&(body.stop=params.stopSequences),params.toolsConfig?.tools&&(body.tools=params.toolsConfig?.tools),params.toolsConfig?.tool_choice&&(body.tool_choice=params.toolsConfig?.tool_choice),body}reportUsage(usage,metadata){const usageData={sourceId:`llm:${metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,"")}`,input_tokens:usage?.prompt_tokens-(usage?.prompt_tokens_details?.cached_tokens||0),output_tokens:usage?.completion_tokens,input_tokens_cache_write:0,input_tokens_cache_read:usage?.prompt_tokens_details?.cached_tokens||0,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){let tools=[];return type==="function"&&(tools=toolDefinitions.map(tool=>{const{name,description,properties,requiredFields}=tool;return{type:"function",function:{name,description,parameters:{type:"object",properties,required:requiredFields}}}})),tools?.length>0?{tools,tool_choice:toolChoice}:{}}getConsistentMessages(messages){return LLMHelper.removeDuplicateUserMessages(messages).map(message=>{const _message={...message};let textContent="";return message?.parts?textContent=message.parts.map(textBlock=>textBlock?.text||"").join(" "):Array.isArray(message?.content)?textContent=message.content.map(textBlock=>textBlock?.text||"").join(" "):message?.content&&(textContent=message.content),_message.content=textContent,_message})}}var __defProp$B=Object.defineProperty,__defNormalProp$B=(obj,key,value)=>key in obj?__defProp$B(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$B=(obj,key,value)=>__defNormalProp$B(obj,key+"",value);class BedrockConnector extends LLMConnector{constructor(){super(...arguments),__publicField$B(this,"name","LLM:Bedrock")}async getClient(params){const credentials=params.credentials,region=params.modelInfo.settings.region;if(!(Object.keys(credentials).length>=2))throw new Error("Access key ID and secret access key are required for Bedrock");return new BedrockRuntimeClient({region,credentials})}async request({acRequest,body,context}){try{const bedrock=await this.getClient(context),command=new ConverseCommand(body),response=await bedrock.send(command),usage=response.usage;this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId});const message=response.output?.message,finishReason=response.stopReason;let toolsData=[],useTool=!1;return finishReason==="tool_use"&&(toolsData=(message?.content?.filter(block=>block?.toolUse)||[]).map((block,index)=>({index,id:block.toolUse?.toolUseId,type:"function",name:_deserializeToolName(block.toolUse?.name),arguments:block.toolUse?.input,role:"tool"})),useTool=!0),{content:Array.isArray(message?.content)?message?.content?.[0]?.text||"":message?.content||"",finishReason,useTool,toolsData,message,usage}}catch(error){throw error?.error||error}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1;try{const bedrock=await this.getClient(context),command=new ConverseStreamCommand(body),stream=(await bedrock.send(command)).stream;return stream&&(async()=>{let currentMessage={role:"",content:"",toolCalls:[],currentToolCall:null,currentToolInput:""};for await(const chunk of stream){if(chunk.messageStart&&(currentMessage.role=chunk.messageStart.role||"",emitter.emit("data",{role:currentMessage.role})),chunk.contentBlockDelta?.delta?.text&&(currentMessage.content+=chunk.contentBlockDelta.delta.text,emitter.emit("data",chunk.contentBlockDelta.delta.text),emitter.emit("content",chunk.contentBlockDelta.delta.text,currentMessage.role)),chunk.contentBlockStart?.start?.toolUse){const toolUse=chunk.contentBlockStart.start.toolUse;toolUse.toolUseId&&toolUse.name&&(currentMessage.currentToolCall={index:currentMessage.toolCalls.length,id:toolUse.toolUseId,type:"function",name:_deserializeToolName(toolUse.name),arguments:"",role:"tool"},currentMessage.currentToolInput="")}if(chunk.contentBlockDelta?.delta?.toolUse?.input&&currentMessage.currentToolCall&&(currentMessage.currentToolInput+=chunk.contentBlockDelta.delta.toolUse.input,currentMessage.currentToolCall.arguments=currentMessage.currentToolInput),chunk.contentBlockStop&&currentMessage.currentToolCall&&(typeof currentMessage.currentToolCall.arguments=="string"&&isJSONString(currentMessage.currentToolCall.arguments)&&(currentMessage.currentToolCall.arguments=JSON.parse(currentMessage.currentToolCall.arguments)),currentMessage.toolCalls.push(currentMessage.currentToolCall),currentMessage.currentToolCall=null,currentMessage.currentToolInput=""),chunk.messageStop&&(currentMessage.toolCalls.length>0&&emitter.emit(TLLMEvent.ToolInfo,currentMessage.toolCalls),emitter.emit(TLLMEvent.End,currentMessage.toolCalls)),chunk?.metadata?.usage){const usage=chunk.metadata.usage;this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId})}}})(),emitter}catch(error){const typedError=error;return emitter.emit(TLLMEvent.Error,typedError?.error||typedError),emitter}}async webSearchRequest({acRequest,body,context}){throw new Error("Web search is not supported for Bedrock")}async reqBodyAdapter(params){const customModelInfo=params.modelInfo;let systemPrompt,messages=params?.messages||[];const{systemMessage,otherMessages}=LLMHelper.separateSystemMessages(messages);"content"in systemMessage&&(systemPrompt=typeof systemMessage?.content=="string"?[{text:systemMessage?.content}]:systemMessage?.content),messages=otherMessages;const body={modelId:customModelInfo.settings?.customModel||customModelInfo.settings?.foundationModel,messages};return systemPrompt&&(body.system=systemPrompt),params?.toolsConfig?.tools?.length>0&&(body.toolConfig={tools:params?.toolsConfig?.tools,...params?.toolsConfig?.tool_choice&&{toolChoice:params?.toolsConfig?.tool_choice}}),body}reportUsage(usage,metadata){const usageData={sourceId:`llm:${metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,"")}`,input_tokens:usage.inputTokens,output_tokens:usage.outputTokens,input_tokens_cache_write:usage.cacheWriteInputTokenCount||0,input_tokens_cache_read:usage.cacheReadInputTokenCount||0,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){let tools=[];return type==="function"&&(tools=toolDefinitions.map(tool=>{const{name,description,properties,requiredFields}=tool;return{toolSpec:{name:_serializeToolName(name),description,inputSchema:{json:{type:"object",properties,required:requiredFields}}}}})),tools?.length>0?{tools,toolChoice:toolChoice||"auto"}:{}}transformToolMessageBlocks({messageBlock,toolsData}){const messageBlocks=[];if(messageBlock){const content=[];typeof messageBlock.content=="string"?content.push({text:messageBlock.content}):Array.isArray(messageBlock.content)&&content.push(...messageBlock.content),messageBlock.tool_calls?.length&&messageBlock.tool_calls.forEach(toolCall=>{const args=toolCall?.function?.arguments;content.push({toolUse:{toolUseId:toolCall.id,name:_serializeToolName(toolCall?.function?.name),input:typeof args=="string"?JSONContent(args||"{}").tryParse():args||{}}})}),messageBlocks.push({role:messageBlock?.role,content})}if(toolsData?.length){const toolResultsContent=toolsData.filter(tool=>tool.id&&(tool.result||tool.error)).map(tool=>{let content;return typeof tool?.result=="string"?content=[{text:tool.result}]:typeof tool?.result=="object"&&(content=[{json:tool.result}]),{toolResult:{toolUseId:tool.id,content,...tool.error&&{status:"error"}}}});toolResultsContent.length>0&&messageBlocks.push({role:TLLMMessageRole.User,content:toolResultsContent})}return messageBlocks}getConsistentMessages(messages){return LLMHelper.removeDuplicateUserMessages(messages).map(message=>{let textBlock=[];return message?.parts?textBlock=message.parts.map(part=>"text"in part?{...part,text:part.text||"..."}:{...part}):message?.content&&(textBlock=Array.isArray(message.content)?message.content.map(part=>"text"in part?{...part,text:part.text||"..."}:{...part}):[{text:message?.content||"..."}]),{role:message.role,content:textBlock}})}}function _serializeToolName(name){return name?.replace(/-/g,"__")}function _deserializeToolName(name){return name?.replace(/__/g,"-")}var __defProp$A=Object.defineProperty,__defNormalProp$A=(obj,key,value)=>key in obj?__defProp$A(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$A=(obj,key,value)=>__defNormalProp$A(obj,key+"",value);class VertexAIConnector extends LLMConnector{constructor(){super(...arguments),__publicField$A(this,"name","LLM:VertexAI")}async getClient(params){const credentials=params.credentials,modelInfo=params.modelInfo,projectId=modelInfo?.settings?.projectId,region=modelInfo?.settings?.region;return new VertexAI({project:projectId,location:region,googleAuthOptions:{credentials}})}async request({acRequest,body,context}){const messages=body.messages;delete body.messages;try{const result=await(await this.getClient(context)).getGenerativeModel(body).generateContent({contents:messages}),content=result?.response?.candidates?.[0]?.content?.parts?.[0]?.text,usage=result?.response?.usageMetadata;return this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}),{content,finishReason:"stop",useTool:!1,toolsData:[],message:{content,role:"assistant"},usage}}catch(error){throw error}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1;return setTimeout(()=>{try{this.request({acRequest,body,context}).then(response=>{const finishReason=response.finishReason,usage=response.usage;emitter.emit("interrupted",finishReason),emitter.emit("content",response.content),emitter.emit("end",void 0,usage,finishReason)}).catch(error=>{emitter.emit("error",error.message||error.toString())})}catch(error){emitter.emit("error",error.message||error.toString())}},100),emitter}async webSearchRequest({acRequest,body,context}){throw new Error("Web search is not supported for Vertex AI")}async reqBodyAdapter(params){let messages=params?.messages||[],systemInstruction;const{systemMessage,otherMessages}=LLMHelper.separateSystemMessages(messages);"content"in systemMessage&&(systemInstruction=systemMessage.content),messages=otherMessages,(params?.responseFormat||"")==="json"&&(systemInstruction=JSON_RESPONSE_INSTRUCTION);const modelInfo=params.modelInfo;let body={model:modelInfo?.settings?.customModel||modelInfo?.settings?.foundationModel,messages};const config2={};return params?.maxTokens!==void 0&&(config2.maxOutputTokens=params.maxTokens),params?.temperature!==void 0&&(config2.temperature=params.temperature),params?.topP!==void 0&&(config2.topP=params.topP),params?.topK!==void 0&&(config2.topK=params.topK),params?.stopSequences?.length&&(config2.stopSequences=params.stopSequences),systemInstruction&&(body.systemInstruction=systemInstruction),Object.keys(config2).length>0&&(body.generationConfig=config2),body}reportUsage(usage,metadata){const usageData={sourceId:`llm:${metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,"")}`,input_tokens:usage.promptTokenCount||0,output_tokens:usage.candidatesTokenCount||0,input_tokens_cache_read:usage.cachedContentTokenCount||0,input_tokens_cache_write:0,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){throw new Error("Tool configuration is not currently implemented for Vertex AI")}getConsistentMessages(messages){return LLMHelper.removeDuplicateUserMessages(messages).map(message=>{let textBlock=[];return message?.parts?textBlock=message.parts:message?.content&&(textBlock=Array.isArray(message.content)?message.content:[{text:message.content}]),{role:message.role,parts:textBlock}})}}var __defProp$z=Object.defineProperty,__defNormalProp$z=(obj,key,value)=>key in obj?__defProp$z(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$z=(obj,key,value)=>__defNormalProp$z(obj,key+"",value);class PerplexityConnector extends LLMConnector{constructor(){super(...arguments),__publicField$z(this,"name","LLM:Perplexity")}async getClient(params){const apiKey=params.credentials?.apiKey;if(!apiKey)throw new Error("Please provide an API key for Perplexity");return axios.create({baseURL:params?.modelInfo?.baseURL,headers:{Authorization:`Bearer ${apiKey}`,"Content-Type":"application/json"}})}async request({acRequest,body,context}){try{const response=await(await this.getClient(context)).post("/chat/completions",body),content=response?.data?.choices?.[0]?.message.content,finishReason=response?.data?.choices?.[0]?.finish_reason,usage=response?.data?.usage;return this.reportUsage(usage,{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}),{content,finishReason,useTool:!1,toolsData:[],message:{content,role:"assistant"},usage}}catch(error){throw error}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1;return setTimeout(()=>{try{this.request({acRequest,body,context}).then(respose=>{const finishReason=respose.finishReason,usage=respose.usage;emitter.emit("interrupted",finishReason),emitter.emit("content",respose.content),emitter.emit("end",void 0,usage,finishReason)}).catch(error=>{emitter.emit("error",error.message||error.toString())})}catch(error){emitter.emit("error",error.message||error.toString())}},100),emitter}async webSearchRequest({acRequest,body,context}){throw new Error("Web search is not supported for Perplexity")}async reqBodyAdapter(params){const messages=params?.messages||[];(params?.responseFormat||"")==="json"&&(messages?.[0]?.role===TLLMMessageRole.System?messages[0].content+=JSON_RESPONSE_INSTRUCTION:messages.unshift({role:TLLMMessageRole.System,content:JSON_RESPONSE_INSTRUCTION}),delete params.responseFormat);const body={model:params.model,messages};return params?.maxTokens!==void 0&&(body.max_tokens=params.maxTokens),params?.temperature!==void 0&&(body.temperature=params.temperature),params?.topP!==void 0&&(body.top_p=params.topP),params?.topK!==void 0&&(body.top_k=params.topK),params?.frequencyPenalty&&(body.frequency_penalty=params.frequencyPenalty),params?.presencePenalty!==void 0&&(body.presence_penalty=params.presencePenalty),params.responseFormat&&(body.response_format=params.responseFormat),body}reportUsage(usage,metadata){const usageData={sourceId:`llm:${metadata.modelEntryName.replace(BUILT_IN_MODEL_PREFIX,"")}`,input_tokens:usage?.prompt_tokens-(usage?.prompt_tokens_details?.cached_tokens||0),output_tokens:usage?.completion_tokens,input_tokens_cache_write:0,input_tokens_cache_read:usage?.prompt_tokens_details?.cached_tokens||0,reasoning_tokens:usage?.reasoning_tokens||0,keySource:metadata.keySource,agentId:metadata.agentId,teamId:metadata.teamId};return SystemEvents.emit("USAGE:LLM",usageData),usageData}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto"}){let tools=[];return type==="function"&&(tools=toolDefinitions.map(tool=>{const{name,description,properties,requiredFields}=tool;return{type:"function",function:{name,description,parameters:{type:"object",properties,required:requiredFields}}}})),tools?.length>0?{tools,tool_choice:toolChoice||"auto"}:{}}transformToolMessageBlocks({messageBlock,toolsData}){const messageBlocks=[];if(messageBlock){const transformedMessageBlock={...messageBlock,content:typeof messageBlock.content=="object"?JSON.stringify(messageBlock.content):messageBlock.content};if(transformedMessageBlock.tool_calls)for(let toolCall of transformedMessageBlock.tool_calls)toolCall.function.arguments=typeof toolCall.function.arguments=="object"?JSON.stringify(toolCall.function.arguments):toolCall.function.arguments;messageBlocks.push(transformedMessageBlock)}const transformedToolsData=toolsData.map(toolData=>({tool_call_id:toolData.id,role:TLLMMessageRole.Tool,name:toolData.name,content:typeof toolData.result=="string"?toolData.result:JSON.stringify(toolData.result)}));return[...messageBlocks,...transformedToolsData]}getConsistentMessages(messages){return LLMHelper.removeDuplicateUserMessages(messages).map(message=>{const _message={...message};let textContent="";return message?.parts?textContent=message.parts.map(textBlock=>textBlock?.text||"").join(" "):Array.isArray(message?.content)?textContent=message.content.map(textBlock=>textBlock?.text||"").join(" "):message?.content&&(textContent=message.content),_message.content=textContent,_message})}}class LLMService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.LLM,"Echo",EchoConnector),ConnectorService.register(TConnectorService.LLM,"OpenAI",OpenAIConnector),ConnectorService.register(TConnectorService.LLM,"DeepSeek",OpenAIConnector),ConnectorService.register(TConnectorService.LLM,"GoogleAI",GoogleAIConnector),ConnectorService.register(TConnectorService.LLM,"Anthropic",AnthropicConnector),ConnectorService.register(TConnectorService.LLM,"Groq",GroqConnector),ConnectorService.register(TConnectorService.LLM,"TogetherAI",OpenAIConnector),ConnectorService.register(TConnectorService.LLM,"Bedrock",BedrockConnector),ConnectorService.register(TConnectorService.LLM,"VertexAI",VertexAIConnector),ConnectorService.register(TConnectorService.LLM,"xAI",OpenAIConnector),ConnectorService.register(TConnectorService.LLM,"Perplexity",PerplexityConnector)}init(){ConnectorService.init(TConnectorService.LLM,"Echo"),ConnectorService.init(TConnectorService.LLM,"OpenAI"),ConnectorService.init(TConnectorService.LLM,"DeepSeek"),ConnectorService.init(TConnectorService.LLM,"GoogleAI"),ConnectorService.init(TConnectorService.LLM,"Anthropic"),ConnectorService.init(TConnectorService.LLM,"Groq"),ConnectorService.init(TConnectorService.LLM,"TogetherAI"),ConnectorService.init(TConnectorService.LLM,"Bedrock"),ConnectorService.init(TConnectorService.LLM,"VertexAI"),ConnectorService.init(TConnectorService.LLM,"xAI"),ConnectorService.init(TConnectorService.LLM,"Perplexity")}}var __defProp$y=Object.defineProperty,__getOwnPropDesc$h=Object.getOwnPropertyDescriptor,__defNormalProp$y=(obj,key,value)=>key in obj?__defProp$y(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$h=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$h(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$y(target,key,result),result},__publicField$y=(obj,key,value)=>__defNormalProp$y(obj,typeof key!="symbol"?key+"":key,value);const console$j=Logger("RedisCache");class RedisCache extends CacheConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$y(this,"name","RedisCache"),__publicField$y(this,"redis"),__publicField$y(this,"_prefix","smyth:cache"),__publicField$y(this,"_mdPrefix","smyth:metadata");const sentinels=parseSentinelHosts(_settings.hosts||process.env.REDIS_HOSTS);let host=sentinels.length===1?sentinels[0].host:null,port=sentinels.length===1?sentinels[0].port:null;this.redis=new IORedis({...host?{host,port}:{sentinels,name:_settings.name||process.env.REDIS_MASTER_NAME},password:_settings.password||process.env.REDIS_PASSWORD}),this.redis.on("error",error=>{console$j.error("Redis Error:",error)}),this.redis.on("connect",()=>{console$j.log("Redis connected!")})}get client(){return this.redis}get prefix(){return this._prefix}get mdPrefix(){return this._mdPrefix}async get(acRequest,key){return await this.redis.get(`${this._prefix}:${key}`)}async set(acRequest,key,data,acl,metadata,ttl){const accessCandidate=acRequest.candidate,promises=[],newMetadata=metadata||{};return newMetadata.acl=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,ttl&&ttl>0?(promises.push(this.redis.set(`${this._prefix}:${key}`,data,"EX",ttl)),promises.push(this.setMetadataWithTTL(acRequest,key,newMetadata,ttl))):(promises.push(this.redis.set(`${this._prefix}:${key}`,data)),promises.push(this.setMetadata(acRequest,key,newMetadata))),await Promise.all(promises),!0}async delete(acRequest,key){await Promise.all([this.redis.del(`${this._prefix}:${key}`),this.redis.del(`${this._mdPrefix}:${key}`)])}async exists(acRequest,key){return!!await this.redis.exists(`${this._prefix}:${key}`)}async getMetadata(acRequest,key){if(this.exists(acRequest,key))try{const metadata=await this.redis.get(`${this._mdPrefix}:${key}`);return metadata?this.deserializeRedisMetadata(metadata):{}}catch{return{}}}async setMetadata(acRequest,key,metadata){await this.setMetadataWithTTL(acRequest,key,metadata)}async setMetadataWithTTL(acRequest,key,metadata,ttl){ttl&&ttl>0?await this.redis.set(`${this._mdPrefix}:${key}`,this.serializeRedisMetadata(metadata),"EX",ttl):await this.redis.set(`${this._mdPrefix}:${key}`,this.serializeRedisMetadata(metadata))}async updateTTL(acRequest,key,ttl){ttl&&await Promise.all([this.redis.expire(`${this._prefix}:${key}`,ttl),this.redis.expire(`${this._mdPrefix}:${key}`,ttl)])}async getTTL(acRequest,key){return this.redis.ttl(`${this._prefix}:${key}`)}async getResourceACL(resourceId,candidate){const _metadata=await this.redis.get(`${this._mdPrefix}:${resourceId}`).catch(error=>{}),exists=_metadata!=null,metadata=exists?this.deserializeRedisMetadata(_metadata):{};return exists?ACL.from(metadata?.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async getACL(acRequest,key){try{return(await this.getMetadata(acRequest,key))?.acl||{}}catch(error){throw console$j.error("Error getting access rights in S3",error.name,error.message),error}}async setACL(acRequest,key,acl){try{let metadata=await this.getMetadata(acRequest,key);metadata||(metadata={}),metadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,key,metadata)}catch(error){throw console$j.error("Error setting access rights in S3",error),error}}serializeRedisMetadata(redisMetadata){if(!redisMetadata)return"";if(redisMetadata.acl){const acl=redisMetadata.acl;acl&&(redisMetadata.acl=ACL.from(acl).serializedACL)}return JSON.stringify(redisMetadata)}deserializeRedisMetadata(strMetadata){try{const redisMetadata=JSON.parse(strMetadata);if(redisMetadata.acl){const acl=ACL.from(redisMetadata.acl).ACL;redisMetadata.acl=acl}return redisMetadata}catch{return console$j.warn("Error deserializing metadata",strMetadata),{}}}async stop(){super.stop(),await this.redis.quit()}}__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"get"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"set"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"delete"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"exists"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"getMetadata"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"setMetadata"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"updateTTL"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"getTTL"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"getACL"),__decorateClass$h([SecureConnector.AccessControl],RedisCache.prototype,"setACL");function parseSentinelHosts(hosts){return typeof hosts=="string"?hosts.split(",").map(host=>{const[hostName,port]=host.split(":");return{host:hostName,port:Number(port)}}):Array.isArray(hosts)?hosts.map(host=>{if(typeof host=="string"){const[hostName,port]=host.split(":");return{host:hostName,port:Number(port)}}else return host}):[]}var __defProp$x=Object.defineProperty,__getOwnPropDesc$g=Object.getOwnPropertyDescriptor,__defNormalProp$x=(obj,key,value)=>key in obj?__defProp$x(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$g=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$g(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$x(target,key,result),result},__publicField$x=(obj,key,value)=>__defNormalProp$x(obj,typeof key!="symbol"?key+"":key,value);const console$i=Logger("S3Cache");class S3Cache extends CacheConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$x(this,"name","S3Cache"),__publicField$x(this,"s3Client"),__publicField$x(this,"bucketName"),__publicField$x(this,"isInitialized",!1),__publicField$x(this,"cachePrefix","_smyth_cache"),this.s3Client=new S3Client({region:_settings.region,credentials:{accessKeyId:_settings.accessKeyId,secretAccessKey:_settings.secretAccessKey}}),this.bucketName=_settings.bucketName}get client(){return this.s3Client}async get(acRequest,key){const candidateId=acRequest.candidate.id;this.isInitialized||await this.initialize();try{const params={Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidateId}/${key}`},s3HeadCommand=new HeadObjectCommand(params),expirationHeader=(await this.s3Client.send(s3HeadCommand))?.Expiration;if(expirationHeader){const expirationDateMatch=expirationHeader.match(/expiry-date="([^"]+)"/);if(expirationDateMatch){const expirationDate=new Date(expirationDateMatch[1]);if(new Date>expirationDate){const s3DeleteCommand=new DeleteObjectCommand(params);return await this.s3Client.send(s3DeleteCommand),console$i.log(`Object ${key} expired and deleted.`),null}}}const s3GetCommand=new GetObjectCommand(params);return(await this.s3Client.send(s3GetCommand)).Body.transformToString()}catch(error){throw console$i.error(`Error reading object ${key}:`,error),null}}async set(acRequest,key,data,acl,metadata,ttl){const accessCandidate=acRequest.candidate,candidateId=accessCandidate.id,newMetadata=metadata||{};newMetadata.acl=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL;const serializedMetadata=this.serializeS3Metadata(newMetadata),s3PutCommandConfig={Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidateId}/${key}`,Body:data,Metadata:serializedMetadata};if(ttl){const expiryMetadata=generateExpiryMetadata(ttlToExpiryDays(ttl));s3PutCommandConfig.Tagging=`${expiryMetadata.Key}=${expiryMetadata.Value}`}const s3PutCommand=new PutObjectCommand(s3PutCommandConfig);return await this.s3Client.send(s3PutCommand),!0}async delete(acRequest,key){try{const candidateId=acRequest.candidate.id,deleteCommand=new DeleteObjectCommand({Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidateId}/${key}`});await this.s3Client.send(deleteCommand)}catch(error){console$i.log(`Error deleting object ${key}:`,error);return}}async exists(acRequest,key){const candidateId=acRequest.candidate.id;try{const params={Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidateId}/${key}`},s3HeadCommand=new HeadObjectCommand(params),expirationHeader=(await this.s3Client.send(s3HeadCommand))?.Expiration;if(expirationHeader){const expirationDateMatch=expirationHeader.match(/expiry-date="([^"]+)"/);if(expirationDateMatch){const expirationDate=new Date(expirationDateMatch[1]);if(new Date>expirationDate)return await this.delete(acRequest,key),console$i.log(`Object ${key} expired and deleted.`),!1}}return!0}catch(error){return console$i.error(`Error reading object ${key}:`,error),!1}}async getMetadata(acRequest,key){const candidateId=acRequest.candidate.id;try{return await this.getS3Metadata(`${this.cachePrefix}/${candidateId}/${key}`)}catch(error){throw console$i.error("Error getting access rights in S3",error.name,error.message),error}}async setMetadata(acRequest,key,metadata){const candidateId=acRequest.candidate.id;try{let s3Metadata=await this.getS3Metadata(`${this.cachePrefix}/${candidateId}/${key}`);s3Metadata||(s3Metadata={}),s3Metadata={...s3Metadata,...metadata},await this.setS3Metadata(`${this.cachePrefix}/${candidateId}/${key}`,s3Metadata)}catch(error){throw console$i.error("Error setting access rights in S3",error),error}}async updateTTL(acRequest,key,ttl){if(ttl){const candidateId=acRequest.candidate.id,expiryMetadata=generateExpiryMetadata(ttlToExpiryDays(ttl)),s3PutObjectTaggingCommand=new PutObjectTaggingCommand({Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidateId}/${key}`,Tagging:{TagSet:[{Key:expiryMetadata.Key,Value:expiryMetadata.Value}]}});await this.s3Client.send(s3PutObjectTaggingCommand)}}async getTTL(acRequest,key){const candidateId=acRequest.candidate.id,s3HeadCommand=new HeadObjectCommand({Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidateId}/${key}`}),expirationHeader=(await this.s3Client.send(s3HeadCommand))?.Expiration;if(expirationHeader){const expirationDateMatch=expirationHeader.match(/expiry-date="([^"]+)"/);if(expirationDateMatch){const expirationDate=new Date(expirationDateMatch[1]),currentDate=new Date,timeDifference=expirationDate.getTime()-currentDate.getTime();return Math.floor(timeDifference/(1e3*60*60*24))}}return-1}async getResourceACL(resourceId,candidate){try{const s3HeadCommand=new HeadObjectCommand({Bucket:this.bucketName,Key:`${this.cachePrefix}/${candidate.id}/${resourceId}`}),metadata=(await this.s3Client.send(s3HeadCommand)).Metadata;return metadata.acl?ACL.from(metadata?.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}catch(error){if(error.name==="NotFound")return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);throw error}}async getACL(acRequest,key){try{return(await this.getMetadata(acRequest,key))?.acl||{}}catch(error){throw error}}async setACL(acRequest,key,acl){try{let metadata=await this.getMetadata(acRequest,key);metadata||(metadata={}),metadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,key,metadata)}catch(error){throw console$i.error("Error setting access rights in S3",error),error}}async getS3Metadata(resourceId){try{const command=new HeadObjectCommand({Bucket:this.bucketName,Key:resourceId}),response=await this.client.send(command),s3RawMetadata=response.Metadata;if(!s3RawMetadata||Object.keys(s3RawMetadata).length===0)return{};let metadata=this.deserializeS3Metadata(s3RawMetadata);return metadata.ContentType||(metadata.ContentType=response.ContentType?response.ContentType:"application/octet-stream"),metadata}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$i.error("Error reading object metadata from S3",error.name,error.message),error}}async setS3Metadata(resourceId,metadata){try{const getObjectTaggingCommand=new GetObjectTaggingCommand({Bucket:this.bucketName,Key:resourceId}),objectTagging=await this.client.send(getObjectTaggingCommand),serializedMetadata=this.serializeS3Metadata(metadata),copyObjectCommand=new CopyObjectCommand({Bucket:this.bucketName,CopySource:`${this.bucketName}/${resourceId}`,Key:resourceId,Metadata:serializedMetadata,MetadataDirective:"REPLACE",Tagging:objectTagging.TagSet.map(tag=>`${tag.Key}=${tag.Value}`).join("&")});await this.client.send(copyObjectCommand)}catch(error){throw console$i.error("Error setting object metadata in S3",error.name,error.message),error}}async initialize(){await checkAndInstallLifecycleRules(this.bucketName,this.s3Client),this.isInitialized=!0}serializeS3Metadata(s3Metadata){let amzMetadata={};s3Metadata.acl&&(amzMetadata.acl=typeof s3Metadata.acl=="string"?s3Metadata.acl:ACL.from(s3Metadata.acl).serializedACL,delete s3Metadata.acl);for(let key in s3Metadata)key!="ContentType"&&(amzMetadata[key]=typeof s3Metadata[key]=="string"?s3Metadata[key]:JSON.stringify(s3Metadata[key]));return amzMetadata}deserializeS3Metadata(amzMetadata){let metadata={};for(let key in amzMetadata){if(key==="acl"){metadata[key]=ACL.from(amzMetadata[key]).ACL;continue}try{metadata[key]=JSON.parse(amzMetadata[key])}catch{metadata[key]=amzMetadata[key]}}return metadata}}__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"get"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"set"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"delete"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"exists"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"getMetadata"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"setMetadata"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"updateTTL"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"getTTL"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"getACL"),__decorateClass$g([SecureConnector.AccessControl],S3Cache.prototype,"setACL");var __defProp$w=Object.defineProperty,__getOwnPropDesc$f=Object.getOwnPropertyDescriptor,__defNormalProp$w=(obj,key,value)=>key in obj?__defProp$w(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$f=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$f(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$w(target,key,result),result},__publicField$w=(obj,key,value)=>__defNormalProp$w(obj,typeof key!="symbol"?key+"":key,value);const console$h=Logger("LocalStorageCache");class LocalStorageCache extends CacheConnector{constructor(_settings){super(_settings),__publicField$w(this,"name","LocalStorageCache"),__publicField$w(this,"folder"),__publicField$w(this,"_prefix","cache"),__publicField$w(this,"_mdPrefix","cache.metadata"),__publicField$w(this,"isInitialized",!1),this.folder=_settings.folder||`${os.tmpdir()}/.smyth/cache`,this.initialize()}async initialize(){existsSync(this.folder)||mkdirSync(this.folder,{recursive:!0});const cacheFolderPath=path.join(this.folder,this._prefix);existsSync(cacheFolderPath)||mkdirSync(cacheFolderPath,{recursive:!0});const metadataFolderPath=path.join(this.folder,this._mdPrefix);existsSync(metadataFolderPath)||(mkdirSync(metadataFolderPath,{recursive:!0}),writeFileSync(path.join(metadataFolderPath,"README_IMPORTANT.txt"),"This folder is used for smythOS metadata, do not delete it, it will break SmythOS cache functionality")),this.isInitialized=!0}get prefix(){return this._prefix}get mdPrefix(){return this._mdPrefix}async get(acRequest,key){this.isInitialized||await this.initialize();try{const filePath=this.getStorageFilePath(acRequest.candidate.id,key);if(!existsSync(filePath))return;const data=readFileSync(filePath,"utf-8"),metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key),metadata=readFileSync(metadataFilePath,"utf-8"),metadataObject=JSON.parse(metadata);if(metadataObject.expiresAt&&metadataObject.expiresAt<Date.now()){await this.delete(acRequest,key);return}return data}catch(error){throw console$h.error("Error reading object from local storage",error.name,error.message),error}}async set(acRequest,key,data,acl,metadata,ttl){this.isInitialized||await this.initialize();const accessCandidate=acRequest.candidate;let amzACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,fileMetadata={...metadata,acl:amzACL,...ttl?{expiresAt:Date.now()+ttl*1e3}:{}};const storageFolderPath=this.getStorageFilePath(acRequest.candidate.id,key,!0);this.createDirectories(storageFolderPath,key);const filePath=this.getStorageFilePath(acRequest.candidate.id,key);return writeFileSync(filePath,data),await this.setMetadata(acRequest,key,fileMetadata),!0}async delete(acRequest,key){try{const filePath=this.getStorageFilePath(acRequest.candidate.id,key);if(!existsSync(filePath))return;unlinkSync(filePath);const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key);unlinkSync(metadataFilePath)}catch(error){throw console$h.error("Error deleting object from local storage",error.name,error.message),error}}async exists(acRequest,key){this.isInitialized||await this.initialize();const filePath=this.getStorageFilePath(acRequest.candidate.id,key);if(!existsSync(filePath))return!1;const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key);if(!existsSync(metadataFilePath))return!1;const metadata=readFileSync(metadataFilePath,"utf-8"),metadataObject=JSON.parse(metadata);return metadataObject.expiresAt&&metadataObject.expiresAt<Date.now()?(await this.delete(acRequest,key),!1):!0}async getMetadata(acRequest,key){try{const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key);if(!existsSync(metadataFilePath))return;const data=readFileSync(metadataFilePath,"utf-8");return this.deserializeMetadata(JSON.parse(data))}catch(error){throw console$h.error("Error reading metadata from LocalStorage",error.name,error.message),error}}async setMetadata(acRequest,key,metadata){try{let fileMetadata=await this.getMetadata(acRequest,key);fileMetadata||(fileMetadata={}),fileMetadata={...fileMetadata,...metadata};const metadataFolderPath=this.getMetadataFilePath(acRequest.candidate.id,key,!0);this.createDirectories(metadataFolderPath,key);const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key),serializedMetadata=this.serializeMetadata(fileMetadata);writeFileSync(metadataFilePath,JSON.stringify(serializedMetadata))}catch(error){throw console$h.error("Error setting metadata in local storage",error.name,error.message),error}}async updateTTL(acRequest,key,ttl){if(ttl){const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key),metadata=readFileSync(metadataFilePath,"utf-8"),metadataObject=JSON.parse(metadata);metadataObject.expiresAt=Date.now()+ttl*1e3,writeFileSync(metadataFilePath,JSON.stringify(metadataObject))}}async getTTL(acRequest,key){const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,key),metadata=readFileSync(metadataFilePath,"utf-8"),metadataObject=JSON.parse(metadata);return metadataObject.expiresAt&&metadataObject.expiresAt>Date.now()?Math.floor((metadataObject.expiresAt-Date.now())/1e3):0}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const metadataFilePath=this.getMetadataFilePath(candidate.id,resourceId);if(!existsSync(metadataFilePath))return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);const metadata=readFileSync(metadataFilePath,"utf-8");if(metadata===void 0)return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);try{let metadataObject=JSON.parse(metadata);return ACL.from(metadataObject?.acl)}catch(error){throw console$h.error("Error parsing metadata in local storage",error.name,error.message),error}}async getACL(acRequest,key){try{const fileMetadata=await this.getMetadata(acRequest,key);return ACL.from(fileMetadata?.acl)}catch(error){throw console$h.error("Error getting access rights in local storage",error.name,error.message),error}}async setACL(acRequest,key,acl){try{let fileMetadata=await this.getMetadata(acRequest,key);fileMetadata||(fileMetadata={}),fileMetadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,key,fileMetadata)}catch(error){throw console$h.error("Error setting access rights in local storage",error),error}}serializeMetadata(metadata){let updatedMetadata={};metadata.acl&&(metadata.acl&&(updatedMetadata.acl=typeof metadata.acl=="string"?metadata.acl:ACL.from(metadata.acl).serializedACL),delete metadata.acl);for(let key in metadata)key!="ContentType"&&(updatedMetadata[key]=typeof metadata[key]=="string"?metadata[key]:JSON.stringify(metadata[key]));return updatedMetadata}deserializeMetadata(metadata){let deserializedMetadata={};for(let key in metadata){if(key==="acl"){deserializedMetadata[key]=ACL.from(metadata[key]).ACL;continue}try{deserializedMetadata[key]=JSON.parse(metadata[key])}catch{deserializedMetadata[key]=metadata[key]}}return deserializedMetadata}getStorageFilePath(teamId,resourceId,returnBasePath=!1){return existsSync(path.join(this.folder,this._prefix,teamId))||mkdirSync(path.join(this.folder,this._prefix,teamId)),returnBasePath?path.join(this.folder,this._prefix,teamId):path.join(this.folder,this._prefix,teamId,resourceId)}getMetadataFilePath(teamId,resourceId,returnBasePath=!1){return existsSync(path.join(this.folder,this._mdPrefix,teamId))||mkdirSync(path.join(this.folder,this._mdPrefix,teamId)),returnBasePath?path.join(this.folder,this._mdPrefix,teamId):path.join(this.folder,this._mdPrefix,teamId,resourceId)}createDirectories(basePath,resourceId){const folders=resourceId.split("/").slice(0,-1);let currentPath=basePath;for(let folder of folders)currentPath=path.join(currentPath,folder),existsSync(currentPath)||mkdirSync(currentPath)}}__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"get"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"set"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"delete"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"exists"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"getMetadata"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"setMetadata"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"updateTTL"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"getTTL"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"getACL"),__decorateClass$f([SecureConnector.AccessControl],LocalStorageCache.prototype,"setACL");var __defProp$v=Object.defineProperty,__getOwnPropDesc$e=Object.getOwnPropertyDescriptor,__defNormalProp$v=(obj,key,value)=>key in obj?__defProp$v(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$e=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$e(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$v(target,key,result),result},__publicField$v=(obj,key,value)=>__defNormalProp$v(obj,typeof key!="symbol"?key+"":key,value);const console$g=Logger("RAMCache");class RAMCache extends CacheConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$v(this,"name","RAMCache"),__publicField$v(this,"_prefix","smyth:cache"),__publicField$v(this,"_mdPrefix","smyth:metadata"),__publicField$v(this,"cache",new Map),__publicField$v(this,"cleanupInterval"),this.cleanupInterval=setInterval(()=>this.cleanupExpiredEntries(),6e4),this.cleanupInterval.unref()}get prefix(){return this._prefix}get mdPrefix(){return this._mdPrefix}getFullKey(key){return`${this._prefix}:${key}`}getFullMetadataKey(key){return`${this._mdPrefix}:${key}`}cleanupExpiredEntries(){const now=Date.now();for(const[key,entry]of this.cache.entries())entry.expiresAt&&entry.expiresAt<now&&this.cache.delete(key)}async get(acRequest,key){const fullKey=this.getFullKey(key),entry=this.cache.get(fullKey);return entry?entry.expiresAt&&entry.expiresAt<Date.now()?(this.cache.delete(fullKey),null):entry.value:null}async set(acRequest,key,data,acl,metadata,ttl){const accessCandidate=acRequest.candidate,fullKey=this.getFullKey(key),fullMetadataKey=this.getFullMetadataKey(key),newMetadata=metadata||{};newMetadata.acl=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL;const entry={value:data,metadata:newMetadata,expiresAt:ttl?Date.now()+ttl*1e3:void 0};return this.cache.set(fullKey,entry),this.cache.set(fullMetadataKey,entry),!0}async delete(acRequest,key){const fullKey=this.getFullKey(key),fullMetadataKey=this.getFullMetadataKey(key);this.cache.delete(fullKey),this.cache.delete(fullMetadataKey)}async exists(acRequest,key){const fullKey=this.getFullKey(key),entry=this.cache.get(fullKey);return entry?entry.expiresAt&&entry.expiresAt<Date.now()?(this.cache.delete(fullKey),!1):!0:!1}async getMetadata(acRequest,key){if(!await this.exists(acRequest,key))return;const fullMetadataKey=this.getFullMetadataKey(key);return this.cache.get(fullMetadataKey)?.metadata||{}}async setMetadata(acRequest,key,metadata){const fullMetadataKey=this.getFullMetadataKey(key),entry=this.cache.get(fullMetadataKey);entry&&(entry.metadata=metadata,this.cache.set(fullMetadataKey,entry))}async updateTTL(acRequest,key,ttl){const fullKey=this.getFullKey(key),fullMetadataKey=this.getFullMetadataKey(key),entry=this.cache.get(fullKey);entry&&(entry.expiresAt=ttl?Date.now()+ttl*1e3:void 0,this.cache.set(fullKey,entry),this.cache.set(fullMetadataKey,entry))}async getTTL(acRequest,key){const fullKey=this.getFullKey(key),entry=this.cache.get(fullKey);if(!entry||!entry.expiresAt)return-1;const remaining=Math.ceil((entry.expiresAt-Date.now())/1e3);return remaining>0?remaining:-1}async getResourceACL(resourceId,candidate){const fullMetadataKey=this.getFullMetadataKey(resourceId),entry=this.cache.get(fullMetadataKey);return entry?ACL.from(entry.metadata?.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async getACL(acRequest,key){try{return(await this.getMetadata(acRequest,key))?.acl||{}}catch(error){throw console$g.error("Error getting access rights in RAMCache",error.name,error.message),error}}async setACL(acRequest,key,acl){try{let metadata=await this.getMetadata(acRequest,key);metadata||(metadata={}),metadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,key,metadata)}catch(error){throw console$g.error("Error setting access rights in RAMCache",error),error}}async stop(){super.stop(),clearInterval(this.cleanupInterval),this.cache.clear()}}__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"get"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"set"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"delete"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"exists"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"getMetadata"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"setMetadata"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"updateTTL"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"getTTL"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"getACL"),__decorateClass$e([SecureConnector.AccessControl],RAMCache.prototype,"setACL");class CacheService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Cache,"Redis",RedisCache),ConnectorService.register(TConnectorService.Cache,"S3",S3Cache),ConnectorService.register(TConnectorService.Cache,"LocalStorage",LocalStorageCache),ConnectorService.register(TConnectorService.Cache,"RAM",RAMCache)}}class VaultConnector extends SecureConnector{constructor(_settings){super(_settings),this._settings=_settings}requester(candidate){return{get:async keyId=>this.get(candidate.readRequest,keyId),exists:async keyId=>this.exists(candidate.readRequest,keyId),listKeys:async()=>this.listKeys(candidate.readRequest)}}}function findSmythPath(_path="",callback){let _smythDir="";_path&&(_smythDir=findSmythPath(""));const searchDirectories=[],localDir=path.resolve(process.cwd(),".smyth",_path);searchDirectories.push(localDir);const mainScriptPath=process.argv[1],mainScriptDir=mainScriptPath?path.dirname(path.resolve(mainScriptPath)):null;if(mainScriptDir){const mainScriptSmythDir=path.resolve(mainScriptDir,".smyth",_path);searchDirectories.push(mainScriptSmythDir)}const packageRootDir=findPackageRoot();if(packageRootDir){const packageSmythDir=path.resolve(packageRootDir,".smyth",_path);searchDirectories.push(packageSmythDir)}const packageMainRootDir=findPackageRoot(mainScriptDir);if(packageMainRootDir){const packageSmythDir=path.resolve(packageMainRootDir,".smyth",_path);searchDirectories.push(packageSmythDir)}const homeDir=path.resolve(os.homedir(),".smyth",_path);searchDirectories.push(homeDir);for(let i=0;i<searchDirectories.length;i++){const dir=searchDirectories[i],nextDir=searchDirectories[i+1];if(!fs__default.existsSync(dir)){callback?.(dir,!1,nextDir);continue}return callback?.(dir,!0,null),dir}return _smythDir&&_path?path.resolve(_smythDir,_path):homeDir}function findPackageRoot(startDir=process.cwd()){let currentDir=startDir;for(;currentDir!==path.dirname(currentDir);){const packageJsonPath=path.resolve(currentDir,"package.json");if(fs__default.existsSync(packageJsonPath))return currentDir;currentDir=path.dirname(currentDir)}return null}var __defProp$u=Object.defineProperty,__getOwnPropDesc$d=Object.getOwnPropertyDescriptor,__defNormalProp$u=(obj,key,value)=>key in obj?__defProp$u(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$d=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$d(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$u(target,key,result),result},__publicField$u=(obj,key,value)=>__defNormalProp$u(obj,typeof key!="symbol"?key+"":key,value);const console$f=Logger("JSONFileVault");class JSONFileVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$u(this,"name","JSONFileVault"),__publicField$u(this,"vaultData"),__publicField$u(this,"index"),__publicField$u(this,"shared"),this.shared=_settings.shared||"";let vaultFile=this.findVaultFile(_settings.file);if(this.vaultData={},fs__default.existsSync(vaultFile)){try{if(_settings.fileKey&&fs__default.existsSync(_settings.fileKey))try{const privateKey=fs__default.readFileSync(_settings.fileKey,"utf8"),encryptedVault=fs__default.readFileSync(vaultFile,"utf8").toString(),decryptedBuffer=crypto$1.privateDecrypt({key:privateKey,padding:crypto$1.constants.RSA_PKCS1_OAEP_PADDING},Buffer.from(encryptedVault,"base64"));this.vaultData=JSON.parse(decryptedBuffer.toString("utf8"))}catch{throw new Error("Failed to decrypt vault")}else this.vaultData=JSON.parse(fs__default.readFileSync(vaultFile).toString())}catch(e){console$f.error("Error parsing vault file:",e),console$f.error("!!! Vault features might not work properly !!!"),this.vaultData={}}this.vaultData?.encrypted&&this.vaultData?.algorithm&&this.vaultData?.data&&this.setInteraction(this.getMasterKeyInteractive.bind(this));for(let teamId in this.vaultData)for(let resourceId in this.vaultData[teamId]){this.index||(this.index={}),this.index[resourceId]||(this.index[resourceId]={});const value=this.vaultData[teamId][resourceId];this.index[resourceId][teamId]=value}}}findVaultFile(vaultFile){let _vaultFile=vaultFile;return fs__default.existsSync(_vaultFile)?_vaultFile:(console$f.warn("Vault file not found in:",_vaultFile),_vaultFile=findSmythPath(".sre/vault.json",(dir,success,nextDir)=>{success||console$f.warn("Vault file not found in:",nextDir)}),fs__default.existsSync(_vaultFile)?(console$f.warn("Using alternative vault file found in : ",_vaultFile),_vaultFile):(console$f.warn("!!! All attempts to find the vault file failed !!!"),console$f.warn("!!! Will continue without vault !!!"),console$f.warn("!!! Many features might not work !!!"),null))}getMasterKeyInteractive(){process.stdout.write(`\x1B[1;37m===[ Encrypted Vault Detected ]=================================\x1B[0m
181
162
  `);const masterKey=readlineSync.question("Enter master key: ",{hideEchoBack:!0,mask:"*"});return console$f.info("Master key entered"),masterKey}resolveEnvironmentVariables(value){if(typeof value!="string")return value;const envVarPattern=/\$env\(([^)]+)\)/g;return value.replace(envVarPattern,(match,envVarName)=>{const envValue=process.env[envVarName];return envValue===void 0?(console$f.warn(`Environment variable ${envVarName} not found, keeping original value: ${match}`),match):envValue})}async get(acRequest,keyId){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(acRequest.candidate),rawValue=this.vaultData?.[teamId]?.[keyId]||this.vaultData?.[this.shared]?.[keyId];return this.resolveEnvironmentVariables(rawValue)}async exists(acRequest,keyId){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(acRequest.candidate);return!!(this.vaultData?.[teamId]?.[keyId]||this.vaultData?.[this.shared]?.[keyId])}async listKeys(acRequest){return Object.keys(this.vaultData)}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return resourceId&&typeof this.vaultData?.[teamId]?.[resourceId]!="string"?(this.shared&&typeof this.vaultData?.[this.shared]?.[resourceId]=="string"&&acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl):(acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),this.shared&&typeof this.vaultData?.[this.shared]?.[resourceId]=="string"&&acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl)}}__decorateClass$d([SecureConnector.AccessControl],JSONFileVault.prototype,"get"),__decorateClass$d([SecureConnector.AccessControl],JSONFileVault.prototype,"exists"),__decorateClass$d([SecureConnector.AccessControl],JSONFileVault.prototype,"listKeys");var __defProp$t=Object.defineProperty,__getOwnPropDesc$c=Object.getOwnPropertyDescriptor,__defNormalProp$t=(obj,key,value)=>key in obj?__defProp$t(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$c=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$c(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$t(target,key,result),result},__publicField$t=(obj,key,value)=>__defNormalProp$t(obj,typeof key!="symbol"?key+"":key,value);const console$e=Logger("SecretsManager");class SecretsManager extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$t(this,"name","SecretsManager"),__publicField$t(this,"secretsManager"),this.secretsManager=new SecretsManagerClient({region:_settings.region,..._settings.awsAccessKeyId&&_settings.awsSecretAccessKey?{accessKeyId:_settings.awsAccessKeyId,secretAccessKey:_settings.awsSecretAccessKey}:{}})}async get(acRequest,secretName){try{return(await this.getSecretByName(secretName))?.SecretString}catch(error){throw console$e.error(error),error}}async exists(acRequest,keyId){return!!await this.get(acRequest,keyId)}async listKeys(acRequest){return console$e.warn("SecretsManager.listKeys is not implemented"),[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}async getSecretByName(secretName){try{const secrets=[];let nextToken;do{const listResponse=await this.secretsManager.send(new ListSecretsCommand({NextToken:nextToken,Filters:[{Key:"tag-key",Values:["smyth-vault"]}]}));if(listResponse.SecretList)for(const secret2 of listResponse.SecretList)secret2.Name&&secrets.push({ARN:secret2.ARN,Name:secret2.Name,CreatedDate:secret2.CreatedDate});nextToken=listResponse.NextToken}while(nextToken);const formattedSecrets=[],$promises=[];for(const secret2 of secrets)$promises.push(getSpecificSecret(secret2,this.secretsManager));const results=await Promise.all($promises);for(const result of results)formattedSecrets.push(result);return formattedSecrets.find(s=>s.Name===secretName)}catch(error){console$e.error(error)}async function getSpecificSecret(secret,secretsManager){let secretString=(await secretsManager.send(new GetSecretValueCommand({SecretId:secret.ARN}))).SecretString,secretName2=secret.Name;if(secretString)try{let parsedSecret=JSON.parse(secretString);Object.keys(parsedSecret).length===1&&(secretName2=Object.keys(parsedSecret)[0],secretString=parsedSecret[secretName2])}catch{}return{Name:secretName2,ARN:secret.ARN,CreatedDate:secret.CreatedDate,SecretId:secret.Name,SecretString:secretString}}}}__decorateClass$c([SecureConnector.AccessControl],SecretsManager.prototype,"get"),__decorateClass$c([SecureConnector.AccessControl],SecretsManager.prototype,"exists"),__decorateClass$c([SecureConnector.AccessControl],SecretsManager.prototype,"listKeys");var __defProp$s=Object.defineProperty,__getOwnPropDesc$b=Object.getOwnPropertyDescriptor,__defNormalProp$s=(obj,key,value)=>key in obj?__defProp$s(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$b=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$b(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$s(target,key,result),result},__publicField$s=(obj,key,value)=>__defNormalProp$s(obj,typeof key!="symbol"?key+"":key,value);const console$d=Logger("NullVault");class NullVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$s(this,"name","NullVault"),__publicField$s(this,"vaultData"),__publicField$s(this,"index"),__publicField$s(this,"sharedVault"),console$d.warn("NullVault is used : Vault features will not be available")}async get(acRequest,keyId){return console$d.debug(`Ignored operation:NullVault.get: ${keyId}`),"NULLKEY"}async exists(acRequest,keyId){return console$d.debug(`Ignored operation:NullVault.exists: ${keyId}`),!1}async listKeys(acRequest){return console$d.debug("Ignored operation:NullVault.listKeys"),[]}async getResourceACL(resourceId,candidate){const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}__decorateClass$b([SecureConnector.AccessControl],NullVault.prototype,"get"),__decorateClass$b([SecureConnector.AccessControl],NullVault.prototype,"exists"),__decorateClass$b([SecureConnector.AccessControl],NullVault.prototype,"listKeys");class VaultService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Vault,"JSONFileVault",JSONFileVault),ConnectorService.register(TConnectorService.Vault,"SecretsManager",SecretsManager),ConnectorService.register(TConnectorService.Vault,"NullVault",NullVault)}}class AccountConnector extends Connector{constructor(_settings){super(_settings),this._settings=_settings}requester(candidate){return{getAllUserSettings:async()=>this.getAllUserSettings(candidate.readRequest,candidate.id),getUserSetting:async settingKey=>this.getUserSetting(candidate.readRequest,candidate.id,settingKey),getAllTeamSettings:async()=>this.getAllTeamSettings(candidate.readRequest,candidate.id),getTeamSetting:async settingKey=>this.getTeamSetting(candidate.readRequest,candidate.id,settingKey),isTeamMember:async teamId=>this.isTeamMember(teamId,candidate),getCandidateTeam:async()=>this.getCandidateTeam(candidate),getTeam:async()=>this.getCandidateTeam(candidate),getAgentSetting:async settingKey=>this.getAgentSetting(candidate.readRequest,candidate.id,settingKey)}}}var __defProp$r=Object.defineProperty,__defNormalProp$r=(obj,key,value)=>key in obj?__defProp$r(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$r=(obj,key,value)=>__defNormalProp$r(obj,typeof key!="symbol"?key+"":key,value);const console$c=Logger("DummyAccount");class DummyAccount extends AccountConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$r(this,"name","DummyAccount"),__publicField$r(this,"data",{}),this.data=_settings?.data||{},this.data[DEFAULT_TEAM_ID]||(this.data[DEFAULT_TEAM_ID]={users:{},agents:{"FAKE-AGENT-ID":{}},settings:{}}),this.data[DEFAULT_TEAM_ID]||console$c.warn("You are using the DummyAccount connector. This is a development tool and should not be used in production if you have security concerns.")}isTeamMember(team,candidate){if(team===DEFAULT_TEAM_ID)return Promise.resolve(!0);switch(candidate.role){case TAccessRole.Team:return Promise.resolve(team===candidate.id);case TAccessRole.User:return Promise.resolve(this.data[team]?.users?.[candidate.id]);case TAccessRole.Agent:return Promise.resolve(this.data[team]?.agents?.[candidate.id]);default:return Promise.resolve(!1)}}getCandidateTeam(candidate){if(candidate.role===TAccessRole.Team)return Promise.resolve(candidate.id);for(const team in this.data)if(candidate.role===TAccessRole.User&&this.data[team]?.users?.[candidate.id]||candidate.role===TAccessRole.Agent&&this.data[team]?.agents?.[candidate.id])return Promise.resolve(team);return Promise.resolve(DEFAULT_TEAM_ID)}getResourceACL(resourceId,candidate){throw new Error("getResourceACL Method not implemented.")}getAllTeamSettings(acRequest,teamId){return Promise.resolve(this.data[teamId]?.settings)}getAllUserSettings(acRequest,accountId){for(const team in this.data)if(this.data[team]?.users?.[accountId])return Promise.resolve(this.data[team]?.users?.[accountId]?.settings);return Promise.resolve([])}getTeamSetting(acRequest,teamId,settingKey){return Promise.resolve(this.data[teamId]?.settings?.[settingKey])}getUserSetting(acRequest,accountId,settingKey){for(const team in this.data)if(this.data[team]?.users?.[accountId])return Promise.resolve(this.data[team]?.users?.[accountId]?.settings?.[settingKey]);return Promise.resolve(void 0)}getAgentSetting(acRequest,agentId,settingKey){for(const team in this.data)if(this.data[team]?.agents?.[agentId])return Promise.resolve(this.data[team]?.agents?.[agentId]?.settings?.[settingKey]);return Promise.resolve(void 0)}}var __defProp$q=Object.defineProperty,__defNormalProp$q=(obj,key,value)=>key in obj?__defProp$q(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$q=(obj,key,value)=>__defNormalProp$q(obj,typeof key!="symbol"?key+"":key,value);class AWSAccount extends AccountConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$q(this,"name","AWSAccount"),__publicField$q(this,"pool"),this.pool=mysql.createPool({host:_settings.host,database:_settings.database||"app",user:_settings.user||"app",password:_settings.password,connectionLimit:10})}isTeamMember(team,candidate){return Promise.resolve(!0)}getCandidateTeam(candidate){return candidate.role===TAccessRole.Team?Promise.resolve(candidate.id):Promise.resolve(DEFAULT_TEAM_ID)}async getAllTeamSettings(acRequest,teamId){try{const[rows]=await this.pool.execute("SELECT `key`, `value` FROM TeamSettings"),settings=[];return Array.isArray(rows)&&rows.length>0&&settings.push(...rows.map(row=>({key:row.key,value:row.value}))),settings}catch(error){return console.error("Error in getTeamSetting:",error),[]}}async getTeamSetting(acRequest,teamId,settingKey){try{const[rows]=await this.pool.execute("SELECT `value` FROM TeamSettings WHERE `key` = ? LIMIT 1",[settingKey]);return Array.isArray(rows)&&rows.length>0&&"value"in rows[0]?rows[0].value:""}catch(error){return console.error("Error in getTeamSetting:",error),""}}getResourceACL(resourceId,candidate){throw new Error("getResourceACL Method not implemented.")}getAllUserSettings(acRequest,accountId){throw new Error("getAllUserSettings Method not implemented.")}getUserSetting(acRequest,accountId,settingKey){throw new Error("getUserSetting Method not implemented.")}getAgentSetting(acRequest,agentId,settingKey){throw new Error("getAgentSetting Method not implemented.")}}var __defProp$p=Object.defineProperty,__defNormalProp$p=(obj,key,value)=>key in obj?__defProp$p(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$p=(obj,key,value)=>__defNormalProp$p(obj,typeof key!="symbol"?key+"":key,value);class JSONFileAccount extends AccountConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$p(this,"name","JSONFileAccount"),__publicField$p(this,"data",{}),__publicField$p(this,"file"),this.file=_settings.file,this.loadData()}loadData(){try{const fileContent=fs.readFileSync(this.file,"utf-8");this.data=JSON.parse(fileContent)}catch(error){console.error("Error loading JSON account data:",error),this.data={}}}saveData(){try{fs.writeFileSync(this.file,JSON.stringify(this.data,null,2))}catch(error){console.error("Error saving JSON account data:",error)}}async isTeamMember(team,candidate){return this.data[team]?candidate.role===TAccessRole.User?!!this.data[team].users?.[candidate.id]:candidate.role===TAccessRole.Agent?!!this.data[team].agents?.[candidate.id]:!1:!1}async getCandidateTeam(candidate){if(candidate.role===TAccessRole.Team)return candidate.id;for(const[teamId,teamData]of Object.entries(this.data)){const typedTeamData=teamData;if(candidate.role===TAccessRole.User&&typedTeamData.users?.[candidate.id]||candidate.role===TAccessRole.Agent&&typedTeamData.agents?.[candidate.id])return teamId}return DEFAULT_TEAM_ID}async getResourceACL(resourceId,candidate){throw new Error("getResourceACL Method not implemented.")}async getAllTeamSettings(acRequest,teamId){return this.data[teamId]?.settings?Object.entries(this.data[teamId].settings).map(([key,value])=>({key,value})):[]}async getAllUserSettings(acRequest,accountId){for(const teamData of Object.values(this.data)){const typedTeamData=teamData;if(typedTeamData.users?.[accountId]?.settings)return Object.entries(typedTeamData.users[accountId].settings).map(([key,value])=>({key,value}))}return[]}async getTeamSetting(acRequest,teamId,settingKey){return this.data[teamId]?.settings?.[settingKey]||""}async getUserSetting(acRequest,accountId,settingKey){for(const teamData of Object.values(this.data)){const typedTeamData=teamData;if(typedTeamData.users?.[accountId]?.settings?.[settingKey])return typedTeamData.users[accountId].settings[settingKey]}return""}async getAgentSetting(acRequest,agentId,settingKey){for(const teamData of Object.values(this.data)){const typedTeamData=teamData;if(typedTeamData.agents?.[agentId]?.settings?.[settingKey])return typedTeamData.agents[agentId].settings[settingKey]}return""}}class AccountService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Account,"AWSAccount",AWSAccount),ConnectorService.register(TConnectorService.Account,"DummyAccount",DummyAccount),ConnectorService.register(TConnectorService.Account,"JSONFileAccount",JSONFileAccount)}}var __defProp$o=Object.defineProperty,__defNormalProp$o=(obj,key,value)=>key in obj?__defProp$o(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$o=(obj,key,value)=>__defNormalProp$o(obj,key+"",value);const openapiTemplate=JSON.stringify({openapi:"3.0.1",info:{title:"{{model_name}}",description:"{{model_description}}",version:"{{version}}"},servers:[{url:"{{server_url}}"}],paths:{},components:{schemas:{}}}),openapiEndpointTemplate=JSON.stringify({summary:"{{summary}}",operationId:"{{operationId}}","x-openai-isConsequential":!1,requestBody:{required:!0,content:{}},responses:{200:{description:"response",content:{"text/plain":{schema:{type:"string"}}}}}});class AgentDataConnector extends Connector{constructor(){super(...arguments),__publicField$o(this,"name","AgentDataConnector")}async getOpenAPIJSON(source,server_url,version2,aiOnly=!1){if(!source)throw new Error("Agent not found");const apiBasePath=version2&&version2!="latest"?`/v${version2}/api`:"/api",agentData=typeof source=="object"?source:await this.getAgentData(source,version2),name=agentData.name;let description=aiOnly?agentData.data.behavior:agentData.data.shortDescription;description||(description=agentData.data.description);const _version=agentData.data.version||"1.0.0",openAPITpl=TemplateString(openapiTemplate).parse({model_name:escapeString(name),model_description:escapeString(description),server_url,version:_version}).clean().result,openAPIObj=JSON.parse(openAPITpl),components2=agentData.data.components.filter(component=>component.name==="APIEndpoint");for(let component of components2){const ai_exposed=component.data.ai_exposed||typeof component.data.ai_exposed>"u";if(aiOnly&&!ai_exposed)continue;let method=(component.data.method||"post").toLowerCase(),summary=aiOnly?component.data.description||component.data.doc:component.data.doc||component.data.description;const openAPIEntry=JSONContent(TemplateString(openapiEndpointTemplate).parse({summary:summary?.replace(/"/g,'\\"'),operationId:component?.data?.endpoint}).clean().result).tryParse();if(typeof openAPIEntry!="object"){console.warn("Error on openAPIEntry: ",openAPIEntry);continue}if(openAPIObj.paths[apiBasePath+"/"+component.data.endpoint]||(openAPIObj.paths[apiBasePath+"/"+component.data.endpoint]={}),openAPIObj.paths[apiBasePath+"/"+component.data.endpoint][method]=openAPIEntry,component.inputs.length>0)if(method==="get"){delete openAPIEntry.requestBody,openAPIEntry.parameters=[];for(let input of component.inputs){const parameter={name:input.name,in:"query",description:input.description,required:!input.optional,schema:getOpenAPIInputSchema(input.type)},{style,explode}=getOpenAPIParameterStyle(input.type);style&&(parameter.style=style,parameter.explode=explode),openAPIEntry.parameters.push(parameter)}}else{const requiredProps=[],mimetype=!aiOnly&&component.inputs.some(input=>input.type.toLowerCase().trim()==="binary")?"multipart/form-data":"application/json";openAPIEntry.requestBody.content[mimetype]={};for(let input of component.inputs){input.optional||requiredProps.push(input.name),openAPIEntry.requestBody.content[mimetype].schema||(openAPIEntry.requestBody.content[mimetype].schema={type:"object"});const schema=openAPIEntry.requestBody.content[mimetype].schema||{type:"object"};schema.properties||(schema.properties={}),schema.properties[input.name]={...getOpenAPIInputSchema(input.type),format:!aiOnly&&input.type.toLowerCase().trim()==="binary"?"binary":void 0,description:input.description,default:input.defaultVal},schema.required=requiredProps,openAPIEntry.requestBody.content[mimetype].schema||(openAPIEntry.requestBody.content["application/json"].schema=schema)}}else delete openAPIEntry.requestBody}return openAPIObj}}function getOpenAPIInputSchema(input_type){switch(input_type?.toLowerCase()){case"binary":case"string":case"any":return{type:"string"};case"number":case"float":return{type:"number"};case"integer":return{type:"integer"};case"boolean":return{type:"boolean"};case"array":return{type:"array",items:{}};case"object":return{type:"object",additionalProperties:{}};default:return{type:"string"}}}function getOpenAPIParameterStyle(input_type){switch(input_type.toLowerCase()){case"array":return{style:"form",explode:!1};case"object":return{style:"deepObject",explode:!0};default:return{style:"",explode:!1}}}var __defProp$n=Object.defineProperty,__defNormalProp$n=(obj,key,value)=>key in obj?__defProp$n(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$n=(obj,key,value)=>__defNormalProp$n(obj,typeof key!="symbol"?key+"":key,value);class CLIAgentDataConnector extends AgentDataConnector{constructor(settings){super(),__publicField$n(this,"name","CLIAgentDataConnector"),__publicField$n(this,"argv"),this.argv=settings.args||process.argv}getAgentConfig(agentId){return{}}async getAgentData(agentId,version2){const params=ConnectorService.getCLIConnector().get("agent"),__dirname=fs__default.realpathSync(process.cwd()),filePath=path.join(__dirname,params.agent);if(fs__default.existsSync(filePath)){const data=fs__default.readFileSync(filePath,"utf8");return{data:JSON.parse(data),version:version2||"1.0"}}}getAgentIdByDomain(domain){return Promise.resolve("")}async getAgentSettings(agentId,version2){const params=ConnectorService.getCLIConnector().get("settings");let settings;return typeof params.settings=="string"?fs__default.existsSync(params.settings)&&(settings=JSON.parse(fs__default.readFileSync(params.settings,"utf8"))):settings=params.settings,settings}async getAgentEmbodiments(agentId){return[]}async listTeamAgents(teamId,deployedOnly){return console.warn("listTeamAgents is not implemented for CLIAgentDataConnector"),[]}async isDeployed(agentId){return!0}}var __defProp$m=Object.defineProperty,__defNormalProp$m=(obj,key,value)=>key in obj?__defProp$m(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$m=(obj,key,value)=>__defNormalProp$m(obj,typeof key!="symbol"?key+"":key,value);class LocalAgentDataConnector extends AgentDataConnector{constructor(settings){super(),__publicField$m(this,"name","LocalAgentDataConnector"),__publicField$m(this,"devDir"),__publicField$m(this,"prodDir"),__publicField$m(this,"agentsData",{dev:{},prod:{}}),__publicField$m(this,"agentSettings",{dev:{},prod:{}}),this.devDir=settings.devDir,this.prodDir=settings.prodDir}getAgentConfig(agentId){return{}}indexDir(dir){const agents=fs__default.readdirSync(dir),agentsData={},agentSettings={};for(const agent of agents){if(!agent.endsWith(".smyth"))continue;const agentData=fs__default.readFileSync(path.join(dir,agent),"utf8");let jsonData;try{if(jsonData=JSON.parse(agentData),!jsonData.components){console.warn(`File ${agent} is not a valid agent data file, skipping...`);continue}jsonData.id||(console.warn(`Agent data for ${agent} does not contain an id, generating one...`),jsonData.id="tmp-"+uid())}catch(e){console.warn(`Error parsing agent data for ${agent}: ${e.message}`)}jsonData.components&&(agentsData[jsonData.id]=jsonData),jsonData.settings&&(agentSettings[jsonData.id]=jsonData.settings)}return{agentsData,agentSettings}}indexAgentsData(){const{agentsData:devAgentsData,agentSettings:devAgentSettings}=this.indexDir(this.devDir),{agentsData:prodAgentsData,agentSettings:prodAgentSettings}=this.indexDir(this.prodDir);this.agentsData={dev:devAgentsData,prod:prodAgentsData},this.agentSettings={dev:devAgentSettings,prod:prodAgentSettings}}async start(){super.start(),this.started=!1,this.indexAgentsData(),this.started=!0}async getAgentData(agentId,version2){if(!await this.ready())throw new Error("Connector not ready");const data=version2?this.agentsData.prod[agentId]:this.agentsData.dev[agentId];if(data)return{data,version:version2||"1.0"};throw new Error(`Agent with id ${agentId} not found`)}getAgentIdByDomain(domain){return Promise.resolve("")}async getAgentSettings(agentId,version2){if(!await this.ready())throw new Error("Connector not ready");const settings=version2?this.agentSettings.prod[agentId]:this.agentSettings.dev[agentId];if(settings)return settings;throw new Error(`Settings for agent with id ${agentId} not found`)}async getAgentEmbodiments(agentId){return[]}async listTeamAgents(teamId,deployedOnly){return console.warn("listTeamAgents is not implemented for LocalAgentDataConnector"),[]}async isDeployed(agentId){return!!this.agentsData.prod[agentId]}}var __defProp$l=Object.defineProperty,__defNormalProp$l=(obj,key,value)=>key in obj?__defProp$l(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$l=(obj,key,value)=>__defNormalProp$l(obj,key+"",value);class NullAgentData extends AgentDataConnector{constructor(settings){super(),__publicField$l(this,"name","NullAgentData")}getAgentConfig(agentId){return{}}async getAgentData(agentId,version2){return{data:{},version:"1.0"}}getAgentIdByDomain(domain){return Promise.resolve("")}async getAgentSettings(agentId,version2){return{}}async getAgentEmbodiments(agentId){return[]}async listTeamAgents(teamId,deployedOnly){return[]}async isDeployed(agentId){return!0}}class AgentDataService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.AgentData,"AgentData",AgentDataConnector),ConnectorService.register(TConnectorService.AgentData,"CLI",CLIAgentDataConnector),ConnectorService.register(TConnectorService.AgentData,"Local",LocalAgentDataConnector),ConnectorService.register(TConnectorService.AgentData,"NullAgentData",NullAgentData)}}var __defProp$k=Object.defineProperty,__defNormalProp$k=(obj,key,value)=>key in obj?__defProp$k(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$k=(obj,key,value)=>__defNormalProp$k(obj,key+"",value);class VectorDBConnector extends SecureConnector{constructor(){super(...arguments),__publicField$k(this,"USER_METADATA_KEY","user_metadata")}requester(candidate){return{search:async(namespace,query,options)=>await this.search(candidate.readRequest,namespace,query,options),createDatasource:async(namespace,datasource)=>await this.createDatasource(candidate.writeRequest,namespace,datasource),deleteDatasource:async(namespace,datasourceId)=>{await this.deleteDatasource(candidate.writeRequest,namespace,datasourceId)},listDatasources:async namespace=>await this.listDatasources(candidate.readRequest,namespace),getDatasource:async(namespace,datasourceId)=>await this.getDatasource(candidate.readRequest,namespace,datasourceId),createNamespace:async(namespace,metadata)=>{await this.createNamespace(candidate.writeRequest,namespace,metadata)},deleteNamespace:async namespace=>{await this.deleteNamespace(candidate.writeRequest,namespace)},namespaceExists:async namespace=>await this.namespaceExists(candidate.readRequest,namespace)}}constructNsName(candidate,name){const joinedName=name.trim().replace(/\s/g,"_").toLowerCase();return`${candidate.role[0]+"_"+candidate.id}_${joinedName}`}}var __defProp$j=Object.defineProperty,__defNormalProp$j=(obj,key,value)=>key in obj?__defProp$j(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$j=(obj,key,value)=>__defNormalProp$j(obj,typeof key!="symbol"?key+"":key,value);class BaseEmbedding{constructor(fields){__publicField$j(this,"model"),__publicField$j(this,"modelName"),__publicField$j(this,"chunkSize",512),__publicField$j(this,"stripNewLines",!0),__publicField$j(this,"dimensions"),__publicField$j(this,"timeout"),this.model=fields?.model??this.model,this.chunkSize=fields?.params?.chunkSize??this.chunkSize,this.stripNewLines=fields?.params?.stripNewLines??this.stripNewLines,this.timeout=fields?.params?.timeout,this.dimensions=fields?.params?.dimensions}chunkArr(arr,sizePerChunk){return arr.reduce((chunks,elem,index)=>{const chunkIndex=Math.floor(index/sizePerChunk),chunk=chunks[chunkIndex]||[];return chunks[chunkIndex]=chunk.concat([elem]),chunks},[])}processTexts(texts){return this.stripNewLines?texts.map(t=>t.replace(/\n/g," ")):texts}detectSourceType(source){return typeof source=="string"?isUrl(source)?"url":"text":Array.isArray(source)&&source.every(v=>typeof v=="number")?"vector":"unknown"}transformSource(source,sourceType,candidate){switch(sourceType){case"text":{const texts=source.map(s=>s.source);return this.embedTexts(texts,candidate).then(vectors=>source.map((s,i)=>({...s,source:vectors[i],metadata:{...s.metadata,text:texts[i]}})))}case"vector":return source}}get dummyVector(){return Array(this.dimensions-1).fill(0).concat([1])}}var __defProp$i=Object.defineProperty,__defNormalProp$i=(obj,key,value)=>key in obj?__defProp$i(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$i=(obj,key,value)=>__defNormalProp$i(obj,typeof key!="symbol"?key+"":key,value);const createOpenAIError=(statusCode,error)=>new OpenAI.APIError(statusCode,{code:error?.errKey||error?.code,message:error?.message,type:error?.name},error?.message,null),DEFAULT_MODEL="text-embedding-ada-002";class OpenAIEmbeds extends BaseEmbedding{constructor(settings){super({model:settings?.model??DEFAULT_MODEL,...settings}),this.settings=settings,__publicField$i(this,"client"),__publicField$i(this,"clientConfig"),__publicField$i(this,"canSpecifyDimensions",!0),this.clientConfig={dangerouslyAllowBrowser:!0},this.model==="text-embedding-ada-002"&&(this.canSpecifyDimensions=!1)}async embedTexts(texts,candidate){const batches=this.chunkArr(this.processTexts(texts),this.chunkSize),batchRequests=batches.map(batch=>{const params={model:this.model,input:batch};return this.dimensions&&this.canSpecifyDimensions&&(params.dimensions=this.dimensions),this.embed(params,candidate)}),batchResponses=await Promise.all(batchRequests),embeddings=[];for(let i=0;i<batchResponses.length;i+=1){const batch=batches[i],{data:batchResponse}=batchResponses[i];for(let j=0;j<batch.length;j+=1)embeddings.push(batchResponse[j].embedding)}return embeddings}async embedText(text,candidate){const params={model:this.model,input:this.processTexts([text])[0]};this.dimensions&&this.canSpecifyDimensions&&(params.dimensions=this.dimensions);const{data}=await this.embed(params,candidate);return data[0].embedding}async embed(request,candidate){const modelInfo={provider:"OpenAI",modelId:this.model,credentials:this.settings?.credentials},credentials=await getLLMCredentials(candidate,modelInfo);if(!this.client){const params={...this.clientConfig,apiKey:credentials.apiKey,timeout:this.timeout,maxRetries:0};this.client=new OpenAI$1(params)}try{return await this.client.embeddings.create(request)}catch(e){throw createOpenAIError(e.statusCode,e)}}}__publicField$i(OpenAIEmbeds,"models",["text-embedding-ada-002","text-embedding-3-large"]);const supportedProviders={OpenAI:{embedder:OpenAIEmbeds,models:OpenAIEmbeds.models}};class EmbeddingsFactory{static create(provider,config2){return new supportedProviders[provider].embedder(config2)}}var __defProp$h=Object.defineProperty,__getOwnPropDesc$a=Object.getOwnPropertyDescriptor,__defNormalProp$h=(obj,key,value)=>key in obj?__defProp$h(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$a=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$a(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$h(target,key,result),result},__publicField$h=(obj,key,value)=>__defNormalProp$h(obj,typeof key!="symbol"?key+"":key,value);const console$b=Logger("Pinecone VectorDB");class PineconeVectorDB extends VectorDBConnector{constructor(_settings){if(super(_settings),this._settings=_settings,__publicField$h(this,"name","PineconeVectorDB"),__publicField$h(this,"id","pinecone"),__publicField$h(this,"client"),__publicField$h(this,"indexName"),__publicField$h(this,"cache"),__publicField$h(this,"accountConnector"),__publicField$h(this,"nkvConnector"),__publicField$h(this,"embedder"),!_settings.apiKey){console$b.warn("Missing Pinecone API key : returning empty Pinecone connector");return}if(!_settings.indexName){console$b.warn("Missing Pinecone index name : returning empty Pinecone connector");return}this.client=new Pinecone({apiKey:_settings.apiKey}),console$b.info("Pinecone client initialized"),console$b.info("Pinecone index name:",_settings.indexName),this.indexName=_settings.indexName,this.accountConnector=ConnectorService.getAccountConnector(),this.cache=ConnectorService.getCacheConnector(),this.nkvConnector=ConnectorService.getNKVConnector(),_settings.embeddings.params||(_settings.embeddings.params={dimensions:1024}),_settings.embeddings.params?.dimensions||(_settings.embeddings.params.dimensions=1024),this.embedder=EmbeddingsFactory.create(_settings.embeddings.provider,_settings.embeddings)}async getResourceACL(resourceId,candidate){const preparedNs=this.constructNsName(candidate,resourceId),acl=await this.getACL(AccessCandidate.clone(candidate),preparedNs);return acl?ACL.from(acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async createNamespace(acRequest,namespace,metadata){const preparedNs=this.constructNsName(acRequest.candidate,namespace),acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner),nsData={acl:acl.serializedACL,displayName:namespace,...metadata};return await this.client.Index(this.indexName).namespace(preparedNs).upsert([{id:`_reserved_${preparedNs}`,values:this.embedder.dummyVector,metadata:{isSkeletonVector:!0,...nsData}}]),await this.setACL(acRequest,preparedNs,acl.ACL),new Promise(resolve=>resolve())}async namespaceExists(acRequest,namespace){const stats=await this.client.Index(this.indexName).describeIndexStats();return Object.keys(stats.namespaces).includes(this.constructNsName(acRequest.candidate,namespace))}async deleteNamespace(acRequest,namespace){this.constructNsName(acRequest.candidate,namespace),await this.client.Index(this.indexName).namespace(this.constructNsName(acRequest.candidate,namespace)).deleteAll().catch(e=>{if(e?.name=="PineconeNotFoundError"){console$b.warn(`Namespace ${namespace} does not exist and was requested to be deleted`);return}throw e}),await this.deleteACL(AccessCandidate.clone(acRequest.candidate),namespace)}async search(acRequest,namespace,query,options={}){const pineconeIndex=this.client.Index(this.indexName).namespace(this.constructNsName(acRequest.candidate,namespace));let _vector=query;typeof query=="string"&&(_vector=await this.embedder.embedText(query,acRequest.candidate));const topK=(options.topK||10)+1,results=await pineconeIndex.query({topK,vector:_vector,includeMetadata:!0,includeValues:!0});let matches=[];for(const match of results.matches)match.metadata?.isSkeletonVector||(match.metadata?.[this.USER_METADATA_KEY]&&(match.metadata[this.USER_METADATA_KEY]=JSONContentHelper.create(match.metadata[this.USER_METADATA_KEY].toString()).tryParse()),matches.push({id:match.id,values:match.values,text:match.metadata?.text,metadata:match.metadata?.[this.USER_METADATA_KEY],score:match.score}));return matches.slice(0,options.topK)}async insert(acRequest,namespace,sourceWrapper){if(sourceWrapper=Array.isArray(sourceWrapper)?sourceWrapper:[sourceWrapper],sourceWrapper.some(s=>this.embedder.detectSourceType(s.source)!==this.embedder.detectSourceType(sourceWrapper[0].source)))throw new Error("All sources must be of the same type");const sourceType=this.embedder.detectSourceType(sourceWrapper[0].source);if(sourceType==="unknown"||sourceType==="url")throw new Error("Invalid source type");const preparedSource=(await this.embedder.transformSource(sourceWrapper,sourceType,acRequest.candidate)).map(s=>({id:s.id,values:s.source,metadata:s.metadata}));await this.client.Index(this.indexName).namespace(this.constructNsName(acRequest.candidate,namespace)).upsert(preparedSource);const accessCandidate=acRequest.candidate;if(!await this.requester(AccessCandidate.clone(accessCandidate)).namespaceExists(namespace)){let acl=new ACL().addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL;await this.setACL(acRequest,namespace,acl)}return preparedSource.map(s=>s.id)}async delete(acRequest,namespace,deleteTarget){if(typeof deleteTarget!="object"){const _ids=Array.isArray(deleteTarget)?deleteTarget:[deleteTarget];await this.client.Index(this.indexName).namespace(this.constructNsName(acRequest.candidate,namespace)).deleteMany(_ids)}}async createDatasource(acRequest,namespace,datasource){const acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner),dsId=datasource.id||crypto$1.randomUUID(),formattedNs=this.constructNsName(acRequest.candidate,namespace),chunkedText=chunkText(datasource.text,{chunkSize:datasource.chunkSize,chunkOverlap:datasource.chunkOverlap}),label=datasource.label||"Untitled",ids=Array.from({length:chunkedText.length},(_,i)=>`${dsId}_${crypto$1.randomUUID()}`),source=chunkedText.map((doc,i)=>({id:ids[i],source:doc,metadata:{acl:acl.serializedACL,namespaceId:formattedNs,datasourceId:dsId,datasourceLabel:label,user_metadata:datasource.metadata?jsonrepair(JSON.stringify(datasource.metadata)):void 0}})),_vIds=await this.insert(acRequest,namespace,source),dsData={namespaceId:formattedNs,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,name:datasource.label||"Untitled",metadata:datasource.metadata?jsonrepair(JSON.stringify(datasource.metadata)):void 0,text:datasource.text,vectorIds:_vIds,id:dsId};return await this.nkvConnector.requester(acRequest.candidate).set(`vectorDB:${this.id}:namespaces:${formattedNs}:datasources`,dsId,JSON.stringify(dsData)),dsData}async deleteDatasource(acRequest,namespace,datasourceId){const formattedNs=this.constructNsName(acRequest.candidate,namespace);let ds=JSONContentHelper.create((await this.nkvConnector.requester(acRequest.candidate).get(`vectorDB:${this.id}:namespaces:${formattedNs}:datasources`,datasourceId))?.toString()).tryParse();if(!ds||typeof ds!="object")throw new Error(`Data source not found with id: ${datasourceId}`);await this.delete(acRequest,namespace,ds.vectorIds||[]),await this.nkvConnector.requester(acRequest.candidate).delete(`vectorDB:${this.id}:namespaces:${formattedNs}:datasources`,datasourceId)}async listDatasources(acRequest,namespace){const formattedNs=this.constructNsName(acRequest.candidate,namespace);return(await this.nkvConnector.requester(acRequest.candidate).list(`vectorDB:${this.id}:namespaces:${formattedNs}:datasources`)).map(ds=>JSONContentHelper.create(ds.data?.toString()).tryParse())}async getDatasource(acRequest,namespace,datasourceId){const formattedNs=this.constructNsName(acRequest.candidate,namespace);return JSONContentHelper.create((await this.nkvConnector.requester(acRequest.candidate).get(`vectorDB:${this.id}:namespaces:${formattedNs}:datasources`,datasourceId))?.toString()).tryParse()}async setACL(acRequest,preparedNs,acl){await this.cache.requester(AccessCandidate.clone(acRequest.candidate)).set(`vectorDB:pinecone:namespace:${preparedNs}:acl`,JSON.stringify(acl))}async getACL(ac,preparedNs){let aclRes=await this.cache.requester(ac).get(`vectorDB:pinecone:namespace:${preparedNs}:acl`);return JSONContentHelper.create(aclRes?.toString?.()).tryParse()}async deleteACL(ac,preparedNs){this.cache.requester(AccessCandidate.clone(ac)).delete(`vectorDB:pinecone:namespace:${preparedNs}:acl`)}constructNsName(candidate,name){const joinedName=name.trim().replace(/\s/g,"_").toLowerCase();let prefix=candidate.id;return candidate.role!==TAccessRole.Team&&(prefix=candidate.role[0]+"_"+candidate.id),`${prefix}_${joinedName}`}}__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"createNamespace"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"namespaceExists"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"deleteNamespace"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"search"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"insert"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"delete"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"createDatasource"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"deleteDatasource"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"listDatasources"),__decorateClass$a([SecureConnector.AccessControl],PineconeVectorDB.prototype,"getDatasource");var __defProp$g=Object.defineProperty,__getOwnPropDesc$9=Object.getOwnPropertyDescriptor,__defNormalProp$g=(obj,key,value)=>key in obj?__defProp$g(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$9=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$9(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$g(target,key,result),result},__publicField$g=(obj,key,value)=>__defNormalProp$g(obj,typeof key!="symbol"?key+"":key,value);const console$a=Logger("Milvus");class MilvusVectorDB extends VectorDBConnector{constructor(_settings){if(super(_settings),this._settings=_settings,__publicField$g(this,"name","MilvusVectorDB"),__publicField$g(this,"id","milvus"),__publicField$g(this,"client"),__publicField$g(this,"cache"),__publicField$g(this,"accountConnector"),__publicField$g(this,"embedder"),__publicField$g(this,"SCHEMA_DEFINITION"),__publicField$g(this,"INDEX_PARAMS"),!_settings.credentials)return;const clientConfig={address:_settings.credentials?.address,token:"token"in _settings.credentials?_settings.credentials.token:void 0,user:"user"in _settings.credentials?_settings.credentials.user:void 0,password:"password"in _settings.credentials?_settings.credentials.password:void 0};console$a.log("clientConfig",clientConfig),this.client=new MilvusClient(clientConfig),console$a.info("Milvus client initialized"),this.accountConnector=ConnectorService.getAccountConnector(),this.cache=ConnectorService.getCacheConnector(),_settings.embeddings.params||(_settings.embeddings.params={dimensions:1024}),_settings.embeddings.params?.dimensions||(_settings.embeddings.params.dimensions=1024),this.embedder=EmbeddingsFactory.create(_settings.embeddings.provider,_settings.embeddings),this.SCHEMA_DEFINITION=[{name:"id",data_type:DataType.VarChar,is_primary_key:!0,max_length:2048},{name:"text",data_type:DataType.VarChar,max_length:65535},{name:this.USER_METADATA_KEY,data_type:DataType.VarChar,max_length:65535},{name:"namespaceId",data_type:DataType.VarChar,max_length:2048},{name:"datasourceId",data_type:DataType.VarChar,max_length:2048},{name:"datasourceLabel",data_type:DataType.VarChar,max_length:2048},{name:"vector",data_type:DataType.FloatVector,dim:this.embedder.dimensions},{name:"acl",data_type:DataType.VarChar,max_length:2048}],this.INDEX_PARAMS={index_type:"AUTOINDEX",metric_type:"COSINE",field_name:"vector"}}async createNamespace(acRequest,namespace,metadata){const preparedNs=this.constructNsName(acRequest.candidate,namespace);await this.client.createCollection({collection_name:preparedNs,schema:this.SCHEMA_DEFINITION,index_params:this.INDEX_PARAMS});const acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL;return await this.setACL(acRequest,preparedNs,acl),new Promise(resolve=>resolve())}async namespaceExists(acRequest,namespace){const res=await this.client.hasCollection({collection_name:this.constructNsName(acRequest.candidate,namespace)});if(res.status.error_code!==ErrorCode.SUCCESS)throw new Error(`Error checking collection: ${res}`);return!!res.value}async deleteNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),res=await this.client.dropCollection({collection_name:preparedNs});if(res.error_code!==ErrorCode.SUCCESS)throw new Error(`Error dropping collection: ${res}`);await this.deleteACL(AccessCandidate.clone(acRequest.candidate),namespace)}async search(acRequest,namespace,query,options={}){const preparedNs=this.constructNsName(acRequest.candidate,namespace);let _vector=query;return typeof query=="string"&&(_vector=await this.embedder.embedText(query,acRequest.candidate)),(await this.client.search({vector:_vector,collection_name:preparedNs,output_fields:["id","text",this.USER_METADATA_KEY,"namespaceId","datasourceId","datasourceLabel","vector"],limit:options.topK||10})).results.map(match=>{let _record=match;return match?.[this.USER_METADATA_KEY]&&(_record[this.USER_METADATA_KEY]=JSONContentHelper.create(match[this.USER_METADATA_KEY].toString()).tryParse()),{id:_record.id,values:_record.vector,text:_record.text,metadata:_record[this.USER_METADATA_KEY]??{},score:_record.score}})}async insert(acRequest,namespace,sourceWrapper){sourceWrapper=Array.isArray(sourceWrapper)?sourceWrapper:[sourceWrapper];const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(sourceWrapper.some(s=>this.embedder.detectSourceType(s.source)!==this.embedder.detectSourceType(sourceWrapper[0].source)))throw new Error("All sources must be of the same type");const sourceType=this.embedder.detectSourceType(sourceWrapper[0].source);if(sourceType==="unknown"||sourceType==="url")throw new Error("Unsupported source type");const preparedSource=(await this.embedder.transformSource(sourceWrapper,sourceType,acRequest.candidate)).map(s=>({id:s.id,text:s.metadata?.text,user_metadata:s.metadata?.[this.USER_METADATA_KEY],namespaceId:preparedNs,datasourceId:s.metadata?.datasourceId,datasourceLabel:s.metadata?.datasourceLabel,vector:s.source,acl:s.metadata?.acl})),res=await this.client.insert({collection_name:preparedNs,data:preparedSource});if(res.status.error_code!==ErrorCode.SUCCESS)throw console$a.error("Error inserting data: ",res),new Error(`Error inserting data: ${res?.status?.error_code}`);return preparedSource.map(s=>s.id)}async delete(acRequest,namespace,deleteTarget){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(typeof deleteTarget=="object"){if(!["datasourceId"].some(field=>field in deleteTarget))throw new Error(`Unsupported field in delete target: ${Object.keys(deleteTarget).join(", ")}`);const res=await this.client.deleteEntities({collection_name:preparedNs,expr:`datasourceId == "${deleteTarget.datasourceId}"`});if(res.status.error_code!==ErrorCode.SUCCESS)throw new Error(`Error deleting data: ${res}`)}else{const _ids=Array.isArray(deleteTarget)?deleteTarget:[deleteTarget],res=await this.client.delete({collection_name:preparedNs,ids:_ids});if(res.status.error_code!==ErrorCode.SUCCESS)throw new Error(`Error deleting data: ${res}`)}}async createDatasource(acRequest,namespace,datasource){await this.accountConnector.getCandidateTeam(acRequest.candidate);const acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner),dsId=datasource.id||crypto$1.randomUUID(),formattedNs=this.constructNsName(acRequest.candidate,namespace),chunkedText=chunkText(datasource.text,{chunkSize:datasource.chunkSize,chunkOverlap:datasource.chunkOverlap}),ids=Array.from({length:chunkedText.length},(_,i)=>crypto$1.randomUUID()),label=datasource.label||"Untitled",source=chunkedText.map((doc,i)=>({id:ids[i],source:doc,metadata:{acl:acl.serializedACL,namespaceId:formattedNs,datasourceId:dsId,datasourceLabel:label,user_metadata:datasource.metadata?jsonrepair(JSON.stringify(datasource.metadata)):JSON.stringify({})}})),_vIds=await this.insert(acRequest,namespace,source);return{namespaceId:formattedNs,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,name:label,metadata:datasource.metadata?jsonrepair(JSON.stringify(datasource.metadata)):void 0,text:datasource.text,vectorIds:_vIds,id:dsId}}async deleteDatasource(acRequest,namespace,datasourceId){this.constructNsName(acRequest.candidate,namespace),await this.delete(acRequest,namespace,{datasourceId})}async listDatasources(acRequest,namespace){const formattedNs=this.constructNsName(acRequest.candidate,namespace),iterator=await this.client.queryIterator({collection_name:formattedNs,batchSize:1e3,output_fields:["id","text",this.USER_METADATA_KEY,"namespaceId","datasourceId","datasourceLabel","vector"]}),datasourceMap=new Map;try{for await(const batch of iterator)for(const record of batch){const datasourceId=record.datasourceId;datasourceMap.has(datasourceId)||datasourceMap.set(datasourceId,{namespaceId:formattedNs,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,text:record.text,name:record.datasourceLabel,metadata:record[this.USER_METADATA_KEY]?JSONContentHelper.create(record[this.USER_METADATA_KEY].toString()).tryParse():void 0,vectorIds:[],id:datasourceId}),datasourceMap.get(datasourceId).vectorIds.push(record.id)}}finally{}return Array.from(datasourceMap.values())}async getDatasource(acRequest,namespace,datasourceId){const formattedNs=this.constructNsName(acRequest.candidate,namespace),res=await this.client.query({collection_name:formattedNs,expr:`datasourceId == "${datasourceId}"`,output_fields:["id","text",this.USER_METADATA_KEY,"namespaceId","datasourceId","datasourceLabel","vector"]});if(res.data.length===0)return;const referenceRecord=res.data[0],allIds=res.data.map(d=>d.id);return{namespaceId:formattedNs,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,text:referenceRecord.text,name:referenceRecord.datasourceLabel,metadata:referenceRecord[this.USER_METADATA_KEY]?JSONContentHelper.create(referenceRecord[this.USER_METADATA_KEY].toString()).tryParse():void 0,vectorIds:allIds,id:datasourceId}}async setACL(acRequest,preparedNs,acl){await this.cache.requester(AccessCandidate.clone(acRequest.candidate)).set(`vectorDB:pinecone:namespace:${preparedNs}:acl`,JSON.stringify(acl))}async getACL(ac,preparedNs){let aclRes=await this.cache.requester(ac).get(`vectorDB:pinecone:namespace:${preparedNs}:acl`);return JSONContentHelper.create(aclRes?.toString?.()).tryParse()}async getResourceACL(resourceId,candidate){const preparedNs=this.constructNsName(candidate,resourceId),acl=await this.getACL(AccessCandidate.clone(candidate),preparedNs);return acl?ACL.from(acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async deleteACL(ac,preparedNs){this.cache.requester(AccessCandidate.clone(ac)).delete(`vectorDB:pinecone:namespace:${preparedNs}:acl`)}constructNsName(candidate,name){const joinedName=name.trim().replace(/\s/g,"_").toLowerCase();let prefix=candidate.role[0]+"_"+candidate.id;return`${"c"+crypto$1.createHash("sha256").update(prefix).digest("hex").slice(0,8)}_${joinedName}`}}__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"createNamespace"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"namespaceExists"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"deleteNamespace"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"search"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"insert"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"delete"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"createDatasource"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"deleteDatasource"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"listDatasources"),__decorateClass$9([SecureConnector.AccessControl],MilvusVectorDB.prototype,"getDatasource");var __defProp$f=Object.defineProperty,__getOwnPropDesc$8=Object.getOwnPropertyDescriptor,__defNormalProp$f=(obj,key,value)=>key in obj?__defProp$f(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$8=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$8(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$f(target,key,result),result},__publicField$f=(obj,key,value)=>__defNormalProp$f(obj,typeof key!="symbol"?key+"":key,value);Logger("RAM VectorDB");class RAMVectorDB extends VectorDBConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$f(this,"name","RAMVec"),__publicField$f(this,"id","ram"),__publicField$f(this,"accountConnector"),__publicField$f(this,"vectors",{}),__publicField$f(this,"namespaces",{}),__publicField$f(this,"datasources",{}),__publicField$f(this,"acls",{}),__publicField$f(this,"embedder"),this.accountConnector=ConnectorService.getAccountConnector(),_settings.embeddings||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",params:{dimensions:1024}}),_settings.embeddings.params?.dimensions||(_settings.embeddings.params.dimensions=1024),this.embedder=EmbeddingsFactory.create(_settings.embeddings.provider,_settings.embeddings)}async getResourceACL(resourceId,candidate){const preparedNs=this.constructNsName(candidate,resourceId),acl=this.acls[preparedNs];return acl?ACL.from(acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async createNamespace(acRequest,namespace,metadata){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(!this.namespaces[preparedNs]){const nsData={namespace:preparedNs,displayName:namespace,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,metadata:{...metadata,storageType:"RAM"}};this.namespaces[preparedNs]=nsData,this.vectors[preparedNs]=[],this.datasources[preparedNs]={}}const acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL;return this.acls[preparedNs]=acl,new Promise(resolve=>resolve())}async namespaceExists(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace);return!!this.namespaces[preparedNs]}async getNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),nsData=this.namespaces[preparedNs];if(!nsData)throw new Error(`Namespace ${namespace} not found`);return nsData}async listNamespaces(acRequest){return Object.values(this.namespaces).filter(ns=>ns.candidateId===acRequest.candidate.id)}async deleteNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace);delete this.vectors[preparedNs],delete this.namespaces[preparedNs],delete this.datasources[preparedNs],delete this.acls[preparedNs]}async search(acRequest,namespace,query,options={}){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(!this.namespaces[preparedNs])throw new Error("Namespace does not exist");let queryVector=query;typeof query=="string"&&(queryVector=await this.embedder.embedText(query,acRequest.candidate));const namespaceData=this.vectors[preparedNs]||[],results=[];for(const vector of namespaceData){const similarity=this.cosineSimilarity(queryVector,vector.values);results.push({id:vector.id,score:similarity,values:vector.values,metadata:options.includeMetadata?vector.metadata:void 0,text:vector.metadata?.text})}const topK=options.topK||10;return results.sort((a,b)=>b.score-a.score).slice(0,topK)}async insert(acRequest,namespace,sourceWrapper){const preparedNs=this.constructNsName(acRequest.candidate,namespace),sources=Array.isArray(sourceWrapper)?sourceWrapper:[sourceWrapper],insertedIds=[];this.vectors[preparedNs]||(this.vectors[preparedNs]=[]);for(const source of sources){let vector=[];typeof source.source=="string"?vector=await this.embedder.embedText(source.source,acRequest.candidate):vector=source.source;const vectorData={id:source.id,values:vector,datasource:source.metadata?.datasourceId||"unknown",metadata:source.metadata},existingIndex=this.vectors[preparedNs].findIndex(v=>v.id===source.id);existingIndex>=0?this.vectors[preparedNs][existingIndex]=vectorData:this.vectors[preparedNs].push(vectorData),insertedIds.push(source.id)}return insertedIds}async delete(acRequest,namespace,id){const preparedNs=this.constructNsName(acRequest.candidate,namespace),ids=Array.isArray(id)?id:[id];this.vectors[preparedNs]&&(this.vectors[preparedNs]=this.vectors[preparedNs].filter(vector=>!ids.includes(vector.id)))}async createDatasource(acRequest,namespace,datasource){const preparedNs=this.constructNsName(acRequest.candidate,namespace),datasourceId=datasource.id||crypto$1.randomUUID();this.namespaces[preparedNs]||await this.createNamespace(acRequest,namespace);const vectorIds=[],chunkSize=datasource.chunkSize||1e3,chunkOverlap=datasource.chunkOverlap||200,chunks=this.splitTextIntoChunks(datasource.text,chunkSize,chunkOverlap);this.vectors[preparedNs]||(this.vectors[preparedNs]=[]);for(let i=0;i<chunks.length;i++){const chunkId=`${datasourceId}_chunk_${i}`,vector=await this.embedder.embedText(chunks[i],acRequest.candidate),vectorData={id:chunkId,values:vector,datasource:datasourceId,metadata:{...datasource.metadata,text:chunks[i],chunkIndex:i,totalChunks:chunks.length}};this.vectors[preparedNs].push(vectorData),vectorIds.push(chunkId)}const storageDataSource={namespaceId:preparedNs,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,name:datasource.label||`Datasource ${datasourceId}`,metadata:JSON.stringify(datasource.metadata||{}),text:datasource.text,vectorIds,id:datasourceId};return this.datasources[preparedNs]||(this.datasources[preparedNs]={}),this.datasources[preparedNs][datasourceId]?this.datasources[preparedNs][datasourceId].vectorIds.push(...vectorIds):this.datasources[preparedNs][datasourceId]=storageDataSource,storageDataSource}async deleteDatasource(acRequest,namespace,datasourceId){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(!this.namespaces[preparedNs])throw new Error("Namespace does not exist");this.datasources[preparedNs]?.[datasourceId]&&this.vectors[preparedNs]&&(this.vectors[preparedNs]=this.vectors[preparedNs].filter(vector=>vector.datasource!==datasourceId)),this.datasources[preparedNs]&&delete this.datasources[preparedNs][datasourceId]}async listDatasources(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),namespaceDatasources=this.datasources[preparedNs]||{};return Object.values(namespaceDatasources)}async getDatasource(acRequest,namespace,datasourceId){const preparedNs=this.constructNsName(acRequest.candidate,namespace),datasource=this.datasources[preparedNs]?.[datasourceId];if(!datasource)throw new Error(`Datasource ${datasourceId} not found`);return datasource}cosineSimilarity(vecA,vecB){if(vecA.length!==vecB.length)throw new Error("Vectors must have the same length");let dotProduct=0,normA=0,normB=0;for(let i=0;i<vecA.length;i++)dotProduct+=vecA[i]*vecB[i],normA+=vecA[i]*vecA[i],normB+=vecB[i]*vecB[i];return normA=Math.sqrt(normA),normB=Math.sqrt(normB),normA===0||normB===0?0:dotProduct/(normA*normB)}splitTextIntoChunks(text,chunkSize,overlap){const chunks=[];let start=0;for(;start<text.length;){const end=Math.min(start+chunkSize,text.length);if(chunks.push(text.slice(start,end)),end===text.length)break;start=end-overlap}return chunks}}__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"createNamespace"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"namespaceExists"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"getNamespace"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"listNamespaces"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"deleteNamespace"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"search"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"insert"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"delete"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"createDatasource"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"deleteDatasource"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"listDatasources"),__decorateClass$8([SecureConnector.AccessControl],RAMVectorDB.prototype,"getDatasource");class VectorDBService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.VectorDB,"Pinecone",PineconeVectorDB),ConnectorService.register(TConnectorService.VectorDB,"RAMVec",RAMVectorDB),ConnectorService.register(TConnectorService.VectorDB,"Milvus",MilvusVectorDB)}}var __defProp$e=Object.defineProperty,__defNormalProp$e=(obj,key,value)=>key in obj?__defProp$e(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$e=(obj,key,value)=>__defNormalProp$e(obj,typeof key!="symbol"?key+"":key,value);class CLIConnector extends Connector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$e(this,"name","CLI"),__publicField$e(this,"params"),this.params=this.parse(process.argv)}parse(argv,args){let _keys=args;_keys&&!Array.isArray(_keys)&&(_keys=[_keys]);const argsList=_keys||getMainArgs(argv);return parseCLIArgs(argsList,argv)}get(args){let _keys=args;Array.isArray(_keys)||(_keys=[_keys]);const result={};return _keys.forEach(key=>{this.params[key]&&(result[key]=this.params[key])}),result}}class CLIService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.CLI,"CLI",CLIConnector)}}class NKVConnector extends SecureConnector{requester(candidate){return{get:async(namespace,key)=>this.get(candidate.readRequest,namespace,key),set:async(namespace,key,value)=>this.set(candidate.writeRequest,namespace,key,value),delete:async(namespace,key)=>this.delete(candidate.writeRequest,namespace,key),exists:async(namespace,key)=>this.exists(candidate.readRequest,namespace,key),deleteAll:async namespace=>this.deleteAll(candidate.writeRequest,namespace),list:async namespace=>this.list(candidate.readRequest,namespace)}}}var __defProp$d=Object.defineProperty,__getOwnPropDesc$7=Object.getOwnPropertyDescriptor,__defNormalProp$d=(obj,key,value)=>key in obj?__defProp$d(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$7=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$7(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$d(target,key,result),result},__publicField$d=(obj,key,value)=>__defNormalProp$d(obj,typeof key!="symbol"?key+"":key,value);const _NKVRedis=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$d(this,"name","Redis"),__publicField$d(this,"redisCacheConnector"),__publicField$d(this,"accountConnector"),this.redisCacheConnector=ConnectorService.getCacheConnector("Redis"),this.accountConnector=ConnectorService.getAccountConnector()}key(...parts){return parts.join(":")}mdKey(...parts){return parts.join(":")}async get(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate);return await this.redisCacheConnector.requester(AccessCandidate.team(teamId)).get(this.key(`team_${teamId}`,namespace,key))}async set(acRequest,namespace,key,value){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),setKey=this.key(`team_${teamId}`,namespace,key);await this.redisCacheConnector.requester(AccessCandidate.team(teamId)).set(setKey,value),!await this.redisCacheConnector.requester(AccessCandidate.team(teamId)).exists(namespace)&&await this.redisCacheConnector.requester(AccessCandidate.team(teamId)).set(this.key(`team_${teamId}`,namespace),"",void 0,{ns:!0})}async delete(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate);await this.redisCacheConnector.requester(AccessCandidate.team(teamId)).delete(this.key(`team_${teamId}`,namespace,key))}async exists(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate);return await this.redisCacheConnector.requester(AccessCandidate.team(teamId)).exists(this.key(`team_${teamId}`,namespace,key))}async list(acRequest,namespace){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate);let keys=await this.fetchKeysByPrefix(this.key(this.redisCacheConnector.prefix,`team_${teamId}`,namespace));if(keys=keys.filter(key=>key!==this.key(this.redisCacheConnector.prefix,`team_${teamId}`,namespace)),keys.length<=0)return[];const pipeline=this.redisCacheConnector.client.pipeline();keys.forEach(key=>{pipeline.get(key)});const results=await pipeline.exec();return keys.map((key,index)=>({key:key.replace(`${this.key(this.redisCacheConnector.prefix,`team_${teamId}`,namespace)}:`,""),data:results[index][1]}))}async deleteAll(acRequest,namespace){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate);let keys=await this.fetchKeysByPrefix(this.key(this.redisCacheConnector.prefix,`team_${teamId}`,namespace));keys=keys.filter(key=>![this.key(this.redisCacheConnector.prefix,`team_${teamId}`,namespace)].includes(key)),await this.redisCacheConnector.client.del(keys)}async getResourceACL(resourceId,candidate){return this.redisCacheConnector.getResourceACL(resourceId,candidate)}async fetchKeysByPrefix(prefix){let cursor="0";const keys=[];do{const result=await this.redisCacheConnector.client.scan(cursor,"MATCH",`${prefix}*`,"COUNT",1e4);cursor=result[0],keys.push(...result[1])}while(cursor!=="0");return keys}static NamespaceAccessControl(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let[acRequest,namespace,key]=args;const isNamespaceSearch=key===void 0,teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),resourceId=isNamespaceSearch?namespace:`${namespace}:${key}`,finalKey=this.key(this.redisCacheConnector.prefix,`team_${teamId}`,resourceId);if((await this.getAccessTicket(finalKey,acRequest)).access!==TAccessResult.Granted)throw new ACLAccessDeniedError("Access Denied");return originalMethod.apply(this,args)},descriptor}static Validate(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let[acRequest,namespace,key]=args;const validationResult=Joi.object().keys({namespace:Joi.string().min(1).required(),key:Joi.string().min(1).required()}).validate({namespace,key});if(validationResult.error)throw new Error(`Validation Error: ${validationResult.error.message}`);return originalMethod.apply(this,args)},descriptor}};__decorateClass$7([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"get"),__decorateClass$7([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"set"),__decorateClass$7([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"delete"),__decorateClass$7([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"exists"),__decorateClass$7([_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"list"),__decorateClass$7([_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"deleteAll");let NKVRedis=_NKVRedis;var __defProp$c=Object.defineProperty,__getOwnPropDesc$6=Object.getOwnPropertyDescriptor,__defNormalProp$c=(obj,key,value)=>key in obj?__defProp$c(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$6=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$6(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$c(target,key,result),result},__publicField$c=(obj,key,value)=>__defNormalProp$c(obj,typeof key!="symbol"?key+"":key,value);const _NKVRAM=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$c(this,"name","NKVRAM"),__publicField$c(this,"storage",new Map),__publicField$c(this,"namespaces",new Set),__publicField$c(this,"accountConnector"),__publicField$c(this,"cacheConnector"),this.accountConnector=ConnectorService.getAccountConnector(),this.cacheConnector=ConnectorService.getCacheConnector("RAM")}key(...parts){return parts.join(":")}mdKey(...parts){return parts.join(":")}async get(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),storageKey=this.key(`team_${teamId}`,namespace,key);return this.storage.get(storageKey)||null}async set(acRequest,namespace,key,value){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),storageKey=this.key(`team_${teamId}`,namespace,key);this.storage.set(storageKey,value);const nsKey=this.key(`team_${teamId}`,namespace);this.namespaces.has(nsKey)||(this.namespaces.add(nsKey),this.storage.set(nsKey,""))}async delete(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),storageKey=this.key(`team_${teamId}`,namespace,key);this.storage.delete(storageKey)}async exists(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),storageKey=this.key(`team_${teamId}`,namespace,key);return this.storage.has(storageKey)}async list(acRequest,namespace){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),prefix=this.key(`team_${teamId}`,namespace),results=[];for(const[storageKey,value]of this.storage.entries())if(storageKey.startsWith(prefix+":")){const actualKey=storageKey.substring(prefix.length+1);results.push({key:actualKey,data:value})}return results}async deleteAll(acRequest,namespace){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),prefix=this.key(`team_${teamId}`,namespace),keysToDelete=[];for(const storageKey of this.storage.keys())storageKey.startsWith(prefix+":")&&keysToDelete.push(storageKey);for(const key of keysToDelete)this.storage.delete(key)}async getResourceACL(resourceId,candidate){return this.cacheConnector.getResourceACL(resourceId,candidate)}getKeysByPrefix(prefix){const keys=[];for(const key of this.storage.keys())key.startsWith(prefix)&&keys.push(key);return keys}clearAll(){this.storage.clear(),this.namespaces.clear()}getStats(){return{totalKeys:this.storage.size,totalNamespaces:this.namespaces.size}}static NamespaceAccessControl(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let[acRequest,namespace,key]=args;const isNamespaceSearch=key===void 0,teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),resourceId=isNamespaceSearch?namespace:`${namespace}:${key}`,finalKey=this.key(`team_${teamId}`,resourceId);if((await this.getAccessTicket(finalKey,acRequest)).access!==TAccessResult.Granted)throw new ACLAccessDeniedError("Access Denied");return originalMethod.apply(this,args)},descriptor}static Validate(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let[acRequest,namespace,key]=args;const validationResult=Joi.object().keys({namespace:Joi.string().min(1).required(),key:Joi.string().min(1).required()}).validate({namespace,key});if(validationResult.error)throw new Error(`Validation Error: ${validationResult.error.message}`);return originalMethod.apply(this,args)},descriptor}};__decorateClass$6([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"get"),__decorateClass$6([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"set"),__decorateClass$6([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"delete"),__decorateClass$6([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"exists"),__decorateClass$6([_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"list"),__decorateClass$6([_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"deleteAll");let NKVRAM=_NKVRAM;var __defProp$b=Object.defineProperty,__getOwnPropDesc$5=Object.getOwnPropertyDescriptor,__defNormalProp$b=(obj,key,value)=>key in obj?__defProp$b(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$5=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$5(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$b(target,key,result),result},__publicField$b=(obj,key,value)=>__defNormalProp$b(obj,typeof key!="symbol"?key+"":key,value);const console$9=Logger("NKVLocalStorage"),_NKVLocalStorage=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$b(this,"name","NKVLocalStorage"),__publicField$b(this,"folder"),__publicField$b(this,"accountConnector"),__publicField$b(this,"cacheConnector"),__publicField$b(this,"isInitialized",!1),this.accountConnector=ConnectorService.getAccountConnector(),this.cacheConnector=ConnectorService.getCacheConnector("RAM"),this.folder=this.findStorageFolder(_settings?.folder),this.initialize()}findStorageFolder(folder){let _storageFolder=folder;return _storageFolder&&fs__default.existsSync(_storageFolder)?_storageFolder:(_storageFolder=findSmythPath("nkv"),fs__default.existsSync(_storageFolder)?(console$9.warn("Using alternative storage folder found in : ",_storageFolder),_storageFolder):(console$9.warn("!!! All attempts to find an existing storage folder failed !!!"),console$9.warn("!!! I will use this folder: ",_storageFolder),_storageFolder))}initialize(){this.isInitialized||(fs__default.existsSync(this.folder)||fs__default.mkdirSync(this.folder,{recursive:!0}),this.isInitialized=!0)}normalizeFilename(filename){let normalized=filename.replace(/:+/g,":");return normalized=normalized.replace(/:/g,"/"),normalized=normalized.replace(/[<>:"|?*\\\x00-\x1f\x7f]/g,"."),normalized=normalized.replace(/^[.\s]+|[.\s]+$/g,""),normalized=normalized.replace(/\/+/g,"/").replace(/\/\./g,"/").replace(/\.\//g,"./"),normalized||"default"}getStoragePath(teamId,namespace,key){const parts=[`team_${this.normalizeFilename(teamId)}`,this.normalizeFilename(namespace)];return key&&parts.push(this.normalizeFilename(key)),path.join(this.folder,...parts)}key(...parts){return parts.join(":")}async get(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),filePath=this.getStoragePath(teamId,namespace,key);if(!fs__default.existsSync(filePath))return null;try{const data=fs__default.readFileSync(filePath,"utf-8");return JSON.parse(data)}catch(error){return console$9.error(`Error reading from NKVLocalStorage: ${error.message}`),null}}async set(acRequest,namespace,key,value){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),filePath=this.getStoragePath(teamId,namespace,key),dirPath=path.dirname(filePath);fs__default.existsSync(dirPath)||fs__default.mkdirSync(dirPath,{recursive:!0}),fs__default.writeFileSync(filePath,JSON.stringify(value))}async delete(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),filePath=this.getStoragePath(teamId,namespace,key);fs__default.existsSync(filePath)&&fs__default.unlinkSync(filePath)}async exists(acRequest,namespace,key){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),filePath=this.getStoragePath(teamId,namespace,key);return fs__default.existsSync(filePath)}async list(acRequest,namespace){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),namespacePath=this.getStoragePath(teamId,namespace),results=[];if(!fs__default.existsSync(namespacePath))return results;const files=fs__default.readdirSync(namespacePath);for(const file of files){const filePath=path.join(namespacePath,file);if(fs__default.statSync(filePath).isFile()){const data=fs__default.readFileSync(filePath,"utf-8");results.push({key:file,data:JSON.parse(data)})}}return results}async deleteAll(acRequest,namespace){const teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),namespacePath=this.getStoragePath(teamId,namespace);fs__default.existsSync(namespacePath)&&fs__default.rmSync(namespacePath,{recursive:!0,force:!0})}async getResourceACL(resourceId,candidate){return this.cacheConnector.getResourceACL(resourceId,candidate)}clearAll(){fs__default.existsSync(this.folder)&&(fs__default.rmSync(this.folder,{recursive:!0,force:!0}),this.initialize())}static NamespaceAccessControl(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let[acRequest,namespace,key]=args;const isNamespaceSearch=key===void 0,teamId=await this.accountConnector.getCandidateTeam(acRequest.candidate),resourceId=isNamespaceSearch?namespace:`${namespace}:${key}`,finalKey=this.key(`team_${teamId}`,resourceId);if((await this.getAccessTicket(finalKey,acRequest)).access!==TAccessResult.Granted)throw new ACLAccessDeniedError("Access Denied");return originalMethod.apply(this,args)},descriptor}static Validate(target,propertyKey,descriptor){const originalMethod=descriptor.value;return descriptor.value=async function(...args){let[acRequest,namespace,key]=args;const validationResult=Joi.object().keys({namespace:Joi.string().min(1).required(),key:Joi.string().min(1).required()}).validate({namespace,key});if(validationResult.error)throw new Error(`Validation Error: ${validationResult.error.message}`);return originalMethod.apply(this,args)},descriptor}};__decorateClass$5([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"get"),__decorateClass$5([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"set"),__decorateClass$5([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"delete"),__decorateClass$5([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"exists"),__decorateClass$5([_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"list"),__decorateClass$5([_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"deleteAll");let NKVLocalStorage=_NKVLocalStorage;class NKVService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.NKV,"Redis",NKVRedis),ConnectorService.register(TConnectorService.NKV,"RAM",NKVRAM),ConnectorService.register(TConnectorService.NKV,"LocalStorage",NKVLocalStorage)}}class RouterConnector extends Connector{}var __defProp$a=Object.defineProperty,__defNormalProp$a=(obj,key,value)=>key in obj?__defProp$a(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$a=(obj,key,value)=>__defNormalProp$a(obj,typeof key!="symbol"?key+"":key,value);class ExpressRouter extends RouterConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$a(this,"router"),__publicField$a(this,"baseUrl"),this.name="ExpressRouter",this.router=_settings.router,this.baseUrl=_settings.baseUrl}get(path2,...handlers){return this.router.get(path2,...handlers),this}post(path2,...handlers){return this.router.post(path2,...handlers),this}put(path2,...handlers){return this.router.put(path2,...handlers),this}delete(path2,...handlers){return this.router.delete(path2,...handlers),this}useFn(...handlers){return this.router.use(...handlers),this}use(path2,...handlers){return this.router.use(path2,...handlers),this}getRouter(){return this.router}}var __defProp$9=Object.defineProperty,__defNormalProp$9=(obj,key,value)=>key in obj?__defProp$9(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$9=(obj,key,value)=>__defNormalProp$9(obj,key+"",value);const console$8=Logger("NullRouter");class NullRouter extends RouterConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$9(this,"baseUrl"),this.baseUrl="http://nullrouter.local"}get(path2,...handlers){return console$8.debug(`Ignored operation:NullRouter.get: ${path2}`),this}post(path2,...handlers){return console$8.debug(`Ignored operation:NullRouter.post: ${path2}`),this}put(path2,...handlers){return console$8.debug(`Ignored operation:NullRouter.put: ${path2}`),this}delete(path2,...handlers){return console$8.debug(`Ignored operation:NullRouter.delete: ${path2}`),this}useFn(...handlers){return console$8.debug("Ignored operation:NullRouter.useFn"),this}use(path2,...handlers){return this}}class RouterService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Router,"ExpressRouter",ExpressRouter),ConnectorService.register(TConnectorService.Router,"NullRouter",NullRouter)}}class ManagedVaultConnector extends SecureConnector{constructor(_settings){super(_settings),this._settings=_settings}requester(candidate){return{get:async keyId=>this.get(candidate.readRequest,keyId),set:async(keyId,value)=>this.set(candidate.writeRequest,keyId,value),delete:async keyId=>this.delete(candidate.writeRequest,keyId),exists:async keyId=>this.exists(candidate.readRequest,keyId)}}}var __defProp$8=Object.defineProperty,__getOwnPropDesc$4=Object.getOwnPropertyDescriptor,__defNormalProp$8=(obj,key,value)=>key in obj?__defProp$8(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$4=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$4(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$8(target,key,result),result},__publicField$8=(obj,key,value)=>__defNormalProp$8(obj,typeof key!="symbol"?key+"":key,value);const console$7=Logger("SecretManagerManagedVault");class SecretManagerManagedVault extends ManagedVaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$8(this,"name","SecretManagerManagedVault"),__publicField$8(this,"scope","smyth-managed-vault"),__publicField$8(this,"secretsManager"),this.secretsManager=new SecretsManagerClient({region:_settings.region,..._settings.awsAccessKeyId&&_settings.awsSecretAccessKey?{accessKeyId:_settings.awsAccessKeyId,secretAccessKey:_settings.awsSecretAccessKey}:{}})}async get(acRequest,secretName){return(await this.getSecretByName(secretName))?.SecretString}async set(acRequest,secretName,value){const secret=await this.getSecretByName(secretName);secret?await this.secretsManager.send(new PutSecretValueCommand({SecretId:secret.ARN,SecretString:value})):await this.secretsManager.send(new CreateSecretCommand({Name:`smyth/${randomUUID()}`,SecretString:JSON.stringify({[secretName]:value}),Tags:[{Key:this.scope,Value:"true"}]}))}async delete(acRequest,secretName){const secret=await this.getSecretByName(secretName);secret&&await this.secretsManager.send(new DeleteSecretCommand({SecretId:secret.ARN}))}async exists(acRequest,secretName){return!!await this.get(acRequest,secretName)}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}async getSecretByName(secretName){try{const secrets=[];let nextToken;do{const listResponse=await this.secretsManager.send(new ListSecretsCommand({NextToken:nextToken,Filters:[{Key:"tag-key",Values:[this.scope]}]}));if(listResponse.SecretList)for(const secret2 of listResponse.SecretList)secret2.Name&&secrets.push({ARN:secret2.ARN,Name:secret2.Name,CreatedDate:secret2.CreatedDate});nextToken=listResponse.NextToken}while(nextToken);const formattedSecrets=[],$promises=[];for(const secret2 of secrets)$promises.push(getSpecificSecret(secret2,this.secretsManager));const results=await Promise.all($promises);for(const result of results)formattedSecrets.push(result);return formattedSecrets.find(s=>s.Name===secretName)}catch(error){console$7.error(error)}async function getSpecificSecret(secret,secretsManager){let secretString=(await secretsManager.send(new GetSecretValueCommand({SecretId:secret.ARN}))).SecretString,secretName2=secret.Name;if(secretString)try{let parsedSecret=JSON.parse(secretString);Object.keys(parsedSecret).length===1&&(secretName2=Object.keys(parsedSecret)[0],secretString=parsedSecret[secretName2])}catch{}return{Name:secretName2,ARN:secret.ARN,CreatedDate:secret.CreatedDate,SecretId:secret.Name,SecretString:secretString}}}}__decorateClass$4([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"get"),__decorateClass$4([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"set"),__decorateClass$4([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"delete"),__decorateClass$4([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"exists");var __defProp$7=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__defNormalProp$7=(obj,key,value)=>key in obj?__defProp$7(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$3=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$3(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$7(target,key,result),result},__publicField$7=(obj,key,value)=>__defNormalProp$7(obj,key+"",value);const console$6=Logger("NullManagedVault");class NullManagedVault extends ManagedVaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$7(this,"name","NullManagedVault")}async get(acRequest,keyId){console$6.debug(`Ignored operation:NullManagedVault.get: ${keyId}`)}async set(acRequest,keyId,value){console$6.debug(`Ignored operation:NullManagedVault.set: ${keyId} = ${value}`)}async delete(acRequest,keyId){console$6.debug(`Ignored operation:NullManagedVault.delete: ${keyId}`)}async exists(acRequest,keyId){return console$6.debug(`Ignored operation:NullManagedVault.exists: ${keyId}`),!1}async getResourceACL(resourceId,candidate){await ConnectorService.getAccountConnector().getCandidateTeam(candidate);const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}__decorateClass$3([SecureConnector.AccessControl],NullManagedVault.prototype,"get"),__decorateClass$3([SecureConnector.AccessControl],NullManagedVault.prototype,"set"),__decorateClass$3([SecureConnector.AccessControl],NullManagedVault.prototype,"delete"),__decorateClass$3([SecureConnector.AccessControl],NullManagedVault.prototype,"exists");class ManagedVaultService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.ManagedVault,"SecretManagerManagedVault",SecretManagerManagedVault),ConnectorService.register(TConnectorService.ManagedVault,"NullManagedVault",NullManagedVault)}}class LogConnector extends SecureConnector{requester(candidate){if(candidate.role!=="agent")throw new Error("Only agents can use Log connector");return{log:async(logData,callId)=>await this.log(candidate.writeRequest,logData,callId),logTask:async(tasks,isUsingTestDomain)=>{await this.logTask(candidate.writeRequest,tasks,isUsingTestDomain)}}}}var __defProp$6=Object.defineProperty,__defNormalProp$6=(obj,key,value)=>key in obj?__defProp$6(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$6=(obj,key,value)=>__defNormalProp$6(obj,typeof key!="symbol"?key+"":key,value);const console$5=Logger("SmythLog");class ConsoleLog extends LogConnector{constructor(){super(...arguments),__publicField$6(this,"name","ConsoleLog"),__publicField$6(this,"id")}getResourceACL(resourceId,candidate){return Promise.resolve(new ACL)}log(acRequest,logData,callId){return console$5.debug(`Log for agent ${acRequest.candidate.id}: ${typeof logData=="string"?logData:JSON.stringify(logData)}`),Promise.resolve()}logTask(acRequest,tasks,isUsingTestDomain){return console$5.debug(`${tasks} Task(s) Consumed by agent ${acRequest.candidate.id}: ${isUsingTestDomain?"Using Test Domain":"Using Production Domain"}`),Promise.resolve()}}Logger("LogService");class LogService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Log,"ConsoleLog",ConsoleLog)}}class ComponentConnector extends SecureConnector{requester(candidate){return{register:async(componentName,componentInstance)=>await this.register(candidate.readRequest,componentName,componentInstance),get:async componentName=>await this.get(candidate.readRequest,componentName),getAll:async()=>await this.getAll(candidate.readRequest)}}}var __defProp$5=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__defNormalProp$5=(obj,key,value)=>key in obj?__defProp$5(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$2=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$2(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$5(target,key,result),result},__publicField$5=(obj,key,value)=>__defNormalProp$5(obj,typeof key!="symbol"?key+"":key,value);const console$4=Logger("LocalComponentConnector");class LocalComponentConnector extends ComponentConnector{constructor(){super(),__publicField$5(this,"name","LocalComponentConnector"),__publicField$5(this,"components",{}),this.init()}async init(){for(const component in ComponentInstances)this.components[component]=ComponentInstances[component];console$4.debug("Registering Components :",Object.keys(this.components).join(", "))}async register(acRequest,componentName,componentInstance){this.components[componentName]=componentInstance}async get(acRequest,componentName){return this.components[componentName]}async getAll(acRequest){return this.components}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}__decorateClass$2([SecureConnector.AccessControl],LocalComponentConnector.prototype,"register"),__decorateClass$2([SecureConnector.AccessControl],LocalComponentConnector.prototype,"get"),__decorateClass$2([SecureConnector.AccessControl],LocalComponentConnector.prototype,"getAll");class ComponentService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Component,"LocalComponent",LocalComponentConnector)}}const models={Echo:{llm:"Echo",provider:"Echo"},"deepseek-v2.5":{llm:"DeepSeek",label:"DeepSeek Chat",modelId:"deepseek-chat",provider:"DeepSeek",features:["text","image"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},baseURL:"https://api.deepseek.com/beta",credentials:"vault"},"deepseek-chat":{llm:"DeepSeek",baseURL:"https://api.deepseek.com/beta",tokens:128e3,completionTokens:8192,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192},credentials:"vault"},"gpt-4o-mini":{llm:"OpenAI",alias:"gpt-4o-mini-2024-07-18",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GPTPlugin","GenAILLM"],label:"GPT 4o Mini",modelId:"gpt-4o-mini-2024-07-18",provider:"OpenAI",features:["text","tools","image","search"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16383,searchContextTokens:128e3,enabled:!0},credentials:"vault"},"gpt-4.1-nano":{llm:"OpenAI",label:"GPT 4.1 Nano",modelId:"gpt-4.1-nano",provider:"OpenAI",features:["text","tools","image"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1047576,completionTokens:32768,enabled:!0},credentials:"vault"},"gpt-4.1-mini":{llm:"OpenAI",label:"GPT 4.1 Mini",modelId:"gpt-4.1-mini",provider:"OpenAI",features:["text","tools","image","search"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1047576,completionTokens:32768,searchContextTokens:128e3,enabled:!0},credentials:"vault"},"gpt-4.1":{llm:"OpenAI",label:"GPT 4.1",modelId:"gpt-4.1",provider:"OpenAI",features:["text","tools","image","search"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1047576,completionTokens:32768,searchContextTokens:128e3,enabled:!0},credentials:"vault"},"gpt-4o-mini-2024-07-18":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16383,enabled:!0},credentials:"vault"},"gpt-4.5-preview":{llm:"OpenAI",label:"GPT 4.5 Preview",modelId:"gpt-4.5-preview",provider:"OpenAI",features:["text","tools","image"],tags:["Personal","Deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"gpt-4o":{llm:"OpenAI",alias:"gpt-4o-2024-08-06",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GPTPlugin","GenAILLM"],label:"GPT 4o",modelId:"gpt-4o-2024-08-06",provider:"OpenAI",features:["text","tools","image","search","document"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,searchContextTokens:128e3,enabled:!0},credentials:"vault"},"gpt-4o-2024-08-06":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"o4-mini":{llm:"OpenAI",label:"GPT o4 mini",modelId:"o4-mini-2025-04-16",provider:"OpenAI",features:["text","reasoning"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:1e5,enabled:!0},credentials:"vault"},o3:{llm:"OpenAI",label:"GPT o3",modelId:"o3-2025-04-16",provider:"OpenAI",features:["text","reasoning"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:1e5,enabled:!0},credentials:"vault"},"o3-mini":{llm:"OpenAI",alias:"o3-mini-2025-01-31",components:["PromptGenerator","GenAILLM"],label:"GPT o3 mini",modelId:"o3-mini-2025-01-31",provider:"OpenAI",features:["text","reasoning"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:1e5,enabled:!0},hidden:!0,credentials:"vault"},"o3-mini-2025-01-31":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:1e5,enabled:!0},credentials:"vault"},o1:{llm:"OpenAI",alias:"o1-2024-12-17",components:["PromptGenerator","GenAILLM"],label:"GPT o1",modelId:"o1-2024-12-17",provider:"OpenAI",features:["text","reasoning"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:1e5,enabled:!0},credentials:"vault"},"o1-2024-12-17":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:1e5,enabled:!0},credentials:"vault"},"o1-mini":{llm:"OpenAI",alias:"o1-mini-2024-09-12",components:["PromptGenerator","GenAILLM"],label:"GPT o1 mini",modelId:"o1-mini-2024-09-12",provider:"OpenAI",features:["text"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:65536,enabled:!0},credentials:"vault"},"o1-mini-2024-09-12":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:128e3,completionTokens:65536,enabled:!0},credentials:"vault"},"o1-preview":{llm:"OpenAI",alias:"o1-preview-2024-09-12",components:["PromptGenerator","GenAILLM"],label:"GPT o1 Preview",modelId:"o1-preview-2024-09-12",provider:"OpenAI",features:["text"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:32768,enabled:!0},credentials:"vault"},"o1-preview-2024-09-12":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:128e3,completionTokens:32768,enabled:!0},credentials:"vault"},"gpt-4-turbo-latest":{llm:"OpenAI",alias:"gpt-4-turbo-2024-04-09",components:["PromptGenerator","LLMAssistant","Classifier"],label:"GPT 4 Turbo Latest",modelId:"gpt-4-turbo-2024-04-09",provider:"OpenAI",features:["text","tools"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:4096,enabled:!0},hidden:!0},"gpt-4-turbo":{llm:"OpenAI",alias:"gpt-4-turbo-2024-04-09",components:["PromptGenerator","LLMAssistant","VisionLLM","GPTPlugin","AgentPlugin","Chatbot"],label:"GPT 4 Turbo",modelId:"gpt-4-turbo-2024-04-09",provider:"OpenAI",features:["text","tools","image"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:4096,enabled:!0},hidden:!0},"gpt-4-turbo-2024-04-09":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:128e3,completionTokens:4096,enabled:!0},credentials:"vault"},"gpt-4-latest":{llm:"OpenAI",alias:"gpt-4-0613",components:["PromptGenerator","LLMAssistant"],label:"GPT 4 Latest",modelId:"gpt-4-0613",provider:"OpenAI",features:["text","tools"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},hidden:!0},"gpt-4":{llm:"OpenAI",components:["PromptGenerator","LLMAssistant","Classifier","GPTPlugin","AgentPlugin","Chatbot"],label:"GPT 4",modelId:"gpt-4o-2024-08-06",provider:"OpenAI",features:["text","tools"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},hidden:!0},"gpt-4-0613":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,hidden:!0,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"gpt-3.5-turbo-latest":{llm:"OpenAI",alias:"gpt-3.5-turbo-0125",components:["PromptGenerator","LLMAssistant","Classifier","GPTPlugin","AgentPlugin","Chatbot"],label:"GPT 3.5 Turbo Latest",modelId:"gpt-3.5-turbo-0125",provider:"OpenAI",features:["text","tools"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:16385,completionTokens:4096,enabled:!0},hidden:!0},"gpt-3.5-turbo":{llm:"OpenAI",alias:"gpt-3.5-turbo-0125",components:["PromptGenerator","LLMAssistant","Classifier","GPTPlugin","AgentPlugin","Chatbot"],label:"GPT 3.5 Turbo",modelId:"gpt-3.5-turbo-0125",provider:"OpenAI",features:["text","tools"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:16385,completionTokens:4096,enabled:!0},hidden:!0},"gpt-3.5-turbo-0125":{llm:"OpenAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:16385,completionTokens:4096,enabled:!0},credentials:"vault"},"text-embedding-ada-002":{label:"OpenAI Embeddings Ada 002",modelId:"text-embedding-ada-002",provider:"OpenAI",features:["embeddings"],tokens:0,completionTokens:0,enabled:!1,credentials:["internal","vault"]},"text-embedding-3-large":{label:"OpenAI Embeddings 3 Large",modelId:"text-embedding-3-large",provider:"OpenAI",features:["embeddings"],tokens:0,completionTokens:0,enabled:!1,credentials:["internal","vault"]},"claude-4-opus":{label:"Claude 4 Opus",modelId:"claude-opus-4-20250514",provider:"Anthropic",features:["text","image","tools","reasoning"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:32e3,maxReasoningTokens:32e3,enabled:!0},credentials:"internal"},"claude-4-sonnet":{label:"Claude 4 Sonnet",modelId:"claude-sonnet-4-20250514",provider:"Anthropic",features:["text","image","tools","reasoning"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:64e3,maxReasoningTokens:32e3,enabled:!0},credentials:"vault"},"claude-3.7-sonnet":{llm:"Anthropic",alias:"claude-3-7-sonnet-20250219",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GenAILLM"],label:"Claude 3.7 Sonnet",modelId:"claude-3-7-sonnet-20250219",provider:"Anthropic",features:["text","tools","image","reasoning"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:8192,maxReasoningTokens:16384,enabled:!0},credentials:"vault"},"claude-3.7-sonnet-thinking":{llm:"Anthropic",alias:"claude-3-7-sonnet-20250219",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GenAILLM"],label:"Claude 3.7 Sonnet Thinking",modelId:"claude-3-7-sonnet-20250219",provider:"Anthropic",features:["text","tools","image","reasoning"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:16384,maxReasoningTokens:16384,enabled:!0},hidden:!0,credentials:"vault"},"claude-3.5-haiku":{llm:"Anthropic",alias:"claude-3-5-haiku-latest",components:["PromptGenerator","LLMAssistant","Classifier","AgentPlugin","Chatbot","GenAILLM"],label:"Claude 3.5 Haiku",modelId:"claude-3-5-haiku-latest",provider:"Anthropic",features:["text","tools"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:8192,enabled:!0},credentials:"vault"},"claude-3-5-haiku-latest":{llm:"Anthropic",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:8192,enabled:!0},credentials:"vault"},"claude-3-5-sonnet-latest":{llm:"Anthropic",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GenAILLM"],label:"Claude 3.5 Sonnet Latest",modelId:"claude-3-5-sonnet-latest",provider:"Anthropic",features:["text","tools","image"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:8192,enabled:!0},credentials:"vault"},"claude-3.5-sonnet":{llm:"Anthropic",alias:"claude-3-5-sonnet-20240620",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GenAILLM"],label:"Claude 3.5 Sonnet Stable",modelId:"claude-3-5-sonnet-20240620",provider:"Anthropic",features:["text","tools","image"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:8192,enabled:!0},credentials:"vault"},"claude-3-5-sonnet-20240620":{llm:"Anthropic",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:8192,enabled:!0},credentials:"vault"},"claude-3-opus":{llm:"Anthropic",alias:"claude-3-opus-20240229",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GenAILLM"],label:"Claude 3 Opus",modelId:"claude-3-opus-20240229",provider:"Anthropic",features:["text","tools","image"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},credentials:"vault"},"claude-3-opus-20240229":{llm:"Anthropic",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},credentials:"vault"},"claude-3-sonnet":{llm:"Anthropic",alias:"claude-3-sonnet-20240229",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot"],label:"Claude 3 Sonnet",modelId:"claude-3-sonnet-20240229",provider:"Anthropic",features:["text","tools","image"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},hidden:!0,credentials:"vault"},"claude-3-sonnet-20240229":{llm:"Anthropic",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},credentials:"vault"},"claude-3-haiku":{llm:"Anthropic",alias:"claude-3-haiku-20240307",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot"],label:"Claude 3 Haiku",modelId:"claude-3-haiku-20240307",provider:"Anthropic",features:["text","tools","image"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},hidden:!0,credentials:"vault"},"claude-3-haiku-20240307":{llm:"Anthropic",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},credentials:"vault"},"claude-2.1":{llm:"Anthropic",components:["PromptGenerator","LLMAssistant","Classifier"],label:"Claude 2.1",modelId:"claude-2.1",provider:"Anthropic",features:["text","image"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2e5,completionTokens:4096,enabled:!0},hidden:!0},"claude-instant-1.2":{llm:"Anthropic",components:["PromptGenerator","LLMAssistant","Classifier"],label:"Claude Instant 1.2",modelId:"claude-instant-1.2",provider:"Anthropic",features:["text","image"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1e5,completionTokens:4096,enabled:!0},hidden:!0,credentials:"vault"},"gemini-2.5-flash":{llm:"GoogleAI",label:"Gemini 2.5 Flash Preview",modelId:"gemini-2.5-flash-preview-04-17",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:65536,enabled:!0},credentials:"vault"},"gemini-2.0-flash":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 2.0 Flash",modelId:"gemini-2.0-flash",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-2.0-flash-lite":{llm:"GoogleAI",label:"Gemini 2.0 Flash Lite",modelId:"gemini-2.0-flash-lite",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-2.5-pro":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 2.5 Pro Preview",modelId:"gemini-2.5-pro-preview-03-25",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:65536,enabled:!0},credentials:"vault"},"gemini-2.5-pro-exp":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 2.5 Pro Experimental",modelId:"gemini-2.5-pro-exp-03-25",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["New","Personal"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:65536,enabled:!0},credentials:"vault"},"gemini-1.5-pro-exp-0801":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 1.5 Pro Experimental",modelId:"gemini-1.5-pro-exp-0801",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2097152,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.5-pro-latest-stable":{llm:"GoogleAI",alias:"gemini-1.5-pro",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 1.5 Pro Latest Stable",modelId:"gemini-1.5-pro",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2097152,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.5-pro-latest":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM"],label:"Gemini 1.5 Pro",modelId:"gemini-1.5-pro",provider:"GoogleAI",tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2097152,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.5-pro-stable":{llm:"GoogleAI",alias:"gemini-1.5-pro-001",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 1.5 Pro Stable",modelId:"gemini-1.5-pro",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:2097152,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.5-pro":{llm:"GoogleAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2097152,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.5-pro-001":{llm:"GoogleAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:2097152,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.5-flash-latest":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM"],label:"Gemini 1.5 Flash Latest",modelId:"gemini-1.5-flash-latest",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.5-flash-latest-stable":{llm:"GoogleAI",alias:"gemini-1.5-flash",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM"],label:"Gemini 1.5 Flash Latest Stable",modelId:"gemini-1.5-flash",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.5-flash-stable":{llm:"GoogleAI",alias:"gemini-1.5-flash-001",components:["PromptGenerator","LLMAssistant","VisionLLM","MultimodalLLM","GenAILLM"],label:"Gemini 1.5 Flash Stable",modelId:"gemini-1.5-flash-001",provider:"GoogleAI",features:["text","image","audio","video","document"],tags:["Personal","deprecated"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.5-flash":{llm:"GoogleAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.5-flash-001":{llm:"GoogleAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:1048576,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.0-pro-latest":{llm:"GoogleAI",components:["PromptGenerator","LLMAssistant"],label:"Gemini 1.0 Pro Latest",modelId:"gemini-1.0-pro-latest",provider:"GoogleAI",features:["text"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:30720,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.0-pro-latest-stable":{llm:"GoogleAI",alias:"gemini-1.0-pro",components:["PromptGenerator","LLMAssistant"],label:"Gemini 1.0 Pro Latest Stable",modelId:"gemini-1.0-pro",provider:"GoogleAI",features:["text"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:30720,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.0-pro-stable":{llm:"GoogleAI",alias:"gemini-1.0-pro-001",components:["PromptGenerator","LLMAssistant"],label:"Gemini 1.0 Pro Stable",modelId:"gemini-1.0-pro-001",provider:"GoogleAI",features:["text"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:30720,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"gemini-1.0-pro":{llm:"GoogleAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:30720,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-1.0-pro-001":{llm:"GoogleAI",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:30720,completionTokens:8192,enabled:!0},credentials:"vault"},"gemini-pro-vision":{llm:"GoogleAI",components:["VisionLLM"],label:"Gemini Pro Vision",modelId:"gemini-pro-vision",provider:"GoogleAI",features:["image"],tags:["Personal","legacy"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:12288,completionTokens:4096,enabled:!0},hidden:!0,credentials:"vault"},"llama-3.3-70b":{llm:"Groq",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3.3 70B",modelId:"llama-3.3-70b-versatile",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:32768,enabled:!0},credentials:"vault"},"groq-llama3-70b":{llm:"Groq",alias:"llama3-70b-8192",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3 70B",modelId:"llama3-70b-8192",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"llama3-70b-8192":{llm:"Groq",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"groq-llama-3.1-8b-instant":{llm:"Groq",alias:"llama-3.1-8b-instant",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3.1 8B",modelId:"llama-3.1-8b-instant",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},credentials:"vault"},"llama-3.1-8b-instant":{llm:"Groq",tokens:8e3,completionTokens:8e3,enabled:!1,keyOptions:{tokens:131072,completionTokens:8192,enabled:!0},credentials:"vault"},"llama-guard-3-8b":{llm:"Groq",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama Guard 3 8B",modelId:"llama-guard-3-8b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"groq-llama3-8b":{llm:"Groq",alias:"llama3-8b-8192",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3 8B",modelId:"llama3-8b-8192",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"llama3-8b-8192":{llm:"Groq",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"groq-gemma2-9b":{llm:"Groq",alias:"gemma2-9b-it",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Google - Gemma 2 9B",modelId:"gemma2-9b-it",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"gemma2-9b-it":{llm:"Groq",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"groq-mixtral-8x7b":{llm:"Groq",alias:"mixtral-8x7b-32768",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Mistral - Mixtral 8x7b",modelId:"mixtral-8x7b-32768",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},credentials:"vault"},"mixtral-8x7b-32768":{llm:"Groq",tokens:2048,completionTokens:2048,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},credentials:"vault"},"qwen-qwq-32b":{llm:"Groq",label:"Qwen - QWQ 32b Preview",modelId:"qwen-qwq-32b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"mistral-saba-24b":{llm:"Groq",label:"Mistral - Saba 24b Preview",modelId:"mistral-saba-24b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"qwen-2.5-coder-32b":{llm:"Groq",label:"Qwen - 2.5 Coder 32b Preview",modelId:"qwen-2.5-coder-32b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"qwen-2.5-32b":{llm:"Groq",label:"Qwen - 2.5 32b Preview",modelId:"qwen-2.5-32b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"deepseek-r1-distill-qwen-32b":{llm:"Groq",label:"DeepSeek - R1 Distill Qwen 32b Preview",modelId:"deepseek-r1-distill-qwen-32b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:16384,enabled:!0},credentials:"vault"},"deepseek-r1-distill-llama-70b":{llm:"Groq",label:"DeepSeek - R1 Distill Llama 70b Preview",modelId:"deepseek-r1-distill-llama-70b",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},credentials:"vault"},"meta-llama/llama-4-scout-17b-16e-instruct":{llm:"Groq",label:"Meta - Llama 4 Scout 17B 16E Instruct",modelId:"meta-llama/llama-4-scout-17b-16e-instruct",provider:"Groq",features:["text"],tags:["New","Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:8192,enabled:!0},credentials:"vault"},"llama-3.3-70b-specdec":{llm:"Groq",label:"Meta - Llama 3.3 70B SpecDec Preview",modelId:"llama-3.3-70b-specdec",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},credentials:"vault"},"llama-3.2-1b-preview":{llm:"Groq",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3.2 1B Preview",modelId:"llama-3.2-1b-preview",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},credentials:"vault"},"llama-3.2-3b-preview":{llm:"Groq",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3.2 3B Preview",modelId:"llama-3.2-3b-preview",provider:"Groq",features:["text"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},credentials:"vault"},"llama-3.2-11b-vision-preview":{llm:"Groq",components:["PromptGenerator","LLMAssistant","VisionLLM","GenAILLM"],label:"Meta - Llama 3.2 11B Vision Preview",modelId:"llama-3.2-11b-vision-preview",provider:"Groq",features:["text","image"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"llama-3.2-90b-vision-preview":{llm:"Groq",label:"Meta - Llama 3.2 90b Vision Preview",modelId:"llama-3.2-90b-vision-preview",provider:"Groq",features:["text","image"],tags:["Personal","Groq"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:8192,enabled:!0},hidden:!0,credentials:"vault"},"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B":{llm:"TogetherAI",label:"DeepSeek - R1 Distill Qwen 14B",modelId:"deepseek-ai/DeepSeek-R1-Distill-Qwen-14B",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B":{llm:"TogetherAI",label:"DeepSeek - R1 Distill Qwen 1.5B",modelId:"deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"deepseek-ai/DeepSeek-R1-Distill-Llama-70B":{llm:"TogetherAI",label:"DeepSeek - R1 Distill Llama 70B",modelId:"deepseek-ai/DeepSeek-R1-Distill-Llama-70B",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"deepseek-ai/DeepSeek-R1":{llm:"TogetherAI",label:"DeepSeek - R1",modelId:"deepseek-ai/DeepSeek-R1",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:128e3,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"deepseek-ai/DeepSeek-V3":{llm:"TogetherAI",label:"DeepSeek - V3",modelId:"deepseek-ai/DeepSeek-V3",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"deepseek-ai/deepseek-llm-67b-chat":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"DeepSeek - Llama 67B Chat",modelId:"deepseek-ai/deepseek-llm-67b-chat",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:4096,completionTokens:4096,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8":{llm:"TogetherAI",label:"Meta - Llama 4 Maverick (17Bx128E)",modelId:"meta-llama/Llama-4-Maverick-17B-128E-Instruct-FP8",provider:"TogetherAI",features:["text","tools","image"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:524288,completionTokens:524288,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-4-Scout-17B-16E-Instruct":{llm:"TogetherAI",label:"Meta - Llama 4 Scout (17Bx16E)",modelId:"meta-llama/Llama-4-Scout-17B-16E-Instruct",provider:"TogetherAI",features:["text","tools","image"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:327680,completionTokens:327680,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-3.3-70B-Instruct-Turbo":{llm:"TogetherAI",label:"Meta - Llama 3.3 70B Instruct Turbo",modelId:"meta-llama/Llama-3.3-70B-Instruct-Turbo",provider:"TogetherAI",features:["text","tools"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:131072,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3.1 8B Instruct Turbo",modelId:"meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",provider:"TogetherAI",features:["text","tools"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:131072,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3.1 70B Instruct Turbo",modelId:"meta-llama/Meta-Llama-3.1-70B-Instruct-Turbo",provider:"TogetherAI",features:["text","tools"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:131072,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3.1 405B Instruct Turbo",modelId:"meta-llama/Meta-Llama-3.1-405B-Instruct-Turbo",provider:"TogetherAI",features:["text","tools"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:130815,completionTokens:130815,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3-8B-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3 8B Instruct Turbo",modelId:"meta-llama/Meta-Llama-3-8B-Instruct-Turbo",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3-70B-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3 70B Instruct Turbo",modelId:"meta-llama/Meta-Llama-3-70B-Instruct-Turbo",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-3.2-3B-Instruct-Turbo":{llm:"TogetherAI",label:"Meta - Llama 3.2 3B Instruct Turbo",modelId:"meta-llama/Llama-3.2-3B-Instruct-Turbo",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3-8B-Instruct-Lite":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3 8B Instruct Lite",modelId:"meta-llama/Meta-Llama-3-8B-Instruct-Lite",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Meta-Llama-3-70B-Instruct-Lite":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","GenAILLM"],label:"Meta - Llama 3 70B Instruct Lite",modelId:"meta-llama/Meta-Llama-3-70B-Instruct-Lite",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-3-8b-chat-hf":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3 8B Chat",modelId:"meta-llama/Llama-3-8b-chat-hf",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-3-70b-chat-hf":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Meta - Llama 3 70B Chat",modelId:"meta-llama/Llama-3-70b-chat-hf",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-2-13b-chat-hf":{llm:"TogetherAI",components:["LLMAssistant"],label:"Meta - Llama 2 13B Chat",modelId:"meta-llama/Llama-2-13b-chat-hf",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:4096,completionTokens:4096,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-Vision-Free":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","VisionLLM","GenAILLM"],label:"Meta - Llama Vision Free",modelId:"meta-llama/Llama-Vision-Free",provider:"TogetherAI",features:["text","image"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:131072,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","VisionLLM","GenAILLM"],label:"Meta - Llama 3.2 11B Vision Instruct Turbo",modelId:"meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo",provider:"TogetherAI",features:["text","image"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:131072,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo":{llm:"TogetherAI",components:["LLMAssistant","PromptGenerator","VisionLLM","GenAILLM"],label:"Meta - Llama 3.2 90B Vision Instruct Turbo",modelId:"meta-llama/Llama-3.2-90B-Vision-Instruct-Turbo",provider:"TogetherAI",features:["text","image"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:131072,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"google/gemma-2-27b-it":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Google - Gemma 2 27B",modelId:"google/gemma-2-27b-it",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"google/gemma-2-9b-it":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Google - Gemma 2 9B",modelId:"google/gemma-2-9b-it",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"google/gemma-2b-it":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Google - Gemma 2 2B",modelId:"google/gemma-2b-it",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"mistralai/Mistral-7B-Instruct-v0.3":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","Classifier","GenAILLM"],label:"Mistral - 7B Instruct v0.3",modelId:"mistralai/Mistral-7B-Instruct-v0.3",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"mistralai/Mistral-7B-Instruct-v0.2":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Mistral - 7B Instruct v0.2",modelId:"mistralai/Mistral-7B-Instruct-v0.2",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"mistralai/Mistral-7B-Instruct-v0.1":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Mistral - 7B Instruct v0.1",modelId:"mistralai/Mistral-7B-Instruct-v0.1",provider:"TogetherAI",features:["text","tools"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:8192,completionTokens:8192,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"mistralai/Mixtral-8x7B-Instruct-v0.1":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","Classifier","GenAILLM"],label:"Mistral - 8x7B Instruct v0.1",modelId:"mistralai/Mixtral-8x7B-Instruct-v0.1",provider:"TogetherAI",features:["text","tools"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"mistralai/Mixtral-8x22B-Instruct-v0.1":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Mistral - 8x22B Instruct v0.1",modelId:"mistralai/Mixtral-8x22B-Instruct-v0.1",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:65536,completionTokens:65536,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Qwen/Qwen2.5-Coder-32B-Instruct":{llm:"TogetherAI",label:"Qwen - 2.5 Coder 32B",modelId:"Qwen/Qwen2.5-Coder-32B-Instruct",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Qwen/QwQ-32B-Preview":{llm:"TogetherAI",label:"Qwen - QwQ 32B Preview",modelId:"Qwen/QwQ-32B-Preview",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Qwen/Qwen2.5-7B-Instruct-Turbo":{llm:"TogetherAI",label:"Qwen - 2.5 7B Instruct Turbo",modelId:"Qwen/Qwen2.5-7B-Instruct-Turbo",provider:"TogetherAI",features:["text","tools"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Qwen/Qwen2.5-72B-Instruct-Turbo":{llm:"TogetherAI",label:"Qwen - 2.5 72B Instruct Turbo",modelId:"Qwen/Qwen2.5-72B-Instruct-Turbo",provider:"TogetherAI",features:["text","tools"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Qwen/Qwen2-72B-Instruct":{llm:"TogetherAI",label:"Qwen - 2 72B Instruct",modelId:"Qwen/Qwen2-72B-Instruct",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Qwen/Qwen2-VL-72B-Instruct":{llm:"TogetherAI",label:"Qwen - 2 VL 72B Instruct",modelId:"Qwen/Qwen2-VL-72B-Instruct",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF":{llm:"TogetherAI",label:"Nvidia - Llama 3.1 Nemotron 70B",modelId:"nvidia/Llama-3.1-Nemotron-70B-Instruct-HF",provider:"TogetherAI",features:["text"],tags:["New","Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"microsoft/WizardLM-2-8x22B":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Microsoft - WizardLM 2 8x22B",modelId:"microsoft/WizardLM-2-8x22B",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:65536,completionTokens:65536,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"databricks/dbrx-instruct":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Databricks - DBRX Instruct",modelId:"databricks/dbrx-instruct",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"NousResearch - Hermes 2 Mixtral 8x7B DPO",modelId:"NousResearch/Nous-Hermes-2-Mixtral-8x7B-DPO",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"upstage/SOLAR-10.7B-Instruct-v1.0":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Upstage - SOLAR 10.7B Instruct v1.0",modelId:"upstage/SOLAR-10.7B-Instruct-v1.0",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:4096,completionTokens:4096,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"Gryphe/MythoMax-L2-13b":{llm:"TogetherAI",components:["PromptGenerator","LLMAssistant","GenAILLM"],label:"Gryphe - MythoMax L2 13B",modelId:"Gryphe/MythoMax-L2-13b",provider:"TogetherAI",features:["text"],tags:["Personal","TogetherAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:4096,completionTokens:4096,enabled:!0},baseURL:"https://api.together.xyz/v1",credentials:"vault"},"smythos/gpt-image-1":{label:"GPT Image 1",modelId:"gpt-image-1",provider:"OpenAI",features:["image-generation"],tags:["New","SmythOS"],enabled:!0,credentials:"internal"},"gpt-image-1":{label:"GPT Image 1",modelId:"gpt-image-1",provider:"OpenAI",features:["image-generation"],tags:["New","Personal"],enabled:!1,keyOptions:{enabled:!0},credentials:"vault"},"dall-e-3":{label:"DALL\xB7E 3",modelId:"dall-e-3",provider:"OpenAI",features:["image-generation"],tags:["Deprecated"],enabled:!0,credentials:"vault"},"dall-e-2":{label:"DALL\xB7E 2",modelId:"dall-e-2",provider:"OpenAI",features:["image-generation"],tags:["Deprecated"],enabled:!0,credentials:"vault"},"smythos/flux.1-schnell":{label:"FLUX Schnell",modelId:"runware:100@1",provider:"Runware",features:["image-generation","text-to-image","image-to-image"],tags:["SmythOS","1.0"],enabled:!0,credentials:"internal"},"smythos/flux.1-dev":{label:"FLUX Dev",modelId:"runware:101@1",provider:"Runware",features:["image-generation","text-to-image","image-to-image"],tags:["SmythOS","1.0"],enabled:!0,credentials:"internal"},"smythos/face_yolov8n":{label:"Face YOLOv8n",modelId:"runware:35@1",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Full face detection"],enabled:!0,credentials:"internal"},"smythos/face_yolov8s":{label:"Face YOLOv8s",modelId:"runware:35@2",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Full face detection"],enabled:!0,credentials:"internal"},"smythos/mediapipe_face_full":{label:"MediaPipe Face Full",modelId:"runware:35@6",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Full face detection"],enabled:!0,credentials:"internal"},"smythos/mediapipe_face_short":{label:"MediaPipe Face Short",modelId:"runware:35@7",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Full face detection"],enabled:!0,credentials:"internal"},"smythos/mediapipe_face_mesh":{label:"MediaPipe Face Mesh",modelId:"runware:35@8",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Full face detection"],enabled:!0,credentials:"internal"},"smythos/mediapipe_face_mesh_eyes_only":{label:"MediaPipe Face Mesh Eyes Only",modelId:"runware:35@9",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0,credentials:"internal"},"smythos/eyes_mesh_mediapipe":{label:"Eyes Mesh MediaPipe",modelId:"runware:35@15",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0,credentials:"internal"},"smythos/nose_mesh_mediapipe":{label:"Nose Mesh MediaPipe",modelId:"runware:35@13",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0,credentials:"internal"},"smythos/lips_mesh_mediapipe":{label:"Lips Mesh MediaPipe",modelId:"runware:35@14",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0,credentials:"internal"},"smythos/eyes_lips_mesh":{label:"Eyes & Lips Mesh",modelId:"runware:35@10",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0,credentials:"internal"},"smythos/nose_eyes_mesh":{label:"Nose & Eyes Mesh",modelId:"runware:35@11",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0,credentials:"internal"},"smythos/nose_lips_mesh":{label:"Nose & Lips Mesh",modelId:"runware:35@12",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Facial features"],enabled:!0},"smythos/hand_yolov8n":{label:"Hand YOLOv8n",modelId:"runware:35@3",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Other body parts"],enabled:!0},"smythos/person_yolov8n-seg":{label:"Person YOLOv8n-seg",modelId:"runware:35@4",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Other body parts"],enabled:!0},"smythos/person_yolov8s-seg":{label:"Person YOLOv8s-seg",modelId:"runware:35@5",provider:"Runware",features:["image-inpainting"],tags:["SmythOS","Other body parts"],enabled:!0,credentials:"internal"},"flux.1-schnell":{label:"FLUX.1 (Schnell)",modelId:"runware:100@1",provider:"Runware",features:["image-generation"],tags:["SmythOS"],enabled:!1,credentials:"vault"},"flux.1-dev":{label:"FLUX.1 (Dev)",modelId:"runware:101@1",provider:"Runware",features:["image-generation"],tags:["SmythOS"],enabled:!1,credentials:"vault"},grok:{llm:"xAI",label:"Grok",modelId:"grok-2-latest",provider:"xAI",features:["text","tools"],tags:["Personal","xAI"],tokens:0,completionTokens:0,enabled:!1,keyOptions:{tokens:131072,completionTokens:8192,enabled:!0},baseURL:"https://api.x.ai/v1",credentials:"vault"},"grok-2-vision":{llm:"xAI",label:"Grok Vision",modelId:"grok-2-vision-latest",provider:"xAI",features:["image"],tags:["New","Personal","xAI"],tokens:0,completionTokens:0,enabled:!1,hidden:!0,keyOptions:{tokens:32768,completionTokens:32768,enabled:!0},baseURL:"https://api.x.ai/v1",credentials:"vault"}};//! ***IMPORTANT***
182
163
  //! ***IMPORTANT***
183
- const customModels={"ai21.jamba-1-5-mini-v1:0":{llm:"Bedrock",label:"AI21 Labs - Jamba 1.5 Mini",tokens:256e3,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","AgentPlugin","GenAILLM"],tags:["new"]},"ai21.jamba-1-5-large-v1:0":{llm:"Bedrock",label:"AI21 Labs - Jamba 1.5 Large",tokens:256e3,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","AgentPlugin","GenAILLM"],tags:["new"]},"ai21.jamba-instruct-v1:0":{llm:"Bedrock",label:"AI21 Labs - Jamba-Instruct",tokens:256e3,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"ai21.j2-ultra-v1":{llm:"Bedrock",label:"AI21 Labs - Jurassic-2 Ultra",tokens:8191,completionTokens:8191,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"ai21.j2-mid-v1":{llm:"Bedrock",label:"AI21 Labs - Jurassic-2 Mid",tokens:8191,completionTokens:8191,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"amazon.titan-text-premier-v1:0":{llm:"Bedrock",label:"Amazon - Titan Text Premier",tokens:32e3,completionTokens:3e3,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"amazon.titan-text-express-v1":{llm:"Bedrock",label:"Amazon - Titan Text G1 - Express",tokens:8192,completionTokens:4096,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"amazon.titan-text-lite-v1":{llm:"Bedrock",label:"Amazon - Titan Text G1 - Lite",tokens:4096,completionTokens:4096,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"us.anthropic.claude-3-5-haiku-20241022-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3.5 Haiku",tokens:2e5,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0","new"]},"us.anthropic.claude-3-5-sonnet-20241022-v2:0":{llm:"Bedrock",label:"Anthropic - Claude 3.5 Sonnet",tokens:2e5,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v2:0","new"]},"anthropic.claude-3-5-sonnet-20240620-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3.5 Sonnet",tokens:2e5,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-3-sonnet-20240229-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3 Sonnet",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-3-haiku-20240307-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3 Haiku",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-3-opus-20240229-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3 Opus",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-v2:1":{llm:"Bedrock",label:"Anthropic - Claude 2.1",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"],tags:["v2:1"]},"anthropic.claude-v2":{llm:"Bedrock",label:"Anthropic - Claude 2.0",tokens:1e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"anthropic.claude-instant-v1":{llm:"Bedrock",label:"Anthropic - Claude Instant",tokens:1e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"cohere.command-r-plus-v1:0":{llm:"Bedrock",label:"Cohere - Command R+",tokens:128e3,completionTokens:4e3,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"]},"cohere.command-r-v1:0":{llm:"Bedrock",label:"Cohere - Command R",tokens:128e3,completionTokens:4e3,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"]},"cohere.command-text-v14":{llm:"Bedrock",label:"Cohere - Command",tokens:4e3,completionTokens:4e3,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"cohere.command-light-text-v14":{llm:"Bedrock",label:"Cohere - Command Light",tokens:4e3,completionTokens:4e3,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"us.meta.llama3-2-1b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3.2 1B Instruct",tokens:2e5,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"],tags:["new"]},"us.meta.llama3-2-3b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3.2 3B Instruct",tokens:2e5,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"],tags:["new"]},"meta.llama3-8b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3 8B Instruct",tokens:8192,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"meta.llama3-70b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3 70B Instruct",tokens:8192,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral.mistral-7b-instruct-v0:2":{llm:"Bedrock",label:"Mistral AI - Mistral 7B Instruct",tokens:32e3,completionTokens:8192,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"mistral.mixtral-8x7b-instruct-v0:1":{llm:"Bedrock",label:"Mistral AI - Mixtral 8X7B Instruct",tokens:32e3,completionTokens:4096,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"mistral.mistral-large-2402-v1:0":{llm:"Bedrock",label:"Mistral AI - Mistral Large",tokens:32e3,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral.mistral-small-2402-v1:0":{llm:"Bedrock",label:"Mistral AI - Mistral Small",tokens:32e3,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"gemini-1.5-flash":{llm:"VertexAI",label:"Gemini 1.5 Flash",supportsSystemPrompt:!0,tokens:1048576,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"gemini-1.5-pro":{llm:"VertexAI",label:"Gemini 1.5 Pro",supportsSystemPrompt:!0,tokens:2097152,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"gemini-1.0-pro":{llm:"VertexAI",label:"Gemini 1.0 Pro",supportsSystemPrompt:!0,tokens:32760,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-5-haiku":{llm:"VertexAI",label:"Claude 3.5 Haiku",supportsSystemPrompt:!0,tokens:2e5,completionTokens:8192,tags:["new"],components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-5-sonnet-v2":{llm:"VertexAI",label:"Claude 3.5 Sonnet",supportsSystemPrompt:!0,tokens:2e5,completionTokens:8192,tags:["v2","new"],components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-5-sonnet":{llm:"VertexAI",label:"Claude 3.5 Sonnet",supportsSystemPrompt:!0,tokens:2e5,completionTokens:8192,tags:["v1"],components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-sonnet":{llm:"VertexAI",label:"Claude 3 Sonnet",supportsSystemPrompt:!0,tokens:2e5,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-opus":{llm:"VertexAI",label:"Claude 3 Opus",supportsSystemPrompt:!0,tokens:2e5,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-haiku":{llm:"VertexAI",label:"Claude 3 Haiku",supportsSystemPrompt:!0,tokens:2e5,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},gemma2:{llm:"VertexAI",label:"Gemma 2",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},gemma:{llm:"VertexAI",label:"Gemma",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},codegemma:{llm:"VertexAI",label:"CodeGemma",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"llama3-405b-instruct-maas":{llm:"VertexAI",label:"Llama 3.1 API Service",supportsSystemPrompt:!0,tokens:4096,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},llama3_1:{llm:"VertexAI",label:"Llama 3.1",supportsSystemPrompt:!0,tokens:4096,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"llama-guard":{llm:"VertexAI",label:"Llama Guard",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},llama3:{llm:"VertexAI",label:"Llama 3",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},llama2:{llm:"VertexAI",label:"Llama 2",value:"llama2",supportsSystemPrompt:!0,tokens:4096,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral-large":{llm:"VertexAI",label:"Mistral Large (2407)",supportsSystemPrompt:!0,tokens:128e3,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral-nemo":{llm:"VertexAI",label:"Mistral Nemo",supportsSystemPrompt:!0,tokens:128e3,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},codestral:{llm:"VertexAI",label:"Codestral",supportsSystemPrompt:!0,tokens:32e3,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},mixtral:{llm:"VertexAI",label:"Mixtral",supportsSystemPrompt:!0,tokens:32e3,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"chat-bison":{llm:"VertexAI",label:"PaLM 2 Chat Bison",supportsSystemPrompt:!0,tokens:4096,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"text-bison":{llm:"VertexAI",label:"PaLM 2 Text Bison",supportsSystemPrompt:!0,tokens:32768,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},phi3:{llm:"VertexAI",label:"Phi-3",supportsSystemPrompt:!0,tokens:128e3,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},qwen2:{llm:"VertexAI",label:"Qwen2",supportsSystemPrompt:!0,tokens:131072,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},mammut:{llm:"VertexAI",label:"MaMMUT",supportsSystemPrompt:!0,tokens:4096,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"lmsys-vicuna-7b":{llm:"VertexAI",label:"Vicuna",supportsSystemPrompt:!0,tokens:4096,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"bio-gpt":{llm:"VertexAI",label:"BioGPT",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"microsoft-biomedclip":{llm:"VertexAI",label:"BiomedCLIP",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},mistral:{llm:"VertexAI",label:"Mistral Self-host (7B & Nemo)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},nllb:{llm:"VertexAI",label:"NLLB",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"codellama-7b-hf":{llm:"VertexAI",label:"Code Llama",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"palmyra-med":{llm:"VertexAI",label:"Palmyra Med (Writer)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"llama-2-quantized":{llm:"VertexAI",label:"Llama 2 (Quantized)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"bert-base-uncased":{llm:"VertexAI",label:"BERT (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"falcon-instruct-7b-peft":{llm:"VertexAI",label:"Falcon-instruct (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},openllama:{llm:"VertexAI",label:"OpenLLaMA (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"roberta-large":{llm:"VertexAI",label:"RoBERTa-large (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"xlm-roberta-large":{llm:"VertexAI",label:"XLM-RoBERTa-large (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"bart-large-cnn":{llm:"VertexAI",label:"Bart-large-cnn",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"dolly-v2":{llm:"VertexAI",label:"Dolly-v2",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},imagetext:{llm:"VertexAI",label:"Imagen for Captioning & VQA",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"codechat-bison":{llm:"VertexAI",label:"Codey for Code Chat",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"code-bison":{llm:"VertexAI",label:"Codey for Code Generation",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"code-gecko":{llm:"VertexAI",label:"Codey for Code Completion",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"text-unicorn":{llm:"VertexAI",label:"PaLM 2 Text Unicorn",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"textembedding-gecko":{llm:"VertexAI",label:"Embeddings for Text",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"t5-flan":{llm:"VertexAI",label:"T5-FLAN",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"t5-1.1":{llm:"VertexAI",label:"T5-1.1",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"blip2-opt-2.7-b":{llm:"VertexAI",label:"BLIP2",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"instruct-pix2pix":{llm:"VertexAI",label:"InstructPix2Pix",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"bert-base":{llm:"VertexAI",label:"BERT",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"mediapipe-mobile-bert-classifier":{llm:"VertexAI",label:"MobileBERT Classifier (MediaPipe)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"mediapipe-average-word-embedding-classifier":{llm:"VertexAI",label:"Average Word Embedding Classifier (MediaPipe)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},pic2word:{llm:"VertexAI",label:"Pic2Word Composed Image Retrieval",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"text-translation":{llm:"VertexAI",label:"Text Translation",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-moderate-text":{llm:"VertexAI",label:"Text Moderation",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-analyze-syntax":{llm:"VertexAI",label:"Syntax analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-analyze-entity-sentiment":{llm:"VertexAI",label:"Entity sentiment analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-analyze-sentiment":{llm:"VertexAI",label:"Sentiment analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-classify-text-v1":{llm:"VertexAI",label:"Content classification",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"pt-test":{llm:"VertexAI",label:"Entity analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]}};var __defProp$4=Object.defineProperty,__defNormalProp$4=(obj,key,value)=>key in obj?__defProp$4(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$4=(obj,key,value)=>__defNormalProp$4(obj,key+"",value);const _ModelsProviderConnector=class _ModelsProviderConnector2 extends SecureConnector{requester(candidate){const cacheKey=`ModelsProviderConnector:${candidate.toString()}`;if(_ModelsProviderConnector2.localCache.has(cacheKey))return _ModelsProviderConnector2.localCache.get(cacheKey,60*60*1e3);let teamModels=null,customModels2=null;const loadTeamModels=async()=>{if(!teamModels)try{const builtinmodels=await this.getModels(candidate.readRequest);customModels2=await this.getCustomModels(candidate),teamModels={...builtinmodels,...customModels2}}catch{return null}return teamModels};loadTeamModels();const instance={getModels:async()=>await loadTeamModels(),getCustomModels:async()=>await this.getCustomModels(candidate),addModels:async models2=>await this.addModels(candidate.readRequest,models2),getModelInfo:async(model,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey)},getModelId:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.getModelId(candidate.readRequest,teamModels2,model)},getProvider:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.getProvider(candidate.readRequest,teamModels2,model)},isStandardLLM:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return!(await this.getModelInfo(candidate.readRequest,teamModels2,model)).isCustomLLM},adjustMaxCompletionTokens:async(model,maxCompletionTokens,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{},modelInfo=await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey);return Math.min(maxCompletionTokens||512,modelInfo?.completionTokens||modelInfo?.tokens||maxCompletionTokens||512)},getMaxContextTokens:async(model,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return(await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey))?.tokens||1024},getMaxCompletionTokens:async(model,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{},modelInfo=await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey);return modelInfo?.completionTokens||modelInfo?.tokens||512},validateTokensLimit:async({model,promptTokens,completionTokens,hasAPIKey})=>{const teamModels2=typeof model=="string"?await loadTeamModels():{},allowedContextTokens=(await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey))?.tokens,totalTokens=promptTokens+completionTokens,teamAPIKeyExceededMessage=`This models' maximum content length is ${allowedContextTokens} tokens. (This is the sum of your prompt with all variables and the maximum output tokens you've set in Advanced Settings) However, you requested approx ${totalTokens} tokens (${promptTokens} in the prompt, ${completionTokens} in the output). Please reduce the length of either the input prompt or the Maximum output tokens.`,noAPIKeyExceededMessage=`Input exceeds max tokens limit of ${allowedContextTokens}. Please add your API key and select Personal tagged models to unlock full length.`;if(totalTokens>allowedContextTokens)throw new Error(hasAPIKey?teamAPIKeyExceededMessage:noAPIKeyExceededMessage)}};return _ModelsProviderConnector2.localCache.set(cacheKey,instance,60*60*1e3),instance}async getModelInfo(acRequest,models2,model,hasAPIKey=!1){if(typeof model=="object"&&model.modelId)return model;const modelId=await this.getModelId(acRequest,models2,model),alias=models2?.[model]?.alias,aliasModelInfo=models2?.[alias],modelInfo=models2?.[model],aliasKeyOptions=aliasModelInfo&&hasAPIKey?aliasModelInfo?.keyOptions:null,modelKeyOptions=modelInfo?.keyOptions||aliasKeyOptions;return{...aliasModelInfo,...modelInfo,...aliasKeyOptions,...modelKeyOptions,modelId}}async getModelId(acRequest,models2,model){if(typeof model=="object"&&model.modelId)return model.modelId;const modelId=models2?.[model]?.modelId||model,alias=models2?.[model]?.alias;return alias?models2?.[alias]?.modelId||alias||model:modelId}async getProvider(acRequest,models2,model){if(typeof model=="object"&&model.provider)return model.provider;const modelId=await this.getModelId(acRequest,models2,model);return models2?.[modelId]?.provider||models2?.[model]?.provider||models2?.[modelId]?.llm||models2?.[model]?.llm}async getCustomModels(candidate){const models2={},settingsKey="custom-llm";try{const accountConnector=ConnectorService.getAccountConnector(),team=await accountConnector.requester(candidate).getTeam(),teamSettings=await accountConnector.team(team).getTeamSetting(settingsKey),savedCustomModelsData=JSON.parse(teamSettings||"{}");for(const[entryId,entry]of Object.entries(savedCustomModelsData)){const foundationModel=entry.settings.foundationModel,customModel=entry.settings.customModel,supportsSystemPrompt=customModels[foundationModel]?.supportsSystemPrompt||entry.settings.supportsSystemPrompt,customModelData=customModels[foundationModel]||{};let credentials=null;switch(entry.provider){case TLLMProvider.Bedrock:credentials=TLLMCredentials.BedrockVault;break;case TLLMProvider.VertexAI:credentials=TLLMCredentials.VertexAIVault;break;default:credentials=TLLMCredentials.Internal;break}models2[entry.name]={label:entry.name,modelId:customModel||foundationModel,provider:entry.provider,features:entry.features?.map(feature=>{switch(feature){case"text-completion":return"text";case"tool-use":return"tools";default:return feature}}),tags:Array.isArray(entry?.tags)?["Enterprise",...entry?.tags]:["Enterprise"],tokens:customModelData?.tokens??1e5,completionTokens:customModelData?.completionTokens??4096,enabled:!0,id:entryId,name:entry.name,alias:foundationModel,llm:entry.provider,components:customModelData?.components??[],isCustomLLM:!0,supportsSystemPrompt,settings:entry.settings,credentials}}return models2}catch{return{}}}};__publicField$4(_ModelsProviderConnector,"localCache",new LocalCache);let ModelsProviderConnector=_ModelsProviderConnector;var __defProp$3=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$1=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$1(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$3(target,key,result),result},__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);const console$3=Logger("SmythModelsProvider"),_JSONModelsProvider=class _JSONModelsProvider2 extends ModelsProviderConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$3(this,"name","JSONModelsProvider"),__publicField$3(this,"models"),this.models=JSON.parse(JSON.stringify(models)),typeof this._settings.models=="string"?this.initDirWatcher(this._settings.models):typeof this._settings.models=="object"?(this._settings.mode==="merge"?this.models={...this.models,...this._settings.models}:this.models=this._settings.models,this.started=!0):this.started=!0}async start(){super.start()}async addModels(acRequest,models2){await this.ready();const validModels=await this.getValidModels(models2)||{};Object.keys(validModels).length>0&&(this.models={...this.models,...validModels})}async getModels(acRequest){return await this.ready(),this.models}async getResourceACL(resourceId,candidate){ConnectorService.getAccountConnector();const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}async reindexModels(dir){try{console$3.debug(`Reindexing models from directory: ${dir}`);const scannedModels=await this.scanDirectoryForModels(dir);this._settings?.mode==="merge"?this.models={...this.models,...scannedModels}:this.models=scannedModels,_JSONModelsProvider2.localCache.clear(),console$3.debug(`Successfully reindexed models. Total models: ${Object.keys(this.models).length}`)}catch(error){console$3.error(`Error reindexing models from directory "${dir}":`,error)}}async scanDirectoryForModels(dir){const scannedModels={};try{const entries=await fs$1.readdir(dir,{withFileTypes:!0});for(const entry of entries){const fullPath=path.join(dir,entry.name);if(entry.isDirectory()){const subDirModels=await this.scanDirectoryForModels(fullPath);Object.assign(scannedModels,subDirModels)}else if(entry.isFile()&&entry.name.endsWith(".json")){const fileContent=await fs$1.readFile(fullPath,"utf-8"),modelData=JSON.parse(fileContent),validModels=await this.getValidModels(modelData);Object.assign(scannedModels,validModels)}}}catch(error){console$3.warn(`Error scanning directory "${dir}":`,error)}return scannedModels}async getValidModels(modelData){const validModels={};try{if(modelData.modelId)this.isValidSingleModel(modelData)?(validModels[modelData.modelId]=modelData,console$3.debug(`Loaded model: ${modelData.modelId}`)):console$3.warn("Invalid model format",modelData);else if(typeof modelData=="object"&&!Array.isArray(modelData))for(const[modelId,model]of Object.entries(modelData))try{this.isValidSingleModel(model)?(validModels[modelId]=model,console$3.debug(`Loaded model: ${modelId}`)):console$3.warn(`Invalid model format for model "${modelId}"`)}catch(error){console$3.warn(`Error processing model "${modelId}":`,error)}else console$3.warn("Invalid format (not a model or object of models)")}catch(error){console$3.warn("Error loading model:",error)}return validModels}isValidSingleModel(data){return data&&typeof data=="object"&&typeof data.modelId=="string"&&(data.provider===void 0||typeof data.provider=="string")}isValidModel(data){return this.isValidSingleModel(data)}initDirWatcher(dir){try{const stats=fs__default.statSync(dir);if(!stats.isDirectory()){if(stats.isFile()){const fileContent=fs__default.readFileSync(dir,"utf-8"),modelData=JSON.parse(fileContent);this._settings?.mode==="merge"?this.models={...this.models,...modelData}:this.models=modelData,this.started=!0;return}console$3.warn(`Path "${dir}" is neither a file nor a directory`);return}}catch(error){console$3.warn(`Path "${dir}" does not exist or cannot be accessed:`,error.message);return}const debouncedReindex=debounce(this.reindexModels.bind(this,dir),1e3,{leading:!1,maxWait:5e3});chokidar.watch(dir,{ignored:/(^|[\/\\])\../,persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:2e3,pollInterval:100}}).on("add",path2=>{console$3.debug(`File ${path2} has been added`),debouncedReindex()}).on("change",path2=>{console$3.debug(`File ${path2} has been changed`),debouncedReindex()}).on("unlink",path2=>{console$3.debug(`File ${path2} has been removed`),debouncedReindex()}).on("ready",async()=>{console$3.debug(`Watcher ready. Performing initial scan of ${dir}`),await this.reindexModels(dir),this.started=!0})}};__decorateClass$1([SecureConnector.AccessControl],_JSONModelsProvider.prototype,"addModels"),__decorateClass$1([SecureConnector.AccessControl],_JSONModelsProvider.prototype,"getModels");let JSONModelsProvider=_JSONModelsProvider;class ModelsProviderService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.ModelsProvider,"JSONModelsProvider",JSONModelsProvider)}}class CodeConnector extends SecureConnector{requester(candidate){return{prepare:async(codeUID,input,config2)=>await this.prepare(candidate.readRequest,codeUID,input,config2),deploy:async(codeUID,input,config2)=>await this.deploy(candidate.writeRequest,codeUID,input,config2),execute:async(codeUID,inputs,config2)=>await this.execute(candidate.readRequest,codeUID,inputs,config2),executeDeployment:async(codeUID,deploymentId,inputs,config2)=>await this.executeDeployment(candidate.readRequest,codeUID,deploymentId,inputs,config2),listDeployments:async(codeUID,config2)=>await this.listDeployments(candidate.readRequest,codeUID,config2),getDeployment:async(codeUID,deploymentId,config2)=>await this.getDeployment(candidate.readRequest,codeUID,deploymentId,config2),deleteDeployment:async(codeUID,deploymentId,config2)=>{await this.deleteDeployment(candidate.writeRequest,codeUID,deploymentId,config2)}}}}var __defProp$2=Object.defineProperty,__defNormalProp$2=(obj,key,value)=>key in obj?__defProp$2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$2=(obj,key,value)=>__defNormalProp$2(obj,typeof key!="symbol"?key+"":key,value);const console$2=Logger("AWSLambda");class AWSLambdaCode extends CodeConnector{constructor(config2){super(config2),__publicField$2(this,"name","AWSLambda"),__publicField$2(this,"awsConfigs"),this.awsConfigs=config2}async prepare(acRequest,codeUID,input,config2){return{prepared:!0,errors:[],warnings:[]}}async deploy(acRequest,codeUID,input,config2){const agentId=acRequest.candidate.id,functionName=getLambdaFunctionName(agentId,codeUID),[isLambdaExists,exisitingCodeHash]=await Promise.all([getDeployedFunction(functionName,this.awsConfigs),getDeployedCodeHash(agentId,codeUID)]),codeHash=generateCodeHash(input.code,input.dependencies,Object.keys(input.inputs));if(isLambdaExists&&exisitingCodeHash===codeHash)return{id:functionName,runtime:config2.runtime,createdAt:new Date,status:"deployed"};const baseFolder=`${process.cwd()}/lambda_archives`;fs__default.existsSync(baseFolder)||fs__default.mkdirSync(baseFolder);const directory=`${baseFolder}/${functionName}__${Date.now()}`;try{const libraries=extractNpmImports(input.dependencies),lambdaCode=generateLambdaCode(input.dependencies,input.code,Object.keys(input.inputs));fs__default.mkdirSync(directory),fs__default.writeFileSync(path.join(directory,"index.mjs"),lambdaCode),execSync("npm init -y",{cwd:directory}),execSync(`npm install ${libraries.join(" ")}`,{cwd:directory});const zipFilePath=await zipCode(directory);return await createOrUpdateLambdaFunction(functionName,zipFilePath,this.awsConfigs),await setDeployedCodeHash(agentId,codeUID,codeHash),console$2.log("Lambda function updated successfully!"),{id:functionName,runtime:config2.runtime,createdAt:new Date,status:"deploying"}}catch(error){throw error}finally{fs__default.rmSync(`${directory}`,{recursive:!0,force:!0}),fs__default.unlinkSync(`${directory}.zip`)}}async execute(acRequest,codeUID,inputs,config2){try{const agentId=acRequest.candidate.id,functionName=getLambdaFunctionName(agentId,codeUID),lambdaResponse=JSON.parse(await invokeLambdaFunction(functionName,inputs,this.awsConfigs)),executionTime=lambdaResponse.executionTime;return await updateDeployedCodeTTL(agentId,codeUID,cacheTTL),console$2.debug(`Code result:
164
+ const customModels={"ai21.jamba-1-5-mini-v1:0":{llm:"Bedrock",label:"AI21 Labs - Jamba 1.5 Mini",tokens:256e3,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","AgentPlugin","GenAILLM"],tags:["new"]},"ai21.jamba-1-5-large-v1:0":{llm:"Bedrock",label:"AI21 Labs - Jamba 1.5 Large",tokens:256e3,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","AgentPlugin","GenAILLM"],tags:["new"]},"ai21.jamba-instruct-v1:0":{llm:"Bedrock",label:"AI21 Labs - Jamba-Instruct",tokens:256e3,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"ai21.j2-ultra-v1":{llm:"Bedrock",label:"AI21 Labs - Jurassic-2 Ultra",tokens:8191,completionTokens:8191,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"ai21.j2-mid-v1":{llm:"Bedrock",label:"AI21 Labs - Jurassic-2 Mid",tokens:8191,completionTokens:8191,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"amazon.titan-text-premier-v1:0":{llm:"Bedrock",label:"Amazon - Titan Text Premier",tokens:32e3,completionTokens:3e3,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"amazon.titan-text-express-v1":{llm:"Bedrock",label:"Amazon - Titan Text G1 - Express",tokens:8192,completionTokens:4096,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"amazon.titan-text-lite-v1":{llm:"Bedrock",label:"Amazon - Titan Text G1 - Lite",tokens:4096,completionTokens:4096,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"us.anthropic.claude-3-5-haiku-20241022-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3.5 Haiku",tokens:2e5,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0","new"]},"us.anthropic.claude-3-5-sonnet-20241022-v2:0":{llm:"Bedrock",label:"Anthropic - Claude 3.5 Sonnet",tokens:2e5,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v2:0","new"]},"anthropic.claude-3-5-sonnet-20240620-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3.5 Sonnet",tokens:2e5,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-3-sonnet-20240229-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3 Sonnet",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-3-haiku-20240307-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3 Haiku",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-3-opus-20240229-v1:0":{llm:"Bedrock",label:"Anthropic - Claude 3 Opus",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"],tags:["v1:0"]},"anthropic.claude-v2:1":{llm:"Bedrock",label:"Anthropic - Claude 2.1",tokens:2e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"],tags:["v2:1"]},"anthropic.claude-v2":{llm:"Bedrock",label:"Anthropic - Claude 2.0",tokens:1e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"anthropic.claude-instant-v1":{llm:"Bedrock",label:"Anthropic - Claude Instant",tokens:1e5,completionTokens:4096,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"cohere.command-r-plus-v1:0":{llm:"Bedrock",label:"Cohere - Command R+",tokens:128e3,completionTokens:4e3,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"]},"cohere.command-r-v1:0":{llm:"Bedrock",label:"Cohere - Command R",tokens:128e3,completionTokens:4e3,supportsSystemPrompt:!0,supportsStreamingToolUse:!0,components:["PromptGenerator","LLMAssistant","AgentPlugin","Chatbot"]},"cohere.command-text-v14":{llm:"Bedrock",label:"Cohere - Command",tokens:4e3,completionTokens:4e3,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"cohere.command-light-text-v14":{llm:"Bedrock",label:"Cohere - Command Light",tokens:4e3,completionTokens:4e3,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"us.meta.llama3-2-1b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3.2 1B Instruct",tokens:2e5,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"],tags:["new"]},"us.meta.llama3-2-3b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3.2 3B Instruct",tokens:2e5,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"],tags:["new"]},"meta.llama3-8b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3 8B Instruct",tokens:8192,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"meta.llama3-70b-instruct-v1:0":{llm:"Bedrock",label:"Meta - Llama 3 70B Instruct",tokens:8192,completionTokens:2048,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral.mistral-7b-instruct-v0:2":{llm:"Bedrock",label:"Mistral AI - Mistral 7B Instruct",tokens:32e3,completionTokens:8192,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"mistral.mixtral-8x7b-instruct-v0:1":{llm:"Bedrock",label:"Mistral AI - Mixtral 8X7B Instruct",tokens:32e3,completionTokens:4096,supportsSystemPrompt:!1,supportsStreamingToolUse:!1,components:["PromptGenerator","GenAILLM"]},"mistral.mistral-large-2402-v1:0":{llm:"Bedrock",label:"Mistral AI - Mistral Large",tokens:32e3,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral.mistral-small-2402-v1:0":{llm:"Bedrock",label:"Mistral AI - Mistral Small",tokens:32e3,completionTokens:8192,supportsSystemPrompt:!0,supportsStreamingToolUse:!1,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"gemini-1.5-flash":{llm:"VertexAI",label:"Gemini 1.5 Flash",supportsSystemPrompt:!0,tokens:1048576,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"gemini-1.5-pro":{llm:"VertexAI",label:"Gemini 1.5 Pro",supportsSystemPrompt:!0,tokens:2097152,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"gemini-1.0-pro":{llm:"VertexAI",label:"Gemini 1.0 Pro",supportsSystemPrompt:!0,tokens:32760,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-5-haiku":{llm:"VertexAI",label:"Claude 3.5 Haiku",supportsSystemPrompt:!0,tokens:2e5,completionTokens:8192,tags:["new"],components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-5-sonnet-v2":{llm:"VertexAI",label:"Claude 3.5 Sonnet",supportsSystemPrompt:!0,tokens:2e5,completionTokens:8192,tags:["v2","new"],components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-5-sonnet":{llm:"VertexAI",label:"Claude 3.5 Sonnet",supportsSystemPrompt:!0,tokens:2e5,completionTokens:8192,tags:["v1"],components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-sonnet":{llm:"VertexAI",label:"Claude 3 Sonnet",supportsSystemPrompt:!0,tokens:2e5,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-opus":{llm:"VertexAI",label:"Claude 3 Opus",supportsSystemPrompt:!0,tokens:2e5,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"claude-3-haiku":{llm:"VertexAI",label:"Claude 3 Haiku",supportsSystemPrompt:!0,tokens:2e5,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},gemma2:{llm:"VertexAI",label:"Gemma 2",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},gemma:{llm:"VertexAI",label:"Gemma",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},codegemma:{llm:"VertexAI",label:"CodeGemma",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"llama3-405b-instruct-maas":{llm:"VertexAI",label:"Llama 3.1 API Service",supportsSystemPrompt:!0,tokens:4096,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},llama3_1:{llm:"VertexAI",label:"Llama 3.1",supportsSystemPrompt:!0,tokens:4096,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"llama-guard":{llm:"VertexAI",label:"Llama Guard",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},llama3:{llm:"VertexAI",label:"Llama 3",supportsSystemPrompt:!0,tokens:8192,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},llama2:{llm:"VertexAI",label:"Llama 2",value:"llama2",supportsSystemPrompt:!0,tokens:4096,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral-large":{llm:"VertexAI",label:"Mistral Large (2407)",supportsSystemPrompt:!0,tokens:128e3,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"mistral-nemo":{llm:"VertexAI",label:"Mistral Nemo",supportsSystemPrompt:!0,tokens:128e3,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},codestral:{llm:"VertexAI",label:"Codestral",supportsSystemPrompt:!0,tokens:32e3,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},mixtral:{llm:"VertexAI",label:"Mixtral",supportsSystemPrompt:!0,tokens:32e3,completionTokens:4096,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"chat-bison":{llm:"VertexAI",label:"PaLM 2 Chat Bison",supportsSystemPrompt:!0,tokens:4096,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"text-bison":{llm:"VertexAI",label:"PaLM 2 Text Bison",supportsSystemPrompt:!0,tokens:32768,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},phi3:{llm:"VertexAI",label:"Phi-3",supportsSystemPrompt:!0,tokens:128e3,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},qwen2:{llm:"VertexAI",label:"Qwen2",supportsSystemPrompt:!0,tokens:131072,completionTokens:8192,components:["PromptGenerator","LLMAssistant","GenAILLM"]},mammut:{llm:"VertexAI",label:"MaMMUT",supportsSystemPrompt:!0,tokens:4096,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"lmsys-vicuna-7b":{llm:"VertexAI",label:"Vicuna",supportsSystemPrompt:!0,tokens:4096,completionTokens:2048,components:["PromptGenerator","LLMAssistant","GenAILLM"]},"bio-gpt":{llm:"VertexAI",label:"BioGPT",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"microsoft-biomedclip":{llm:"VertexAI",label:"BiomedCLIP",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},mistral:{llm:"VertexAI",label:"Mistral Self-host (7B & Nemo)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},nllb:{llm:"VertexAI",label:"NLLB",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"codellama-7b-hf":{llm:"VertexAI",label:"Code Llama",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"palmyra-med":{llm:"VertexAI",label:"Palmyra Med (Writer)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"llama-2-quantized":{llm:"VertexAI",label:"Llama 2 (Quantized)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"bert-base-uncased":{llm:"VertexAI",label:"BERT (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"falcon-instruct-7b-peft":{llm:"VertexAI",label:"Falcon-instruct (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},openllama:{llm:"VertexAI",label:"OpenLLaMA (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"roberta-large":{llm:"VertexAI",label:"RoBERTa-large (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"xlm-roberta-large":{llm:"VertexAI",label:"XLM-RoBERTa-large (PEFT)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"bart-large-cnn":{llm:"VertexAI",label:"Bart-large-cnn",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"dolly-v2":{llm:"VertexAI",label:"Dolly-v2",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},imagetext:{llm:"VertexAI",label:"Imagen for Captioning & VQA",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"codechat-bison":{llm:"VertexAI",label:"Codey for Code Chat",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"code-bison":{llm:"VertexAI",label:"Codey for Code Generation",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"code-gecko":{llm:"VertexAI",label:"Codey for Code Completion",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"text-unicorn":{llm:"VertexAI",label:"PaLM 2 Text Unicorn",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"textembedding-gecko":{llm:"VertexAI",label:"Embeddings for Text",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"t5-flan":{llm:"VertexAI",label:"T5-FLAN",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"t5-1.1":{llm:"VertexAI",label:"T5-1.1",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"blip2-opt-2.7-b":{llm:"VertexAI",label:"BLIP2",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"instruct-pix2pix":{llm:"VertexAI",label:"InstructPix2Pix",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"bert-base":{llm:"VertexAI",label:"BERT",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"mediapipe-mobile-bert-classifier":{llm:"VertexAI",label:"MobileBERT Classifier (MediaPipe)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"mediapipe-average-word-embedding-classifier":{llm:"VertexAI",label:"Average Word Embedding Classifier (MediaPipe)",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},pic2word:{llm:"VertexAI",label:"Pic2Word Composed Image Retrieval",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"text-translation":{llm:"VertexAI",label:"Text Translation",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-moderate-text":{llm:"VertexAI",label:"Text Moderation",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-analyze-syntax":{llm:"VertexAI",label:"Syntax analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-analyze-entity-sentiment":{llm:"VertexAI",label:"Entity sentiment analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-analyze-sentiment":{llm:"VertexAI",label:"Sentiment analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"language-v1-classify-text-v1":{llm:"VertexAI",label:"Content classification",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]},"pt-test":{llm:"VertexAI",label:"Entity analysis",supportsSystemPrompt:!1,tokens:4096,completionTokens:4096,components:["PromptGenerator","GenAILLM"]}};var __defProp$4=Object.defineProperty,__defNormalProp$4=(obj,key,value)=>key in obj?__defProp$4(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$4=(obj,key,value)=>__defNormalProp$4(obj,key+"",value);const _ModelsProviderConnector=class _ModelsProviderConnector2 extends SecureConnector{requester(candidate){const cacheKey=`ModelsProviderConnector:${candidate.toString()}`;if(_ModelsProviderConnector2.localCache.has(cacheKey))return _ModelsProviderConnector2.localCache.get(cacheKey,60*60*1e3);let teamModels=null,customModels2=null;const loadTeamModels=async()=>{if(!teamModels)try{const builtinmodels=await this.getModels(candidate.readRequest);customModels2=await this.getCustomModels(candidate),teamModels={...builtinmodels,...customModels2}}catch{return null}return teamModels};loadTeamModels();const instance={getModels:async()=>await loadTeamModels(),getCustomModels:async()=>await this.getCustomModels(candidate),addModels:async models2=>await this.addModels(candidate.readRequest,models2),getModelInfo:async(model,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey)},getModelId:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.getModelId(candidate.readRequest,teamModels2,model)},getProvider:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.getProvider(candidate.readRequest,teamModels2,model)},isStandardLLM:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return!(await this.getModelInfo(candidate.readRequest,teamModels2,model)).isCustomLLM},adjustMaxCompletionTokens:async(model,maxCompletionTokens,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{},modelInfo=await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey);return Math.min(maxCompletionTokens||512,modelInfo?.completionTokens||modelInfo?.tokens||maxCompletionTokens||512)},getMaxContextTokens:async(model,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return(await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey))?.tokens||1024},getMaxCompletionTokens:async(model,hasAPIKey=!1)=>{const teamModels2=typeof model=="string"?await loadTeamModels():{},modelInfo=await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey);return modelInfo?.completionTokens||modelInfo?.tokens||512},validateTokensLimit:async({model,promptTokens,completionTokens,hasAPIKey})=>{const teamModels2=typeof model=="string"?await loadTeamModels():{},allowedContextTokens=(await this.getModelInfo(candidate.readRequest,teamModels2,model,hasAPIKey))?.tokens,totalTokens=promptTokens+completionTokens,teamAPIKeyExceededMessage=`This models' maximum content length is ${allowedContextTokens} tokens. (This is the sum of your prompt with all variables and the maximum output tokens you've set in Advanced Settings) However, you requested approx ${totalTokens} tokens (${promptTokens} in the prompt, ${completionTokens} in the output). Please reduce the length of either the input prompt or the Maximum output tokens.`,noAPIKeyExceededMessage=`Input exceeds max tokens limit of ${allowedContextTokens}. Please add your API key and select Personal tagged models to unlock full length.`;if(totalTokens>allowedContextTokens)throw new Error(hasAPIKey?teamAPIKeyExceededMessage:noAPIKeyExceededMessage)}};return _ModelsProviderConnector2.localCache.set(cacheKey,instance,60*60*1e3),instance}async getModelInfo(acRequest,models2,model,hasAPIKey=!1){if(typeof model=="object"&&model.modelId)return model;const modelId=await this.getModelId(acRequest,models2,model),alias=models2?.[model]?.alias,aliasModelInfo=models2?.[alias],modelInfo=models2?.[model],aliasKeyOptions=aliasModelInfo&&hasAPIKey?aliasModelInfo?.keyOptions:null,modelKeyOptions=modelInfo?.keyOptions||aliasKeyOptions;return{...aliasModelInfo,...modelInfo,...aliasKeyOptions,...modelKeyOptions,modelId}}async getModelId(acRequest,models2,model){if(typeof model=="object"&&model.modelId)return model.modelId;const modelId=models2?.[model]?.modelId||model,alias=models2?.[model]?.alias;return alias?models2?.[alias]?.modelId||alias||model:modelId}async getProvider(acRequest,models2,model){if(typeof model=="object"&&model.provider)return model.provider;const modelId=await this.getModelId(acRequest,models2,model);return models2?.[modelId]?.provider||models2?.[model]?.provider||models2?.[modelId]?.llm||models2?.[model]?.llm}async getCustomModels(candidate){const models2={},settingsKey="custom-llm";try{const accountConnector=ConnectorService.getAccountConnector(),team=await accountConnector.requester(candidate).getTeam(),teamSettings=await accountConnector.team(team).getTeamSetting(settingsKey),savedCustomModelsData=JSON.parse(teamSettings||"{}");for(const[entryId,entry]of Object.entries(savedCustomModelsData)){const foundationModel=entry.settings.foundationModel,customModel=entry.settings.customModel,supportsSystemPrompt=customModels[foundationModel]?.supportsSystemPrompt||entry.settings.supportsSystemPrompt,customModelData=customModels[foundationModel]||{};let credentials=null;switch(entry.provider){case TLLMProvider.Bedrock:credentials=TLLMCredentials.BedrockVault;break;case TLLMProvider.VertexAI:credentials=TLLMCredentials.VertexAIVault;break;default:credentials=TLLMCredentials.Internal;break}models2[entry.name]={label:entry.name,modelId:customModel||foundationModel,provider:entry.provider,features:entry.features?.map(feature=>{switch(feature){case"text-completion":return"text";case"tool-use":return"tools";default:return feature}}),tags:Array.isArray(entry?.tags)?["Enterprise",...entry?.tags]:["Enterprise"],tokens:customModelData?.tokens??1e5,completionTokens:customModelData?.completionTokens??4096,enabled:!0,id:entryId,name:entry.name,alias:foundationModel,llm:entry.provider,components:customModelData?.components??[],isCustomLLM:!0,supportsSystemPrompt,settings:entry.settings,credentials}}return models2}catch{return{}}}};__publicField$4(_ModelsProviderConnector,"localCache",new LocalCache);let ModelsProviderConnector=_ModelsProviderConnector;var __defProp$3=Object.defineProperty,__getOwnPropDesc$1=Object.getOwnPropertyDescriptor,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$1=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$1(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$3(target,key,result),result},__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);const console$3=Logger("SmythModelsProvider"),_JSONModelsProvider=class _JSONModelsProvider2 extends ModelsProviderConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$3(this,"name","JSONModelsProvider"),__publicField$3(this,"models"),this.models=JSON.parse(JSON.stringify(models)),typeof this._settings.models=="string"?this.initDirWatcher(this._settings.models):typeof this._settings.models=="object"?(this._settings.mode==="merge"?this.models={...this.models,...this._settings.models}:this.models=this._settings.models,this.started=!0):this.started=!0}async start(){super.start()}async addModels(acRequest,models2){await this.ready();const validModels=await this.getValidModels(models2)||{};Object.keys(validModels).length>0&&(this.models={...this.models,...validModels})}async getModels(acRequest){return await this.ready(),this.models}async getResourceACL(resourceId,candidate){ConnectorService.getAccountConnector();const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}async reindexModels(dir){try{console$3.debug(`Reindexing models from directory: ${dir}`);const scannedModels=await this.scanDirectoryForModels(dir);this._settings?.mode==="merge"?this.models={...this.models,...scannedModels}:this.models=scannedModels,_JSONModelsProvider2.localCache.clear(),console$3.debug(`Successfully reindexed models. Total models: ${Object.keys(this.models).length}`)}catch(error){console$3.error(`Error reindexing models from directory "${dir}":`,error)}}async scanDirectoryForModels(dir){const scannedModels={};try{const entries=await fs$1.readdir(dir,{withFileTypes:!0});for(const entry of entries){const fullPath=path.join(dir,entry.name);if(entry.isDirectory()){const subDirModels=await this.scanDirectoryForModels(fullPath);Object.assign(scannedModels,subDirModels)}else if(entry.isFile()&&entry.name.endsWith(".json")){const fileContent=await fs$1.readFile(fullPath,"utf-8"),modelData=JSON.parse(fileContent),validModels=await this.getValidModels(modelData);Object.assign(scannedModels,validModels)}}}catch(error){console$3.warn(`Error scanning directory "${dir}":`,error)}return scannedModels}async getValidModels(modelData){const validModels={};try{if(modelData.modelId)this.isValidSingleModel(modelData)?(validModels[modelData.modelId]=modelData,console$3.debug(`Loaded model: ${modelData.modelId}`)):console$3.warn("Invalid model format",modelData);else if(typeof modelData=="object"&&!Array.isArray(modelData))for(const[modelId,model]of Object.entries(modelData))try{this.isValidSingleModel(model)?(validModels[modelId]=model,console$3.debug(`Loaded model: ${modelId}`)):console$3.warn(`Invalid model format for model "${modelId}"`)}catch(error){console$3.warn(`Error processing model "${modelId}":`,error)}else console$3.warn("Invalid format (not a model or object of models)")}catch(error){console$3.warn("Error loading model:",error)}return validModels}isValidSingleModel(data){return data&&typeof data=="object"&&typeof data.modelId=="string"&&(data.provider===void 0||typeof data.provider=="string")}isValidModel(data){return this.isValidSingleModel(data)}initDirWatcher(dir){try{const stats=fs__default.statSync(dir);if(!stats.isDirectory()){if(stats.isFile()){const fileContent=fs__default.readFileSync(dir,"utf-8"),modelData=JSON.parse(fileContent);this._settings?.mode==="merge"?this.models={...this.models,...modelData}:this.models=modelData,this.started=!0;return}console$3.warn(`Path "${dir}" is neither a file nor a directory`);return}}catch(error){console$3.warn(`Path "${dir}" does not exist or cannot be accessed:`,error.message);return}const debouncedReindex=debounce(this.reindexModels.bind(this,dir),1e3,{leading:!1,maxWait:5e3});chokidar.watch(dir,{ignored:/(^|[\/\\])\../,persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:2e3,pollInterval:100}}).on("add",path2=>{console$3.debug(`File ${path2} has been added`),debouncedReindex()}).on("change",path2=>{console$3.debug(`File ${path2} has been changed`),debouncedReindex()}).on("unlink",path2=>{console$3.debug(`File ${path2} has been removed`),debouncedReindex()}).on("ready",async()=>{console$3.debug(`Watcher ready. Performing initial scan of ${dir}`),await this.reindexModels(dir),this.started=!0})}};__decorateClass$1([SecureConnector.AccessControl],_JSONModelsProvider.prototype,"addModels"),__decorateClass$1([SecureConnector.AccessControl],_JSONModelsProvider.prototype,"getModels");let JSONModelsProvider=_JSONModelsProvider;class ModelsProviderService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.ModelsProvider,"JSONModelsProvider",JSONModelsProvider)}}class CodeConnector extends SecureConnector{requester(candidate){return{prepare:async(codeUID,input,config2)=>await this.prepare(candidate.readRequest,codeUID,input,config2),deploy:async(codeUID,input,config2)=>await this.deploy(candidate.writeRequest,codeUID,input,config2),execute:async(codeUID,inputs,config2)=>await this.execute(candidate.readRequest,codeUID,inputs,config2),executeDeployment:async(codeUID,deploymentId,inputs,config2)=>await this.executeDeployment(candidate.readRequest,codeUID,deploymentId,inputs,config2),listDeployments:async(codeUID,config2)=>await this.listDeployments(candidate.readRequest,codeUID,config2),getDeployment:async(codeUID,deploymentId,config2)=>await this.getDeployment(candidate.readRequest,codeUID,deploymentId,config2),deleteDeployment:async(codeUID,deploymentId,config2)=>{await this.deleteDeployment(candidate.writeRequest,codeUID,deploymentId,config2)}}}}const cachePrefix="serverless_code",cacheTTL=60*60*24*16;function getLambdaFunctionName(agentId,componentId){return`${agentId}-${componentId}`}function generateCodeHash(code_body,code_imports,codeInputs){const importsHash=getSanitizeCodeHash(code_imports),bodyHash=getSanitizeCodeHash(code_body),inputsHash=getSanitizeCodeHash(JSON.stringify(codeInputs));return`imports-${importsHash}__body-${bodyHash}__inputs-${inputsHash}`}function getSanitizeCodeHash(code){let output="",isSingleQuote=!1,isDoubleQuote=!1,isTemplateLiteral=!1,isComment=!1,prevChar="";for(let i=0;i<code.length;i++){let char=code[i],nextChar=code[i+1];if(char==="'"&&!isDoubleQuote&&!isTemplateLiteral&&prevChar!=="\\"&&(isSingleQuote=!isSingleQuote),char==='"'&&!isSingleQuote&&!isTemplateLiteral&&prevChar!=="\\"&&(isDoubleQuote=!isDoubleQuote),char==="`"&&!isSingleQuote&&!isDoubleQuote&&prevChar!=="\\"&&(isTemplateLiteral=!isTemplateLiteral),char==="/"&&nextChar==="/"&&!isSingleQuote&&!isDoubleQuote&&!isTemplateLiteral&&(isComment=!0),char==="/"&&nextChar==="*"&&!isSingleQuote&&!isDoubleQuote&&!isTemplateLiteral&&(isComment=!0),char==="*"&&nextChar==="/"&&isComment){isComment=!1,i++;continue}char===`
165
+ `&&isComment&&(isComment=!1),isComment||(output+=char),prevChar=char}return crypto$1.createHash("md5").update(output.replace(/\s+/g," ").trim()).digest("hex")}async function getDeployedCodeHash(agentId,componentId){return await ConnectorService.getCacheConnector().user(AccessCandidate.agent(agentId)).get(`${cachePrefix}_${agentId}-${componentId}`)}async function setDeployedCodeHash(agentId,componentId,codeHash){await ConnectorService.getCacheConnector().user(AccessCandidate.agent(agentId)).set(`${cachePrefix}_${agentId}-${componentId}`,codeHash,null,null,cacheTTL)}function extractNpmImports(code){const importRegex=/import\s+(?:[\w*\s{},]*\s+from\s+)?['"]([^'"]+)['"]/g,requireRegex=/require\(['"]([^'"]+)['"]\)/g,dynamicImportRegex=/import\(['"]([^'"]+)['"]\)/g;let libraries=new Set,match;function extractPackageName(modulePath){return modulePath.startsWith("@")?modulePath.split("/").slice(0,2).join("/"):modulePath.split("/")[0]}for(;(match=importRegex.exec(code))!==null;)libraries.add(extractPackageName(match[1]));for(;(match=requireRegex.exec(code))!==null;)libraries.add(extractPackageName(match[1]));for(;(match=dynamicImportRegex.exec(code))!==null;)libraries.add(extractPackageName(match[1]));return Array.from(libraries)}function generateLambdaCode(code_imports,code_body,input_variables){return`${code_imports}
166
+ export const handler = async (event, context) => {
167
+ try {
168
+ context.callbackWaitsForEmptyEventLoop = false;
169
+ let startTime = Date.now();
170
+ const result = await (async () => {
171
+ ${input_variables&&input_variables.length?input_variables.map(variable=>`const ${variable} = event.${variable};`).join(`
172
+ `):""}
173
+ ${code_body}
174
+ })();
175
+ let endTime = Date.now();
176
+ return {
177
+ result,
178
+ executionTime: endTime - startTime
179
+ }
180
+ } catch (e) {
181
+ throw e;
182
+ }
183
+ };`}async function zipCode(directory){return new Promise((resolve,reject)=>{zl.archiveFolder(directory,`${directory}.zip`).then(function(){resolve(`${directory}.zip`)},function(err){reject(err)})})}async function createOrUpdateLambdaFunction(functionName,zipFilePath,awsConfigs){const client=new LambdaClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),functionContent=fs__default.readFileSync(zipFilePath);try{const exisitingFunction=await getDeployedFunction(functionName,awsConfigs);if(exisitingFunction){exisitingFunction.status==="InProgress"&&await verifyFunctionDeploymentStatus(functionName,client);const updateCodeParams={FunctionName:functionName,ZipFile:functionContent},updateFunctionCodeCommand=new UpdateFunctionCodeCommand(updateCodeParams);await client.send(updateFunctionCodeCommand),await verifyFunctionDeploymentStatus(functionName,client)}else{let roleArn="";try{const iamClient=new IAMClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),getRoleCommand=new GetRoleCommand({RoleName:`smyth-${functionName}-role`});roleArn=(await iamClient.send(getRoleCommand)).Role.Arn}catch(error){if(error.name==="NoSuchEntityException"){const iamClient=new IAMClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),createRoleCommand=new CreateRoleCommand({RoleName:`smyth-${functionName}-role`,AssumeRolePolicyDocument:getLambdaRolePolicy()}),roleResponse=await iamClient.send(createRoleCommand);await waitForRoleDeploymentStatus(`smyth-${functionName}-role`,iamClient),roleArn=roleResponse.Role.Arn}else throw error}const functionParams={Code:{ZipFile:functionContent},FunctionName:functionName,Handler:"index.handler",Role:roleArn,Runtime:Runtime.nodejs18x,Layers:[],Timeout:900,Tags:{"auto-delete":"true"},MemorySize:256},functionCreateCommand=new CreateFunctionCommand(functionParams),functionResponse=await client.send(functionCreateCommand);await verifyFunctionDeploymentStatus(functionName,client)}}catch(error){throw error}}async function waitForRoleDeploymentStatus(roleName,client){return new Promise((resolve,reject)=>{try{let interval=setInterval(async()=>{const getRoleCommand=new GetRoleCommand({RoleName:roleName});if((await client.send(getRoleCommand)).Role.AssumeRolePolicyDocument)return clearInterval(interval),resolve(!0)},7e3)}catch{return!1}})}async function verifyFunctionDeploymentStatus(functionName,client){return new Promise((resolve,reject)=>{try{let interval=setInterval(async()=>{const getFunctionCommand=new GetFunctionCommand({FunctionName:functionName});if((await client.send(getFunctionCommand)).Configuration.LastUpdateStatus==="Successful")return clearInterval(interval),resolve(!0)},5e3)}catch{return!1}})}function getLambdaRolePolicy(){return JSON.stringify({Version:"2012-10-17",Statement:[{Effect:"Allow",Principal:{Service:"lambda.amazonaws.com"},Action:"sts:AssumeRole"}]})}async function updateDeployedCodeTTL(agentId,componentId,ttl){await ConnectorService.getCacheConnector().user(AccessCandidate.agent(agentId)).updateTTL(`${cachePrefix}_${agentId}-${componentId}`,ttl)}async function invokeLambdaFunction(functionName,inputs,awsCredentials){try{const client=new LambdaClient({region:awsCredentials.region,...awsCredentials.accessKeyId&&{credentials:{accessKeyId:awsCredentials.accessKeyId,secretAccessKey:awsCredentials.secretAccessKey}}}),invokeCommand=new InvokeCommand({FunctionName:functionName,Payload:new TextEncoder().encode(`${JSON.stringify(inputs)}`),InvocationType:"RequestResponse"}),response=await client.send(invokeCommand);if(response.FunctionError)throw new Error(new TextDecoder().decode(response.Payload));return new TextDecoder().decode(response.Payload)}catch(error){throw error}}async function getDeployedFunction(functionName,awsConfigs){try{const client=new LambdaClient({region:awsConfigs.region,credentials:{accessKeyId:awsConfigs.accessKeyId,secretAccessKey:awsConfigs.secretAccessKey}}),getFunctionCommand=new GetFunctionCommand({FunctionName:functionName}),lambdaResponse=await client.send(getFunctionCommand);return{status:lambdaResponse.Configuration.LastUpdateStatus,functionName:lambdaResponse.Configuration.FunctionName,functionVersion:lambdaResponse.Configuration.Version,updatedAt:lambdaResponse.Configuration.LastModified,role:lambdaResponse.Configuration.Role,runtime:lambdaResponse.Configuration.Runtime,version:lambdaResponse.Configuration.Version}}catch{return null}}function extractKeyFromTemplateVar(input){const regex=/\{\{KEY\((.*?)\)\}\}/,match=input.match(regex);return match?match[1]:input}var __defProp$2=Object.defineProperty,__defNormalProp$2=(obj,key,value)=>key in obj?__defProp$2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$2=(obj,key,value)=>__defNormalProp$2(obj,typeof key!="symbol"?key+"":key,value);const console$2=Logger("AWSLambda");class AWSLambdaCode extends CodeConnector{constructor(config2){super(config2),__publicField$2(this,"name","AWSLambda"),__publicField$2(this,"awsConfigs"),this.awsConfigs=config2}async prepare(acRequest,codeUID,input,config2){return{prepared:!0,errors:[],warnings:[]}}async deploy(acRequest,codeUID,input,config2){const agentId=acRequest.candidate.id,functionName=getLambdaFunctionName(agentId,codeUID),[isLambdaExists,exisitingCodeHash]=await Promise.all([getDeployedFunction(functionName,this.awsConfigs),getDeployedCodeHash(agentId,codeUID)]),codeHash=generateCodeHash(input.code,input.dependencies,Object.keys(input.inputs));if(isLambdaExists&&exisitingCodeHash===codeHash)return{id:functionName,runtime:config2.runtime,createdAt:new Date,status:"deployed"};const baseFolder=`${process.cwd()}/lambda_archives`;fs__default.existsSync(baseFolder)||fs__default.mkdirSync(baseFolder);const directory=`${baseFolder}/${functionName}__${Date.now()}`;try{const libraries=extractNpmImports(input.dependencies),lambdaCode=generateLambdaCode(input.dependencies,input.code,Object.keys(input.inputs));fs__default.mkdirSync(directory),fs__default.writeFileSync(path.join(directory,"index.mjs"),lambdaCode),execSync("npm init -y",{cwd:directory}),execSync(`npm install ${libraries.join(" ")}`,{cwd:directory});const zipFilePath=await zipCode(directory);return await createOrUpdateLambdaFunction(functionName,zipFilePath,this.awsConfigs),await setDeployedCodeHash(agentId,codeUID,codeHash),console$2.log("Lambda function updated successfully!"),{id:functionName,runtime:config2.runtime,createdAt:new Date,status:"deploying"}}catch(error){throw error}finally{fs__default.rmSync(`${directory}`,{recursive:!0,force:!0}),fs__default.unlinkSync(`${directory}.zip`)}}async execute(acRequest,codeUID,inputs,config2){try{const agentId=acRequest.candidate.id,functionName=getLambdaFunctionName(agentId,codeUID),lambdaResponse=JSON.parse(await invokeLambdaFunction(functionName,inputs,this.awsConfigs)),executionTime=lambdaResponse.executionTime;return await updateDeployedCodeTTL(agentId,codeUID,cacheTTL),console$2.debug(`Code result:
184
184
  ${typeof lambdaResponse.result=="object"?JSON.stringify(lambdaResponse.result,null,2):lambdaResponse.result}
185
185
  `),console$2.debug(`Execution time: ${executionTime}ms
186
186
  `),{output:lambdaResponse.result,executionTime,success:!0}}catch(error){return console$2.error(`Error running code
187
187
  ${error}
188
- `),{output:void 0,executionTime:0,success:!1,errors:[error?.response?.data||error?.message||error.toString()]}}}async executeDeployment(acRequest,codeUID,deploymentId,inputs,config2){return await this.execute(acRequest,codeUID,inputs,config2)}async listDeployments(acRequest,codeUID,config2){const agentId=acRequest.candidate.id,lambdaFunction=await getDeployedFunction(getLambdaFunctionName(agentId,codeUID),config2.platformConfig);return lambdaFunction?[{id:lambdaFunction.functionName,runtime:lambdaFunction.runtime,createdAt:new Date(lambdaFunction.updatedAt),status:lambdaFunction.status,lastUpdated:new Date(lambdaFunction.updatedAt)}]:[]}async getDeployment(acRequest,codeUID,deploymentId,config2){const agentId=acRequest.candidate.id,lambdaFunction=await getDeployedFunction(getLambdaFunctionName(agentId,codeUID),config2.platformConfig);return lambdaFunction?{id:lambdaFunction.functionName,runtime:lambdaFunction.runtime,createdAt:new Date(lambdaFunction.updatedAt),status:lambdaFunction.status,lastUpdated:new Date(lambdaFunction.updatedAt)}:null}async deleteDeployment(acRequest,codeUID,deploymentId){}async getResourceACL(resourceId,candidate){const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}class CodeService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Code,"AWSLambda",AWSLambdaCode)}}const console$1=Logger("Boot");let _booted=!1;function boot(){if(_booted){console$1.warn("SRE already booted");return}_booted=!0,SystemEvents.emit("SRE:BootStart"),console$1.debug("SRE Boot sequence started");const service={};service.NKV=new NKVService,service.Account=new AccountService,service.Vault=new VaultService,service.ManagedVault=new ManagedVaultService,service.Cache=new CacheService,service.Storage=new StorageService,service.ModelsProvider=new ModelsProviderService,service.LLM=new LLMService,service.AgentData=new AgentDataService,service.CLI=new CLIService,service.VectorDB=new VectorDBService,service.Router=new RouterService,service.Log=new LogService,service.Component=new ComponentService,service.Code=new CodeService,SystemEvents.on("SRE:Initialized",()=>{console$1.debug("SRE Initialized");for(let key in service)service[key].init();SystemEvents.emit("SRE:Booted",service),console$1.debug("SRE Boot sequence completed")})}var __defProp$1=Object.defineProperty,__defNormalProp$1=(obj,key,value)=>key in obj?__defProp$1(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1=(obj,key,value)=>__defNormalProp$1(obj,typeof key!="symbol"?key+"":key,value);const logger=Logger("SRE"),_SmythRuntime=class _SmythRuntime2{constructor(){__publicField$1(this,"started",!1),__publicField$1(this,"_smythDir"),__publicField$1(this,"_readyPromise"),__publicField$1(this,"_readyResolve"),__publicField$1(this,"defaultConfig",{Vault:{Connector:"JSONFileVault",Settings:{shared:"default"}},Account:{Connector:"DummyAccount"},Cache:{Connector:"RAM"},Storage:{Connector:"LocalStorage"},Code:{Connector:"DummyConnector"},NKV:{Connector:"LocalStorage"},VectorDB:{Connector:"RAMVec"},ModelsProvider:{Connector:"JSONModelsProvider"},AgentData:{Connector:"NullAgentData"},Component:{Connector:"LocalComponent"},ManagedVault:{Connector:"NullManagedVault"},Log:{Connector:"ConsoleLog"},Router:{Connector:"NullRouter"}}),__publicField$1(this,"_initializing",!1),__publicField$1(this,"_initialized",!1),__publicField$1(this,"_stopping",!1),this.started=!0,this._readyPromise=new Promise(resolve=>{this._readyResolve=resolve})}get smythDir(){return this._smythDir}static get Instance(){return _SmythRuntime2.instance||(_SmythRuntime2.instance=new _SmythRuntime2),_SmythRuntime2.instance}get initializing(){return this._initializing}init(_config){if((!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),this._initializing){console.warn("You tried to initialize SRE while it is already initializing ... skipping");return}if(this._initialized)throw new Error("SRE already initialized");this._initializing=!0,SystemEvents.on("SRE:Booted",()=>{this._readyResolve(!0)}),boot();const config2=this.autoConf(_config);for(let connectorType in config2)for(let configEntry of config2[connectorType])ConnectorService.init(connectorType,configEntry.Connector,configEntry.Id,configEntry.Settings,configEntry.Default)||logger.warn(`Failed to initialize connector ${connectorType}:${configEntry.Id||configEntry.Connector}`);return this._initialized=!0,SystemEvents.emit("SRE:Initialized",_SmythRuntime2.Instance),_SmythRuntime2.Instance}autoConf(config2={}){const defaultConfig=JSON.parse(JSON.stringify(this.defaultConfig)),keys=Object.keys({...defaultConfig,...config2}),newConfig={};for(let connectorType of keys){newConfig[connectorType]=[];let entry=config2[connectorType]||defaultConfig[connectorType];Array.isArray(entry)||(entry=[entry]);let hasDefault=!1;for(let connector of entry){if(!connector.Connector){logger.warn(`Missing Connector Name in ${connectorType} entry ... it will be ignored`);continue}connector.Default&&(hasDefault&&logger.warn(`Entry ${connectorType} has more than one default Connector ... only the first one will be used`),hasDefault=!0),newConfig[connectorType].push(connector)}!hasDefault&&newConfig[connectorType].length>0&&(newConfig[connectorType][0].Default=!0)}return newConfig}ready(){return this._readyPromise}async _stop(){this._stopping||(this._stopping=!0,logger.info("Sending Shutdown Signals To All Subsystems..."),await ConnectorService._stop(),_SmythRuntime2.instance=void 0,this.started=!1)}};__publicField$1(_SmythRuntime,"instance");let SmythRuntime=_SmythRuntime;const SRE=SmythRuntime.Instance;let shuttingDown=!1;async function shutdown(reason){if(SmythRuntime.Instance.started&&!shuttingDown&&(shuttingDown=!0,logger.info(`Caught ${reason} ... Attempting graceful shutdown`),SmythRuntime.Instance))try{await SmythRuntime.Instance._stop()}catch(err){logger.error("Shutdown error:",err)}}["SIGINT","SIGTERM"].forEach(signal=>{process.on(signal,async()=>{await shutdown(signal),process.exit(0)})});process.on("beforeExit",code=>{shutdown("beforeExit")});process.on("exit",code=>{logger.info("Goodbye!")});class SmythURI{static agent(id){return`smyth:agent:${id}`}}class LLMMemoryConnector extends SecureConnector{requester(candidate){return{load:async messages=>await this.load(candidate.readRequest,messages)}}}var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp(target,key,result),result},__publicField=(obj,key,value)=>__defNormalProp(obj,key+"",value);Logger("HashicorpVault");class HashicorpVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField(this,"name","HashicorpVault")}async get(acRequest,keyId){return null}async exists(acRequest,keyId){return!1}async listKeys(acRequest){return[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}}__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"get"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"exists"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"listKeys");export{ACL,ACLAccessDeniedError,APICall,APIEndpoint,APIKeySource,APIOutput,AWSAccount,AWSLambdaCode,AccessCandidate,AccessRequest,AccountConnector,AccountService,Agent,AgentDataConnector,AgentDataService,AgentLogger,AgentPlugin,AgentProcess,AgentRequest,AgentRuntime,AgentSSE,AgentSettings,AnthropicConnector,Async,Await,BUILT_IN_MODEL_PREFIX,BaseEmbedding,BedrockConnector,BinaryInput,BuiltinLLMProviders,CLIAgentDataConnector,CLIConnector,CLIService,COMP_NAMES,CacheConnector,CacheService,Classifier,CodeConnector,CodeService,Component,ComponentConnector,ComponentHost,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ERR_MSG_INVALID_BINARY,ERR_MSG_INVALID_IMAGE_SOURCE,ERR_MSG_MAX_ARRAY_SIZE,ERR_MSG_MAX_DEPTH,ERR_MSG_MAX_OBJECT_SIZE,EchoConnector,EmbeddingsFactory,EmbodimentSettings,ExpressRouter,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GoogleAIConnector,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalStorage,LocalStorageCache,LogConnector,LogHelper,LogService,Logger,LogicAND,LogicAtLeast,LogicAtMost,LogicOR,LogicXOR,MAX_ARRAY_SIZE,MAX_DEPTH,MAX_FILE_COUNT,MAX_FILE_SIZE,MAX_OBJECT_SIZE,MCPClient,ManagedVaultConnector,ManagedVaultService,Match,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,OSResourceMonitor,OpenAIConnector,OpenAIEmbeds,OpenAPIParser,PerplexityConnector,PineconeVectorDB,PromptGenerator,RAMCache,RAMVectorDB,REQUEST_CONTENT_TYPES,REQUEST_METHODS,RedisCache,ReverseLevelMap,ReverseRoleMap,RoleMap,RouterConnector,RouterService,RuntimeContext,S3Cache,S3Storage,S3_DAILY_PURGE_LIFECYCLE_TAG,S3_MONTHLY_PURGE_LIFECYCLE_TAG,S3_WEEKLY_PURGE_LIFECYCLE_TAG,SRE,SUPPORTED_MIME_TYPES_MAP,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TavilyWebSearch,TemplateString,TemplateStringHelper,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractKeyFromTemplateVar,extractNpmImports,findSmythPath,generateCodeHash,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,getCredentials,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,inputErrMsg,invokeLambdaFunction,isAgent,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,zipCode};
188
+ `),{output:void 0,executionTime:0,success:!1,errors:[error?.response?.data||error?.message||error.toString()]}}}async executeDeployment(acRequest,codeUID,deploymentId,inputs,config2){return await this.execute(acRequest,codeUID,inputs,config2)}async listDeployments(acRequest,codeUID,config2){const agentId=acRequest.candidate.id,lambdaFunction=await getDeployedFunction(getLambdaFunctionName(agentId,codeUID),config2.platformConfig);return lambdaFunction?[{id:lambdaFunction.functionName,runtime:lambdaFunction.runtime,createdAt:new Date(lambdaFunction.updatedAt),status:lambdaFunction.status,lastUpdated:new Date(lambdaFunction.updatedAt)}]:[]}async getDeployment(acRequest,codeUID,deploymentId,config2){const agentId=acRequest.candidate.id,lambdaFunction=await getDeployedFunction(getLambdaFunctionName(agentId,codeUID),config2.platformConfig);return lambdaFunction?{id:lambdaFunction.functionName,runtime:lambdaFunction.runtime,createdAt:new Date(lambdaFunction.updatedAt),status:lambdaFunction.status,lastUpdated:new Date(lambdaFunction.updatedAt)}:null}async deleteDeployment(acRequest,codeUID,deploymentId){}async getResourceACL(resourceId,candidate){const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}class CodeService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Code,"AWSLambda",AWSLambdaCode)}}const console$1=Logger("Boot");let _booted=!1;function boot(){if(_booted){console$1.warn("SRE already booted");return}_booted=!0,SystemEvents.emit("SRE:BootStart"),console$1.debug("SRE Boot sequence started");const service={};service.NKV=new NKVService,service.Account=new AccountService,service.Vault=new VaultService,service.ManagedVault=new ManagedVaultService,service.Cache=new CacheService,service.Storage=new StorageService,service.ModelsProvider=new ModelsProviderService,service.LLM=new LLMService,service.AgentData=new AgentDataService,service.CLI=new CLIService,service.VectorDB=new VectorDBService,service.Router=new RouterService,service.Log=new LogService,service.Component=new ComponentService,service.Code=new CodeService,SystemEvents.on("SRE:Initialized",()=>{console$1.debug("SRE Initialized");for(let key in service)service[key].init();SystemEvents.emit("SRE:Booted",service),console$1.debug("SRE Boot sequence completed")})}var __defProp$1=Object.defineProperty,__defNormalProp$1=(obj,key,value)=>key in obj?__defProp$1(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1=(obj,key,value)=>__defNormalProp$1(obj,typeof key!="symbol"?key+"":key,value);const logger=Logger("SRE"),_SmythRuntime=class _SmythRuntime2{constructor(){__publicField$1(this,"started",!1),__publicField$1(this,"_smythDir"),__publicField$1(this,"_readyPromise"),__publicField$1(this,"_readyResolve"),__publicField$1(this,"defaultConfig",{Vault:{Connector:"JSONFileVault",Settings:{shared:"default"}},Account:{Connector:"DummyAccount"},Cache:{Connector:"RAM"},Storage:{Connector:"LocalStorage"},Code:{Connector:"DummyConnector"},NKV:{Connector:"LocalStorage"},VectorDB:{Connector:"RAMVec"},ModelsProvider:{Connector:"JSONModelsProvider"},AgentData:{Connector:"NullAgentData"},Component:{Connector:"LocalComponent"},ManagedVault:{Connector:"NullManagedVault"},Log:{Connector:"ConsoleLog"},Router:{Connector:"NullRouter"}}),__publicField$1(this,"_initializing",!1),__publicField$1(this,"_initialized",!1),__publicField$1(this,"_stopping",!1),this.started=!0,this._readyPromise=new Promise(resolve=>{this._readyResolve=resolve})}get smythDir(){return this._smythDir}static get Instance(){return _SmythRuntime2.instance||(_SmythRuntime2.instance=new _SmythRuntime2),_SmythRuntime2.instance}get initializing(){return this._initializing}init(_config){if((!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),this._initializing){console.warn("You tried to initialize SRE while it is already initializing ... skipping");return}if(this._initialized)throw new Error("SRE already initialized");this._initializing=!0,SystemEvents.on("SRE:Booted",()=>{this._readyResolve(!0)}),boot();const config2=this.autoConf(_config);for(let connectorType in config2)for(let configEntry of config2[connectorType])ConnectorService.init(connectorType,configEntry.Connector,configEntry.Id,configEntry.Settings,configEntry.Default)||logger.warn(`Failed to initialize connector ${connectorType}:${configEntry.Id||configEntry.Connector}`);return this._initialized=!0,SystemEvents.emit("SRE:Initialized",_SmythRuntime2.Instance),_SmythRuntime2.Instance}autoConf(config2={}){const defaultConfig=JSON.parse(JSON.stringify(this.defaultConfig)),keys=Object.keys({...defaultConfig,...config2}),newConfig={};for(let connectorType of keys){newConfig[connectorType]=[];let entry=config2[connectorType]||defaultConfig[connectorType];Array.isArray(entry)||(entry=[entry]);let hasDefault=!1;for(let connector of entry){if(!connector.Connector){logger.warn(`Missing Connector Name in ${connectorType} entry ... it will be ignored`);continue}connector.Default&&(hasDefault&&logger.warn(`Entry ${connectorType} has more than one default Connector ... only the first one will be used`),hasDefault=!0),newConfig[connectorType].push(connector)}!hasDefault&&newConfig[connectorType].length>0&&(newConfig[connectorType][0].Default=!0)}return newConfig}ready(){return this._readyPromise}async _stop(){this._stopping||(this._stopping=!0,logger.info("Sending Shutdown Signals To All Subsystems..."),await ConnectorService._stop(),_SmythRuntime2.instance=void 0,this.started=!1)}};__publicField$1(_SmythRuntime,"instance");let SmythRuntime=_SmythRuntime;const SRE=SmythRuntime.Instance;let shuttingDown=!1;async function shutdown(reason){if(SmythRuntime.Instance.started&&!shuttingDown&&(shuttingDown=!0,logger.info(`Caught ${reason} ... Attempting graceful shutdown`),SmythRuntime.Instance))try{await SmythRuntime.Instance._stop()}catch(err){logger.error("Shutdown error:",err)}}["SIGINT","SIGTERM"].forEach(signal=>{process.on(signal,async()=>{await shutdown(signal),process.exit(0)})});process.on("beforeExit",code=>{shutdown("beforeExit")});process.on("exit",code=>{logger.info("Goodbye!")});class SmythURI{static agent(id){return`smyth:agent:${id}`}}class LLMMemoryConnector extends SecureConnector{requester(candidate){return{load:async messages=>await this.load(candidate.readRequest,messages)}}}var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp(target,key,result),result},__publicField=(obj,key,value)=>__defNormalProp(obj,key+"",value);Logger("HashicorpVault");class HashicorpVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField(this,"name","HashicorpVault")}async get(acRequest,keyId){return null}async exists(acRequest,keyId){return!1}async listKeys(acRequest){return[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}}__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"get"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"exists"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"listKeys");export{ACL,ACLAccessDeniedError,APICall,APIEndpoint,APIKeySource,APIOutput,AWSAccount,AWSLambdaCode,AccessCandidate,AccessRequest,AccountConnector,AccountService,Agent,AgentDataConnector,AgentDataService,AgentLogger,AgentPlugin,AgentProcess,AgentRequest,AgentRuntime,AgentSSE,AgentSettings,AnthropicConnector,Async,Await,BUILT_IN_MODEL_PREFIX,BaseEmbedding,BedrockConnector,BinaryInput,BuiltinLLMProviders,CLIAgentDataConnector,CLIConnector,CLIService,COMP_NAMES,CacheConnector,CacheService,Classifier,CodeConnector,CodeService,Component,ComponentConnector,ComponentHost,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ERR_MSG_INVALID_BINARY,ERR_MSG_INVALID_IMAGE_SOURCE,ERR_MSG_MAX_ARRAY_SIZE,ERR_MSG_MAX_DEPTH,ERR_MSG_MAX_OBJECT_SIZE,EchoConnector,EmbeddingsFactory,EmbodimentSettings,ExpressRouter,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GoogleAIConnector,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalStorage,LocalStorageCache,LogConnector,LogHelper,LogService,Logger,LogicAND,LogicAtLeast,LogicAtMost,LogicOR,LogicXOR,MAX_ARRAY_SIZE,MAX_DEPTH,MAX_FILE_COUNT,MAX_FILE_SIZE,MAX_OBJECT_SIZE,MCPClient,ManagedVaultConnector,ManagedVaultService,Match,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,OSResourceMonitor,OpenAIConnector,OpenAIEmbeds,OpenAPIParser,PerplexityConnector,PineconeVectorDB,PromptGenerator,RAMCache,RAMVectorDB,REQUEST_CONTENT_TYPES,REQUEST_METHODS,RedisCache,ReverseLevelMap,ReverseRoleMap,RoleMap,RouterConnector,RouterService,RuntimeContext,S3Cache,S3Storage,S3_DAILY_PURGE_LIFECYCLE_TAG,S3_MONTHLY_PURGE_LIFECYCLE_TAG,S3_WEEKLY_PURGE_LIFECYCLE_TAG,SRE,SUPPORTED_MIME_TYPES_MAP,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TavilyWebSearch,TemplateString,TemplateStringHelper,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractKeyFromTemplateVar,extractNpmImports,findSmythPath,generateCodeHash,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,getCredentials,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,inputErrMsg,invokeLambdaFunction,isAgent,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,retrieveOAuthTokens,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,zipCode};
189
189
  //# sourceMappingURL=index.js.map