@smythos/sre 1.7.15 → 1.7.16

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 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*as readlineSync from"readline-sync";import{stdin,stdout}from"process";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID,createHmac,timingSafeEqual}from"crypto";import path from"path";import os from"os";import mime from"mime";import{encodeChat,encode}from"gpt-tokenizer";import{Readable}from"stream";import{jsonrepair}from"jsonrepair";import xxhash from"xxhashjs";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,InvokeCommand,UpdateFunctionConfigurationCommand,CreateFunctionCommand}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{StreamableHTTPClientTransport}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{findAll,isTag,removeElement,innerText}from"domutils";import{parseDocument}from"htmlparser2";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import{createServer}from"http";import{WebSocketServer}from"ws";import"ses";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{GoogleGenAI as GoogleGenAI$1}from"@google/genai";import{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenAI,FunctionCallingConfigMode,FileState}from"@google/genai/node";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{Ollama}from"ollama";import*as chokidar from"chokidar";import chokidar__default from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import{trace,context,SpanStatusCode}from"@opentelemetry/api";import{logs,SeverityNumber}from"@opentelemetry/api-logs";import{resourceFromAttributes}from"@opentelemetry/resources";import{ATTR_SERVICE_VERSION,ATTR_SERVICE_NAME}from"@opentelemetry/semantic-conventions";import{BatchSpanProcessor,NodeTracerProvider}from"@opentelemetry/sdk-trace-node";import{OTLPTraceExporter}from"@opentelemetry/exporter-trace-otlp-http";import{BatchLogRecordProcessor,LoggerProvider}from"@opentelemetry/sdk-logs";import{OTLPLogExporter}from"@opentelemetry/exporter-logs-otlp-http";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";var version="1.7.15",pkg={version};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 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*as readlineSync from"readline-sync";import{stdin,stdout}from"process";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID,createHmac,timingSafeEqual}from"crypto";import path from"path";import os from"os";import mime from"mime";import{encodeChat,encode}from"gpt-tokenizer";import{Readable}from"stream";import{jsonrepair}from"jsonrepair";import xxhash from"xxhashjs";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,InvokeCommand,UpdateFunctionConfigurationCommand,CreateFunctionCommand}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{StreamableHTTPClientTransport}from"@modelcontextprotocol/sdk/client/streamableHttp.js";import{findAll,isTag,removeElement,innerText}from"domutils";import{parseDocument}from"htmlparser2";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import{createServer}from"http";import{WebSocketServer}from"ws";import"ses";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{GoogleGenAI as GoogleGenAI$1}from"@google/genai";import{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenAI,FunctionCallingConfigMode,FileState}from"@google/genai/node";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{Ollama}from"ollama";import*as chokidar from"chokidar";import chokidar__default from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import{trace,context,SpanStatusCode}from"@opentelemetry/api";import{logs,SeverityNumber}from"@opentelemetry/api-logs";import{resourceFromAttributes}from"@opentelemetry/resources";import{ATTR_SERVICE_VERSION,ATTR_SERVICE_NAME}from"@opentelemetry/semantic-conventions";import{BatchSpanProcessor,NodeTracerProvider}from"@opentelemetry/sdk-trace-node";import{OTLPTraceExporter}from"@opentelemetry/exporter-trace-otlp-http";import{BatchLogRecordProcessor,LoggerProvider}from"@opentelemetry/sdk-logs";import{OTLPLogExporter}from"@opentelemetry/exporter-logs-otlp-http";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";var version="1.7.16",pkg={version};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.
@@ -232,7 +232,7 @@ You can edit it later if you want to add/update keys.`+colors.reset),process.std
232
232
  `+colors.reset),!0}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?(logger$4.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){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(acRequest.candidate);return Object.keys(this.vaultData?.[teamId]||this.vaultData?.[this.shared]||{})}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)}fetchVaultData(vaultFile,_settings){if(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){logger$4.error("Error parsing vault file:",e),logger$4.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}}}initFileWatcher(){!this.vaultFile||!fs__default.existsSync(this.vaultFile)||(this.watcher=chokidar.watch(this.vaultFile,{persistent:!1,ignoreInitial:!0}),this.watcher.on("change",()=>{this.fetchVaultData(this.vaultFile,this._settings)}))}async stop(){super.stop(),this.watcher&&(this.watcher.close(),this.watcher=null)}}__decorateClass$f([SecureConnector.AccessControl],JSONFileVault.prototype,"get"),__decorateClass$f([SecureConnector.AccessControl],JSONFileVault.prototype,"exists"),__decorateClass$f([SecureConnector.AccessControl],JSONFileVault.prototype,"listKeys");var __defProp$A=Object.defineProperty,__getOwnPropDesc$e=Object.getOwnPropertyDescriptor,__defNormalProp$A=(obj,key,value)=>key in obj?__defProp$A(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$A(target,key,result),result},__publicField$A=(obj,key,value)=>__defNormalProp$A(obj,typeof key!="symbol"?key+"":key,value);const console$f=Logger("SecretsManager");class SecretsManager extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$A(this,"name","SecretsManager"),__publicField$A(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$f.error(error),error}}async exists(acRequest,keyId){return!!await this.get(acRequest,keyId)}async listKeys(acRequest){return console$f.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$f.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$e([SecureConnector.AccessControl],SecretsManager.prototype,"get"),__decorateClass$e([SecureConnector.AccessControl],SecretsManager.prototype,"exists"),__decorateClass$e([SecureConnector.AccessControl],SecretsManager.prototype,"listKeys");var __defProp$z=Object.defineProperty,__getOwnPropDesc$d=Object.getOwnPropertyDescriptor,__defNormalProp$z=(obj,key,value)=>key in obj?__defProp$z(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$z(target,key,result),result},__publicField$z=(obj,key,value)=>__defNormalProp$z(obj,typeof key!="symbol"?key+"":key,value);const console$e=Logger("NullVault");class NullVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$z(this,"name","NullVault"),__publicField$z(this,"vaultData"),__publicField$z(this,"index"),__publicField$z(this,"sharedVault"),console$e.warn("NullVault is used : Vault features will not be available")}async get(acRequest,keyId){return console$e.debug(`Ignored operation:NullVault.get: ${keyId}`),"NULLKEY"}async exists(acRequest,keyId){return console$e.debug(`Ignored operation:NullVault.exists: ${keyId}`),!1}async listKeys(acRequest){return console$e.debug("Ignored operation:NullVault.listKeys"),[]}async getResourceACL(resourceId,candidate){const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}__decorateClass$d([SecureConnector.AccessControl],NullVault.prototype,"get"),__decorateClass$d([SecureConnector.AccessControl],NullVault.prototype,"exists"),__decorateClass$d([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$y=Object.defineProperty,__defNormalProp$y=(obj,key,value)=>key in obj?__defProp$y(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$y=(obj,key,value)=>__defNormalProp$y(obj,typeof key!="symbol"?key+"":key,value);const console$d=Logger("DummyAccount");class DummyAccount extends AccountConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$y(this,"name","DummyAccount"),__publicField$y(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$d.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$x=Object.defineProperty,__defNormalProp$x=(obj,key,value)=>key in obj?__defProp$x(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$x=(obj,key,value)=>__defNormalProp$x(obj,typeof key!="symbol"?key+"":key,value);class MySQLAccount extends AccountConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$x(this,"name","MySQLAccount"),__publicField$x(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$w=Object.defineProperty,__defNormalProp$w=(obj,key,value)=>key in obj?__defProp$w(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$w=(obj,key,value)=>__defNormalProp$w(obj,typeof key!="symbol"?key+"":key,value);class JSONFileAccount extends AccountConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$w(this,"name","JSONFileAccount"),__publicField$w(this,"data",{}),__publicField$w(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 team===DEFAULT_TEAM_ID?!(candidate.role===TAccessRole.User&&!this.data[team].users?.[candidate.id]):this.data[team]?candidate.role===TAccessRole.Team&&team===candidate.id?!0: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,"MySQLAccount",MySQLAccount),ConnectorService.register(TConnectorService.Account,"DummyAccount",DummyAccount),ConnectorService.register(TConnectorService.Account,"JSONFileAccount",JSONFileAccount)}}var __defProp$v=Object.defineProperty,__defNormalProp$v=(obj,key,value)=>key in obj?__defProp$v(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$v=(obj,key,value)=>__defNormalProp$v(obj,typeof key!="symbol"?key+"":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"}}}}}}),_AgentDataConnector=class _AgentDataConnector2 extends Connector{constructor(){super(...arguments),__publicField$v(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";let agentData=typeof source=="object"?source:await this.getAgentData(source,version2);agentData.data&&(agentData=agentData.data);const name=agentData.name;let description=aiOnly?agentData.behavior:agentData.shortDescription;description||(description=agentData.description);const _version=agentData.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.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}async setEphemeralAgentData(agentId,data){_AgentDataConnector2.ephemeralAgentData.set(agentId,data)}async getEphemeralAgentData(agentId){return _AgentDataConnector2.ephemeralAgentData.get(agentId)}};__publicField$v(_AgentDataConnector,"ephemeralAgentData",new Map);let AgentDataConnector=_AgentDataConnector;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$u=Object.defineProperty,__defNormalProp$u=(obj,key,value)=>key in obj?__defProp$u(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$u=(obj,key,value)=>__defNormalProp$u(obj,typeof key!="symbol"?key+"":key,value);class CLIAgentDataConnector extends AgentDataConnector{constructor(settings){super(),__publicField$u(this,"name","CLIAgentDataConnector"),__publicField$u(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$t=Object.defineProperty,__defNormalProp$t=(obj,key,value)=>key in obj?__defProp$t(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$t=(obj,key,value)=>__defNormalProp$t(obj,typeof key!="symbol"?key+"":key,value);const console$c=Logger("LocalAgentDataConnector");class LocalAgentDataConnector extends AgentDataConnector{constructor(settings){super(),__publicField$t(this,"name","LocalAgentDataConnector"),__publicField$t(this,"devDir"),__publicField$t(this,"prodDir"),__publicField$t(this,"agentsData",{dev:{},prod:{}}),__publicField$t(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$c.warn(`File ${agent} is not a valid agent data file, skipping...`);continue}jsonData.id||(console$c.warn(`Agent data for ${agent} does not contain an id, generating one...`),jsonData.id="tmp-"+uid())}catch(e){console$c.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$c.warn("listTeamAgents is not implemented for LocalAgentDataConnector"),[]}async isDeployed(agentId){return!!this.agentsData.prod[agentId]}}var __defProp$s=Object.defineProperty,__defNormalProp$s=(obj,key,value)=>key in obj?__defProp$s(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$s=(obj,key,value)=>__defNormalProp$s(obj,key+"",value);class NullAgentData extends AgentDataConnector{constructor(settings){super(),__publicField$s(this,"name","NullAgentData")}getAgentConfig(agentId){return null}async getAgentData(agentId,version2){return null}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$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,key+"",value);class VectorDBConnector extends SecureConnector{constructor(){super(...arguments),__publicField$r(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$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 BaseEmbedding{constructor(fields){__publicField$q(this,"model"),__publicField$q(this,"modelName"),__publicField$q(this,"chunkSize",512),__publicField$q(this,"chunkOverlap",100),__publicField$q(this,"stripNewLines",!0),__publicField$q(this,"dimensions"),__publicField$q(this,"timeout"),__publicField$q(this,"batchSize",10),this.model=fields?.model??this.model,this.chunkSize=fields?.chunkSize||fields?.params?.chunkSize||this.chunkSize,this.chunkOverlap=fields?.chunkOverlap||fields?.params?.chunkOverlap||this.chunkOverlap,this.stripNewLines=fields?.stripNewLines||fields?.params?.stripNewLines||this.stripNewLines,this.timeout=fields?.timeout||fields?.params?.timeout,this.dimensions=fields?.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},[])}chunkText(text,{chunkSize,chunkOverlap}){return new TextSplitter({chunkSize:chunkSize??this.chunkSize,chunkOverlap:chunkOverlap??this.chunkOverlap}).splitText(text)}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])}}class TextSplitter{constructor({chunkSize=1e3,chunkOverlap=200,separators,keepSeparator}={}){if(__publicField$q(this,"chunkSize"),__publicField$q(this,"chunkOverlap"),__publicField$q(this,"separators",[`
233
233
 
234
234
  `,`
235
- `," ",""]),__publicField$q(this,"keepSeparator",!0),this.chunkSize=chunkSize,this.chunkOverlap=chunkOverlap,separators&&(this.separators=separators),keepSeparator!==void 0&&(this.keepSeparator=keepSeparator),this.chunkOverlap>=this.chunkSize)throw new Error("Cannot have chunkOverlap >= chunkSize")}splitText(text){return this._splitText(text,this.separators)}_splitText(text,separators){const finalChunks=[];let separator=separators[separators.length-1],newSeparators;for(let i=0;i<separators.length;i+=1){const s=separators[i];if(s===""){separator=s;break}if(text.includes(s)){separator=s,newSeparators=separators.slice(i+1);break}}const splits=this.splitOnSeparator(text,separator);let goodSplits=[];const _separator=this.keepSeparator?"":separator;for(const s of splits)if(this.lengthFunction(s)<this.chunkSize)goodSplits.push(s);else{if(goodSplits.length){const mergedText=this.mergeSplits(goodSplits,_separator);finalChunks.push(...mergedText),goodSplits=[]}if(!newSeparators)finalChunks.push(s);else{const otherInfo=this._splitText(s,newSeparators);finalChunks.push(...otherInfo)}}if(goodSplits.length){const mergedText=this.mergeSplits(goodSplits,_separator);finalChunks.push(...mergedText)}return finalChunks}splitOnSeparator(text,separator){let splits;if(separator)if(this.keepSeparator){const regexEscapedSeparator=separator.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&");splits=text.split(new RegExp(`(?=${regexEscapedSeparator})`))}else splits=text.split(separator);else splits=text.split("");return splits.filter(s=>s!=="")}lengthFunction(text){return text.length}joinDocs(docs,separator){const text=docs.join(separator).trim();return text===""?null:text}mergeSplits(splits,separator){const docs=[],currentDoc=[];let total=0;for(const d of splits){const _len=this.lengthFunction(d);if(total+_len+currentDoc.length*separator.length>this.chunkSize&&(total>this.chunkSize&&console.warn(`Created a chunk of size ${total}, which is longer than the specified ${this.chunkSize}`),currentDoc.length>0)){const doc2=this.joinDocs(currentDoc,separator);for(doc2!==null&&docs.push(doc2);total>this.chunkOverlap||total+_len+currentDoc.length*separator.length>this.chunkSize&&total>0;)total-=this.lengthFunction(currentDoc[0]),currentDoc.shift()}currentDoc.push(d),total+=_len}const doc=this.joinDocs(currentDoc,separator);return doc!==null&&docs.push(doc),docs}}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);const createOpenAIError=(statusCode,error)=>new OpenAI.APIError(statusCode,{code:error?.errKey||error?.code,message:error?.message,type:error?.name},error?.message,null),DEFAULT_MODEL$1="text-embedding-3-large";class OpenAIEmbeds extends BaseEmbedding{constructor(settings){super({model:settings?.model??DEFAULT_MODEL$1,...settings}),this.settings=settings,__publicField$p(this,"client"),__publicField$p(this,"clientConfig"),__publicField$p(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.batchSize),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||[TLLMCredentials.Internal,TLLMCredentials.Vault]},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$p(OpenAIEmbeds,"models",["text-embedding-ada-002","text-embedding-3-large"]);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,typeof key!="symbol"?key+"":key,value);const DEFAULT_MODEL="gemini-embedding-001";class GoogleEmbeds extends BaseEmbedding{constructor(settings){super({model:settings?.model??DEFAULT_MODEL,...settings}),this.settings=settings,__publicField$o(this,"client"),__publicField$o(this,"canSpecifyDimensions",!0)}async embedTexts(texts,candidate){const batches=this.chunkArr(this.processTexts(texts),this.batchSize),batchRequests=batches.map(batch=>this.embed(batch,candidate)),batchResponses=await Promise.all(batchRequests),embeddings=[];for(let i=0;i<batchResponses.length;i+=1){const batch=batches[i],batchResponse=batchResponses[i];for(let j=0;j<batch.length;j+=1)embeddings.push(batchResponse[j])}return embeddings}async embedText(text,candidate){const processedText=this.processTexts([text])[0];return(await this.embed([processedText],candidate))[0]}async embed(texts,candidate){let apiKey;try{const modelInfo={provider:"GoogleAI",modelId:this.model,credentials:this.settings?.credentials||[TLLMCredentials.Internal,TLLMCredentials.Vault]};apiKey=(await getLLMCredentials(candidate,modelInfo))?.apiKey}catch{}if(apiKey||(apiKey=process.env.GOOGLE_AI_API_KEY),!apiKey)throw new Error("Please provide an API key for Google AI embeddings via credentials or GOOGLE_AI_API_KEY environment variable");this.client||(this.client=new GoogleGenAI$1({apiKey}));try{const outputDimensionality=this.dimensions&&Number.isFinite(this.dimensions)?this.dimensions:void 0,res=await this.client.models.embedContent({model:this.model,contents:texts,...outputDimensionality?{outputDimensionality}:{}}),vectors=Array.isArray(res.embeddings)?res.embeddings.map(e=>e.values):[res.embedding?.values||[]],targetDim=outputDimensionality;return vectors.map(v=>this.postProcessEmbedding(v,targetDim))}catch(e){throw new Error(`Google Embeddings API error: ${e.message||e}`)}}postProcessEmbedding(values,targetDim){let v=Array.isArray(values)?values.slice():[];if(targetDim&&targetDim>0&&(v.length>targetDim?v=v.slice(0,targetDim):v.length<targetDim&&(v=v.concat(Array(targetDim-v.length).fill(0)))),(targetDim&&targetDim!==3072||!targetDim&&v.length!==3072)&&v.length>0){const norm=Math.sqrt(v.reduce((acc,x)=>acc+x*x,0));norm>0&&(v=v.map(x=>x/norm))}return v}}__publicField$o(GoogleEmbeds,"models",["gemini-embedding-001","text-embedding-005","text-multilingual-embedding-002"]);const supportedProviders={OpenAI:{embedder:OpenAIEmbeds,models:OpenAIEmbeds.models},GoogleAI:{embedder:GoogleEmbeds,models:GoogleEmbeds.models}};class EmbeddingsFactory{static create(provider,config2){return provider||(provider="OpenAI"),config2||(config2={provider:"OpenAI",model:"text-embedding-3-large",dimensions:1024}),config2.model&&typeof config2.model=="object"&&(provider=config2.model.provider,config2.credentials=config2.model.credentials,config2.model=config2.model.modelId),new supportedProviders[provider].embedder(config2)}}var __defProp$n=Object.defineProperty,__getOwnPropDesc$c=Object.getOwnPropertyDescriptor,__defNormalProp$n=(obj,key,value)=>key in obj?__defProp$n(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$n(target,key,result),result},__publicField$n=(obj,key,value)=>__defNormalProp$n(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$n(this,"name","PineconeVectorDB"),__publicField$n(this,"id","pinecone"),__publicField$n(this,"client"),__publicField$n(this,"indexName"),__publicField$n(this,"cache"),__publicField$n(this,"accountConnector"),__publicField$n(this,"nkvConnector"),__publicField$n(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||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",dimensions:3072}),_settings.embeddings.dimensions||(_settings.embeddings.dimensions=3072),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){if(match.metadata?.isSkeletonVector)continue;match.metadata?.[this.USER_METADATA_KEY]&&(match.metadata[this.USER_METADATA_KEY]=JSONContentHelper.create(match.metadata[this.USER_METADATA_KEY].toString()).tryParse());const text=match.metadata?.text;delete match.metadata?.text,matches.push({id:match.id,values:match.values,text,metadata:match.metadata?.[this.USER_METADATA_KEY]||match.metadata,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=>{const{text,acl,user_metadata,...restMetadata}=s.metadata||{};return{id:s.id,values:s.values,text,metadata:{...restMetadata,...typeof user_metadata=="string"?JSON.parse(user_metadata):user_metadata}}})}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=this.embedder.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.map(v=>v.id),id:dsId};return datasource.returnFullVectorInfo&&(dsData.vectorInfo=_vIds),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$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"createNamespace"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"namespaceExists"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"deleteNamespace"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"search"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"insert"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"delete"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"createDatasource"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"deleteDatasource"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"listDatasources"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"getDatasource");var __defProp$m=Object.defineProperty,__getOwnPropDesc$b=Object.getOwnPropertyDescriptor,__defNormalProp$m=(obj,key,value)=>key in obj?__defProp$m(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$m(target,key,result),result},__publicField$m=(obj,key,value)=>__defNormalProp$m(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$m(this,"name","MilvusVectorDB"),__publicField$m(this,"id","milvus"),__publicField$m(this,"client"),__publicField$m(this,"cache"),__publicField$m(this,"accountConnector"),__publicField$m(this,"embedder"),__publicField$m(this,"SCHEMA_DEFINITION"),__publicField$m(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||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",dimensions:3072}),_settings.embeddings.dimensions||(_settings.embeddings.dimensions=3072),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({data:_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=>{const{text,acl,user_metadata,...restMetadata}=s||{};return{id:s.id,values:s.vector,text,metadata:{...restMetadata,...typeof user_metadata=="string"?JSON.parse(user_metadata):user_metadata}}})}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=this.embedder.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),dsData={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.map(v=>v.id),id:dsId};return datasource.returnFullVectorInfo&&(dsData.vectorInfo=_vIds),dsData}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$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"createNamespace"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"namespaceExists"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"deleteNamespace"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"search"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"insert"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"delete"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"createDatasource"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"deleteDatasource"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"listDatasources"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"getDatasource");var __defProp$l=Object.defineProperty,__getOwnPropDesc$a=Object.getOwnPropertyDescriptor,__defNormalProp$l=(obj,key,value)=>key in obj?__defProp$l(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$l(target,key,result),result},__publicField$l=(obj,key,value)=>__defNormalProp$l(obj,typeof key!="symbol"?key+"":key,value);Logger("RAM VectorDB");const _RAMVectorDB=class _RAMVectorDB2 extends VectorDBConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$l(this,"name","RAMVec"),__publicField$l(this,"id","ram"),__publicField$l(this,"accountConnector"),__publicField$l(this,"embedder"),this.accountConnector=ConnectorService.getAccountConnector(),_settings.embeddings||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",dimensions:3072}),_settings.embeddings.dimensions||(_settings.embeddings.dimensions=3072),this.embedder=EmbeddingsFactory.create(_settings.embeddings.provider,_settings.embeddings)}async getResourceACL(resourceId,candidate){const preparedNs=this.constructNsName(candidate,resourceId),acl=_RAMVectorDB2.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(!_RAMVectorDB2.namespaces[preparedNs]){const nsData={namespace:preparedNs,displayName:namespace,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,metadata:{...metadata,storageType:"RAM"}};_RAMVectorDB2.namespaces[preparedNs]=nsData,_RAMVectorDB2.vectors[preparedNs]=[],_RAMVectorDB2.datasources[preparedNs]={}}const acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL;return _RAMVectorDB2.acls[preparedNs]=acl,new Promise(resolve=>resolve())}async namespaceExists(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace);return!!_RAMVectorDB2.namespaces[preparedNs]}async getNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),nsData=_RAMVectorDB2.namespaces[preparedNs];if(!nsData)throw new Error(`Namespace ${namespace} not found`);return nsData}async listNamespaces(acRequest){return Object.values(_RAMVectorDB2.namespaces).filter(ns=>ns.candidateId===acRequest.candidate.id)}async deleteNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace);delete _RAMVectorDB2.vectors[preparedNs],delete _RAMVectorDB2.namespaces[preparedNs],delete _RAMVectorDB2.datasources[preparedNs],delete _RAMVectorDB2.acls[preparedNs]}async search(acRequest,namespace,query,options={}){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(!_RAMVectorDB2.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=_RAMVectorDB2.vectors[preparedNs]||[],results=[];for(const vector of namespaceData){const similarity=this.cosineSimilarity(queryVector,vector.values);let userMetadata;if(options.includeMetadata)if(vector.metadata?.[this.USER_METADATA_KEY])try{userMetadata=JSON.parse(vector.metadata[this.USER_METADATA_KEY])}catch{userMetadata=vector.metadata[this.USER_METADATA_KEY]}else userMetadata={};results.push({id:vector.id,score:similarity,values:vector.values,text:vector.metadata?.text,metadata:options.includeMetadata?userMetadata:void 0})}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);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 transformedSource=await this.embedder.transformSource(sourceWrapper,sourceType,acRequest.candidate);_RAMVectorDB2.vectors[preparedNs]||(_RAMVectorDB2.vectors[preparedNs]=[]);const insertedIds=[];for(const source of transformedSource){const vectorData={id:source.id,values:source.source,datasource:source.metadata?.datasourceId||"unknown",metadata:source.metadata},existingIndex=_RAMVectorDB2.vectors[preparedNs].findIndex(v=>v.id===source.id);existingIndex>=0?_RAMVectorDB2.vectors[preparedNs][existingIndex]=vectorData:_RAMVectorDB2.vectors[preparedNs].push(vectorData);const{text,acl,user_metadata,...restMetadata}=source.metadata||{};insertedIds.push({id:source.id,values:source.source,text,metadata:{...restMetadata,...typeof user_metadata=="string"?JSON.parse(user_metadata):user_metadata}})}return insertedIds}async delete(acRequest,namespace,deleteTarget){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(typeof deleteTarget=="object"&&!Array.isArray(deleteTarget))if("datasourceId"in deleteTarget&&deleteTarget.datasourceId)_RAMVectorDB2.vectors[preparedNs]&&(_RAMVectorDB2.vectors[preparedNs]=_RAMVectorDB2.vectors[preparedNs].filter(vector=>vector.datasource!==deleteTarget.datasourceId));else throw new Error("Unsupported delete filter");else{const ids=Array.isArray(deleteTarget)?deleteTarget:[deleteTarget];_RAMVectorDB2.vectors[preparedNs]&&(_RAMVectorDB2.vectors[preparedNs]=_RAMVectorDB2.vectors[preparedNs].filter(vector=>!ids.includes(vector.id)))}}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=this.embedder.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,[this.USER_METADATA_KEY]: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.map(v=>v.id),id:dsId};return datasource.returnFullVectorInfo&&(dsData.vectorInfo=_vIds),_RAMVectorDB2.datasources[formattedNs]||(_RAMVectorDB2.datasources[formattedNs]={}),_RAMVectorDB2.datasources[formattedNs][dsId]=dsData,dsData}async deleteDatasource(acRequest,namespace,datasourceId){const formattedNs=this.constructNsName(acRequest.candidate,namespace);await this.delete(acRequest,namespace,{datasourceId}),_RAMVectorDB2.datasources[formattedNs]&&_RAMVectorDB2.datasources[formattedNs][datasourceId]&&delete _RAMVectorDB2.datasources[formattedNs][datasourceId]}async listDatasources(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),namespaceDatasources=_RAMVectorDB2.datasources[preparedNs]||{};return Object.values(namespaceDatasources)}async getDatasource(acRequest,namespace,datasourceId){const preparedNs=this.constructNsName(acRequest.candidate,namespace);return _RAMVectorDB2.datasources[preparedNs]?.[datasourceId]}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)}};__publicField$l(_RAMVectorDB,"vectors",{}),__publicField$l(_RAMVectorDB,"namespaces",{}),__publicField$l(_RAMVectorDB,"datasources",{}),__publicField$l(_RAMVectorDB,"acls",{}),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"createNamespace"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"namespaceExists"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"getNamespace"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"listNamespaces"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"deleteNamespace"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"search"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"insert"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"delete"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"createDatasource"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"deleteDatasource"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"listDatasources"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"getDatasource");let RAMVectorDB=_RAMVectorDB;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$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,typeof key!="symbol"?key+"":key,value);class CLIConnector extends Connector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$k(this,"name","CLI"),__publicField$k(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$j=Object.defineProperty,__getOwnPropDesc$9=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$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$j(target,key,result),result},__publicField$j=(obj,key,value)=>__defNormalProp$j(obj,typeof key!="symbol"?key+"":key,value);const _NKVRedis=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$j(this,"name","Redis"),__publicField$j(this,"redisCacheConnector"),__publicField$j(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$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"get"),__decorateClass$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"set"),__decorateClass$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"delete"),__decorateClass$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"exists"),__decorateClass$9([_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"list"),__decorateClass$9([_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"deleteAll");let NKVRedis=_NKVRedis;var __defProp$i=Object.defineProperty,__getOwnPropDesc$8=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$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$i(target,key,result),result},__publicField$i=(obj,key,value)=>__defNormalProp$i(obj,typeof key!="symbol"?key+"":key,value);const _NKVRAM=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$i(this,"name","NKVRAM"),__publicField$i(this,"storage",new Map),__publicField$i(this,"namespaces",new Set),__publicField$i(this,"accountConnector"),__publicField$i(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$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"get"),__decorateClass$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"set"),__decorateClass$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"delete"),__decorateClass$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"exists"),__decorateClass$8([_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"list"),__decorateClass$8([_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"deleteAll");let NKVRAM=_NKVRAM;var __defProp$h=Object.defineProperty,__getOwnPropDesc$7=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$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$h(target,key,result),result},__publicField$h=(obj,key,value)=>__defNormalProp$h(obj,typeof key!="symbol"?key+"":key,value);const console$9=Logger("NKVLocalStorage"),_NKVLocalStorage=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$h(this,"name","NKVLocalStorage"),__publicField$h(this,"folder"),__publicField$h(this,"accountConnector"),__publicField$h(this,"cacheConnector"),__publicField$h(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$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"get"),__decorateClass$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"set"),__decorateClass$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"delete"),__decorateClass$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"exists"),__decorateClass$7([_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"list"),__decorateClass$7([_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$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,typeof key!="symbol"?key+"":key,value);class ExpressRouter extends RouterConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$g(this,"router"),__publicField$g(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$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,key+"",value);const console$8=Logger("NullRouter");class NullRouter extends RouterConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$f(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$e=Object.defineProperty,__getOwnPropDesc$6=Object.getOwnPropertyDescriptor,__defNormalProp$e=(obj,key,value)=>key in obj?__defProp$e(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$e(target,key,result),result},__publicField$e=(obj,key,value)=>__defNormalProp$e(obj,typeof key!="symbol"?key+"":key,value);const console$7=Logger("SecretManagerManagedVault");class SecretManagerManagedVault extends ManagedVaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$e(this,"name","SecretManagerManagedVault"),__publicField$e(this,"scope","smyth-managed-vault"),__publicField$e(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$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"get"),__decorateClass$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"set"),__decorateClass$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"delete"),__decorateClass$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"exists");var __defProp$d=Object.defineProperty,__getOwnPropDesc$5=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$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$d(target,key,result),result},__publicField$d=(obj,key,value)=>__defNormalProp$d(obj,key+"",value);const console$6=Logger("NullManagedVault");class NullManagedVault extends ManagedVaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$d(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$5([SecureConnector.AccessControl],NullManagedVault.prototype,"get"),__decorateClass$5([SecureConnector.AccessControl],NullManagedVault.prototype,"set"),__decorateClass$5([SecureConnector.AccessControl],NullManagedVault.prototype,"delete"),__decorateClass$5([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{constructor(){super()}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$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,typeof key!="symbol"?key+"":key,value);const logger$3=Logger("SmythLog");class ConsoleLog extends LogConnector{constructor(){super(...arguments),__publicField$c(this,"name","ConsoleLog"),__publicField$c(this,"id")}getResourceACL(resourceId,candidate){return Promise.resolve(new ACL)}log(acRequest,logData,callId){return logger$3.debug(`Log for agent ${acRequest.candidate.id}: ${typeof logData=="string"?logData:JSON.stringify(logData)}`),Promise.resolve()}logTask(acRequest,tasks,isUsingTestDomain){return logger$3.debug(`${tasks} Task(s) Consumed by agent ${acRequest.candidate.id}: ${isUsingTestDomain?"Using Test Domain":"Using Production Domain"}`),Promise.resolve()}setupHooks(){return Promise.resolve()}}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$b=Object.defineProperty,__getOwnPropDesc$4=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$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$b(target,key,result),result},__publicField$b=(obj,key,value)=>__defNormalProp$b(obj,typeof key!="symbol"?key+"":key,value);const console$5=Logger("LocalComponentConnector");class LocalComponentConnector extends ComponentConnector{constructor(){super(),__publicField$b(this,"name","LocalComponentConnector"),__publicField$b(this,"components",{}),this.init()}async init(){for(const component in ComponentInstances)this.components[component]=ComponentInstances[component];console$5.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){ConnectorService.getAccountConnector();const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}__decorateClass$4([SecureConnector.AccessControl],LocalComponentConnector.prototype,"register"),__decorateClass$4([SecureConnector.AccessControl],LocalComponentConnector.prototype,"get"),__decorateClass$4([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",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GPTPlugin","GenAILLM"],label:"GPT 4o Mini",modelId:"gpt-4o-mini",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",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,hidden:!0,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***
235
+ `," ",""]),__publicField$q(this,"keepSeparator",!0),this.chunkSize=chunkSize,this.chunkOverlap=chunkOverlap,separators&&(this.separators=separators),keepSeparator!==void 0&&(this.keepSeparator=keepSeparator),this.chunkOverlap>=this.chunkSize)throw new Error("Cannot have chunkOverlap >= chunkSize")}splitText(text){return this._splitText(text,this.separators)}_splitText(text,separators){const finalChunks=[];let separator=separators[separators.length-1],newSeparators;for(let i=0;i<separators.length;i+=1){const s=separators[i];if(s===""){separator=s;break}if(text.includes(s)){separator=s,newSeparators=separators.slice(i+1);break}}const splits=this.splitOnSeparator(text,separator);let goodSplits=[];const _separator=this.keepSeparator?"":separator;for(const s of splits)if(this.lengthFunction(s)<this.chunkSize)goodSplits.push(s);else{if(goodSplits.length){const mergedText=this.mergeSplits(goodSplits,_separator);finalChunks.push(...mergedText),goodSplits=[]}if(!newSeparators)finalChunks.push(s);else{const otherInfo=this._splitText(s,newSeparators);finalChunks.push(...otherInfo)}}if(goodSplits.length){const mergedText=this.mergeSplits(goodSplits,_separator);finalChunks.push(...mergedText)}return finalChunks}splitOnSeparator(text,separator){let splits;if(separator)if(this.keepSeparator){const regexEscapedSeparator=separator.replace(/[/\-\\^$*+?.()|[\]{}]/g,"\\$&");splits=text.split(new RegExp(`(?=${regexEscapedSeparator})`))}else splits=text.split(separator);else splits=text.split("");return splits.filter(s=>s!=="")}lengthFunction(text){return text.length}joinDocs(docs,separator){const text=docs.join(separator).trim();return text===""?null:text}mergeSplits(splits,separator){const docs=[],currentDoc=[];let total=0;for(const d of splits){const _len=this.lengthFunction(d);if(total+_len+currentDoc.length*separator.length>this.chunkSize&&(total>this.chunkSize&&console.warn(`Created a chunk of size ${total}, which is longer than the specified ${this.chunkSize}`),currentDoc.length>0)){const doc2=this.joinDocs(currentDoc,separator);for(doc2!==null&&docs.push(doc2);total>this.chunkOverlap||total+_len+currentDoc.length*separator.length>this.chunkSize&&total>0;)total-=this.lengthFunction(currentDoc[0]),currentDoc.shift()}currentDoc.push(d),total+=_len}const doc=this.joinDocs(currentDoc,separator);return doc!==null&&docs.push(doc),docs}}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);const createOpenAIError=(statusCode,error)=>new OpenAI.APIError(statusCode,{code:error?.errKey||error?.code,message:error?.message,type:error?.name},error?.message,null),DEFAULT_MODEL$1="text-embedding-3-large";class OpenAIEmbeds extends BaseEmbedding{constructor(settings){super({model:settings?.model??DEFAULT_MODEL$1,...settings}),this.settings=settings,__publicField$p(this,"client"),__publicField$p(this,"clientConfig"),__publicField$p(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.batchSize),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||[TLLMCredentials.Internal,TLLMCredentials.Vault]},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$p(OpenAIEmbeds,"models",["text-embedding-ada-002","text-embedding-3-large"]);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,typeof key!="symbol"?key+"":key,value);const DEFAULT_MODEL="gemini-embedding-001";class GoogleEmbeds extends BaseEmbedding{constructor(settings){super({model:settings?.model??DEFAULT_MODEL,...settings}),this.settings=settings,__publicField$o(this,"client"),__publicField$o(this,"canSpecifyDimensions",!0)}async embedTexts(texts,candidate){const batches=this.chunkArr(this.processTexts(texts),this.batchSize),batchRequests=batches.map(batch=>this.embed(batch,candidate)),batchResponses=await Promise.all(batchRequests),embeddings=[];for(let i=0;i<batchResponses.length;i+=1){const batch=batches[i],batchResponse=batchResponses[i];for(let j=0;j<batch.length;j+=1)embeddings.push(batchResponse[j])}return embeddings}async embedText(text,candidate){const processedText=this.processTexts([text])[0];return(await this.embed([processedText],candidate))[0]}async embed(texts,candidate){let apiKey;try{const modelInfo={provider:"GoogleAI",modelId:this.model,credentials:this.settings?.credentials||[TLLMCredentials.Internal,TLLMCredentials.Vault]};apiKey=(await getLLMCredentials(candidate,modelInfo))?.apiKey}catch{}if(apiKey||(apiKey=process.env.GOOGLE_AI_API_KEY),!apiKey)throw new Error("Please provide an API key for Google AI embeddings via credentials or GOOGLE_AI_API_KEY environment variable");this.client||(this.client=new GoogleGenAI$1({apiKey}));try{const outputDimensionality=this.dimensions&&Number.isFinite(this.dimensions)?this.dimensions:void 0,res=await this.client.models.embedContent({model:this.model,contents:texts,...outputDimensionality?{outputDimensionality}:{}}),vectors=Array.isArray(res.embeddings)?res.embeddings.map(e=>e.values):[res.embedding?.values||[]],targetDim=outputDimensionality;return vectors.map(v=>this.postProcessEmbedding(v,targetDim))}catch(e){throw new Error(`Google Embeddings API error: ${e.message||e}`)}}postProcessEmbedding(values,targetDim){let v=Array.isArray(values)?values.slice():[];if(targetDim&&targetDim>0&&(v.length>targetDim?v=v.slice(0,targetDim):v.length<targetDim&&(v=v.concat(Array(targetDim-v.length).fill(0)))),(targetDim&&targetDim!==3072||!targetDim&&v.length!==3072)&&v.length>0){const norm=Math.sqrt(v.reduce((acc,x)=>acc+x*x,0));norm>0&&(v=v.map(x=>x/norm))}return v}}__publicField$o(GoogleEmbeds,"models",["gemini-embedding-001","text-embedding-005","text-multilingual-embedding-002"]);const supportedProviders={OpenAI:{embedder:OpenAIEmbeds,models:OpenAIEmbeds.models},GoogleAI:{embedder:GoogleEmbeds,models:GoogleEmbeds.models}};class EmbeddingsFactory{static create(provider,config2){return provider||(provider="OpenAI"),config2||(config2={provider:"OpenAI",model:"text-embedding-3-large",dimensions:1024}),config2.model&&typeof config2.model=="object"&&(provider=config2.model.provider,config2.credentials=config2.model.credentials,config2.model=config2.model.modelId),new supportedProviders[provider].embedder(config2)}}var __defProp$n=Object.defineProperty,__getOwnPropDesc$c=Object.getOwnPropertyDescriptor,__defNormalProp$n=(obj,key,value)=>key in obj?__defProp$n(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$n(target,key,result),result},__publicField$n=(obj,key,value)=>__defNormalProp$n(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$n(this,"name","PineconeVectorDB"),__publicField$n(this,"id","pinecone"),__publicField$n(this,"client"),__publicField$n(this,"indexName"),__publicField$n(this,"cache"),__publicField$n(this,"accountConnector"),__publicField$n(this,"nkvConnector"),__publicField$n(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||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",dimensions:3072}),_settings.embeddings.dimensions||(_settings.embeddings.dimensions=3072),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){if(match.metadata?.isSkeletonVector)continue;match.metadata?.[this.USER_METADATA_KEY]&&(match.metadata[this.USER_METADATA_KEY]=JSONContentHelper.create(match.metadata[this.USER_METADATA_KEY].toString()).tryParse());const text=match.metadata?.text;delete match.metadata?.text,matches.push({id:match.id,values:match.values,text,metadata:match.metadata?.[this.USER_METADATA_KEY]||match.metadata,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=>{const{text,acl,user_metadata,...restMetadata}=s.metadata||{};return{id:s.id,values:s.values,text,metadata:{...restMetadata,...typeof user_metadata=="string"?JSON.parse(user_metadata):user_metadata}}})}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=this.embedder.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.map(v=>v.id),id:dsId};return datasource.returnFullVectorInfo&&(dsData.vectorInfo=_vIds),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$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"createNamespace"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"namespaceExists"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"deleteNamespace"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"search"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"insert"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"delete"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"createDatasource"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"deleteDatasource"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"listDatasources"),__decorateClass$c([SecureConnector.AccessControl],PineconeVectorDB.prototype,"getDatasource");var __defProp$m=Object.defineProperty,__getOwnPropDesc$b=Object.getOwnPropertyDescriptor,__defNormalProp$m=(obj,key,value)=>key in obj?__defProp$m(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$m(target,key,result),result},__publicField$m=(obj,key,value)=>__defNormalProp$m(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$m(this,"name","MilvusVectorDB"),__publicField$m(this,"id","milvus"),__publicField$m(this,"client"),__publicField$m(this,"cache"),__publicField$m(this,"accountConnector"),__publicField$m(this,"embedder"),__publicField$m(this,"SCHEMA_DEFINITION"),__publicField$m(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||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",dimensions:3072}),_settings.embeddings.dimensions||(_settings.embeddings.dimensions=3072),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({data:_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=>{const{text,acl,user_metadata,...restMetadata}=s||{};return{id:s.id,values:s.vector,text,metadata:{...restMetadata,...typeof user_metadata=="string"?JSON.parse(user_metadata):user_metadata}}})}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=this.embedder.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),dsData={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.map(v=>v.id),id:dsId};return datasource.returnFullVectorInfo&&(dsData.vectorInfo=_vIds),dsData}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$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"createNamespace"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"namespaceExists"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"deleteNamespace"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"search"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"insert"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"delete"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"createDatasource"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"deleteDatasource"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"listDatasources"),__decorateClass$b([SecureConnector.AccessControl],MilvusVectorDB.prototype,"getDatasource");var __defProp$l=Object.defineProperty,__getOwnPropDesc$a=Object.getOwnPropertyDescriptor,__defNormalProp$l=(obj,key,value)=>key in obj?__defProp$l(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$l(target,key,result),result},__publicField$l=(obj,key,value)=>__defNormalProp$l(obj,typeof key!="symbol"?key+"":key,value);Logger("RAM VectorDB");const _RAMVectorDB=class _RAMVectorDB2 extends VectorDBConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$l(this,"name","RAMVec"),__publicField$l(this,"id","ram"),__publicField$l(this,"accountConnector"),__publicField$l(this,"embedder"),this.accountConnector=ConnectorService.getAccountConnector(),_settings.embeddings||(_settings.embeddings={provider:"OpenAI",model:"text-embedding-3-large",dimensions:3072}),_settings.embeddings.dimensions||(_settings.embeddings.dimensions=3072),this.embedder=EmbeddingsFactory.create(_settings.embeddings.provider,_settings.embeddings)}async getResourceACL(resourceId,candidate){const preparedNs=this.constructNsName(candidate,resourceId),acl=_RAMVectorDB2.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(!_RAMVectorDB2.namespaces[preparedNs]){const nsData={namespace:preparedNs,displayName:namespace,candidateId:acRequest.candidate.id,candidateRole:acRequest.candidate.role,metadata:{...metadata,storageType:"RAM"}};_RAMVectorDB2.namespaces[preparedNs]=nsData,_RAMVectorDB2.vectors[preparedNs]=[],_RAMVectorDB2.datasources[preparedNs]={}}const acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL;return _RAMVectorDB2.acls[preparedNs]=acl,new Promise(resolve=>resolve())}async namespaceExists(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace);return!!_RAMVectorDB2.namespaces[preparedNs]}async getNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),nsData=_RAMVectorDB2.namespaces[preparedNs];if(!nsData)throw new Error(`Namespace ${namespace} not found`);return nsData}async listNamespaces(acRequest){return Object.values(_RAMVectorDB2.namespaces).filter(ns=>ns.candidateId===acRequest.candidate.id)}async deleteNamespace(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace);delete _RAMVectorDB2.vectors[preparedNs],delete _RAMVectorDB2.namespaces[preparedNs],delete _RAMVectorDB2.datasources[preparedNs],delete _RAMVectorDB2.acls[preparedNs]}async search(acRequest,namespace,query,options={}){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(!_RAMVectorDB2.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=_RAMVectorDB2.vectors[preparedNs]||[],results=[];for(const vector of namespaceData){const similarity=this.cosineSimilarity(queryVector,vector.values);let userMetadata;if(options.includeMetadata)if(vector.metadata?.[this.USER_METADATA_KEY])try{userMetadata=JSON.parse(vector.metadata[this.USER_METADATA_KEY])}catch{userMetadata=vector.metadata[this.USER_METADATA_KEY]}else userMetadata={};results.push({id:vector.id,score:similarity,values:vector.values,text:vector.metadata?.text,metadata:options.includeMetadata?userMetadata:void 0})}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);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 transformedSource=await this.embedder.transformSource(sourceWrapper,sourceType,acRequest.candidate);_RAMVectorDB2.vectors[preparedNs]||(_RAMVectorDB2.vectors[preparedNs]=[]);const insertedIds=[];for(const source of transformedSource){const vectorData={id:source.id,values:source.source,datasource:source.metadata?.datasourceId||"unknown",metadata:source.metadata},existingIndex=_RAMVectorDB2.vectors[preparedNs].findIndex(v=>v.id===source.id);existingIndex>=0?_RAMVectorDB2.vectors[preparedNs][existingIndex]=vectorData:_RAMVectorDB2.vectors[preparedNs].push(vectorData);const{text,acl,user_metadata,...restMetadata}=source.metadata||{};insertedIds.push({id:source.id,values:source.source,text,metadata:{...restMetadata,...typeof user_metadata=="string"?JSON.parse(user_metadata):user_metadata}})}return insertedIds}async delete(acRequest,namespace,deleteTarget){const preparedNs=this.constructNsName(acRequest.candidate,namespace);if(typeof deleteTarget=="object"&&!Array.isArray(deleteTarget))if("datasourceId"in deleteTarget&&deleteTarget.datasourceId)_RAMVectorDB2.vectors[preparedNs]&&(_RAMVectorDB2.vectors[preparedNs]=_RAMVectorDB2.vectors[preparedNs].filter(vector=>vector.datasource!==deleteTarget.datasourceId));else throw new Error("Unsupported delete filter");else{const ids=Array.isArray(deleteTarget)?deleteTarget:[deleteTarget];_RAMVectorDB2.vectors[preparedNs]&&(_RAMVectorDB2.vectors[preparedNs]=_RAMVectorDB2.vectors[preparedNs].filter(vector=>!ids.includes(vector.id)))}}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=this.embedder.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,[this.USER_METADATA_KEY]: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.map(v=>v.id),id:dsId};return datasource.returnFullVectorInfo&&(dsData.vectorInfo=_vIds),_RAMVectorDB2.datasources[formattedNs]||(_RAMVectorDB2.datasources[formattedNs]={}),_RAMVectorDB2.datasources[formattedNs][dsId]=dsData,dsData}async deleteDatasource(acRequest,namespace,datasourceId){const formattedNs=this.constructNsName(acRequest.candidate,namespace);await this.delete(acRequest,namespace,{datasourceId}),_RAMVectorDB2.datasources[formattedNs]&&_RAMVectorDB2.datasources[formattedNs][datasourceId]&&delete _RAMVectorDB2.datasources[formattedNs][datasourceId]}async listDatasources(acRequest,namespace){const preparedNs=this.constructNsName(acRequest.candidate,namespace),namespaceDatasources=_RAMVectorDB2.datasources[preparedNs]||{};return Object.values(namespaceDatasources)}async getDatasource(acRequest,namespace,datasourceId){const preparedNs=this.constructNsName(acRequest.candidate,namespace);return _RAMVectorDB2.datasources[preparedNs]?.[datasourceId]}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)}};__publicField$l(_RAMVectorDB,"vectors",{}),__publicField$l(_RAMVectorDB,"namespaces",{}),__publicField$l(_RAMVectorDB,"datasources",{}),__publicField$l(_RAMVectorDB,"acls",{}),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"createNamespace"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"namespaceExists"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"getNamespace"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"listNamespaces"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"deleteNamespace"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"search"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"insert"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"delete"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"createDatasource"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"deleteDatasource"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"listDatasources"),__decorateClass$a([SecureConnector.AccessControl],_RAMVectorDB.prototype,"getDatasource");let RAMVectorDB=_RAMVectorDB;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$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,typeof key!="symbol"?key+"":key,value);class CLIConnector extends Connector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$k(this,"name","CLI"),__publicField$k(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$j=Object.defineProperty,__getOwnPropDesc$9=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$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$j(target,key,result),result},__publicField$j=(obj,key,value)=>__defNormalProp$j(obj,typeof key!="symbol"?key+"":key,value);const _NKVRedis=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$j(this,"name","Redis"),__publicField$j(this,"redisCacheConnector"),__publicField$j(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$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"get"),__decorateClass$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"set"),__decorateClass$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"delete"),__decorateClass$9([_NKVRedis.Validate,_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"exists"),__decorateClass$9([_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"list"),__decorateClass$9([_NKVRedis.NamespaceAccessControl],_NKVRedis.prototype,"deleteAll");let NKVRedis=_NKVRedis;var __defProp$i=Object.defineProperty,__getOwnPropDesc$8=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$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$i(target,key,result),result},__publicField$i=(obj,key,value)=>__defNormalProp$i(obj,typeof key!="symbol"?key+"":key,value);const _NKVRAM=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$i(this,"name","NKVRAM"),__publicField$i(this,"storage",new Map),__publicField$i(this,"namespaces",new Set),__publicField$i(this,"accountConnector"),__publicField$i(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$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"get"),__decorateClass$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"set"),__decorateClass$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"delete"),__decorateClass$8([_NKVRAM.Validate,_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"exists"),__decorateClass$8([_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"list"),__decorateClass$8([_NKVRAM.NamespaceAccessControl],_NKVRAM.prototype,"deleteAll");let NKVRAM=_NKVRAM;var __defProp$h=Object.defineProperty,__getOwnPropDesc$7=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$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$h(target,key,result),result},__publicField$h=(obj,key,value)=>__defNormalProp$h(obj,typeof key!="symbol"?key+"":key,value);const console$9=Logger("NKVLocalStorage"),_NKVLocalStorage=class extends NKVConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$h(this,"name","NKVLocalStorage"),__publicField$h(this,"folder"),__publicField$h(this,"accountConnector"),__publicField$h(this,"cacheConnector"),__publicField$h(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$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"get"),__decorateClass$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"set"),__decorateClass$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"delete"),__decorateClass$7([_NKVLocalStorage.Validate,_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"exists"),__decorateClass$7([_NKVLocalStorage.NamespaceAccessControl],_NKVLocalStorage.prototype,"list"),__decorateClass$7([_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$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,typeof key!="symbol"?key+"":key,value);class ExpressRouter extends RouterConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$g(this,"router"),__publicField$g(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$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,key+"",value);const console$8=Logger("NullRouter");class NullRouter extends RouterConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$f(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$e=Object.defineProperty,__getOwnPropDesc$6=Object.getOwnPropertyDescriptor,__defNormalProp$e=(obj,key,value)=>key in obj?__defProp$e(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$e(target,key,result),result},__publicField$e=(obj,key,value)=>__defNormalProp$e(obj,typeof key!="symbol"?key+"":key,value);const console$7=Logger("SecretManagerManagedVault");class SecretManagerManagedVault extends ManagedVaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$e(this,"name","SecretManagerManagedVault"),__publicField$e(this,"scope","smyth-managed-vault"),__publicField$e(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$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"get"),__decorateClass$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"set"),__decorateClass$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"delete"),__decorateClass$6([SecureConnector.AccessControl],SecretManagerManagedVault.prototype,"exists");var __defProp$d=Object.defineProperty,__getOwnPropDesc$5=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$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$d(target,key,result),result},__publicField$d=(obj,key,value)=>__defNormalProp$d(obj,key+"",value);const console$6=Logger("NullManagedVault");class NullManagedVault extends ManagedVaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$d(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$5([SecureConnector.AccessControl],NullManagedVault.prototype,"get"),__decorateClass$5([SecureConnector.AccessControl],NullManagedVault.prototype,"set"),__decorateClass$5([SecureConnector.AccessControl],NullManagedVault.prototype,"delete"),__decorateClass$5([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{constructor(){super()}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$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,typeof key!="symbol"?key+"":key,value);const logger$3=Logger("SmythLog");class ConsoleLog extends LogConnector{constructor(){super(...arguments),__publicField$c(this,"name","ConsoleLog"),__publicField$c(this,"id")}getResourceACL(resourceId,candidate){return Promise.resolve(new ACL)}log(acRequest,logData,callId){return logger$3.debug(`Log for agent ${acRequest.candidate.id}: ${typeof logData=="string"?logData:JSON.stringify(logData)}`),Promise.resolve()}logTask(acRequest,tasks,isUsingTestDomain){return logger$3.debug(`${tasks} Task(s) Consumed by agent ${acRequest.candidate.id}: ${isUsingTestDomain?"Using Test Domain":"Using Production Domain"}`),Promise.resolve()}}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$b=Object.defineProperty,__getOwnPropDesc$4=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$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$b(target,key,result),result},__publicField$b=(obj,key,value)=>__defNormalProp$b(obj,typeof key!="symbol"?key+"":key,value);const console$5=Logger("LocalComponentConnector");class LocalComponentConnector extends ComponentConnector{constructor(){super(),__publicField$b(this,"name","LocalComponentConnector"),__publicField$b(this,"components",{}),this.init()}async init(){for(const component in ComponentInstances)this.components[component]=ComponentInstances[component];console$5.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){ConnectorService.getAccountConnector();const acl=new ACL;return acl.addAccess(candidate.role,candidate.id,TAccessLevel.Read),acl}}__decorateClass$4([SecureConnector.AccessControl],LocalComponentConnector.prototype,"register"),__decorateClass$4([SecureConnector.AccessControl],LocalComponentConnector.prototype,"get"),__decorateClass$4([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",components:["PromptGenerator","LLMAssistant","Classifier","VisionLLM","AgentPlugin","Chatbot","GPTPlugin","GenAILLM"],label:"GPT 4o Mini",modelId:"gpt-4o-mini",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",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,hidden:!0,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***
236
236
  //! ***IMPORTANT***
237
237
  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$a=Object.defineProperty,__getOwnPropDesc$3=Object.getOwnPropertyDescriptor,__defNormalProp$a=(obj,key,value)=>key in obj?__defProp$a(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$a(target,key,result),result},__publicField$a=(obj,key,value)=>__defNormalProp$a(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,10*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 setImmediate(async()=>{const _customModels=await this.getCustomModels(candidate);teamModels={...teamModels,..._customModels}}),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)},getFallbackLLM:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.getFallbackLLM(candidate.readRequest,teamModels2,model)},getBaseURL:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.getBaseURL(candidate.readRequest,teamModels2,model)},isUserCustomLLM:async model=>{const teamModels2=typeof model=="string"?await loadTeamModels():{};return this.isUserCustomLLM(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})=>{if(Array.isArray(model?.tags)&&model?.tags?.includes("sdk"))return;const allowedContextTokens=(await this.getModelInfo(candidate.readRequest,{},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,10*60*1e3),instance}async getModelInfo(acRequest,models2,model,hasAPIKey=!1){let modelId,alias,aliasModelInfo,modelInfo;typeof model=="object"&&model.modelId?(modelId=model.modelId,alias=model.alias,aliasModelInfo=models2?.[alias],modelInfo=model):(modelId=await this.getModelId(acRequest,models2,model),alias=models2?.[model]?.alias,aliasModelInfo=models2?.[alias],modelInfo=models2?.[model]);const aliasKeyOptions=aliasModelInfo&&hasAPIKey?aliasModelInfo?.keyOptions:null,modelKeyOptions=modelInfo?.keyOptions||aliasKeyOptions;return{...modelInfo,...aliasModelInfo,...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 getFallbackLLM(acRequest,models2,model){if(typeof model=="object"&&"fallbackLLM"in model)return model.fallbackLLM;const modelId=await this.getModelId(acRequest,models2,model);return models2?.[modelId]?.fallbackLLM||models2?.[model]?.fallbackLLM}async getBaseURL(acRequest,models2,model){if(typeof model=="object"&&"baseURL"in model)return model.baseURL;const modelId=await this.getModelId(acRequest,models2,model);return models2?.[modelId]?.baseURL||models2?.[model]?.baseURL}async isUserCustomLLM(acRequest,models2,model){if(typeof model=="object"&&"isUserCustomLLM"in model)return!!model.isUserCustomLLM;const modelId=await this.getModelId(acRequest,models2,model);return!!(models2?.[modelId]?.isUserCustomLLM||models2?.[model]?.isUserCustomLLM)}async getCustomModels(candidate){const enterpriseModels=await this.getEnterpriseModels(candidate),userCustomModels=await this.getUserCustomModels(candidate);return{...enterpriseModels,...userCustomModels}}async getEnterpriseModels(candidate){try{const models2={},accountConnector=ConnectorService.getAccountConnector(),team=await accountConnector.requester(candidate).getTeam(),modelsSetting=await accountConnector.team(team).getTeamSetting(ENTERPRISE_MODELS_SETTING_KEY),modelEntries=JSON.parse(modelsSetting||"{}");for(const[entryId,entry]of Object.entries(modelEntries)){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{}}}async getUserCustomModels(candidate){try{const models2={},accountConnector=ConnectorService.getAccountConnector(),team=await accountConnector.requester(candidate).getTeam(),modelsSetting=await accountConnector.team(team).getTeamSetting(USER_CUSTOM_MODELS_SETTING_KEY),modelEntries=JSON.parse(modelsSetting||"{}");for(const[entryId,entry]of Object.entries(modelEntries))models2[entry.name]={label:entry.name,modelId:entry?.modelId,provider:entry.provider,features:entry?.features||[],tags:Array.isArray(entry?.tags)?["Custom",...entry?.tags]:["Custom"],tokens:entry?.contextWindow??8192,completionTokens:entry?.maxOutputTokens??8192,enabled:!0,id:entryId,name:entry.name,baseURL:entry.baseURL,fallbackLLM:entry.fallbackLLM,isUserCustomLLM:!0,credentials:entry?.credentials||{}};return models2}catch{return{}}}};__publicField$a(_ModelsProviderConnector,"localCache",new LocalCache),__decorateClass$3([hookAsync("Connector.ModelsProvider.getEnterpriseModels")],_ModelsProviderConnector.prototype,"getEnterpriseModels"),__decorateClass$3([hookAsync("Connector.ModelsProvider.getUserCustomModels")],_ModelsProviderConnector.prototype,"getUserCustomModels");let ModelsProviderConnector=_ModelsProviderConnector;var __defProp$9=Object.defineProperty,__getOwnPropDesc$2=Object.getOwnPropertyDescriptor,__defNormalProp$9=(obj,key,value)=>key in obj?__defProp$9(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$9(target,key,result),result},__publicField$9=(obj,key,value)=>__defNormalProp$9(obj,typeof key!="symbol"?key+"":key,value);const console$4=Logger("SmythModelsProvider"),_JSONModelsProvider=class _JSONModelsProvider2 extends ModelsProviderConnector{constructor(_settings){if(super(_settings),this._settings=_settings,__publicField$9(this,"name","JSONModelsProvider"),__publicField$9(this,"models"),this.models=JSON.parse(JSON.stringify(models)),typeof this._settings.models=="string")this.initDirWatcher(this._settings.models);else if(typeof this._settings.models=="object")this._settings.mode==="merge"?this.models={...this.models,...this._settings.models}:this.models=this._settings.models,this.started=!0;else{const modelsFolder=this.findModelsFolder();modelsFolder?(this._settings.mode="merge",this.initDirWatcher(modelsFolder)):(console$4.warn("No models folder found ... falling back to built-in models only"),this.started=!0)}}async start(){super.start()}findModelsFolder(){const _modelsFolder=findSmythPath("models");return fs__default.existsSync(_modelsFolder)?(console$4.warn("Using default models folder : ",_modelsFolder),_modelsFolder):null}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$4.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$4.debug(`Successfully reindexed models. Total models: ${Object.keys(this.models).length}`)}catch(error){console$4.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$4.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$4.debug(`Loaded model: ${modelData.modelId}`)):console$4.warn("Invalid model format",modelData);else if(typeof modelData=="object"&&!Array.isArray(modelData)){let models2="";for(const[modelId,model]of Object.entries(modelData))try{this.isValidSingleModel(model)?(validModels[modelId]=model,models2+=`${modelId} `):console$4.warn(`Invalid model format for model "${modelId}"`)}catch(error){console$4.warn(`Error processing model "${modelId}":`,error)}console$4.debug(`Loaded models: ${models2}`)}else console$4.warn("Invalid format (not a model or object of models)")}catch(error){console$4.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){const stats=fs__default.statSync(dir);if(!stats.isDirectory()&&!stats.isFile()){console$4.warn(`Path "${dir}" is neither a file nor a directory ... skipping models watcher and falling back to built-in models only`),this.started=!0;return}try{if(!stats.isDirectory()){if(stats.isFile()){const fileContent=fs__default.readFileSync(dir,"utf-8");try{const modelData=JSON.parse(fileContent);this._settings?.mode==="merge"?this.models={...this.models,...modelData}:this.models=modelData}catch(error){console$4.error(`Error parsing model data from file "${dir}":`,error)}this.started=!0;return}console$4.warn(`Path "${dir}" is neither a file nor a directory`);return}}catch(error){console$4.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__default.watch(dir,{ignored:/(^|[\/\\])\../,persistent:!0,ignoreInitial:!0,awaitWriteFinish:{stabilityThreshold:2e3,pollInterval:100}}).on("add",path2=>{console$4.debug(`File ${path2} has been added`),debouncedReindex()}).on("change",path2=>{console$4.debug(`File ${path2} has been changed`),debouncedReindex()}).on("unlink",path2=>{console$4.debug(`File ${path2} has been removed`),debouncedReindex()}).on("ready",async()=>{console$4.debug(`Watcher ready. Performing initial scan of ${dir}`),await this.reindexModels(dir),this.started=!0})}};__decorateClass$2([SecureConnector.AccessControl],_JSONModelsProvider.prototype,"addModels"),__decorateClass$2([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$8=Object.defineProperty,__defNormalProp$8=(obj,key,value)=>key in obj?__defProp$8(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$8=(obj,key,value)=>__defNormalProp$8(obj,typeof key!="symbol"?key+"":key,value);const console$3=Logger("AWSLambda");class AWSLambdaCode extends CodeConnector{constructor(config2){super(config2),__publicField$8(this,"name","AWSLambda"),__publicField$8(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,currentEnvVariables]=await Promise.all([getDeployedFunction(functionName,this.awsConfigs),getDeployedCodeHash(agentId,codeUID),getCurrentEnvironmentVariables(acRequest.candidate.id,input.code)]),envValues=getSortedObjectValues(currentEnvVariables),codeHash=generateCodeHash(input.code,Object.keys(input.inputs),envValues);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{isValid,parameters,error,dependencies}=validateAsyncMainFunction(input.code);if(!isValid)throw new Error(error||"Invalid Code");const lambdaCode=generateLambdaCode(input.code,parameters,currentEnvVariables);fs__default.mkdirSync(directory),fs__default.writeFileSync(path.join(directory,"index.mjs"),lambdaCode),execSync("npm init -y",{cwd:directory}),execSync(`npm install ${dependencies.join(" ")}`,{cwd:directory});const zipFilePath=await zipCode(directory);return await createOrUpdateLambdaFunction(functionName,zipFilePath,this.awsConfigs,currentEnvVariables),await setDeployedCodeHash(agentId,codeUID,codeHash),console$3.debug("Lambda function updated successfully!"),{id:functionName,runtime:config2.runtime,createdAt:new Date,status:"deploying"}}catch(error){throw error}finally{try{fs__default.rmSync(`${directory}`,{recursive:!0,force:!0}),fs__default.unlinkSync(`${directory}.zip`)}catch{}}}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$3.debug(`Code result:
238
238
  ${typeof lambdaResponse.result=="object"?JSON.stringify(lambdaResponse.result,null,2):lambdaResponse.result}
@@ -245,5 +245,5 @@ ${error}
245
245
  const result = await main(${getParametersString(parameters,inputs)});
246
246
  return result;
247
247
  })();
248
- `}var __defProp$7=Object.defineProperty,__defNormalProp$7=(obj,key,value)=>key in obj?__defProp$7(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$7=(obj,key,value)=>__defNormalProp$7(obj,typeof key!="symbol"?key+"":key,value);const console$2=Logger("ECMASandbox");class ECMASandbox2 extends CodeConnector{constructor(config2){super(config2),__publicField$7(this,"name","ECMASandbox"),__publicField$7(this,"sandboxUrl"),this.sandboxUrl=config2.sandboxUrl}async prepare(acRequest,codeUID,input,config2){return{prepared:!0,errors:[],warnings:[]}}async deploy(acRequest,codeUID,input,config2){return{id:codeUID,runtime:config2.runtime,createdAt:new Date,status:"Deployed"}}async execute(acRequest,codeUID,inputs,config2){try{const{isValid,error,parameters}=validateAsyncMainFunction(inputs.code);if(!isValid)return{output:void 0,executionTime:0,success:!1,errors:[error]};const executableCode=generateExecutableCode(inputs.code,parameters,inputs.inputs);if(this.sandboxUrl){console$2.debug("Running code in remote sandbox");const executionStartTime=Date.now(),result=await axios.post(this.sandboxUrl,{code:executableCode}).catch(error2=>({error:error2})),executionTime=Date.now()-executionStartTime;if(result.error){const error2=result.error?.response?.data||result.error?.message||result.error.toString()||"Unknown error";return console$2.error(`Error running code: ${JSON.stringify(error2,null,2)}`),{output:void 0,executionTime,success:!1,errors:[error2]}}else return console$2.debug(`Code result: ${result?.data?.Output}`),{output:result.data?.Output,executionTime,success:!0,errors:[]}}else{console$2.debug("Running code in isolated vm");const executionStartTime=Date.now(),result=await runJs(executableCode),executionTime=Date.now()-executionStartTime;return console$2.debug(`Code result: ${result}`),{output:result,executionTime,success:!0,errors:[]}}}catch(error){return console$2.error(`Error running code: ${error}`),{output:void 0,executionTime:0,success:!1,errors:[error]}}}async executeDeployment(acRequest,codeUID,deploymentId,inputs,config2){return await this.execute(acRequest,codeUID,inputs,config2)}async listDeployments(acRequest,codeUID,config2){return[]}async getDeployment(acRequest,codeUID,deploymentId,config2){return 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),ConnectorService.register(TConnectorService.Code,"ECMASandbox",ECMASandbox2)}}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,key+"",value);class SchedulerConnector extends SecureConnector{constructor(settings){super(settings),__publicField$6(this,"_eventEmitter"),this._eventEmitter=new EventEmitter$1}requester(candidate){return{list:async()=>await this.list(candidate.readRequest),add:async(jobId,job,schedule)=>{const accountConnector=ConnectorService.getAccountConnector(),agentTeam=await accountConnector.getCandidateTeam(AccessCandidate.agent(job.agentId)),candidateTeam=await accountConnector.getCandidateTeam(candidate);if(agentTeam!==candidateTeam)throw new Error(`Candidate ${candidate.id} is not authorized to schedule a job for agent ${job.agentId}`);await this.add(candidate.writeRequest,jobId,job,schedule)},delete:async jobId=>{await this.delete(candidate.writeRequest,jobId)},get:async jobId=>await this.get(candidate.readRequest,jobId),pause:async jobId=>{await this.pause(candidate.writeRequest,jobId)},resume:async jobId=>{await this.resume(candidate.writeRequest,jobId)},on:(event,listener)=>{this.on(event,listener)},off:(event,listener)=>{this.off(event,listener)}}}constructJobKey(candidate,jobId){return`${candidate.role}_${candidate.id}_${jobId}`}emit(event,...args){return this._eventEmitter.emit(event,...args)}on(event,listener){return this._eventEmitter.on(event,listener),this}off(event,listener){return this._eventEmitter.off(event,listener),this}}var __defProp$5=Object.defineProperty,__getOwnPropDesc$1=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$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$5(target,key,result),result},__publicField$5=(obj,key,value)=>__defNormalProp$5(obj,typeof key!="symbol"?key+"":key,value);const logger$2=Logger("LocalScheduler"),_LocalScheduler=class _LocalScheduler2 extends SchedulerConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$5(this,"name","LocalScheduler"),__publicField$5(this,"id","local"),__publicField$5(this,"folder"),__publicField$5(this,"jobsPrefix","jobs"),__publicField$5(this,"runtimePrefix",".jobs.runtime"),__publicField$5(this,"isInitialized",!1),__publicField$5(this,"config"),this.config={folder:_settings?.folder||"",runJobs:_settings?.runJobs!==!1,persistExecutionHistory:_settings?.persistExecutionHistory!==!1,maxHistoryEntries:_settings?.maxHistoryEntries||100},this.folder=this.findSchedulerFolder(this.config.folder),this.initialize(),fs__default.existsSync(this.folder)||logger$2.warn(`Invalid folder provided: ${this.folder}`)}findSchedulerFolder(folder){let _schedulerFolder=folder;return _schedulerFolder&&fs__default.existsSync(_schedulerFolder)?_schedulerFolder:(_schedulerFolder=findSmythPath("scheduler"),fs__default.existsSync(_schedulerFolder)?(logger$2.warn("Using alternative scheduler folder found in : ",_schedulerFolder),_schedulerFolder):(logger$2.warn("!!! All attempts to find an existing scheduler folder failed !!!"),logger$2.warn("!!! I will use this folder: ",_schedulerFolder),_schedulerFolder))}async initialize(){const jobsFolderPath=path.join(this.folder,this.jobsPrefix);fs__default.existsSync(jobsFolderPath)||(fs__default.mkdirSync(jobsFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(jobsFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler job configurations. Do not delete it."));const runtimeFolderPath=path.join(this.folder,this.runtimePrefix);fs__default.existsSync(runtimeFolderPath)||(fs__default.mkdirSync(runtimeFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(runtimeFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler runtime data and execution history. Safe to delete if needed.")),this.config.runJobs&&await this.loadJobsFromDisk(),this.isInitialized=!0,logger$2.info(`LocalScheduler initialized (runJobs: ${this.config.runJobs})`)}getCandidateFolderName(candidate){return`${candidate.id}.${candidate.role}`}getJobFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.jobsPrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}getRuntimeFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.runtimePrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}async loadJobsFromDisk(){try{const jobsFolderPath=path.join(this.folder,this.jobsPrefix);if(!fs__default.existsSync(jobsFolderPath))return;const candidateFolders=fs__default.readdirSync(jobsFolderPath).filter(f=>{const fullPath=path.join(jobsFolderPath,f);return fs__default.statSync(fullPath).isDirectory()});for(const candidateFolder of candidateFolders){const lastDotIndex=candidateFolder.lastIndexOf(".");if(lastDotIndex===-1){logger$2.warn(`Invalid candidate folder format: ${candidateFolder}`);continue}const candidateId=candidateFolder.substring(0,lastDotIndex),candidateRole=candidateFolder.substring(lastDotIndex+1),candidate={id:candidateId,role:candidateRole},candidatePath=path.join(jobsFolderPath,candidateFolder),jobFiles=fs__default.readdirSync(candidatePath).filter(f=>f.endsWith(".json"));for(const file of jobFiles)try{const filePath=path.join(candidatePath,file),data=fs__default.readFileSync(filePath,"utf-8"),jobConfig=JSON.parse(data),runtimeData=await this.loadRuntimeDataFromDisk(candidate,jobConfig.id),jobData={...jobConfig,...runtimeData,candidateRole:candidate.role,candidateId:candidate.id},jobKey=this.constructJobKey(candidate,jobData.id);_LocalScheduler2.jobs.set(jobKey,jobData),jobData.status==="active"&&(logger$2.info(`Job ${jobData.id} loaded from ${candidateFolder} and scheduled for execution`),await this.scheduleJob(jobData))}catch(error){logger$2.warn(`Error loading job file ${file} from ${candidateFolder}:`,error)}}logger$2.info(`Loaded ${_LocalScheduler2.jobs.size} jobs from disk`)}catch(error){logger$2.warn("Error loading jobs from disk",error)}}async saveJobToDisk(candidate,jobData){try{const filePath=this.getJobFilePath(candidate,jobData.id,!0),{executionHistory,lastRun,nextRun,candidateRole,candidateId,createdBy,...configData}=jobData;fs__default.writeFileSync(filePath,JSON.stringify(configData,null,2),"utf-8")}catch(error){throw logger$2.warn(`Error saving job ${jobData.id} to disk`,error),error}}async saveRuntimeDataToDisk(candidate,jobData){try{const filePath=this.getRuntimeFilePath(candidate,jobData.id,!0),runtimeData={executionHistory:jobData.executionHistory||[],lastRun:jobData.lastRun,nextRun:jobData.nextRun};fs__default.writeFileSync(filePath,JSON.stringify(runtimeData,null,2),"utf-8")}catch(error){logger$2.warn(`Error saving runtime data for job ${jobData.id}`,error);return}}async loadRuntimeDataFromDisk(candidate,jobId){try{const filePath=this.getRuntimeFilePath(candidate,jobId);if(!fs__default.existsSync(filePath))return{};const data=fs__default.readFileSync(filePath,"utf-8");return JSON.parse(data)}catch(error){return logger$2.warn(`Error loading runtime data for job ${jobId}`,error),{}}}async deleteJobFromDisk(candidate,jobId){try{const jobFilePath=this.getJobFilePath(candidate,jobId);fs__default.existsSync(jobFilePath)&&fs__default.unlinkSync(jobFilePath);const runtimeFilePath=this.getRuntimeFilePath(candidate,jobId);fs__default.existsSync(runtimeFilePath)&&fs__default.unlinkSync(runtimeFilePath)}catch(error){logger$2.warn(`Error deleting job ${jobId} from disk`,error);return}}async scheduleJob(jobData){if(jobData.status!=="active")return;const validation=Schedule.fromJSON(jobData.schedule).validate();if(!validation.valid)throw logger$2.warn(`Invalid schedule for job ${jobData.id}: ${validation.error}`),new Error(`Invalid schedule for job ${jobData.id}: ${validation.error}`);const jobKey=this.constructJobKey({role:jobData.candidateRole,id:jobData.candidateId},jobData.id),existingTimer=_LocalScheduler2.timers.get(jobKey);if(existingTimer&&(logger$2.info(`Clearing existing timer for job ${jobData.id} (overwriting duplicate schedule)`),clearInterval(existingTimer),_LocalScheduler2.timers.delete(jobKey)),jobData.schedule.interval){const intervalMs=Schedule.parseInterval(jobData.schedule.interval),timer=setInterval(async()=>{await this.executeJob(jobData)},intervalMs);timer.unref(),_LocalScheduler2.timers.set(jobKey,timer)}if(jobData.schedule.cron)throw logger$2.warn(`Cron scheduling not yet implemented for job ${jobData.id}`),new Error(`Cron scheduling not yet implemented for job ${jobData.id}`)}async unscheduleJob(jobKey){const timer=_LocalScheduler2.timers.get(jobKey);timer&&(clearInterval(timer),_LocalScheduler2.timers.delete(jobKey))}async executeJob(jobData){if(!jobData.jobConfig){logger$2.warn(`Skipping execution of job ${jobData.id}: job configuration not available.`);return}const schedule=Schedule.fromJSON(jobData.schedule);if(!schedule.shouldRun()){logger$2.info(`Job ${jobData.id} skipped - outside schedule window`);return}const job=Job.fromJSON(jobData.jobConfig);logger$2.debug(`Executing job ${jobData.id} with metadata:`,JSON.stringify(jobData.jobConfig.metadata));const owner=jobData.createdBy;this.emit("executing",{id:jobData.id,job,owner});const result=await job.executeWithRetry();this.emit("executed",{id:jobData.id,job,owner,result}),jobData.lastRun=new Date().toISOString();const nextRun=schedule.calculateNextRun(new Date(jobData.lastRun));jobData.nextRun=nextRun?nextRun.toISOString():void 0,result.success||logger$2.warn(`Job ${jobData.id} failed:`,result.error?.message),this.config.persistExecutionHistory&&(jobData.executionHistory||(jobData.executionHistory=[]),jobData.executionHistory.unshift({timestamp:new Date().toISOString(),success:result.success,error:result.error?.message,executionTime:result.executionTime,retries:result.retries}),jobData.executionHistory.length>this.config.maxHistoryEntries&&(jobData.executionHistory=jobData.executionHistory.slice(0,this.config.maxHistoryEntries)));const candidate={role:jobData.candidateRole,id:jobData.candidateId};await this.saveJobToDisk(candidate,jobData),this.config.persistExecutionHistory&&await this.saveRuntimeDataToDisk(candidate,jobData)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const accountConnector=ConnectorService.getAccountConnector(),teamId=await accountConnector.getCandidateTeam(candidate),jobKey=this.constructJobKey(candidate,resourceId),jobData=_LocalScheduler2.jobs.get(jobKey),jobAgentTeamId=jobData?.jobConfig?.agentId?await accountConnector.getCandidateTeam(AccessCandidate.agent(jobData?.jobConfig?.agentId)):null;return jobAgentTeamId&&teamId!==jobAgentTeamId?new ACL:jobData?ACL.from(jobData.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async list(acRequest){this.isInitialized||await this.initialize();const result=[];for(const[key,jobData]of _LocalScheduler2.jobs)if(jobData.candidateRole===acRequest.candidate.role&&jobData.candidateId===acRequest.candidate.id){const{candidateRole,candidateId,...serializableData}=jobData;result.push(serializableData)}return result}async add(acRequest,jobId,job,schedule){this.isInitialized||await this.initialize();const validation=schedule.validate();if(!validation.valid){logger$2.warn(`Invalid schedule: ${validation.error}`);return}const jobKey=this.constructJobKey(acRequest.candidate,jobId),existingJob=_LocalScheduler2.jobs.get(jobKey);let acl;existingJob?acl=ACL.from(existingJob.acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner):acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner);const nextRun=schedule.calculateNextRun(),jobData={id:jobId,schedule:schedule.toJSON(),jobConfig:job.toJSON(),acl:acl.ACL,status:"active",nextRun:nextRun?nextRun.toISOString():void 0,createdBy:{role:acRequest.candidate.role,id:acRequest.candidate.id},candidateRole:acRequest.candidate.role,candidateId:acRequest.candidate.id,executionHistory:existingJob?.executionHistory||[]};existingJob&&await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.set(jobKey,jobData),await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} added successfully`)}async delete(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId);if(!_LocalScheduler2.jobs.get(jobKey)){logger$2.warn(`Job ${jobId} not found`);return}await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.delete(jobKey),await this.deleteJobFromDisk(acRequest.candidate,jobId),logger$2.info(`Job ${jobId} deleted successfully`)}async get(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData)return;const{candidateRole,candidateId,...serializableData}=jobData;return serializableData}async pause(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status!=="paused"&&(await this.unscheduleJob(jobKey),jobData.status="paused",await this.saveJobToDisk(acRequest.candidate,jobData),logger$2.info(`Job ${jobId} paused`))}async resume(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status==="paused"&&(jobData.status="active",await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} resumed`))}async shutdown(){logger$2.info("Shutting down LocalScheduler...");const timerCount=_LocalScheduler2.timers.size;for(const[jobKey,timer]of _LocalScheduler2.timers)clearInterval(timer);_LocalScheduler2.timers.clear(),logger$2.info(`LocalScheduler shutdown complete (cleared ${timerCount} timers)`)}};__publicField$5(_LocalScheduler,"jobs",new Map),__publicField$5(_LocalScheduler,"timers",new Map),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"list"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"add"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"delete"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"get"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"pause"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"resume");let LocalScheduler=_LocalScheduler;class SchedulerService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Scheduler,"LocalScheduler",LocalScheduler)}}class TelemetryConnector extends SecureConnector{constructor(){super()}requester(candidate){return{}}}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);class OTelContextRegistry{static key(agentId,processId){return`${agentId}:${processId}`}static startProcess(agentId,processId,span){this.registry.set(this.key(agentId,processId),{agentId,processId,rootSpan:span})}static get(agentId,processId){return this.registry.get(this.key(agentId,processId))}static update(agentId,processId,ctx){const key=this.key(agentId,processId),current=this.registry.get(key);current&&this.registry.set(key,{...current,...ctx})}static endProcess(agentId,processId){this.registry.delete(this.key(agentId,processId))}}__publicField$4(OTelContextRegistry,"registry",new Map);var __defProp$3=Object.defineProperty,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);const outputLogger=Logger("OTelLog");class OTel extends TelemetryConnector{constructor(_settings){super(),this._settings=_settings,__publicField$3(this,"name","OTel"),__publicField$3(this,"id"),__publicField$3(this,"tracer"),__publicField$3(this,"logger"),__publicField$3(this,"tracerProvider"),__publicField$3(this,"loggerProvider"),outputLogger.log("Initializing Tracer ...");const traceExporter=new OTLPTraceExporter({url:`${_settings.endpoint}/v1/traces`,headers:_settings.headers}),spanProcessor=new BatchSpanProcessor(traceExporter),resource=resourceFromAttributes({[ATTR_SERVICE_NAME]:_settings.serviceName||"smythos",[ATTR_SERVICE_VERSION]:_settings.serviceVersion||"1.0.0"});this.tracerProvider=new NodeTracerProvider({resource,spanProcessors:[spanProcessor]}),this.tracerProvider.register(),outputLogger.log("Initializing Log Exporter ...");const logExporter=new OTLPLogExporter({url:`${_settings.endpoint}/v1/logs`,headers:_settings.headers}),logProcessor=new BatchLogRecordProcessor(logExporter);this.loggerProvider=new LoggerProvider({resource,processors:[logProcessor]}),logs.setGlobalLoggerProvider(this.loggerProvider),this.tracer=trace.getTracer("smythos.agent"),this.logger=logs.getLogger("smythos.agent"),this.id=`otel-${_settings.endpoint}`,this.setupHooks()}async stop(){outputLogger.log(`Stopping ${this.name} connector ...`),await this.tracerProvider.forceFlush?.().catch(error=>{outputLogger.error("Error forcing flush of tracer provider",error)}),await this.tracerProvider.shutdown?.().catch(error=>{outputLogger.error("Error shutting down tracer provider",error)}),await this.loggerProvider.forceFlush().catch(error=>{outputLogger.error("Error forcing flush of logger provider",error)}),await this.loggerProvider.shutdown().catch(error=>{outputLogger.error("Error shutting down logger provider",error)})}redactSensitiveData(data,redactFields){if(!redactFields||redactFields.length===0||typeof data!="object"||data===null)return data;const redacted=Array.isArray(data)?[...data]:{...data};for(const key in redacted)redactFields.some(field=>key.toLowerCase().includes(field.toLowerCase()))?redacted[key]="[REDACTED]":typeof redacted[key]=="object"&&redacted[key]!==null&&(redacted[key]=this.redactSensitiveData(redacted[key],redactFields));return redacted}formatOutputForLog(output,isError=!1){const config2=this._settings,maxSize=config2.maxOutputSize??10*1024;if((config2.fullOutputOnErrorOnly??!1)&&!isError)return;const redacted=this.redactSensitiveData(output,config2.redactFields),outputStr=JSON.stringify(redacted);return outputStr&&outputStr.length>maxSize?`${outputStr.substring(0,maxSize)}...[TRUNCATED: ${outputStr.length} bytes, limit: ${maxSize} bytes]`:outputStr}getResourceACL(resourceId,candidate){return Promise.resolve(new ACL)}log(acRequest,logData,callId){return Promise.resolve()}logTask(acRequest,tasks,isUsingTestDomain){return Promise.resolve()}prepareComponentData(data,prefix,maxEntryLength=200){const result={};for(let key in data)result[prefix?`${prefix}.${key}`:key]=(typeof data[key]=="object"?JSON.stringify(data[key]):data[key].toString()).substring(0,maxEntryLength);return result}setupHooks(){const tracer=this.tracer,logger2=this.logger,oTelInstance=this,createToolInfoHandler=function(hookContext){return function(toolInfo){if(!hookContext.curLLMGenSpan||!hookContext.convSpan)return;const modelId=toolInfo.model,lastContext=toolInfo.contextWindow.filter(context2=>context2.role==="user").slice(-2),toolNames=toolInfo.map(tool=>tool.name+"("+tool.arguments+")");hookContext.curLLMGenSpan.addEvent("llm.gen.tool.calls",{"tool.calls":toolNames.join(", "),"llm.model":modelId||"unknown","context.preview":JSON.stringify(lastContext).substring(0,200)});const spanContext=trace.setSpan(context.active(),hookContext.curLLMGenSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`LLM tool calls: ${toolNames.join(", ")}`,attributes:{"agent.id":hookContext.agentId,"conv.id":hookContext.processId,"llm.model":modelId||"unknown","context.preview":JSON.stringify(lastContext).substring(0,5e3)}})}),hookContext.curLLMGenSpan.end(),delete hookContext.curLLMGenSpan}},createDataHandler=function(hookContext){return function(data,reqInfo){if(!hookContext.convSpan||hookContext.curLLMGenSpan)return;const modelId=reqInfo.model,lastContext=reqInfo.contextWindow.filter(context2=>context2.role==="user").slice(-2);if(hookContext?.latencySpans?.[reqInfo.requestId]){const ttfbSpan=hookContext.latencySpans[reqInfo.requestId];ttfbSpan.addEvent("llm.first.byte.received",{"request.id":reqInfo.requestId,"data.size":JSON.stringify(data||{}).length,"llm.model":modelId||"unknown"}),ttfbSpan.setStatus({code:SpanStatusCode.OK}),ttfbSpan.end(),delete hookContext.latencySpans[reqInfo.requestId]}const llmGenSpan=tracer.startSpan("Conv.GenAI",{attributes:{"agent.id":hookContext.agentId,"conv.id":hookContext.processId,"llm.model":modelId||"unknown"}},trace.setSpan(context.active(),hookContext.convSpan));llmGenSpan.addEvent("llm.gen.started",{"request.id":reqInfo.requestId,timestamp:Date.now(),"llm.model":modelId||"unknown","context.preview":JSON.stringify(lastContext).substring(0,200)}),hookContext.curLLMGenSpan=llmGenSpan}},createRequestedHandler=function(hookContext){return function(reqInfo){if(!hookContext.convSpan)return;hookContext.latencySpans||(hookContext.latencySpans={});const lastContext=reqInfo.contextWindow.filter(context2=>context2.role==="user").slice(-2),modelId=reqInfo.model,llmGenLatencySpan=tracer.startSpan("Conv.GenAI.TTFB",{attributes:{"agent.id":hookContext.agentId,"conv.id":hookContext.processId,"request.id":reqInfo.requestId,"llm.model":modelId||"unknown","metric.type":"ttfb"}},trace.setSpan(context.active(),hookContext.convSpan));llmGenLatencySpan.addEvent("llm.requested",{"request.id":reqInfo.requestId,timestamp:Date.now(),"context.preview":JSON.stringify(lastContext).substring(0,200)}),hookContext.latencySpans[reqInfo.requestId]=llmGenLatencySpan}};return HookService.register("Conversation.streamPrompt",async function(additionalContext,args){const conversation=this.instance,processId=conversation.id,agentId=conversation.agentId,message=args?.message||null,hookContext=this.context;if(message==null)return;const modelId=typeof conversation?.model=="string"?conversation?.model:conversation?.model?.modelId,convSpan=tracer.startSpan("Agent.Conv",{attributes:{"agent.id":agentId,"conv.id":processId,"llm.model":modelId||"unknown"}});hookContext.convSpan=convSpan,hookContext.dataHandler=createDataHandler(hookContext),conversation.on(TLLMEvent.Data,hookContext.dataHandler),hookContext.requestedHandler=createRequestedHandler(hookContext),conversation.on(TLLMEvent.Requested,hookContext.requestedHandler),hookContext.agentId=agentId,hookContext.processId=processId,hookContext.toolInfoHandler=createToolInfoHandler(hookContext),conversation.on(TLLMEvent.ToolInfo,hookContext.toolInfoHandler),convSpan.addEvent("skill.process.started",{"input.size":JSON.stringify(message||{}).length,"input.preview":message.substring(0,200),"llm.model":modelId||"unknown"}),OTelContextRegistry.startProcess(agentId,processId,convSpan);const spanCtx=convSpan.spanContext(),spanContext=trace.setSpan(context.active(),convSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Conversation.streamPrompt started: ${processId}`,attributes:{trace_id:spanCtx.traceId,span_id:spanCtx.spanId,trace_flags:spanCtx.traceFlags,"agent.id":agentId,"conv.id":processId,"input.size":JSON.stringify(message||{}).length,"input.preview":message.substring(0,2e3)}})})},THook.NonBlocking),HookService.registerAfter("Conversation.streamPrompt",async function({result,args,error}){const conversation=this.instance,processId=conversation.id,agentId=conversation.agentId,message=args?.[0]||null,hookContext=this.context;if(message==null)return;const ctx=OTelContextRegistry.get(agentId,processId);if(!ctx)return;hookContext.curLLMGenSpan&&(hookContext.curLLMGenSpan.addEvent("llm.gen.content",{"content.size":JSON.stringify(result||{}).length,"content.preview":result.substring(0,200)}),hookContext.curLLMGenSpan.end(),hookContext.toolInfoHandler&&conversation.off(TLLMEvent.ToolInfo,hookContext.toolInfoHandler),hookContext.dataHandler&&conversation.off(TLLMEvent.Data,hookContext.dataHandler),hookContext.requestedHandler&&conversation.off(TLLMEvent.Requested,hookContext.requestedHandler));const{rootSpan:convSpan}=ctx;convSpan.spanContext();const spanContext=trace.setSpan(context.active(),convSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Conversation.streamPrompt completed: ${processId}`,attributes:{"agent.id":agentId,"conv.id":processId,"output.size":JSON.stringify(result||{}).length,"output.preview":result.substring(0,2e3)}})}),convSpan.end(),OTelContextRegistry.endProcess(agentId,processId)},THook.NonBlocking),HookService.register("SREAgent.process",async function(endpointPath,inputData){const agent=this.instance,agentProcessId=agent.agentRuntime.processID,processId=agentProcessId.split(":").shift(),agentId=agent.id,agentRequest=agent.agentRequest,teamId=agent.teamId,_hookContext=this.context,body=oTelInstance.prepareComponentData(agentRequest.body||{}),query=oTelInstance.prepareComponentData(agentRequest.query||{}),headers=oTelInstance.prepareComponentData(agentRequest.headers||{}),agentInput=oTelInstance.prepareComponentData(inputData||{}),input={body,query,headers,processInput:agentInput};let convSpan;const ctx=OTelContextRegistry.get(agentId,processId);ctx&&(convSpan=ctx.rootSpan,_hookContext.otelSpan=convSpan);const agentSpan=tracer.startSpan("Agent.Skill",{attributes:{"agent.id":agentId,"team.id":teamId,"process.id":agentProcessId}},convSpan?trace.setSpan(context.active(),convSpan):void 0),inputPreview=JSON.stringify(input||{}).substring(0,200);agentSpan.addEvent("skill.process.started",{endpoint:endpointPath,"input.size":JSON.stringify(input||{}).length,"input.preview":inputPreview}),OTelContextRegistry.startProcess(agentId,agentProcessId,agentSpan);const spanCtx=agentSpan.spanContext(),spanContext=trace.setSpan(context.active(),agentSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Agent Skill process started: ${processId}`,attributes:{trace_id:spanCtx.traceId,span_id:spanCtx.spanId,trace_flags:spanCtx.traceFlags,agentId,processId:agentProcessId,input:agentInput,body,query,headers}})})},THook.NonBlocking),HookService.registerAfter("SREAgent.process",async function({result,error}){const agent=this.instance,agentProcessId=agent.agentRuntime.processID,agentId=agent.id;this.context;const ctx=OTelContextRegistry.get(agentId,agentProcessId);if(!ctx)return;const agentSpan=ctx.rootSpan;if(!agentSpan)return;error?(agentSpan.recordException(error),agentSpan.setStatus({code:SpanStatusCode.ERROR,message:error.message}),agentSpan.addEvent("skill.process.error",{"error.message":error.message})):(agentSpan.setStatus({code:SpanStatusCode.OK}),agentSpan.addEvent("skill.process.completed",{"output.size":JSON.stringify(result||{}).length}),agentSpan.setAttributes({"output.size":JSON.stringify(result||{}).length}));const outputForLog=oTelInstance.formatOutputForLog(result,!!error),spanCtx=agentSpan.spanContext(),logAttributes={trace_id:spanCtx.traceId,span_id:spanCtx.spanId,trace_flags:spanCtx.traceFlags,agentId,processId:agentProcessId,hasError:!!error,"error.message":error?.message,"error.stack":error?.stack};outputForLog!==void 0&&(logAttributes["agent.output"]=outputForLog);const spanContext=trace.setSpan(context.active(),agentSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:error?SeverityNumber.ERROR:SeverityNumber.INFO,severityText:error?"ERROR":"INFO",body:`Agent process ${error?"failed":"completed"}: ${agentProcessId}`,attributes:logAttributes})}),agentSpan.end(),OTelContextRegistry.endProcess(agentId,agentProcessId)},THook.NonBlocking),HookService.register("Component.process",async function(input,settings,agent){const processId=agent.agentRuntime.processID,agentId=agent.id;this.instance;const componentId=settings.id||"unknown",componentType=settings.name,componentName=settings.displayName||settings.name,eventId=settings.eventId,parentSpan=OTelContextRegistry.get(agentId,processId)?.rootSpan,compSettingsData=oTelInstance.prepareComponentData(settings?.data||{},"cmp.settings"),spanName=`Component.${componentType}`,span=tracer.startSpan(spanName,{attributes:{"agent.id":agentId,"process.id":processId,"event.id":eventId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,...compSettingsData}},parentSpan?trace.setSpan(context.active(),parentSpan):void 0);JSON.stringify(input||{});const compInputData=oTelInstance.prepareComponentData(input||{});span.addEvent("cmp.call",{"event.id":eventId,"cmp.input.size":JSON.stringify(input||{}).length,"cmp.input":JSON.stringify(compInputData)});const spanContext=trace.setSpan(context.active(),span);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Component ${componentType} started`,attributes:{"agent.id":agentId,"process.id":processId,"event.id":eventId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,"cmp.input":input}})}),this.context.otelSpan=span},THook.NonBlocking),HookService.registerAfter("Component.process",async function({result,error,args}){const span=this.context.otelSpan;if(!span)return;const agent=args[2],settings=args[1],eventId=settings.eventId,processId=agent.agentRuntime.processID,agentId=agent.id;this.instance;const componentId=settings.id||"unknown",componentType=settings.name,componentName=settings.displayName||settings.name;if(error){span.recordException(error),span.setStatus({code:SpanStatusCode.ERROR,message:error.message}),span.addEvent("cmp.call.error",{"event.id":eventId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,"error.type":error.name,"error.message":error.message,"error.stack":error.stack?.substring(0,500)});const spanContext=trace.setSpan(context.active(),span);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.ERROR,severityText:"ERROR",body:`Component ${componentType} (${componentId}) failed: ${error.message}`,attributes:{"agent.id":agentId,"process.id":processId,"event.id":eventId,"cmp.id":componentId,"cmp.name":componentName,"cmp.type":componentType,"error.type":error.name,"error.message":error.message,"error.stack":error.stack}})})}else{span.setStatus({code:SpanStatusCode.OK});const resultStr=JSON.stringify(result||{});span.addEvent("cmp.call.result",{"output.size":resultStr.length,"output.preview":resultStr.substring(0,200)}),span.setAttributes({"output.size":JSON.stringify(result||{}).length,"output.has_error":!!result?._error}),oTelInstance.formatOutputForLog(result,!1);const logAttributes={"agent.id":agentId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,"process.id":processId,"event.id":eventId,"cmp.output":result},spanContext=trace.setSpan(context.active(),span);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Component ${componentType} (${componentId}) completed successfully`,attributes:logAttributes})})}span.end()},THook.NonBlocking),Promise.resolve()}}class TelemetryService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Telemetry,"OTel",OTel)}}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,service.Scheduler=new SchedulerService,service.Telemetry=new TelemetryService,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")})}function generateServiceKey(serviceName){const secret=process.env.SRE_SECRET;if(!secret||secret.trim().length<32)throw new Error("SRE_SECRET must be at least 32 characters");return createHmac("sha256",secret).update(`sre-service:${serviceName}`).digest("hex")}function validateServiceKey(serviceName,providedKey){try{const expectedKey=generateServiceKey(serviceName);return timingSafeEqual(Buffer.from(expectedKey),Buffer.from(providedKey))}catch{return!1}}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 logger$1=Logger("ExternalEventsReceiver");class ExternalEventsReceiver{constructor(config2){if(__publicField$2(this,"server",null),__publicField$2(this,"wss",null),__publicField$2(this,"config"),__publicField$2(this,"isRunning",!1),this.config={enableHttp:!0,enableWebSocket:!0,path:"/ws",...config2},!this.config.authTokens||this.config.authTokens.length===0)throw logger$1.warn("At least one authentication token must be provided"),new Error("At least one authentication token must be provided")}async start(){if(this.isRunning){logger$1.warn("Server is already running");return}return this.server=createServer((req,res)=>this.handleHttpRequest(req,res)),this.config.enableWebSocket&&(this.wss=new WebSocketServer({server:this.server,path:this.config.path}),this.wss.on("connection",(ws,req)=>{this.handleWebSocketConnection(ws,req)})),new Promise((resolve,reject)=>{this.server.listen(this.config.port,"127.0.0.1",()=>{this.isRunning=!0,logger$1.debug(`Server started on port ${this.config.port}`+(this.config.enableHttp?" [HTTP]":"")+(this.config.enableWebSocket?` [WebSocket: ${this.config.path}]`:"")),resolve()}),this.server.on("error",error=>{logger$1.error("Server error",error),reject(error)})})}async stop(){if(this.isRunning)return new Promise((resolve,reject)=>{this.wss&&this.wss.close(err=>{err&&logger$1.error("Error closing WebSocket server",err)}),this.server?this.server.close(err=>{err?(logger$1.error("Error closing HTTP server",err),reject(err)):(this.isRunning=!1,logger$1.debug("Server stopped"),resolve())}):resolve()})}handleHttpRequest(req,res){if(!this.config.enableHttp){this.sendResponse(res,404,{error:"HTTP endpoint is disabled"});return}if(req.method!=="POST"){this.sendResponse(res,405,{error:"Method not allowed. Only POST requests are accepted."});return}const authResult=this.validateAuth(req.headers);if(!authResult.valid){this.sendResponse(res,401,{error:authResult.error});return}const connectorName=this.getConnectorName(req.headers);if(!connectorName){this.sendResponse(res,400,{error:"Missing x-connector-name header"});return}let body="";req.on("data",chunk=>{body+=chunk.toString()}),req.on("end",()=>{try{const data=body?JSON.parse(body):{};this.emitExternalEvent(connectorName,data),this.sendResponse(res,200,{success:!0,message:`Event EXT:${connectorName} emitted successfully`})}catch(error){logger$1.error("Error processing HTTP request",error),this.sendResponse(res,400,{error:"Invalid JSON payload"})}}),req.on("error",error=>{logger$1.error("HTTP request error",error),this.sendResponse(res,500,{error:"Internal server error"})})}handleWebSocketConnection(ws,req){logger$1.debug("New WebSocket connection");const authResult=this.validateAuth(req.headers);if(!authResult.valid){ws.close(1008,authResult.error);return}let connectorName=this.getConnectorName(req.headers);ws.on("message",message=>{try{const data=JSON.parse(message.toString());if(!connectorName&&(connectorName=data.connectorName||data["x-connector-name"],!connectorName)){ws.send(JSON.stringify({error:"Missing connector name in headers or message"}));return}this.emitExternalEvent(connectorName,data),ws.send(JSON.stringify({success:!0,message:`Event EXT:${connectorName} emitted successfully`}))}catch(error){logger$1.error("Error processing WebSocket message",error),ws.send(JSON.stringify({error:"Invalid JSON message"}))}}),ws.on("error",error=>{logger$1.error("WebSocket error",error)}),ws.on("close",()=>{logger$1.debug("WebSocket connection closed")})}validateAuth(headers){const authHeader=headers.authorization||headers.Authorization,serviceName=headers["x-service-name"]||headers["X-Service-Name"];if(!authHeader)return logger$1.warn("Missing Authorization header"),{valid:!1,error:"Missing Authorization header"};if(!serviceName||typeof serviceName!="string")return logger$1.warn("Missing or invalid X-Service-Name header"),{valid:!1,error:"Missing X-Service-Name header"};const token=authHeader.replace(/^Bearer\s+/i,"");return token?validateServiceKey(serviceName,token)?(logger$1.debug(`Authenticated service: ${serviceName}`),{valid:!0,serviceName}):(logger$1.warn(`Invalid key for service: ${serviceName}`),{valid:!1,error:"Invalid authentication"}):{valid:!1,error:"Invalid Authorization header format"}}getConnectorName(headers){const connectorName=headers["x-connector-name"]||headers["X-Connector-Name"];return typeof connectorName=="string"?connectorName:connectorName?.[0]||null}emitExternalEvent(connectorName,data){const eventName=`EXT:${connectorName}`,connector=ConnectorService.getInstance(TConnectorService[connectorName]);connector&&connector.handleEvent(eventName,data)}sendResponse(res,statusCode,body){res.statusCode=statusCode,res.setHeader("Content-Type","application/json"),res.end(JSON.stringify(body))}getStatus(){return{running:this.isRunning,port:this.config.port,config:this.config}}}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"},Scheduler:{Connector:"LocalScheduler",Settings:{runJobs:!0,persistExecutionHistory:!0}}}),__publicField$1(this,"connectors",{}),__publicField$1(this,"connectorInstances",{}),__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}get version(){return pkg.version}static get Instance(){return _SmythRuntime2.instance||(_SmythRuntime2.instance=new _SmythRuntime2),_SmythRuntime2.instance}get initializing(){return this._initializing}init(_config){if(logger.info(`SRE v${this.version} initializing...`),this._initialized)return console.warn("SRE already initialized ... skipping"),_SmythRuntime2.Instance;if(this._initializing)return console.warn("You tried to initialize SRE while it is already initializing ... skipping"),_SmythRuntime2.Instance;(!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),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),this.setupShutdownHandlers(),_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(),this.started=!1)}setupShutdownHandlers(){["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!")})}};__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)}}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,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,ComponentInputType,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,Credentials,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ENTERPRISE_MODELS_SETTING_KEY,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,ExternalEventsReceiver,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GmailTrigger,GoogleAIConnector,GoogleEmbeds,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONExpression$1 as JSONExpression,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,Job,JobSchedulerTrigger,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMInterface,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalScheduler,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,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT,MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT,ManagedOAuth2Credentials,ManagedVaultConnector,ManagedVaultService,Match,MemoryDeleteKeyVal,MemoryReadKeyVal,MemoryWriteKeyVal,MemoryWriteObject,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,MySQLAccount,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,O3_AND_O4_MODELS,O3_AND_O4_MODELS_PATTERN,OSResourceMonitor,OTel,OTelContextRegistry,OllamaConnector,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,SEARCH_TOOL_COSTS,SRE,SUPPORTED_MIME_TYPES_MAP,Schedule,SchedulerConnector,SchedulerService,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,THook,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TToolType,TavilyWebSearch,TelemetryConnector,TelemetryService,TemplateString,TemplateStringHelper,Trigger,USER_CUSTOM_MODELS_SETTING_KEY,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,WhatsAppTrigger,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractAllKeyNamesFromTemplateVars,extractKeyFromTemplateVar,findSmythPath,findValidResourcePath,generateCodeFromLegacyComponent,generateCodeHash,generateExecutableCode,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,generateServiceKey,getCredentials,getCurrentEnvironmentVariables,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,getSortedObjectValues,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,hookableClass,inputErrMsg,invokeLambdaFunction,isAgent,isValidGroqReasoningEffort,isValidOpenAIReasoningEffort,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,runJs,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,validateAsyncMainFunction,validateServiceKey,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,xAIConnector,zipCode};
248
+ `}var __defProp$7=Object.defineProperty,__defNormalProp$7=(obj,key,value)=>key in obj?__defProp$7(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$7=(obj,key,value)=>__defNormalProp$7(obj,typeof key!="symbol"?key+"":key,value);const console$2=Logger("ECMASandbox");class ECMASandbox2 extends CodeConnector{constructor(config2){super(config2),__publicField$7(this,"name","ECMASandbox"),__publicField$7(this,"sandboxUrl"),this.sandboxUrl=config2.sandboxUrl}async prepare(acRequest,codeUID,input,config2){return{prepared:!0,errors:[],warnings:[]}}async deploy(acRequest,codeUID,input,config2){return{id:codeUID,runtime:config2.runtime,createdAt:new Date,status:"Deployed"}}async execute(acRequest,codeUID,inputs,config2){try{const{isValid,error,parameters}=validateAsyncMainFunction(inputs.code);if(!isValid)return{output:void 0,executionTime:0,success:!1,errors:[error]};const executableCode=generateExecutableCode(inputs.code,parameters,inputs.inputs);if(this.sandboxUrl){console$2.debug("Running code in remote sandbox");const executionStartTime=Date.now(),result=await axios.post(this.sandboxUrl,{code:executableCode}).catch(error2=>({error:error2})),executionTime=Date.now()-executionStartTime;if(result.error){const error2=result.error?.response?.data||result.error?.message||result.error.toString()||"Unknown error";return console$2.error(`Error running code: ${JSON.stringify(error2,null,2)}`),{output:void 0,executionTime,success:!1,errors:[error2]}}else return console$2.debug(`Code result: ${result?.data?.Output}`),{output:result.data?.Output,executionTime,success:!0,errors:[]}}else{console$2.debug("Running code in isolated vm");const executionStartTime=Date.now(),result=await runJs(executableCode),executionTime=Date.now()-executionStartTime;return console$2.debug(`Code result: ${result}`),{output:result,executionTime,success:!0,errors:[]}}}catch(error){return console$2.error(`Error running code: ${error}`),{output:void 0,executionTime:0,success:!1,errors:[error]}}}async executeDeployment(acRequest,codeUID,deploymentId,inputs,config2){return await this.execute(acRequest,codeUID,inputs,config2)}async listDeployments(acRequest,codeUID,config2){return[]}async getDeployment(acRequest,codeUID,deploymentId,config2){return 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),ConnectorService.register(TConnectorService.Code,"ECMASandbox",ECMASandbox2)}}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,key+"",value);class SchedulerConnector extends SecureConnector{constructor(settings){super(settings),__publicField$6(this,"_eventEmitter"),this._eventEmitter=new EventEmitter$1}requester(candidate){return{list:async()=>await this.list(candidate.readRequest),add:async(jobId,job,schedule)=>{const accountConnector=ConnectorService.getAccountConnector(),agentTeam=await accountConnector.getCandidateTeam(AccessCandidate.agent(job.agentId)),candidateTeam=await accountConnector.getCandidateTeam(candidate);if(agentTeam!==candidateTeam)throw new Error(`Candidate ${candidate.id} is not authorized to schedule a job for agent ${job.agentId}`);await this.add(candidate.writeRequest,jobId,job,schedule)},delete:async jobId=>{await this.delete(candidate.writeRequest,jobId)},get:async jobId=>await this.get(candidate.readRequest,jobId),pause:async jobId=>{await this.pause(candidate.writeRequest,jobId)},resume:async jobId=>{await this.resume(candidate.writeRequest,jobId)},on:(event,listener)=>{this.on(event,listener)},off:(event,listener)=>{this.off(event,listener)}}}constructJobKey(candidate,jobId){return`${candidate.role}_${candidate.id}_${jobId}`}emit(event,...args){return this._eventEmitter.emit(event,...args)}on(event,listener){return this._eventEmitter.on(event,listener),this}off(event,listener){return this._eventEmitter.off(event,listener),this}}var __defProp$5=Object.defineProperty,__getOwnPropDesc$1=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$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$5(target,key,result),result},__publicField$5=(obj,key,value)=>__defNormalProp$5(obj,typeof key!="symbol"?key+"":key,value);const logger$2=Logger("LocalScheduler"),_LocalScheduler=class _LocalScheduler2 extends SchedulerConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$5(this,"name","LocalScheduler"),__publicField$5(this,"id","local"),__publicField$5(this,"folder"),__publicField$5(this,"jobsPrefix","jobs"),__publicField$5(this,"runtimePrefix",".jobs.runtime"),__publicField$5(this,"isInitialized",!1),__publicField$5(this,"config"),this.config={folder:_settings?.folder||"",runJobs:_settings?.runJobs!==!1,persistExecutionHistory:_settings?.persistExecutionHistory!==!1,maxHistoryEntries:_settings?.maxHistoryEntries||100},this.folder=this.findSchedulerFolder(this.config.folder),this.initialize(),fs__default.existsSync(this.folder)||logger$2.warn(`Invalid folder provided: ${this.folder}`)}findSchedulerFolder(folder){let _schedulerFolder=folder;return _schedulerFolder&&fs__default.existsSync(_schedulerFolder)?_schedulerFolder:(_schedulerFolder=findSmythPath("scheduler"),fs__default.existsSync(_schedulerFolder)?(logger$2.warn("Using alternative scheduler folder found in : ",_schedulerFolder),_schedulerFolder):(logger$2.warn("!!! All attempts to find an existing scheduler folder failed !!!"),logger$2.warn("!!! I will use this folder: ",_schedulerFolder),_schedulerFolder))}async initialize(){const jobsFolderPath=path.join(this.folder,this.jobsPrefix);fs__default.existsSync(jobsFolderPath)||(fs__default.mkdirSync(jobsFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(jobsFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler job configurations. Do not delete it."));const runtimeFolderPath=path.join(this.folder,this.runtimePrefix);fs__default.existsSync(runtimeFolderPath)||(fs__default.mkdirSync(runtimeFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(runtimeFolderPath,"README_IMPORTANT.txt"),"This folder contains scheduler runtime data and execution history. Safe to delete if needed.")),this.config.runJobs&&await this.loadJobsFromDisk(),this.isInitialized=!0,logger$2.info(`LocalScheduler initialized (runJobs: ${this.config.runJobs})`)}getCandidateFolderName(candidate){return`${candidate.id}.${candidate.role}`}getJobFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.jobsPrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}getRuntimeFilePath(candidate,jobId,createFoldersIfNotExists=!1){const candidateFolder=this.getCandidateFolderName(candidate),jobFilename=jobId,fullPath=path.join(this.folder,this.runtimePrefix,candidateFolder,`${jobFilename}.json`);if(createFoldersIfNotExists){const folder=path.dirname(fullPath);fs__default.existsSync(folder)||fs__default.mkdirSync(folder,{recursive:!0})}return fullPath}async loadJobsFromDisk(){try{const jobsFolderPath=path.join(this.folder,this.jobsPrefix);if(!fs__default.existsSync(jobsFolderPath))return;const candidateFolders=fs__default.readdirSync(jobsFolderPath).filter(f=>{const fullPath=path.join(jobsFolderPath,f);return fs__default.statSync(fullPath).isDirectory()});for(const candidateFolder of candidateFolders){const lastDotIndex=candidateFolder.lastIndexOf(".");if(lastDotIndex===-1){logger$2.warn(`Invalid candidate folder format: ${candidateFolder}`);continue}const candidateId=candidateFolder.substring(0,lastDotIndex),candidateRole=candidateFolder.substring(lastDotIndex+1),candidate={id:candidateId,role:candidateRole},candidatePath=path.join(jobsFolderPath,candidateFolder),jobFiles=fs__default.readdirSync(candidatePath).filter(f=>f.endsWith(".json"));for(const file of jobFiles)try{const filePath=path.join(candidatePath,file),data=fs__default.readFileSync(filePath,"utf-8"),jobConfig=JSON.parse(data),runtimeData=await this.loadRuntimeDataFromDisk(candidate,jobConfig.id),jobData={...jobConfig,...runtimeData,candidateRole:candidate.role,candidateId:candidate.id},jobKey=this.constructJobKey(candidate,jobData.id);_LocalScheduler2.jobs.set(jobKey,jobData),jobData.status==="active"&&(logger$2.info(`Job ${jobData.id} loaded from ${candidateFolder} and scheduled for execution`),await this.scheduleJob(jobData))}catch(error){logger$2.warn(`Error loading job file ${file} from ${candidateFolder}:`,error)}}logger$2.info(`Loaded ${_LocalScheduler2.jobs.size} jobs from disk`)}catch(error){logger$2.warn("Error loading jobs from disk",error)}}async saveJobToDisk(candidate,jobData){try{const filePath=this.getJobFilePath(candidate,jobData.id,!0),{executionHistory,lastRun,nextRun,candidateRole,candidateId,createdBy,...configData}=jobData;fs__default.writeFileSync(filePath,JSON.stringify(configData,null,2),"utf-8")}catch(error){throw logger$2.warn(`Error saving job ${jobData.id} to disk`,error),error}}async saveRuntimeDataToDisk(candidate,jobData){try{const filePath=this.getRuntimeFilePath(candidate,jobData.id,!0),runtimeData={executionHistory:jobData.executionHistory||[],lastRun:jobData.lastRun,nextRun:jobData.nextRun};fs__default.writeFileSync(filePath,JSON.stringify(runtimeData,null,2),"utf-8")}catch(error){logger$2.warn(`Error saving runtime data for job ${jobData.id}`,error);return}}async loadRuntimeDataFromDisk(candidate,jobId){try{const filePath=this.getRuntimeFilePath(candidate,jobId);if(!fs__default.existsSync(filePath))return{};const data=fs__default.readFileSync(filePath,"utf-8");return JSON.parse(data)}catch(error){return logger$2.warn(`Error loading runtime data for job ${jobId}`,error),{}}}async deleteJobFromDisk(candidate,jobId){try{const jobFilePath=this.getJobFilePath(candidate,jobId);fs__default.existsSync(jobFilePath)&&fs__default.unlinkSync(jobFilePath);const runtimeFilePath=this.getRuntimeFilePath(candidate,jobId);fs__default.existsSync(runtimeFilePath)&&fs__default.unlinkSync(runtimeFilePath)}catch(error){logger$2.warn(`Error deleting job ${jobId} from disk`,error);return}}async scheduleJob(jobData){if(jobData.status!=="active")return;const validation=Schedule.fromJSON(jobData.schedule).validate();if(!validation.valid)throw logger$2.warn(`Invalid schedule for job ${jobData.id}: ${validation.error}`),new Error(`Invalid schedule for job ${jobData.id}: ${validation.error}`);const jobKey=this.constructJobKey({role:jobData.candidateRole,id:jobData.candidateId},jobData.id),existingTimer=_LocalScheduler2.timers.get(jobKey);if(existingTimer&&(logger$2.info(`Clearing existing timer for job ${jobData.id} (overwriting duplicate schedule)`),clearInterval(existingTimer),_LocalScheduler2.timers.delete(jobKey)),jobData.schedule.interval){const intervalMs=Schedule.parseInterval(jobData.schedule.interval),timer=setInterval(async()=>{await this.executeJob(jobData)},intervalMs);timer.unref(),_LocalScheduler2.timers.set(jobKey,timer)}if(jobData.schedule.cron)throw logger$2.warn(`Cron scheduling not yet implemented for job ${jobData.id}`),new Error(`Cron scheduling not yet implemented for job ${jobData.id}`)}async unscheduleJob(jobKey){const timer=_LocalScheduler2.timers.get(jobKey);timer&&(clearInterval(timer),_LocalScheduler2.timers.delete(jobKey))}async executeJob(jobData){if(!jobData.jobConfig){logger$2.warn(`Skipping execution of job ${jobData.id}: job configuration not available.`);return}const schedule=Schedule.fromJSON(jobData.schedule);if(!schedule.shouldRun()){logger$2.info(`Job ${jobData.id} skipped - outside schedule window`);return}const job=Job.fromJSON(jobData.jobConfig);logger$2.debug(`Executing job ${jobData.id} with metadata:`,JSON.stringify(jobData.jobConfig.metadata));const owner=jobData.createdBy;this.emit("executing",{id:jobData.id,job,owner});const result=await job.executeWithRetry();this.emit("executed",{id:jobData.id,job,owner,result}),jobData.lastRun=new Date().toISOString();const nextRun=schedule.calculateNextRun(new Date(jobData.lastRun));jobData.nextRun=nextRun?nextRun.toISOString():void 0,result.success||logger$2.warn(`Job ${jobData.id} failed:`,result.error?.message),this.config.persistExecutionHistory&&(jobData.executionHistory||(jobData.executionHistory=[]),jobData.executionHistory.unshift({timestamp:new Date().toISOString(),success:result.success,error:result.error?.message,executionTime:result.executionTime,retries:result.retries}),jobData.executionHistory.length>this.config.maxHistoryEntries&&(jobData.executionHistory=jobData.executionHistory.slice(0,this.config.maxHistoryEntries)));const candidate={role:jobData.candidateRole,id:jobData.candidateId};await this.saveJobToDisk(candidate,jobData),this.config.persistExecutionHistory&&await this.saveRuntimeDataToDisk(candidate,jobData)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const accountConnector=ConnectorService.getAccountConnector(),teamId=await accountConnector.getCandidateTeam(candidate),jobKey=this.constructJobKey(candidate,resourceId),jobData=_LocalScheduler2.jobs.get(jobKey),jobAgentTeamId=jobData?.jobConfig?.agentId?await accountConnector.getCandidateTeam(AccessCandidate.agent(jobData?.jobConfig?.agentId)):null;return jobAgentTeamId&&teamId!==jobAgentTeamId?new ACL:jobData?ACL.from(jobData.acl):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async list(acRequest){this.isInitialized||await this.initialize();const result=[];for(const[key,jobData]of _LocalScheduler2.jobs)if(jobData.candidateRole===acRequest.candidate.role&&jobData.candidateId===acRequest.candidate.id){const{candidateRole,candidateId,...serializableData}=jobData;result.push(serializableData)}return result}async add(acRequest,jobId,job,schedule){this.isInitialized||await this.initialize();const validation=schedule.validate();if(!validation.valid){logger$2.warn(`Invalid schedule: ${validation.error}`);return}const jobKey=this.constructJobKey(acRequest.candidate,jobId),existingJob=_LocalScheduler2.jobs.get(jobKey);let acl;existingJob?acl=ACL.from(existingJob.acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner):acl=new ACL().addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner);const nextRun=schedule.calculateNextRun(),jobData={id:jobId,schedule:schedule.toJSON(),jobConfig:job.toJSON(),acl:acl.ACL,status:"active",nextRun:nextRun?nextRun.toISOString():void 0,createdBy:{role:acRequest.candidate.role,id:acRequest.candidate.id},candidateRole:acRequest.candidate.role,candidateId:acRequest.candidate.id,executionHistory:existingJob?.executionHistory||[]};existingJob&&await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.set(jobKey,jobData),await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} added successfully`)}async delete(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId);if(!_LocalScheduler2.jobs.get(jobKey)){logger$2.warn(`Job ${jobId} not found`);return}await this.unscheduleJob(jobKey),_LocalScheduler2.jobs.delete(jobKey),await this.deleteJobFromDisk(acRequest.candidate,jobId),logger$2.info(`Job ${jobId} deleted successfully`)}async get(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData)return;const{candidateRole,candidateId,...serializableData}=jobData;return serializableData}async pause(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status!=="paused"&&(await this.unscheduleJob(jobKey),jobData.status="paused",await this.saveJobToDisk(acRequest.candidate,jobData),logger$2.info(`Job ${jobId} paused`))}async resume(acRequest,jobId){this.isInitialized||await this.initialize();const jobKey=this.constructJobKey(acRequest.candidate,jobId),jobData=_LocalScheduler2.jobs.get(jobKey);if(!jobData){logger$2.warn(`Job ${jobId} not found`);return}jobData.status==="paused"&&(jobData.status="active",await this.saveJobToDisk(acRequest.candidate,jobData),this.config.runJobs&&await this.scheduleJob(jobData),logger$2.info(`Job ${jobId} resumed`))}async shutdown(){logger$2.info("Shutting down LocalScheduler...");const timerCount=_LocalScheduler2.timers.size;for(const[jobKey,timer]of _LocalScheduler2.timers)clearInterval(timer);_LocalScheduler2.timers.clear(),logger$2.info(`LocalScheduler shutdown complete (cleared ${timerCount} timers)`)}};__publicField$5(_LocalScheduler,"jobs",new Map),__publicField$5(_LocalScheduler,"timers",new Map),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"list"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"add"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"delete"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"get"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"pause"),__decorateClass$1([SecureConnector.AccessControl],_LocalScheduler.prototype,"resume");let LocalScheduler=_LocalScheduler;class SchedulerService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Scheduler,"LocalScheduler",LocalScheduler)}}class TelemetryConnector extends SecureConnector{constructor(){super()}requester(candidate){return{}}}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);class OTelContextRegistry{static key(agentId,processId){return`${agentId}:${processId}`}static startProcess(agentId,processId,span){this.registry.set(this.key(agentId,processId),{agentId,processId,rootSpan:span})}static get(agentId,processId){return this.registry.get(this.key(agentId,processId))}static update(agentId,processId,ctx){const key=this.key(agentId,processId),current=this.registry.get(key);current&&this.registry.set(key,{...current,...ctx})}static endProcess(agentId,processId){this.registry.delete(this.key(agentId,processId))}}__publicField$4(OTelContextRegistry,"registry",new Map);var __defProp$3=Object.defineProperty,__defNormalProp$3=(obj,key,value)=>key in obj?__defProp$3(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$3=(obj,key,value)=>__defNormalProp$3(obj,typeof key!="symbol"?key+"":key,value);const outputLogger=Logger("OTelLog");class OTel extends TelemetryConnector{constructor(_settings){super(),this._settings=_settings,__publicField$3(this,"name","OTel"),__publicField$3(this,"id"),__publicField$3(this,"tracer"),__publicField$3(this,"logger"),__publicField$3(this,"tracerProvider"),__publicField$3(this,"loggerProvider"),outputLogger.log("Initializing Tracer ...");const traceExporter=new OTLPTraceExporter({url:`${_settings.endpoint}/v1/traces`,headers:_settings.headers}),spanProcessor=new BatchSpanProcessor(traceExporter),resource=resourceFromAttributes({[ATTR_SERVICE_NAME]:_settings.serviceName||"smythos",[ATTR_SERVICE_VERSION]:_settings.serviceVersion||"1.0.0"});this.tracerProvider=new NodeTracerProvider({resource,spanProcessors:[spanProcessor]}),this.tracerProvider.register(),outputLogger.log("Initializing Log Exporter ...");const logExporter=new OTLPLogExporter({url:`${_settings.endpoint}/v1/logs`,headers:_settings.headers}),logProcessor=new BatchLogRecordProcessor(logExporter);this.loggerProvider=new LoggerProvider({resource,processors:[logProcessor]}),logs.setGlobalLoggerProvider(this.loggerProvider),this.tracer=trace.getTracer("smythos.agent"),this.logger=logs.getLogger("smythos.agent"),this.id=`otel-${_settings.endpoint}`,this.setupHooks()}async stop(){outputLogger.log(`Stopping ${this.name} connector ...`),await this.tracerProvider.forceFlush?.().catch(error=>{outputLogger.error("Error forcing flush of tracer provider",error)}),await this.tracerProvider.shutdown?.().catch(error=>{outputLogger.error("Error shutting down tracer provider",error)}),await this.loggerProvider.forceFlush().catch(error=>{outputLogger.error("Error forcing flush of logger provider",error)}),await this.loggerProvider.shutdown().catch(error=>{outputLogger.error("Error shutting down logger provider",error)})}redactSensitiveData(data,redactFields){if(!redactFields||redactFields.length===0||typeof data!="object"||data===null)return data;const redacted=Array.isArray(data)?[...data]:{...data};for(const key in redacted)redactFields.some(field=>key.toLowerCase().includes(field.toLowerCase()))?redacted[key]="[REDACTED]":typeof redacted[key]=="object"&&redacted[key]!==null&&(redacted[key]=this.redactSensitiveData(redacted[key],redactFields));return redacted}formatOutputForLog(output,isError=!1){const config2=this._settings,maxSize=config2.maxOutputSize??10*1024;if((config2.fullOutputOnErrorOnly??!1)&&!isError)return;const redacted=this.redactSensitiveData(output,config2.redactFields),outputStr=JSON.stringify(redacted);return outputStr&&outputStr.length>maxSize?`${outputStr.substring(0,maxSize)}...[TRUNCATED: ${outputStr.length} bytes, limit: ${maxSize} bytes]`:outputStr}getResourceACL(resourceId,candidate){return Promise.resolve(new ACL)}log(acRequest,logData,callId){return Promise.resolve()}logTask(acRequest,tasks,isUsingTestDomain){return Promise.resolve()}prepareComponentData(data,prefix,maxEntryLength=200){const result={};for(let key in data)result[prefix?`${prefix}.${key}`:key]=(typeof data[key]=="object"?JSON.stringify(data[key]):data[key].toString()).substring(0,maxEntryLength);return result}setupHooks(){const tracer=this.tracer,logger2=this.logger,oTelInstance=this,createToolInfoHandler=function(hookContext){return function(toolInfo){if(!hookContext.curLLMGenSpan||!hookContext.convSpan)return;const modelId=toolInfo.model,lastContext=toolInfo.contextWindow.filter(context2=>context2.role==="user").slice(-2),toolNames=toolInfo.map(tool=>tool.name+"("+tool.arguments+")");hookContext.curLLMGenSpan.addEvent("llm.gen.tool.calls",{"tool.calls":toolNames.join(", "),"llm.model":modelId||"unknown","context.preview":JSON.stringify(lastContext).substring(0,200)});const spanContext=trace.setSpan(context.active(),hookContext.curLLMGenSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`LLM tool calls: ${toolNames.join(", ")}`,attributes:{"agent.id":hookContext.agentId,"conv.id":hookContext.processId,"llm.model":modelId||"unknown","context.preview":JSON.stringify(lastContext).substring(0,5e3)}})}),hookContext.curLLMGenSpan.end(),delete hookContext.curLLMGenSpan}},createDataHandler=function(hookContext){return function(data,reqInfo){if(!hookContext.convSpan||hookContext.curLLMGenSpan)return;const modelId=reqInfo.model,lastContext=reqInfo.contextWindow.filter(context2=>context2.role==="user").slice(-2);if(hookContext?.latencySpans?.[reqInfo.requestId]){const ttfbSpan=hookContext.latencySpans[reqInfo.requestId];ttfbSpan.addEvent("llm.first.byte.received",{"request.id":reqInfo.requestId,"data.size":JSON.stringify(data||{}).length,"llm.model":modelId||"unknown"}),ttfbSpan.setStatus({code:SpanStatusCode.OK}),ttfbSpan.end(),delete hookContext.latencySpans[reqInfo.requestId]}const llmGenSpan=tracer.startSpan("Conv.GenAI",{attributes:{"agent.id":hookContext.agentId,"conv.id":hookContext.processId,"llm.model":modelId||"unknown"}},trace.setSpan(context.active(),hookContext.convSpan));llmGenSpan.addEvent("llm.gen.started",{"request.id":reqInfo.requestId,timestamp:Date.now(),"llm.model":modelId||"unknown","context.preview":JSON.stringify(lastContext).substring(0,200)}),hookContext.curLLMGenSpan=llmGenSpan}},createRequestedHandler=function(hookContext){return function(reqInfo){if(!hookContext.convSpan)return;hookContext.latencySpans||(hookContext.latencySpans={});const lastContext=reqInfo.contextWindow.filter(context2=>context2.role==="user").slice(-2),modelId=reqInfo.model,llmGenLatencySpan=tracer.startSpan("Conv.GenAI.TTFB",{attributes:{"agent.id":hookContext.agentId,"conv.id":hookContext.processId,"request.id":reqInfo.requestId,"llm.model":modelId||"unknown","metric.type":"ttfb"}},trace.setSpan(context.active(),hookContext.convSpan));llmGenLatencySpan.addEvent("llm.requested",{"request.id":reqInfo.requestId,timestamp:Date.now(),"context.preview":JSON.stringify(lastContext).substring(0,200)}),hookContext.latencySpans[reqInfo.requestId]=llmGenLatencySpan}};return HookService.register("Conversation.streamPrompt",async function(additionalContext,args){const conversation=this.instance,processId=conversation.id,agentId=conversation.agentId,message=typeof args=="object"?args?.message:args||null,hookContext=this.context;if(message==null)return;const modelId=typeof conversation?.model=="string"?conversation?.model:conversation?.model?.modelId,convSpan=tracer.startSpan("Agent.Conv",{attributes:{"agent.id":agentId,"conv.id":processId,"llm.model":modelId||"unknown"}});hookContext.convSpan=convSpan,hookContext.dataHandler=createDataHandler(hookContext),conversation.on(TLLMEvent.Data,hookContext.dataHandler),hookContext.requestedHandler=createRequestedHandler(hookContext),conversation.on(TLLMEvent.Requested,hookContext.requestedHandler),hookContext.agentId=agentId,hookContext.processId=processId,hookContext.toolInfoHandler=createToolInfoHandler(hookContext),conversation.on(TLLMEvent.ToolInfo,hookContext.toolInfoHandler),convSpan.addEvent("skill.process.started",{"input.size":JSON.stringify(message||{}).length,"input.preview":message.substring(0,200),"llm.model":modelId||"unknown"}),OTelContextRegistry.startProcess(agentId,processId,convSpan);const spanCtx=convSpan.spanContext(),spanContext=trace.setSpan(context.active(),convSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Conversation.streamPrompt started: ${processId}`,attributes:{trace_id:spanCtx.traceId,span_id:spanCtx.spanId,trace_flags:spanCtx.traceFlags,"agent.id":agentId,"conv.id":processId,"input.size":JSON.stringify(message||{}).length,"input.preview":message.substring(0,2e3)}})})},THook.NonBlocking),HookService.registerAfter("Conversation.streamPrompt",async function({result,args,error}){const conversation=this.instance,processId=conversation.id,agentId=conversation.agentId,message=typeof args?.[0]=="object"?args?.[0]?.message:args?.[0]||null,hookContext=this.context;if(message==null)return;const ctx=OTelContextRegistry.get(agentId,processId);if(!ctx)return;hookContext.curLLMGenSpan&&(hookContext.curLLMGenSpan.addEvent("llm.gen.content",{"content.size":JSON.stringify(result||{}).length,"content.preview":result.substring(0,200)}),hookContext.curLLMGenSpan.end(),hookContext.toolInfoHandler&&conversation.off(TLLMEvent.ToolInfo,hookContext.toolInfoHandler),hookContext.dataHandler&&conversation.off(TLLMEvent.Data,hookContext.dataHandler),hookContext.requestedHandler&&conversation.off(TLLMEvent.Requested,hookContext.requestedHandler));const{rootSpan:convSpan}=ctx;convSpan.spanContext();const spanContext=trace.setSpan(context.active(),convSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Conversation.streamPrompt completed: ${processId}`,attributes:{"agent.id":agentId,"conv.id":processId,"output.size":JSON.stringify(result||{}).length,"output.preview":result.substring(0,2e3)}})}),convSpan.end(),OTelContextRegistry.endProcess(agentId,processId)},THook.NonBlocking),HookService.register("SREAgent.process",async function(endpointPath,inputData){const agent=this.instance,agentProcessId=agent.agentRuntime.processID,processId=agentProcessId.split(":").shift(),agentId=agent.id,agentRequest=agent.agentRequest,teamId=agent.teamId,_hookContext=this.context,body=oTelInstance.prepareComponentData(agentRequest.body||{}),query=oTelInstance.prepareComponentData(agentRequest.query||{}),headers=oTelInstance.prepareComponentData(agentRequest.headers||{}),agentInput=oTelInstance.prepareComponentData(inputData||{}),input={body,query,headers,processInput:agentInput};let convSpan;const ctx=OTelContextRegistry.get(agentId,processId);ctx&&(convSpan=ctx.rootSpan,_hookContext.otelSpan=convSpan);const agentSpan=tracer.startSpan("Agent.Skill",{attributes:{"agent.id":agentId,"team.id":teamId,"process.id":agentProcessId}},convSpan?trace.setSpan(context.active(),convSpan):void 0),inputPreview=JSON.stringify(input||{}).substring(0,200);agentSpan.addEvent("skill.process.started",{endpoint:endpointPath,"input.size":JSON.stringify(input||{}).length,"input.preview":inputPreview}),OTelContextRegistry.startProcess(agentId,agentProcessId,agentSpan);const spanCtx=agentSpan.spanContext(),spanContext=trace.setSpan(context.active(),agentSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Agent Skill process started: ${processId}`,attributes:{trace_id:spanCtx.traceId,span_id:spanCtx.spanId,trace_flags:spanCtx.traceFlags,agentId,processId:agentProcessId,input:agentInput,body,query,headers}})})},THook.NonBlocking),HookService.registerAfter("SREAgent.process",async function({result,error}){const agent=this.instance,agentProcessId=agent.agentRuntime.processID,agentId=agent.id;this.context;const ctx=OTelContextRegistry.get(agentId,agentProcessId);if(!ctx)return;const agentSpan=ctx.rootSpan;if(!agentSpan)return;error?(agentSpan.recordException(error),agentSpan.setStatus({code:SpanStatusCode.ERROR,message:error.message}),agentSpan.addEvent("skill.process.error",{"error.message":error.message})):(agentSpan.setStatus({code:SpanStatusCode.OK}),agentSpan.addEvent("skill.process.completed",{"output.size":JSON.stringify(result||{}).length}),agentSpan.setAttributes({"output.size":JSON.stringify(result||{}).length}));const outputForLog=oTelInstance.formatOutputForLog(result,!!error),spanCtx=agentSpan.spanContext(),logAttributes={trace_id:spanCtx.traceId,span_id:spanCtx.spanId,trace_flags:spanCtx.traceFlags,agentId,processId:agentProcessId,hasError:!!error,"error.message":error?.message,"error.stack":error?.stack};outputForLog!==void 0&&(logAttributes["agent.output"]=outputForLog);const spanContext=trace.setSpan(context.active(),agentSpan);context.with(spanContext,()=>{logger2.emit({severityNumber:error?SeverityNumber.ERROR:SeverityNumber.INFO,severityText:error?"ERROR":"INFO",body:`Agent process ${error?"failed":"completed"}: ${agentProcessId}`,attributes:logAttributes})}),agentSpan.end(),OTelContextRegistry.endProcess(agentId,agentProcessId)},THook.NonBlocking),HookService.register("Component.process",async function(input,settings,agent){const processId=agent.agentRuntime.processID,agentId=agent.id;this.instance;const componentId=settings.id||"unknown",componentType=settings.name,componentName=settings.displayName||settings.name,eventId=settings.eventId,parentSpan=OTelContextRegistry.get(agentId,processId)?.rootSpan,compSettingsData=oTelInstance.prepareComponentData(settings?.data||{},"cmp.settings"),spanName=`Component.${componentType}`,span=tracer.startSpan(spanName,{attributes:{"agent.id":agentId,"process.id":processId,"event.id":eventId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,...compSettingsData}},parentSpan?trace.setSpan(context.active(),parentSpan):void 0);JSON.stringify(input||{});const compInputData=oTelInstance.prepareComponentData(input||{});span.addEvent("cmp.call",{"event.id":eventId,"cmp.input.size":JSON.stringify(input||{}).length,"cmp.input":JSON.stringify(compInputData)});const spanContext=trace.setSpan(context.active(),span);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Component ${componentType} started`,attributes:{"agent.id":agentId,"process.id":processId,"event.id":eventId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,"cmp.input":input}})}),this.context.otelSpan=span},THook.NonBlocking),HookService.registerAfter("Component.process",async function({result,error,args}){const span=this.context.otelSpan;if(!span)return;const agent=args[2],settings=args[1],eventId=settings.eventId,processId=agent.agentRuntime.processID,agentId=agent.id;this.instance;const componentId=settings.id||"unknown",componentType=settings.name,componentName=settings.displayName||settings.name;if(error){span.recordException(error),span.setStatus({code:SpanStatusCode.ERROR,message:error.message}),span.addEvent("cmp.call.error",{"event.id":eventId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,"error.type":error.name,"error.message":error.message,"error.stack":error.stack?.substring(0,500)});const spanContext=trace.setSpan(context.active(),span);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.ERROR,severityText:"ERROR",body:`Component ${componentType} (${componentId}) failed: ${error.message}`,attributes:{"agent.id":agentId,"process.id":processId,"event.id":eventId,"cmp.id":componentId,"cmp.name":componentName,"cmp.type":componentType,"error.type":error.name,"error.message":error.message,"error.stack":error.stack}})})}else{span.setStatus({code:SpanStatusCode.OK});const resultStr=JSON.stringify(result||{});span.addEvent("cmp.call.result",{"output.size":resultStr.length,"output.preview":resultStr.substring(0,200)}),span.setAttributes({"output.size":JSON.stringify(result||{}).length,"output.has_error":!!result?._error}),oTelInstance.formatOutputForLog(result,!1);const logAttributes={"agent.id":agentId,"cmp.id":componentId,"cmp.type":componentType,"cmp.name":componentName,"process.id":processId,"event.id":eventId,"cmp.output":result},spanContext=trace.setSpan(context.active(),span);context.with(spanContext,()=>{logger2.emit({severityNumber:SeverityNumber.INFO,severityText:"INFO",body:`Component ${componentType} (${componentId}) completed successfully`,attributes:logAttributes})})}span.end()},THook.NonBlocking),Promise.resolve()}}class TelemetryService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Telemetry,"OTel",OTel)}}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,service.Scheduler=new SchedulerService,service.Telemetry=new TelemetryService,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")})}function generateServiceKey(serviceName){const secret=process.env.SRE_SECRET;if(!secret||secret.trim().length<32)throw new Error("SRE_SECRET must be at least 32 characters");return createHmac("sha256",secret).update(`sre-service:${serviceName}`).digest("hex")}function validateServiceKey(serviceName,providedKey){try{const expectedKey=generateServiceKey(serviceName);return timingSafeEqual(Buffer.from(expectedKey),Buffer.from(providedKey))}catch{return!1}}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 logger$1=Logger("ExternalEventsReceiver");class ExternalEventsReceiver{constructor(config2){if(__publicField$2(this,"server",null),__publicField$2(this,"wss",null),__publicField$2(this,"config"),__publicField$2(this,"isRunning",!1),this.config={enableHttp:!0,enableWebSocket:!0,path:"/ws",...config2},!this.config.authTokens||this.config.authTokens.length===0)throw logger$1.warn("At least one authentication token must be provided"),new Error("At least one authentication token must be provided")}async start(){if(this.isRunning){logger$1.warn("Server is already running");return}return this.server=createServer((req,res)=>this.handleHttpRequest(req,res)),this.config.enableWebSocket&&(this.wss=new WebSocketServer({server:this.server,path:this.config.path}),this.wss.on("connection",(ws,req)=>{this.handleWebSocketConnection(ws,req)})),new Promise((resolve,reject)=>{this.server.listen(this.config.port,"127.0.0.1",()=>{this.isRunning=!0,logger$1.debug(`Server started on port ${this.config.port}`+(this.config.enableHttp?" [HTTP]":"")+(this.config.enableWebSocket?` [WebSocket: ${this.config.path}]`:"")),resolve()}),this.server.on("error",error=>{logger$1.error("Server error",error),reject(error)})})}async stop(){if(this.isRunning)return new Promise((resolve,reject)=>{this.wss&&this.wss.close(err=>{err&&logger$1.error("Error closing WebSocket server",err)}),this.server?this.server.close(err=>{err?(logger$1.error("Error closing HTTP server",err),reject(err)):(this.isRunning=!1,logger$1.debug("Server stopped"),resolve())}):resolve()})}handleHttpRequest(req,res){if(!this.config.enableHttp){this.sendResponse(res,404,{error:"HTTP endpoint is disabled"});return}if(req.method!=="POST"){this.sendResponse(res,405,{error:"Method not allowed. Only POST requests are accepted."});return}const authResult=this.validateAuth(req.headers);if(!authResult.valid){this.sendResponse(res,401,{error:authResult.error});return}const connectorName=this.getConnectorName(req.headers);if(!connectorName){this.sendResponse(res,400,{error:"Missing x-connector-name header"});return}let body="";req.on("data",chunk=>{body+=chunk.toString()}),req.on("end",()=>{try{const data=body?JSON.parse(body):{};this.emitExternalEvent(connectorName,data),this.sendResponse(res,200,{success:!0,message:`Event EXT:${connectorName} emitted successfully`})}catch(error){logger$1.error("Error processing HTTP request",error),this.sendResponse(res,400,{error:"Invalid JSON payload"})}}),req.on("error",error=>{logger$1.error("HTTP request error",error),this.sendResponse(res,500,{error:"Internal server error"})})}handleWebSocketConnection(ws,req){logger$1.debug("New WebSocket connection");const authResult=this.validateAuth(req.headers);if(!authResult.valid){ws.close(1008,authResult.error);return}let connectorName=this.getConnectorName(req.headers);ws.on("message",message=>{try{const data=JSON.parse(message.toString());if(!connectorName&&(connectorName=data.connectorName||data["x-connector-name"],!connectorName)){ws.send(JSON.stringify({error:"Missing connector name in headers or message"}));return}this.emitExternalEvent(connectorName,data),ws.send(JSON.stringify({success:!0,message:`Event EXT:${connectorName} emitted successfully`}))}catch(error){logger$1.error("Error processing WebSocket message",error),ws.send(JSON.stringify({error:"Invalid JSON message"}))}}),ws.on("error",error=>{logger$1.error("WebSocket error",error)}),ws.on("close",()=>{logger$1.debug("WebSocket connection closed")})}validateAuth(headers){const authHeader=headers.authorization||headers.Authorization,serviceName=headers["x-service-name"]||headers["X-Service-Name"];if(!authHeader)return logger$1.warn("Missing Authorization header"),{valid:!1,error:"Missing Authorization header"};if(!serviceName||typeof serviceName!="string")return logger$1.warn("Missing or invalid X-Service-Name header"),{valid:!1,error:"Missing X-Service-Name header"};const token=authHeader.replace(/^Bearer\s+/i,"");return token?validateServiceKey(serviceName,token)?(logger$1.debug(`Authenticated service: ${serviceName}`),{valid:!0,serviceName}):(logger$1.warn(`Invalid key for service: ${serviceName}`),{valid:!1,error:"Invalid authentication"}):{valid:!1,error:"Invalid Authorization header format"}}getConnectorName(headers){const connectorName=headers["x-connector-name"]||headers["X-Connector-Name"];return typeof connectorName=="string"?connectorName:connectorName?.[0]||null}emitExternalEvent(connectorName,data){const eventName=`EXT:${connectorName}`,connector=ConnectorService.getInstance(TConnectorService[connectorName]);connector&&connector.handleEvent(eventName,data)}sendResponse(res,statusCode,body){res.statusCode=statusCode,res.setHeader("Content-Type","application/json"),res.end(JSON.stringify(body))}getStatus(){return{running:this.isRunning,port:this.config.port,config:this.config}}}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"},Scheduler:{Connector:"LocalScheduler",Settings:{runJobs:!0,persistExecutionHistory:!0}}}),__publicField$1(this,"connectors",{}),__publicField$1(this,"connectorInstances",{}),__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}get version(){return pkg.version}static get Instance(){return _SmythRuntime2.instance||(_SmythRuntime2.instance=new _SmythRuntime2),_SmythRuntime2.instance}get initializing(){return this._initializing}init(_config){if(logger.info(`SRE v${this.version} initializing...`),this._initialized)return console.warn("SRE already initialized ... skipping"),_SmythRuntime2.Instance;if(this._initializing)return console.warn("You tried to initialize SRE while it is already initializing ... skipping"),_SmythRuntime2.Instance;(!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),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),this.setupShutdownHandlers(),_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(),this.started=!1)}setupShutdownHandlers(){["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!")})}};__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)}}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,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,ComponentInputType,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,Credentials,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ENTERPRISE_MODELS_SETTING_KEY,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,ExternalEventsReceiver,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GmailTrigger,GoogleAIConnector,GoogleEmbeds,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONExpression$1 as JSONExpression,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,Job,JobSchedulerTrigger,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMInterface,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalScheduler,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,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT,MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT,ManagedOAuth2Credentials,ManagedVaultConnector,ManagedVaultService,Match,MemoryDeleteKeyVal,MemoryReadKeyVal,MemoryWriteKeyVal,MemoryWriteObject,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,MySQLAccount,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,O3_AND_O4_MODELS,O3_AND_O4_MODELS_PATTERN,OSResourceMonitor,OTel,OTelContextRegistry,OllamaConnector,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,SEARCH_TOOL_COSTS,SRE,SUPPORTED_MIME_TYPES_MAP,Schedule,SchedulerConnector,SchedulerService,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,THook,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TToolType,TavilyWebSearch,TelemetryConnector,TelemetryService,TemplateString,TemplateStringHelper,Trigger,USER_CUSTOM_MODELS_SETTING_KEY,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,WhatsAppTrigger,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractAllKeyNamesFromTemplateVars,extractKeyFromTemplateVar,findSmythPath,findValidResourcePath,generateCodeFromLegacyComponent,generateCodeHash,generateExecutableCode,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,generateServiceKey,getCredentials,getCurrentEnvironmentVariables,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,getSortedObjectValues,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,hookableClass,inputErrMsg,invokeLambdaFunction,isAgent,isValidGroqReasoningEffort,isValidOpenAIReasoningEffort,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,runJs,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,validateAsyncMainFunction,validateServiceKey,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,xAIConnector,zipCode};
249
249
  //# sourceMappingURL=index.js.map