@smythos/sre 1.5.45 → 1.5.46
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 +4 -4
- package/dist/index.js.map +1 -1
- package/dist/types/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.d.ts +2 -2
- package/package.json +1 -1
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ChatCompletionsApiInterface.ts +9 -13
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/ResponsesApiInterface.ts +2 -25
- package/src/subsystems/LLMManager/LLM.service/connectors/openai/apiInterfaces/constants.ts +2 -2
package/dist/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import dotenv from"dotenv";import Joi from"joi";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import pLimit from"p-limit";import axios,{AxiosHeaders}from"axios";import*as fs from"fs";import fs__default,{existsSync,mkdirSync,writeFileSync,readFileSync,unlinkSync}from"fs";import*as FileType from"file-type";import{fileTypeFromBuffer}from"file-type";import{isBinaryFileSync}from"isbinaryfile";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID}from"crypto";import{encode,encodeChat}from"gpt-tokenizer";import path from"path";import os from"os";import"process";import mime from"mime";import{Readable}from"stream";import xxhash from"xxhashjs";import{jsonrepair}from"jsonrepair";import yaml from"js-yaml";import{EventSource}from"eventsource";import*as acorn from"acorn";import dayjs from"dayjs";import querystring from"querystring";import{HfInference}from"@huggingface/inference";import{Runware}from"@runware/sdk-js";import FormData from"form-data";import{SocksProxyAgent}from"socks-proxy-agent";import OAuth from"oauth-1.0a";import zl from"zip-lib";import{LambdaClient,GetFunctionCommand,UpdateFunctionCodeCommand,Runtime,CreateFunctionCommand,InvokeCommand,UpdateFunctionConfigurationCommand}from"@aws-sdk/client-lambda";import{IAMClient,GetRoleCommand,CreateRoleCommand}from"@aws-sdk/client-iam";import{Client}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport}from"@modelcontextprotocol/sdk/client/sse.js";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import"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{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenerativeAI,FunctionCallingMode}from"@google/generative-ai";import{GoogleAIFileManager,FileState}from"@google/generative-ai/server";import{GoogleGenAI}from"@google/genai";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*as chokidar from"chokidar";import chokidar__default from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";import*as readlineSync from"readline-sync";var version="1.5.
|
|
1
|
+
import dotenv from"dotenv";import Joi from"joi";import"dotenv/config";import winston from"winston";import Transport from"winston-transport";import pLimit from"p-limit";import axios,{AxiosHeaders}from"axios";import*as fs from"fs";import fs__default,{existsSync,mkdirSync,writeFileSync,readFileSync,unlinkSync}from"fs";import*as FileType from"file-type";import{fileTypeFromBuffer}from"file-type";import{isBinaryFileSync}from"isbinaryfile";import EventEmitter$1,{EventEmitter}from"events";import crypto$1,{createHash,randomUUID}from"crypto";import{encode,encodeChat}from"gpt-tokenizer";import path from"path";import os from"os";import"process";import mime from"mime";import{Readable}from"stream";import xxhash from"xxhashjs";import{jsonrepair}from"jsonrepair";import yaml from"js-yaml";import{EventSource}from"eventsource";import*as acorn from"acorn";import dayjs from"dayjs";import querystring from"querystring";import{HfInference}from"@huggingface/inference";import{Runware}from"@runware/sdk-js";import FormData from"form-data";import{SocksProxyAgent}from"socks-proxy-agent";import OAuth from"oauth-1.0a";import zl from"zip-lib";import{LambdaClient,GetFunctionCommand,UpdateFunctionCodeCommand,Runtime,CreateFunctionCommand,InvokeCommand,UpdateFunctionConfigurationCommand}from"@aws-sdk/client-lambda";import{IAMClient,GetRoleCommand,CreateRoleCommand}from"@aws-sdk/client-iam";import{Client}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport}from"@modelcontextprotocol/sdk/client/sse.js";import{GetBucketLifecycleConfigurationCommand,PutBucketLifecycleConfigurationCommand,S3Client,HeadObjectCommand,DeleteObjectCommand,GetObjectCommand,PutObjectCommand,PutObjectTaggingCommand,GetObjectTaggingCommand,CopyObjectCommand}from"@aws-sdk/client-s3";import"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{MilvusClient,DataType,ErrorCode}from"@zilliz/milvus2-sdk-node";import{GoogleGenerativeAI,FunctionCallingMode}from"@google/generative-ai";import{GoogleAIFileManager,FileState}from"@google/generative-ai/server";import{GoogleGenAI}from"@google/genai";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*as chokidar from"chokidar";import chokidar__default from"chokidar";import fs$1 from"fs/promises";import IORedis from"ioredis";import mysql from"mysql2/promise";import{SecretsManagerClient,ListSecretsCommand,GetSecretValueCommand,PutSecretValueCommand,CreateSecretCommand,DeleteSecretCommand}from"@aws-sdk/client-secrets-manager";import*as readlineSync from"readline-sync";var version="1.5.46";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.
|
|
@@ -185,9 +185,9 @@ ${_error}
|
|
|
185
185
|
`;return input_vars}};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 MemoryWriteKeyVal extends Component{constructor(){super(),__publicField$S(this,"configSchema",Joi.object({memoryName:Joi.string().max(255).allow("").label("Memory Name"),key:Joi.string().max(255).allow("").label("Key"),value:Joi.string().max(1e5).allow("").label("Value"),scope:Joi.string().max(20).allow("").label("Scope"),ttl:Joi.number().min(300).max(604800).allow("").label("TTL")}))}init(){}async process(input,config2,agent){await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{const connectorRequester=ConnectorService.getCacheConnector().agent(agent.id),teamId=agent.teamId,agentId=agent.id,memoryName=config2.data.memoryName,key=TemplateString(config2.data.key).parse(input).result,value=TemplateString(config2.data.value).parse(input).result,scope=config2.data.scope,ttl=scope==="ttl"?config2?.data?.ttl:3*60*60,sessionId=agent.sessionId,workflowId=agent.agentRuntime.workflowReqId;let scopeKey="";scope==="session"?scopeKey=sessionId:scope==="request"?scopeKey=workflowId:scope==="ttl"&&(scopeKey="ttl");const scopeKeyId=`${agentId}:${memoryName}:${key}_scope`;await connectorRequester.set(scopeKeyId,JSON.stringify({scope,value:scopeKey}),null,null,ttl);const fullKey=`${agentId}:${scopeKey}:${memoryName}:${key}`;return await connectorRequester.set(fullKey,value,null,null,ttl),{Key:key,_debug:logger2.output}}catch(error){return{_error:error.message,_debug:logger2.output}}}}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 MemoryReadKeyVal extends Component{constructor(){super(),__publicField$R(this,"configSchema",Joi.object({memoryName:Joi.string().max(255).allow("").label("Memory Name")}))}init(){}async process(input,config2,agent){await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{const connectorRequester=ConnectorService.getCacheConnector().agent(agent.id),teamId=agent.teamId,agentId=agent.id,memoryName=config2.data.memoryName,key=input.Key,sessionId=agent.sessionId,workflowId=agent.agentRuntime.workflowReqId;logger2.debug("Reading Scope Data");const scopeKeyId=`${agentId}:${memoryName}:${key}_scope`,scopeStrData=await connectorRequester.get(scopeKeyId);if(!scopeStrData)return{_error:"key not found",_debug:logger2.output};logger2.debug("Checking Scope");const scopeData=JSON.parse(scopeStrData),scopeKey=scopeData.value;if(scopeData.scope==="session"&&scopeKey!==sessionId)return{_error:"key not found",_debug:logger2.output};if(scopeData.scope==="request"&&scopeKey!==workflowId)return{_error:"key not found",_debug:logger2.output};logger2.debug("Reading Value");const fullKey=`${agentId}:${scopeKey}:${memoryName}:${key}`;return{Value:await connectorRequester.get(fullKey),_debug:logger2.output}}catch(error){return{_error:error.message,_debug:logger2.output}}}}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,key+"",value);class MemoryDeleteKeyVal extends Component{constructor(){super(),__publicField$Q(this,"configSchema",Joi.object({memoryName:Joi.string().max(255).allow("").label("Memory Name"),key:Joi.string().max(255).allow("").label("Key")}))}init(){}async process(input,config2,agent){await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{const connectorRequester=ConnectorService.getCacheConnector().agent(agent.id),teamId=agent.teamId,agentId=agent.id,memoryName=config2.data.memoryName,key=TemplateString(config2.data.key).parse(input).result,sessionId=agent.sessionId,workflowId=agent.agentRuntime.workflowReqId;logger2.debug("Reading Scope Data for deletion");const scopeKeyId=`${agentId}:${memoryName}:${key}_scope`,scopeStrData=await connectorRequester.get(scopeKeyId);if(!scopeStrData)return{_error:"key not found",_debug:logger2.output};logger2.debug("Checking Scope for deletion");const scopeData=JSON.parse(scopeStrData),scopeKey=scopeData.value;if(scopeData.scope==="session"&&scopeKey!==sessionId)return{_error:"key not found",_debug:logger2.output};if(scopeData.scope==="request"&&scopeKey!==workflowId)return{_error:"key not found",_debug:logger2.output};logger2.debug("Deleting memory value and scope data");const fullKey=`${agentId}:${scopeKey}:${memoryName}:${key}`;return await connectorRequester.delete(fullKey),await connectorRequester.delete(scopeKeyId),{Key:key,deleted:!0,_debug:logger2.output}}catch(error){return{_error:error.message,_debug:logger2.output}}}}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,key+"",value);class MemoryWriteObject extends Component{constructor(){super(),__publicField$P(this,"configSchema",Joi.object({memoryName:Joi.string().max(255).allow("").label("Memory Name"),scope:Joi.string().max(20).allow("").label("Scope"),ttl:Joi.number().min(300).max(604800).allow("").label("TTL")}))}init(){}async process(input,config2,agent){await super.process(input,config2,agent);const logger2=this.createComponentLogger(agent,config2);try{const connectorRequester=ConnectorService.getCacheConnector().agent(agent.id),teamId=agent.teamId,agentId=agent.id,memoryName=config2.data.memoryName,dataString=input.Data,scope=config2.data.scope,ttl=scope==="ttl"?config2?.data?.ttl:3*60*60;let dataObject;try{dataObject=JSON.parse(dataString)}catch{return{_error:"Invalid JSON data provided",_debug:logger2.output}}if(typeof dataObject!="object"||dataObject===null||Array.isArray(dataObject))return{_error:"Data must be a valid JSON object",_debug:logger2.output};const sessionId=agent.sessionId,workflowId=agent.agentRuntime.workflowReqId;let scopeKey="";scope==="session"?scopeKey=sessionId:scope==="request"?scopeKey=workflowId:scope==="ttl"&&(scopeKey="ttl");const keys=Object.keys(dataObject);logger2.debug(`Writing ${keys.length} key-value pairs to memory`);const writePromises=keys.map(async key=>{const value=String(dataObject[key]),scopeKeyId=`${agentId}:${memoryName}:${key}_scope`,scopePromise=connectorRequester.set(scopeKeyId,JSON.stringify({scope,value:scopeKey}),null,null,ttl),fullKey=`${agentId}:${scopeKey}:${memoryName}:${key}`,valuePromise=connectorRequester.set(fullKey,value,null,null,ttl);return await Promise.all([scopePromise,valuePromise]),{key,success:!0}}),successfulKeys=(await Promise.all(writePromises)).filter(result=>result.success).map(result=>result.key);return logger2.debug(`Successfully wrote ${successfulKeys.length} keys to memory`),{Keys:successfulKeys,Count:successfulKeys.length,_debug:logger2.output}}catch(error){return{_error:error.message,_debug:logger2.output}}}}const components={Component:new Component,Note:new Component,APIEndpoint:new APIEndpoint,APIOutput:new APIOutput,PromptGenerator:new PromptGenerator,LLMPrompt:new PromptGenerator,APICall:new APICall,VisionLLM:new VisionLLM,FSleep:new FSleep,FHash:new FHash,FEncDec:new FEncDec,FSign:new FSign,FTimestamp:new FTimestamp,DataSourceLookup:new DataSourceLookup,DataSourceIndexer:new DataSourceIndexer,DataSourceCleaner:new DataSourceCleaner,JSONFilter:new JSONFilter,LogicAND:new LogicAND,LogicOR:new LogicOR,LogicXOR:new LogicXOR,LogicAtLeast:new LogicAtLeast,LogicAtMost:new LogicAtMost,AgentPlugin:new AgentPlugin,LLMAssistant:new LLMAssistant,Async:new Async,Await:new Await,ForEach:new ForEach,HuggingFace:new HuggingFace,ZapierAction:new ZapierAction,GPTPlugin:new GPTPlugin,Classifier:new Classifier,MultimodalLLM:new MultimodalLLM,GenAILLM:new GenAILLM,FileStore:new FileStore,WebSearch:new TavilyWebSearch,WebScrape:new ScrapflyWebScrape,TavilyWebSearch:new TavilyWebSearch,ScrapflyWebScrape:new ScrapflyWebScrape,ComponentHost:new ComponentHost,ServerlessCode:new ServerlessCode,ImageGenerator:new ImageGenerator,MCPClient:new MCPClient,OpenAPI:new OpenAPI,ECMASandbox:new ECMASandbox$1,MemoryWriteKeyVal:new MemoryWriteKeyVal,MemoryReadKeyVal:new MemoryReadKeyVal,MemoryDeleteKeyVal:new MemoryDeleteKeyVal,MemoryWriteObject:new MemoryWriteObject},ComponentInstances=components,console$o=Logger("S3Cache");function generateLifecycleRules(){const rules=[];for(let i=1;i<100;i++)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});for(let i=100;i<1e3;i+=10)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});for(let i=1e3;i<=1e4;i+=100)rules.push({ID:`ExpireAfter${i}Days`,Filter:{Tag:{Key:"Expiry",Value:"ExpireAfter"+i+"Days"}},Status:"Enabled",Expiration:{Days:i}});return rules}function generateExpiryMetadata(expiryDays){let metadataValue;if(expiryDays>=1&&expiryDays<100)metadataValue=`ExpireAfter${expiryDays}Days`;else if(expiryDays>=100&&expiryDays<1e3)metadataValue=`ExpireAfter${Math.ceil(expiryDays/10)*10}Days`;else if(expiryDays>=1e3&&expiryDays<=1e4)metadataValue=`ExpireAfter${Math.ceil(expiryDays/100)*100}Days`;else throw new Error("Invalid expiry days. Please provide a valid expiry days value.");return{Key:"Expiry",Value:metadataValue}}function getNonExistingRules(existingRules,newRules){return newRules.filter(rule=>!existingRules.some(existingRule=>existingRule.ID===rule.ID))}function ttlToExpiryDays(ttl){return Math.ceil(ttl/(60*60*24))}async function checkAndInstallLifecycleRules(bucketName,s3Client){if(!bucketName||bucketName.trim()==="")throw new Error("Bucket name is required and cannot be empty");if(!s3Client)throw new Error("S3Client is required");console$o.log(`Checking lifecycle rules for bucket: ${bucketName}`);try{const getLifecycleCommand=new GetBucketLifecycleConfigurationCommand({Bucket:bucketName}),existingRules=(await s3Client.send(getLifecycleCommand)).Rules,newRules=generateLifecycleRules(),nonExistingNewRules=getNonExistingRules(existingRules,newRules);if(nonExistingNewRules.length>0){const params={Bucket:bucketName,LifecycleConfiguration:{Rules:[...existingRules,...nonExistingNewRules]}},putLifecycleCommand=new PutBucketLifecycleConfigurationCommand(params);await s3Client.send(putLifecycleCommand),console$o.log(`Added ${nonExistingNewRules.length} new lifecycle rules to bucket: ${bucketName}`)}else console$o.log("Lifecycle configuration already exists")}catch(error){if(error.code==="NoSuchLifecycleConfiguration"){console$o.log("No lifecycle configuration found. Creating new configuration...");const lifecycleRules=generateLifecycleRules(),params={Bucket:bucketName,LifecycleConfiguration:{Rules:lifecycleRules}},putLifecycleCommand=new PutBucketLifecycleConfigurationCommand(params);await s3Client.send(putLifecycleCommand),console$o.log("Lifecycle configuration created successfully.")}else console$o.error("Error checking lifecycle configuration:",error),console$o.error("Bucket name provided:",bucketName),console$o.error("Error details:",{name:error.name,message:error.message,code:error.code})}}var __defProp$O=Object.defineProperty,__getOwnPropDesc$j=Object.getOwnPropertyDescriptor,__defNormalProp$O=(obj,key,value)=>key in obj?__defProp$O(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass$j=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$j(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$O(target,key,result),result},__publicField$O=(obj,key,value)=>__defNormalProp$O(obj,typeof key!="symbol"?key+"":key,value);Object.defineProperty(global,"crypto",{value:{getRandomValues:arr=>crypto$1.randomBytes(arr.length)}});const console$n=Logger("S3Storage");class S3Storage extends StorageConnector{constructor(_settings){if(super(_settings),this._settings=_settings,__publicField$O(this,"name","S3Storage"),__publicField$O(this,"client"),__publicField$O(this,"bucket"),__publicField$O(this,"isInitialized",!1),__publicField$O(this,"initializationPromise",null),!_settings.bucket||_settings.bucket.trim()===""){console$n.warn("S3 bucket name is required and cannot be empty, connector not initialized");return}this.bucket=_settings.bucket;const clientConfig={};_settings.region&&(clientConfig.region=_settings.region),_settings.accessKeyId&&_settings.secretAccessKey&&(clientConfig.credentials={accessKeyId:_settings.accessKeyId,secretAccessKey:_settings.secretAccessKey}),this.client=new S3Client(clientConfig)}async ensureInitialized(){if(!this.isInitialized)return this.initializationPromise?this.initializationPromise:(this.initializationPromise=this.initialize(),this.initializationPromise)}async initialize(){if(!this.client){console$n.warn("S3 client not initialized");return}if(!this.isInitialized)try{await checkAndInstallLifecycleRules(this.bucket,this.client),this.isInitialized=!0}catch(error){throw console$n.error("Failed to initialize S3Storage:",error),this.initializationPromise=null,error}}async read(acRequest,resourceId){await this.ensureInitialized();const params={Bucket:this.bucket,Key:resourceId},s3HeadCommand=new HeadObjectCommand(params),expirationHeader=(await this.client.send(s3HeadCommand))?.Expiration;if(expirationHeader){const expirationDateMatch=expirationHeader.match(/expiry-date="([^"]+)"/);if(expirationDateMatch){const expirationDate=new Date(expirationDateMatch[1]);if(new Date>expirationDate){const s3DeleteCommand=new DeleteObjectCommand(params);await this.client.send(s3DeleteCommand);return}}}const command=new GetObjectCommand(params);try{const response=await this.client.send(command);return await streamToBuffer(response.Body)}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$n.error("Error reading object from S3",error.name,error.message),error}}async getMetadata(acRequest,resourceId){await this.ensureInitialized();try{return await this.getS3Metadata(resourceId)}catch(error){throw console$n.error("Error getting access rights in S3",error.name,error.message),error}}async setMetadata(acRequest,resourceId,metadata){await this.ensureInitialized();try{let s3Metadata=await this.getS3Metadata(resourceId);s3Metadata||(s3Metadata={}),s3Metadata={...s3Metadata,...metadata},await this.setS3Metadata(resourceId,s3Metadata)}catch(error){throw console$n.error("Error setting access rights in S3",error),error}}async write(acRequest,resourceId,value,acl,metadata){await this.ensureInitialized();const accessCandidate=acRequest.candidate;let amzACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,s3Metadata={...metadata,"x-amz-meta-acl":amzACL};const command=new PutObjectCommand({Bucket:this.bucket,Key:resourceId,Body:value,Metadata:this.serializeS3Metadata(s3Metadata),ContentType:s3Metadata.ContentType});try{const result=await this.client.send(command)}catch(error){throw console$n.error("Error writing object to S3",error.name,error.message),error}}async delete(acRequest,resourceId){await this.ensureInitialized();const command=new DeleteObjectCommand({Bucket:this.bucket,Key:resourceId});try{await this.client.send(command)}catch(error){throw console$n.error("Error deleting object from S3",error.name,error.message),error}}async exists(acRequest,resourceId){await this.ensureInitialized();const command=new HeadObjectCommand({Bucket:this.bucket,Key:resourceId});try{return await this.client.send(command),!0}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return!1;throw console$n.error("Error checking object existence in S3",error.name,error.message),error}}async getResourceACL(resourceId,candidate){await this.ensureInitialized();const s3Metadata=await this.getS3Metadata(resourceId);return s3Metadata!==void 0?ACL.from(s3Metadata?.["x-amz-meta-acl"]):new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner)}async getACL(acRequest,resourceId){await this.ensureInitialized();try{const s3Metadata=await this.getS3Metadata(resourceId);return ACL.from(s3Metadata?.["x-amz-meta-acl"])}catch(error){throw console$n.error("Error getting access rights in S3",error.name,error.message),error}}async setACL(acRequest,resourceId,acl){await this.ensureInitialized();try{let s3Metadata=await this.getS3Metadata(resourceId);s3Metadata||(s3Metadata={}),s3Metadata["x-amz-meta-acl"]=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setS3Metadata(resourceId,s3Metadata)}catch(error){throw console$n.error("Error setting access rights in S3",error),error}}async expire(acRequest,resourceId,ttl){await this.ensureInitialized();const expiryMetadata=generateExpiryMetadata(ttlToExpiryDays(ttl)),s3PutObjectTaggingCommand=new PutObjectTaggingCommand({Bucket:this.bucket,Key:resourceId,Tagging:{TagSet:[{Key:expiryMetadata.Key,Value:expiryMetadata.Value}]}});await this.client.send(s3PutObjectTaggingCommand)}migrateMetadata(metadata){if(!metadata.agentid&&!metadata.teamid&&!metadata.userid)return metadata;{const convertibleItems=["agentid","teamid","userid"],aclHelper=new ACL;for(let key of convertibleItems){if(!metadata[key])continue;const role=key==="agentid"?TAccessRole.Agent:key==="teamid"?TAccessRole.Team:TAccessRole.User;aclHelper.addAccess(role,metadata[key].toString(),[TAccessLevel.Owner,TAccessLevel.Read,TAccessLevel.Write]),delete metadata[key]}aclHelper.migrated=!0;const newMetadata={"x-amz-meta-acl":aclHelper.ACL};for(let key in metadata)newMetadata[key]=metadata[key];return newMetadata}}serializeS3Metadata(s3Metadata){let amzMetadata={};s3Metadata["x-amz-meta-acl"]&&(s3Metadata["x-amz-meta-acl"]&&(amzMetadata["x-amz-meta-acl"]=typeof s3Metadata["x-amz-meta-acl"]=="string"?s3Metadata["x-amz-meta-acl"]:ACL.from(s3Metadata["x-amz-meta-acl"]).serializedACL),delete s3Metadata["x-amz-meta-acl"]);for(let key in s3Metadata)key!="ContentType"&&(amzMetadata[key]=typeof s3Metadata[key]=="string"?s3Metadata[key]:JSON.stringify(s3Metadata[key]));return amzMetadata}deserializeS3Metadata(amzMetadata){let metadata={};for(let key in amzMetadata){if(key==="x-amz-meta-acl"){metadata[key]=ACL.from(amzMetadata[key]).ACL;continue}try{metadata[key]=JSON.parse(amzMetadata[key])}catch{metadata[key]=amzMetadata[key]}}return metadata=this.migrateMetadata(metadata),metadata}async getS3Metadata(resourceId){try{const command=new HeadObjectCommand({Bucket:this.bucket,Key:resourceId}),response=await this.client.send(command),s3RawMetadata=response.Metadata;if(!s3RawMetadata||Object.keys(s3RawMetadata).length===0)return{};let metadata=this.deserializeS3Metadata(s3RawMetadata);return metadata.ContentType||(metadata.ContentType=response.ContentType?response.ContentType:"application/octet-stream"),metadata}catch(error){if(error.name==="NotFound"||error.name==="NoSuchKey")return;throw console$n.error("Error reading object metadata from S3",error.name,error.message),error}}async setS3Metadata(resourceId,metadata){try{const getObjectCommand=new GetObjectCommand({Bucket:this.bucket,Key:resourceId}),objectData=await this.client.send(getObjectCommand),bufferBody=await streamToBuffer(objectData.Body),amzMetadata=this.serializeS3Metadata(metadata),putObjectCommand=new PutObjectCommand({Bucket:this.bucket,Key:resourceId,Body:bufferBody,Metadata:amzMetadata});await this.client.send(putObjectCommand)}catch(error){throw console$n.error("Error setting object metadata in S3",error.name,error.message),error}}}__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"read"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"getMetadata"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"setMetadata"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"write"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"delete"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"exists"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"getACL"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"setACL"),__decorateClass$j([SecureConnector.AccessControl],S3Storage.prototype,"expire");var __defProp$N=Object.defineProperty,__getOwnPropDesc$i=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$i=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc$i(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp$N(target,key,result),result},__publicField$N=(obj,key,value)=>__defNormalProp$N(obj,typeof key!="symbol"?key+"":key,value);const console$m=Logger("LocalStorage");class LocalStorage extends StorageConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField$N(this,"name","LocalStorage"),__publicField$N(this,"folder"),__publicField$N(this,"storagePrefix","local"),__publicField$N(this,"metadataPrefix",".local.metadata"),__publicField$N(this,"isInitialized",!1),this.folder=this.findStorageFolder(_settings?.folder),this.initialize(),fs__default.existsSync(this.folder)||console$m.error(`Invalid folder provided: ${this.folder}`)}findStorageFolder(folder){let _storageFolder=folder;return fs__default.existsSync(_storageFolder)?_storageFolder:(_storageFolder=findSmythPath("storage"),fs__default.existsSync(_storageFolder)?(console$m.warn("Using alternative storage folder found in : ",_storageFolder),_storageFolder):(console$m.warn("!!! All attempts to find an existing storage folder failed !!!"),console$m.warn("!!! I will use this folder: ",_storageFolder),_storageFolder))}async read(acRequest,resourceId){this.isInitialized||await this.initialize();try{const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);return fs__default.existsSync(filePath)?fs__default.readFileSync(filePath,null):void 0}catch(error){throw console$m.error("Error reading object from local storage",error.name,error.message),error}}async getMetadata(acRequest,resourceId){try{const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId);if(!fs__default.existsSync(metadataFilePath))return;const data=fs__default.readFileSync(metadataFilePath,"utf-8");return this.deserializeMetadata(JSON.parse(data))}catch(error){throw console$m.error("Error reading metadata from LocalStorage",error.name,error.message),error}}async setMetadata(acRequest,resourceId,metadata){try{let fileMetadata=await this.getMetadata(acRequest,resourceId);fileMetadata||(fileMetadata={}),fileMetadata={...fileMetadata,...metadata};const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId,!0),serializedMetadata=this.serializeMetadata(fileMetadata);fs__default.writeFileSync(metadataFilePath,JSON.stringify(serializedMetadata))}catch(error){throw console$m.error("Error setting metadata in local storage",error.name,error.message),error}}async write(acRequest,resourceId,value,acl,metadata){this.isInitialized||await this.initialize();const accessCandidate=acRequest.candidate;let localACL=ACL.from(acl).addAccess(accessCandidate.role,accessCandidate.id,TAccessLevel.Owner).ACL,fileMetadata={...metadata,acl:localACL};const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId,!0);fs__default.writeFileSync(filePath,value),await this.setMetadata(acRequest,resourceId,fileMetadata)}async delete(acRequest,resourceId){try{const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);fs__default.existsSync(filePath)&&fs__default.unlinkSync(filePath);const metadataFilePath=this.getMetadataFilePath(acRequest.candidate.id,resourceId);fs__default.existsSync(metadataFilePath)&&fs__default.unlinkSync(metadataFilePath)}catch(error){throw console$m.error("Error deleting object from local storage",error.name,error.message),error}}async exists(acRequest,resourceId){this.isInitialized||await this.initialize();const filePath=this.getStorageFilePath(acRequest.candidate.id,resourceId);return!!fs__default.existsSync(filePath)}async getResourceACL(resourceId,candidate){this.isInitialized||await this.initialize();const metadataFilePath=this.getMetadataFilePath(candidate.id,resourceId);if(!fs__default.existsSync(metadataFilePath))return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);const metadata=fs__default.readFileSync(metadataFilePath,"utf-8");if(metadata===void 0)return new ACL().addAccess(candidate.role,candidate.id,TAccessLevel.Owner);try{let metadataObject=JSON.parse(metadata);return ACL.from(metadataObject?.acl)}catch(error){throw console$m.error("Error parsing metadata in local storage",error.name,error.message),error}}async getACL(acRequest,resourceId){try{const fileMetadata=await this.getMetadata(acRequest,resourceId);return ACL.from(fileMetadata?.acl)}catch(error){throw console$m.error("Error getting access rights in local storage",error.name,error.message),error}}async setACL(acRequest,resourceId,acl){try{let fileMetadata=await this.getMetadata(acRequest,resourceId);fileMetadata||(fileMetadata={}),fileMetadata.acl=ACL.from(acl).addAccess(acRequest.candidate.role,acRequest.candidate.id,TAccessLevel.Owner).ACL,await this.setMetadata(acRequest,resourceId,fileMetadata)}catch(error){throw console$m.error("Error setting access rights in local storage",error),error}}async expire(acRequest,resourceId,ttl){console$m.warn(`LocalStorage.expire is not implemented, request will be ignored for resource ${resourceId} and ttl ${ttl}`)}async initialize(){const storageFolderPath=path.join(this.folder,this.storagePrefix);existsSync(storageFolderPath)||fs__default.mkdirSync(storageFolderPath,{recursive:!0});const metadataFolderPath=path.join(this.folder,this.metadataPrefix);existsSync(metadataFolderPath)||(fs__default.mkdirSync(metadataFolderPath,{recursive:!0}),fs__default.writeFileSync(path.join(metadataFolderPath,"README_IMPORTANT.txt"),"This folder is used for smythOS metadata, do not delete it, it will break SmythOS local filesystem")),this.isInitialized=!0}getStorageFilePath(candidateId,resourceId,createFoldersIfNotExists=!1){const fullPath=path.join(this.folder,this.storagePrefix,resourceId),folder=path.dirname(fullPath);return createFoldersIfNotExists&&!fs__default.existsSync(folder)&&fs__default.mkdirSync(folder,{recursive:!0}),fullPath}getMetadataFilePath(candidateId,resourceId,createFoldersIfNotExists=!1){const fullPath=path.join(this.folder,this.metadataPrefix,resourceId),folder=path.dirname(fullPath);return createFoldersIfNotExists&&!fs__default.existsSync(folder)&&fs__default.mkdirSync(folder,{recursive:!0}),fullPath}serializeMetadata(metadata){let updatedMetadata={};metadata.acl&&(metadata.acl&&(updatedMetadata.acl=typeof metadata.acl=="string"?metadata.acl:ACL.from(metadata.acl).serializedACL),delete metadata.acl);for(let key in metadata)updatedMetadata[key]=typeof metadata[key]=="string"?metadata[key]:JSON.stringify(metadata[key]);return updatedMetadata}deserializeMetadata(metadata){let deserializedMetadata={};for(let key in metadata){if(key==="acl"){deserializedMetadata[key]=ACL.from(metadata[key]).ACL;continue}try{deserializedMetadata[key]=JSON.parse(metadata[key])}catch{deserializedMetadata[key]=metadata[key]}}return deserializedMetadata}}__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"read"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"getMetadata"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"setMetadata"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"write"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"delete"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"exists"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"getACL"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"setACL"),__decorateClass$i([SecureConnector.AccessControl],LocalStorage.prototype,"expire");class StorageService extends ConnectorServiceProvider{register(){ConnectorService.register(TConnectorService.Storage,"S3",S3Storage),ConnectorService.register(TConnectorService.Storage,"LocalStorage",LocalStorage)}}async function getLLMCredentials(candidate,modelInfo){const credentialsList=Array.isArray(modelInfo.credentials)?modelInfo.credentials||[TLLMCredentials.Internal]:[modelInfo.credentials||TLLMCredentials.Internal];for(let credentialsMode of credentialsList){if(typeof credentialsMode=="object")return credentialsMode;switch(credentialsMode){case TLLMCredentials.None:return{apiKey:""};case TLLMCredentials.Internal:{const credentials=await getEnvCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.Vault:{const credentials=await getStandardLLMCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.BedrockVault:{const credentials=await getBedrockCredentials(candidate,modelInfo);if(credentials)return credentials;break}case TLLMCredentials.VertexAIVault:{const credentials=await getVertexAICredentials(candidate,modelInfo);if(credentials)return credentials;break}}}return{}}const SMYTHOS_API_KEYS={echo:"",openai:process.env.OPENAI_API_KEY,anthropic:process.env.ANTHROPIC_API_KEY,googleai:process.env.GOOGLE_AI_API_KEY,togetherai:process.env.TOGETHER_AI_API_KEY,groq:process.env.GROQ_API_KEY,xai:process.env.XAI_API_KEY,perplexity:process.env.PERPLEXITY_API_KEY};async function getEnvCredentials(candidate,modelInfo){const provider=(modelInfo.provider||modelInfo.llm)?.toLowerCase(),apiKey=SMYTHOS_API_KEYS?.[provider]||"";return apiKey?{apiKey}:null}async function getStandardLLMCredentials(candidate,modelInfo){const provider=(modelInfo.provider||modelInfo.llm)?.toLowerCase(),apiKey=await ConnectorService.getVaultConnector().requester(candidate).get(provider).catch(()=>"");return apiKey?{apiKey,isUserKey:!0}:null}async function getBedrockCredentials(candidate,modelInfo){const keyIdName=modelInfo.settings?.keyIDName,secretKeyName=modelInfo.settings?.secretKeyName,sessionKeyName=modelInfo.settings?.sessionKeyName,vaultConnector=ConnectorService.getVaultConnector(),[accessKeyId,secretAccessKey,sessionToken]=await Promise.all([vaultConnector.requester(candidate).get(keyIdName).catch(()=>""),vaultConnector.requester(candidate).get(secretKeyName).catch(()=>""),vaultConnector.requester(candidate).get(sessionKeyName).catch(()=>"")]);let credentials={accessKeyId,secretAccessKey,isUserKey:!0};return sessionToken&&(credentials.sessionToken=sessionToken),!accessKeyId||!secretAccessKey?null:credentials}async function getVertexAICredentials(candidate,modelInfo){const jsonCredentialsName=modelInfo.settings?.jsonCredentialsName;let jsonCredentials=await ConnectorService.getVaultConnector().requester(candidate).get(jsonCredentialsName).catch(()=>"");const credentials=JSON.parse(jsonCredentials);return credentials?{...credentials,isUserKey:!0}:null}var __defProp$M=Object.defineProperty,__defNormalProp$M=(obj,key,value)=>key in obj?__defProp$M(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$M=(obj,key,value)=>__defNormalProp$M(obj,typeof key!="symbol"?key+"":key,value);const console$l=Logger("LLMConnector");class LLMStream extends Readable{constructor(options){super(options),__publicField$M(this,"dataQueue"),__publicField$M(this,"isReading"),this.dataQueue=[],this.isReading=!0}_read(size){if(this.dataQueue.length>0)for(;this.dataQueue.length>0;){const chunk=this.dataQueue.shift();if(!this.push(chunk))break}else this.push(null)}enqueueData(data){this.dataQueue.push(data),this.read(0)}endStream(){this.isReading=!1,this.push(null)}}class LLMConnector extends Connector{constructor(){super(...arguments),__publicField$M(this,"vaultConnector")}imageGenRequest({acRequest,body,context}){return Promise.reject(new Error("Image edit not supported by this model"))}imageEditRequest({acRequest,body,context}){return Promise.reject(new Error("Image edit not supported by this model"))}requester(candidate){return this.vaultConnector=ConnectorService.getVaultConnector(),(!this.vaultConnector||!this.vaultConnector.valid)&&console$l.warn(`Vault Connector unavailable for ${candidate.id} `),{request:async params=>{const preparedParams=await this.prepareParams(candidate,params),provider=preparedParams.modelInfo.provider;return await this.request({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,agentId:preparedParams.agentId,teamId:preparedParams.teamId,isUserKey:preparedParams.credentials?.isUserKey||preparedParams.isUserKey,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials,toolsInfo:{[provider]:preparedParams.toolsInfo[provider]}}})},streamRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params),provider=preparedParams.modelInfo.provider?.toLowerCase(),requestParams={acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,agentId:preparedParams.agentId,teamId:preparedParams.teamId,isUserKey:preparedParams.credentials?.isUserKey||preparedParams.isUserKey,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials,toolsInfo:{[provider]:preparedParams.toolsInfo[provider]}}};return await this.streamRequest(requestParams)},imageGenRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.imageGenRequest({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,isUserKey:preparedParams.credentials?.isUserKey||preparedParams.isUserKey,agentId:preparedParams.agentId,teamId:preparedParams.teamId,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})},imageEditRequest:async params=>{const preparedParams=await this.prepareParams(candidate,params);return await this.imageEditRequest({acRequest:candidate.readRequest,body:preparedParams.body,context:{modelEntryName:preparedParams.modelEntryName,isUserKey:preparedParams.credentials?.isUserKey||preparedParams.isUserKey,agentId:preparedParams.agentId,teamId:preparedParams.teamId,hasFiles:preparedParams.files?.length>0,modelInfo:preparedParams.modelInfo,credentials:preparedParams.credentials}})}}}enhancePrompt(prompt,config2){if(!prompt)return prompt;let newPrompt=prompt;const outputs={};if(config2?.outputs)for(let con of config2.outputs)con.default||(outputs[con.name]=con?.description?` (${con?.description})`:"");const excludedKeys=["_debug","_error"],outputKeys=Object.keys(outputs).filter(key=>!excludedKeys.includes(key));if(outputKeys.length>0){const outputFormat={};outputKeys.forEach(key=>outputFormat[key]=(config2.name==="Classifier"?"<Boolean|String>":"<value>")+(outputs[key]||"")),newPrompt+=`
|
|
186
186
|
##
|
|
187
187
|
Expected output format = `+JSON.stringify(outputFormat)+`
|
|
188
|
-
The output JSON should only use the entries from the output format.`}return newPrompt}postProcess(response){try{return JSONContent(response).tryParse()}catch{return{error:"Invalid JSON response",data:response,details:"The response from the model is not a valid JSON object. Please check the model output and try again."}}}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto",modelInfo=null}){throw new Error("This model does not support tools")}transformToolMessageBlocks({messageBlock,toolsData}){throw new Error("This model does not support tools")}getConsistentMessages(messages){return messages}async prepareParams(candidate,params){const modelsProvider=ConnectorService.getModelsProviderConnector(),files=params?.files;delete params?.files;const clonedParams=JSON.parse(JSON.stringify(params)),_params=this.formatParamValues(clonedParams),model=_params.model,teamId=await this.getTeamId(candidate);_params.modelEntryName=typeof model=="string"?model:model.modelId,_params.teamId=teamId;const modelProviderCandidate=modelsProvider.requester(candidate),modelInfo=await modelProviderCandidate.getModelInfo(model);if(modelInfo.params)for(let key in modelInfo.params)typeof _params[key]>"u"&&(_params[key]=modelInfo.params[key]);_params.credentials=await getLLMCredentials(candidate,modelInfo),_params.baseURL=modelInfo?.baseURL,_params.modelInfo=modelInfo,_params.maxTokens?_params.maxTokens=await modelProviderCandidate.adjustMaxCompletionTokens(model,_params.maxTokens,_params?.isUserKey):_params.maxTokens=await modelProviderCandidate.getMaxCompletionTokens(model,_params?.isUserKey),_params.model=await modelProviderCandidate.getModelId(model),_params.files=files;const features=modelInfo?.features||[];_params.capabilities={search:features.includes("search"),reasoning:features.includes("reasoning"),imageGeneration:features.includes("image-generation")},_params.toolsInfo={openai:await this.prepareOpenAIToolsInfo(_params),xai:await this.prepareXAIToolsInfo(_params)},_params.agentId=candidate.id;const body=await this.reqBodyAdapter(_params);return{..._params,body}}async prepareOpenAIToolsInfo(params){const openAIToolsInfo={webSearch:{enabled:params?.useWebSearch&¶ms.capabilities.search===!0,contextSize:params?.webSearchContextSize||"medium"}};return params?.webSearchCity&&(openAIToolsInfo.webSearch.city=params?.webSearchCity),params?.webSearchCountry&&(openAIToolsInfo.webSearch.country=params?.webSearchCountry),params?.webSearchRegion&&(openAIToolsInfo.webSearch.region=params?.webSearchRegion),params?.webSearchTimezone&&(openAIToolsInfo.webSearch.timezone=params?.webSearchTimezone),openAIToolsInfo}async prepareXAIToolsInfo(params){const xaiToolsInfo={search:{enabled:params?.useSearch===!0&¶ms.capabilities.search===!0}};return params?.searchMode&&(xaiToolsInfo.search.mode=params?.searchMode),params?.returnCitations&&(xaiToolsInfo.search.returnCitations=params?.returnCitations),params?.maxSearchResults&&(xaiToolsInfo.search.maxResults=params?.maxSearchResults),params?.searchDataSources&&(xaiToolsInfo.search.dataSources=params?.searchDataSources),params?.searchCountry&&(xaiToolsInfo.search.country=params?.searchCountry),params?.excludedWebsites&&(xaiToolsInfo.search.excludedWebsites=params?.excludedWebsites),params?.allowedWebsites&&(xaiToolsInfo.search.allowedWebsites=params?.allowedWebsites),params?.includedXHandles&&(xaiToolsInfo.search.includedXHandles=params?.includedXHandles),params?.excludedXHandles&&(xaiToolsInfo.search.excludedXHandles=params?.excludedXHandles),params?.postFavoriteCount&&(xaiToolsInfo.search.postFavoriteCount=params?.postFavoriteCount),params?.postViewCount&&(xaiToolsInfo.search.postViewCount=params?.postViewCount),params?.rssLinks&&(xaiToolsInfo.search.rssLinks=params?.rssLinks),params?.safeSearch&&(xaiToolsInfo.search.safeSearch=params?.safeSearch),params?.fromDate&&(xaiToolsInfo.search.fromDate=params?.fromDate),params?.toDate&&(xaiToolsInfo.search.toDate=params?.toDate),xaiToolsInfo}formatParamValues(params){let _params={};for(const[key,value]of Object.entries(params)){let _value=value;["stopSequences","excludedWebsites","allowedWebsites","includedXHandles","excludedXHandles","rssLinks"].includes(key)&&(_value&&typeof _value=="string"?_value=_value.split(/[,\n]/).map(item=>item.trim()).filter(item=>item.length>0):Array.isArray(_value)?_value=_value:_value=_value?[_value]:null),typeof _value=="string"&&_value.trim()!==""&&!isNaN(Number(_value))&&(_value=+_value),key==="messages"&&(_value=this.getConsistentMessages(_value)),_params[key]=_value}return _params}async getTeamId(candidate){const accountConnector=ConnectorService.getAccountConnector();if(!accountConnector)throw new Error("Account Connector unavailable, cannot proceed");return await accountConnector.getCandidateTeam(candidate)}}var __defProp$L=Object.defineProperty,__defNormalProp$L=(obj,key,value)=>key in obj?__defProp$L(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$L=(obj,key,value)=>__defNormalProp$L(obj,key+"",value);class EchoConnector extends LLMConnector{constructor(){super(...arguments),__publicField$L(this,"name","LLM:Echo")}async request({acRequest,body,context}){const content=body?.messages?.[0]?.content;return{content,finishReason:"stop",useTool:!1,toolsData:[],message:{content,role:"assistant"},usage:{}}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1;let content="";return Array.isArray(body?.messages)&&(content=body?.messages?.filter(m=>m.role==="user").pop()?.content),(async()=>{const chunks=content.split(" ");for(let i=0;i<chunks.length;i++){await new Promise(resolve=>setTimeout(resolve,50));const isLastChunk=i===chunks.length-1,delta={content:chunks[i]+(isLastChunk?"":" ")};emitter.emit("data",delta),emitter.emit("content",delta.content)}setTimeout(()=>{emitter.emit("end",[],[])},100)})(),emitter}async reqBodyAdapter(params){return params}enhancePrompt(prompt,config2){return prompt}postProcess(response){try{const result=JSONContent(response).tryFullParse();return result?.error?response:result}catch{return response}}reportUsage(usage,metadata){}}class LLMHelper{static hasSystemMessage(messages){return Array.isArray(messages)?messages?.some(message=>message.role==="system"):!1}static separateSystemMessages(messages){const systemMessage=messages.find(message=>message.role==="system")||{},otherMessages=messages.filter(message=>message.role!=="system");return{systemMessage,otherMessages}}static async countVisionPromptTokens(prompt){let tokens=0;const textObj=prompt?.filter(item=>["text","input_text"].includes(item.type)),textTokens=encode(textObj?.[0]?.text).length,images=prompt?.filter(item=>["image_url","input_image"].includes(item.type));let imageTokens=0;for(const image of images){const imageUrl=image?.image_url?.url||image?.image_url,{width,height}=await this.getImageDimensions(imageUrl),tokens2=this.countImageTokens(width,height);imageTokens+=tokens2}return tokens=textTokens+imageTokens,tokens}static async getImageDimensions(imageUrl){try{let buffer;if(isBase64FileUrl(imageUrl)){const base64Data=imageUrl.replace(/^data:image\/\w+;base64,/,"");buffer=Buffer.from(base64Data,"base64")}else if(isUrl(imageUrl)){const response=await axios.get(imageUrl,{responseType:"arraybuffer"});buffer=Buffer.from(response.data)}else throw new Error("Please provide a valid image url!");const dimensions=imageSize(buffer);return{width:dimensions?.width||0,height:dimensions?.height||0}}catch(error){throw console.error("Error getting image dimensions",error),new Error("Please provide a valid image url!")}}static countImageTokens(width,height,detailMode="auto"){if(detailMode==="low")return 85;if(width>2048||height>2048){const aspectRatio=width/height;aspectRatio>1?(width=2048,height=Math.floor(2048/aspectRatio)):(height=2048,width=Math.floor(2048*aspectRatio))}if(width>768&&height>768){const aspectRatio=width/height;aspectRatio>1?(height=768,width=Math.floor(768*aspectRatio)):(width=768,height=Math.floor(768/aspectRatio))}const tilesWidth=Math.ceil(width/512),tilesHeight=Math.ceil(height/512);return 85+170*(tilesWidth*tilesHeight)}static removeDuplicateUserMessages(messages){const _messages=JSON.parse(JSON.stringify(messages));return _messages.length>1&&_messages[0].role===TLLMMessageRole.User&&_messages[1].role===TLLMMessageRole.User&&_messages.shift(),_messages.length>1&&_messages[_messages.length-1].role===TLLMMessageRole.User&&_messages[_messages.length-2].role===TLLMMessageRole.User&&_messages.pop(),_messages}}var __defProp$K=Object.defineProperty,__defNormalProp$K=(obj,key,value)=>key in obj?__defProp$K(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$K=(obj,key,value)=>__defNormalProp$K(obj,key+"",value);class OpenAIApiInterface{constructor(context){__publicField$K(this,"context"),this.context=context}}var TToolType=(TToolType2=>(TToolType2.WebSearch="web_search_preview",TToolType2))(TToolType||{});const MODELS_WITHOUT_TEMPERATURE_SUPPORT=["o3-pro","o4-mini"],MODELS_WITHOUT_PRESENCE_PENALTY_SUPPORT=["o4-mini"],MODELS_WITHOUT_JSON_RESPONSE_SUPPORT=["o1-preview"],MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT=["o1-mini","o1-preview"],SEARCH_TOOL_COSTS={"gpt-4":.025,"gpt-5":.01};function isValidOpenAIReasoningEffort(value){return["minimal","low","medium","high"].includes(value)}var __defProp$J=Object.defineProperty,__defNormalProp$J=(obj,key,value)=>key in obj?__defProp$J(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$J=(obj,key,value)=>__defNormalProp$J(obj,typeof key!="symbol"?key+"":key,value);const MAX_IMAGE_SIZE$1=20*1024*1024,MAX_DOCUMENT_SIZE$1=25*1024*1024,EVENT_TYPES={WEB_SEARCH_IN_PROGRESS:"response.web_search_call.in_progress",WEB_SEARCH_SEARCHING:"response.web_search_call.searching",WEB_SEARCH_COMPLETED:"response.web_search_call.completed",WEB_SEARCH_STARTED:"response.web_search_call.started",RESPONSE_COMPLETED:"response.completed",OUTPUT_TEXT_DELTA:"response.output_text.delta",OUTPUT_ITEM_ADDED:"response.output_item.added",FUNCTION_CALL_ARGUMENTS_DELTA:"response.function_call_arguments.delta",FUNCTION_CALL_ARGUMENTS_DONE:"response.function_call_arguments.done",OUTPUT_ITEM_DONE:"response.output_item.done"};class ResponsesApiInterface extends OpenAIApiInterface{constructor(context,deps){super(context),__publicField$J(this,"deps"),__publicField$J(this,"validImageMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.image),__publicField$J(this,"validDocumentMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.document),this.deps=deps}async createRequest(body,context){return await(await this.deps.getClient(context)).responses.create({...body,stream:!1})}async createStream(body,context){return await(await this.deps.getClient(context)).responses.create({...body,stream:!0})}handleStream(stream,context){const emitter=new EventEmitter$1;return(async()=>{let finalToolsData=[];try{const streamResult=await this.processStream(stream,emitter);finalToolsData=streamResult.toolsData;const finishReason=streamResult.finishReason||"stop",usageData=streamResult.usageData,reportedUsage=this.reportUsageStatistics(usageData,context);this.emitFinalEvents(emitter,finalToolsData,reportedUsage,finishReason)}catch(error){emitter.emit("error",error)}})(),emitter}async processStream(stream,emitter){let toolsData=[],finishReason="stop";const usageData=[];for await(const part of stream)try{if("type"in part)switch(part.type){case EVENT_TYPES.WEB_SEARCH_IN_PROGRESS:toolsData=this.handleWebSearchInProgress(part,toolsData);break;case EVENT_TYPES.WEB_SEARCH_SEARCHING:toolsData=this.handleWebSearchSearching(part,toolsData);break;case EVENT_TYPES.WEB_SEARCH_COMPLETED:toolsData=this.handleWebSearchCompleted(part,toolsData);break;case EVENT_TYPES.OUTPUT_TEXT_DELTA:this.handleOutputTextDelta(part,emitter);break;case EVENT_TYPES.OUTPUT_ITEM_ADDED:toolsData=this.handleOutputItemAdded(part,toolsData,emitter);break;case EVENT_TYPES.FUNCTION_CALL_ARGUMENTS_DELTA:toolsData=this.handleFunctionCallArgumentsDelta(part,toolsData,emitter);break;case EVENT_TYPES.FUNCTION_CALL_ARGUMENTS_DONE:toolsData=this.handleFunctionCallArgumentsDone(part,toolsData,emitter);break;case EVENT_TYPES.OUTPUT_ITEM_DONE:toolsData=this.handleOutputItemDone(part,toolsData);break;case EVENT_TYPES.RESPONSE_COMPLETED:{finishReason="stop";const responseData=part?.response;responseData?.usage&&usageData.push(responseData.usage);break}default:{const eventType=String(part.type);if(eventType===EVENT_TYPES.WEB_SEARCH_STARTED){const legacyId=part?.id;typeof legacyId=="string"&&(toolsData=this.upsertWebSearchToolImmutable(toolsData,legacyId).toolsData);break}finishReason=this.handleCompletionEvent(eventType);break}}}catch(error){console.warn("Error processing stream event:",error,"Event:",part)}return{toolsData:this.extractToolCalls(toolsData),finishReason,usageData}}extractToolCalls(output){return output.map(tool=>({index:tool.index,name:tool.name,arguments:tool.arguments,id:tool.callId||tool.id,type:tool.type,role:tool.role,callId:tool.callId}))}reportUsageStatistics(usage_data,context){const reportedUsage=[];if(usage_data.forEach(usage=>{const convertedUsage={completion_tokens:usage.completion_tokens||0,prompt_tokens:usage.prompt_tokens||0,total_tokens:usage.total_tokens||0,...usage},reported=this.deps.reportUsage(convertedUsage,this.buildUsageContext(context));reportedUsage.push(reported)}),context.toolsInfo?.openai?.webSearch?.enabled){const searchUsage=this.calculateSearchToolUsage(context),reported=this.deps.reportUsage(searchUsage,this.buildUsageContext(context));reportedUsage.push(reported)}return reportedUsage}emitFinalEvents(emitter,toolsData,reportedUsage,finishReason){toolsData.length>0&&emitter.emit(TLLMEvent.ToolInfo,toolsData),finishReason!=="stop"&&emitter.emit("interrupted",finishReason),setImmediate(()=>{emitter.emit("end",toolsData,reportedUsage,finishReason)})}buildUsageContext(context){return{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}}calculateSearchToolUsage(context){const modelName=context.modelEntryName?.replace("smythos/","");return{cost:this.getSearchToolCost(modelName),completion_tokens:0,prompt_tokens:0,total_tokens:0}}handleWebSearchCompleted(event,toolsData){try{const{item_id:itemId}=event;return this.upsertWebSearchToolImmutable(toolsData,itemId).toolsData}catch(error){return console.warn("Error handling web search completed event:",error),toolsData}}handleWebSearchInProgress(event,toolsData){try{const{item_id:itemId}=event;return this.upsertWebSearchToolImmutable(toolsData,itemId).toolsData}catch(error){return console.warn("Error handling web search in_progress event:",error),toolsData}}handleWebSearchSearching(event,toolsData){try{const{item_id:itemId}=event;return this.upsertWebSearchToolImmutable(toolsData,itemId).toolsData}catch(error){return console.warn("Error handling web search searching event:",error),toolsData}}handleOutputTextDelta(part,emitter){try{if("delta"in part&&part.delta){const deltaMsg={role:"assistant",content:part.delta};emitter.emit("data",deltaMsg),emitter.emit("content",part.delta,"assistant")}}catch(error){console.warn("Error handling output text delta:",error)}}handleOutputItemAdded(part,toolsData,emitter){try{const partAny=part;if(partAny.item&&partAny.item.type==="function_call"){const item=partAny.item,callId=item.call_id,functionName=item.name,itemId=item.id;if(callId&&itemId){const existingIndex=toolsData.findIndex(t=>t.id===itemId||t.id===callId),addingNew=existingIndex===-1,nextIndex=addingNew?toolsData.length:existingIndex;let updated;if(addingNew){const newItem={index:nextIndex,id:itemId,callId,type:"function",name:functionName||"",arguments:item.arguments||"",role:"tool"};updated=[...toolsData,newItem]}else updated=toolsData.map((t,idx)=>idx!==existingIndex?t:{...t,name:functionName||t.name,arguments:item.arguments!==void 0?item.arguments:t.arguments,callId:t.callId||callId});return addingNew&&emitter.emit("tool_call_started",{id:callId,name:functionName||"",type:"function"}),updated}}return toolsData}catch(error){return console.warn("Error handling output item added:",error),toolsData}}handleFunctionCallArgumentsDelta(part,toolsData,emitter){try{if("delta"in part&&"item_id"in part&&typeof part.delta=="string"&&typeof part.item_id=="string"){const delta=part.delta,itemId=part.item_id,existingIndex=toolsData.findIndex(t=>t.id===itemId);let updated,finalIndex;if(existingIndex===-1){finalIndex=toolsData.length;const newItem={index:finalIndex,id:itemId,type:"function",name:"",arguments:delta,role:"tool"};updated=[...toolsData,newItem]}else finalIndex=existingIndex,updated=toolsData.map((t,idx)=>idx===existingIndex?{...t,arguments:String(t.arguments||"")+delta}:t);const entry=updated[finalIndex];return emitter.emit("tool_call_progress",{id:entry.callId||itemId,name:entry.name,arguments:entry.arguments,delta}),updated}return toolsData}catch(error){return console.warn("Error handling function call arguments delta:",error),toolsData}}handleFunctionCallArgumentsDone(part,toolsData,emitter){try{const partAny=part;if(partAny.item_id&&partAny.arguments){const itemId=partAny.item_id,finalArguments=partAny.arguments,toolIndex=toolsData.findIndex(t=>t.id===itemId);if(toolIndex!==-1){const updated=toolsData.map((t,idx)=>idx===toolIndex?{...t,arguments:finalArguments}:t),updatedEntry=updated[toolIndex];return emitter.emit("tool_call_completed",{id:updatedEntry.callId||itemId,name:updatedEntry.name,arguments:finalArguments}),updated}}return toolsData}catch(error){return console.warn("Error handling function call arguments done:",error),toolsData}}handleOutputItemDone(part,toolsData){try{const partAny=part;if(partAny.item&&partAny.item.type==="function_call"&&partAny.item.status==="completed"){const item=partAny.item,callId=item.call_id,itemId=item.id,toolIndex=toolsData.findIndex(t=>t.id===itemId||t.id===callId);if(toolIndex!==-1&&item.arguments)return toolsData.map((t,idx)=>idx===toolIndex?{...t,arguments:item.arguments,callId:t.callId||callId}:t)}return toolsData}catch(error){return console.warn("Error handling output item done:",error),toolsData}}handleCompletionEvent(eventType){return eventType===EVENT_TYPES.RESPONSE_COMPLETED||eventType.includes("done"),"stop"}async prepareRequestBody(params){let input=await this.prepareInputMessages(params);input=this.applyToolMessageTransformation(input);const body={model:params.model,input};params?.maxTokens!==void 0&&(body.max_output_tokens=params.maxTokens),params?.temperature!==void 0&&!MODELS_WITHOUT_TEMPERATURE_SUPPORT.includes(params.modelEntryName)&&(body.temperature=params.temperature),params?.topP!==void 0&&(body.top_p=params.topP);const isGPT5ReasoningModels=params.modelEntryName?.includes("gpt-5")&¶ms?.capabilities?.reasoning;isGPT5ReasoningModels&¶ms?.verbosity&&(body.text={verbosity:params.verbosity}),isGPT5ReasoningModels&&isValidOpenAIReasoningEffort(params.reasoningEffort)&&(body.reasoning={effort:params.reasoningEffort});let tools=[];if(params?.toolsConfig?.tools&¶ms?.toolsConfig?.tools?.length>0&&(tools=await this.prepareFunctionTools(params)),params.toolsInfo?.openai?.webSearch?.enabled){const searchTool=this.prepareWebSearchTool(params);tools.push(searchTool)}if(tools.length>0)if(body.tools=tools,params?.toolsConfig?.tool_choice){const toolChoice=params.toolsConfig.tool_choice;this.validateToolChoice(toolChoice,tools)?typeof toolChoice=="string"?body.tool_choice=toolChoice:typeof toolChoice=="object"&&toolChoice!==null&&("type"in toolChoice&&toolChoice.type==="function"&&"function"in toolChoice&&"name"in toolChoice.function?body.tool_choice={type:"function",name:toolChoice.function.name}:body.tool_choice=toolChoice):body.tool_choice="auto"}else body.tool_choice="auto";return body}transformToolsConfig(config2){return!config2?.toolDefinitions||!Array.isArray(config2.toolDefinitions)?[]:config2.toolDefinitions.map((tool,index)=>{if(!tool||typeof tool!="object")return{type:"function",name:void 0,description:void 0,parameters:{type:"object",properties:void 0,required:void 0},strict:!1};if("function"in tool&&tool.function&&typeof tool.function=="object"&&tool.function!==null){const funcTool=tool.function;return!funcTool.name||typeof funcTool.name!="string"?{type:"function",name:void 0,description:tool.description||"",parameters:{type:"object",properties:void 0,required:void 0},strict:!1}:{type:"function",name:funcTool.name,description:funcTool.description||tool.description||"",parameters:funcTool.parameters||{type:"object",properties:{},required:[]},strict:!1}}if("parameters"in tool)return{type:"function",name:tool.name,description:tool.description||"",parameters:tool.parameters||{type:"object",properties:{},required:[]},strict:!1};const legacyTool=tool;return{type:"function",name:tool.name,description:tool.description||legacyTool.desc,parameters:{type:"object",properties:legacyTool.properties,required:legacyTool.requiredFields||legacyTool.required},strict:!1}}).filter(Boolean)}normalizeToolArguments(args){if(typeof args=="string")try{return JSON.parse(args),args}catch{return JSON.stringify(args)}if(typeof args=="object"&&args!==null)try{return JSON.stringify(args)}catch{return"{}"}return args==null?"{}":JSON.stringify(args)}isValidToolData(toolData){return!!(toolData&&toolData.id&&toolData.name&&(toolData.result!==void 0||toolData.error!==void 0))}async handleFileAttachments(files,agentId,messages){if(files.length===0)return messages;const uploadedFiles=await this.uploadFiles(files,agentId),validImageFiles=this.getValidImageFiles(uploadedFiles),validDocumentFiles=this.getValidDocumentFiles(uploadedFiles),imageData=await this.processImageData(validImageFiles,agentId),documentData=await this.processDocumentData(validDocumentFiles,agentId);for(let i=messages.length-1;i>=0;i--)if(messages[i].role==="user"){typeof messages[i].content=="string"?messages[i].content=[{type:"input_text",text:messages[i].content}]:Array.isArray(messages[i].content)||(messages[i].content=[]),messages[i].content.push(...imageData,...documentData);break}return messages.some(item=>item.role==="user")||messages.push({role:"user",content:[...imageData,...documentData]}),messages}getValidImageFiles(files){return files.filter(file=>this.validImageMimeTypes.includes(file?.mimetype))}getValidDocumentFiles(files){return files.filter(file=>this.validDocumentMimeTypes.includes(file?.mimetype))}async uploadFiles(files,agentId){const promises=files.map(file=>{const binaryInput=BinaryInput.from(file);return binaryInput.upload(AccessCandidate.agent(agentId)).then(()=>binaryInput)});return Promise.all(promises)}async processImageData(files,agentId){if(files.length===0)return[];const imageData=[];for(const file of files){await this.validateFileSize(file,MAX_IMAGE_SIZE$1,"Image");const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),url=`data:${file.mimetype};base64,${base64Data}`;imageData.push({type:"input_image",image_url:url})}return imageData}async processDocumentData(files,agentId){if(files.length===0)return[];const documentData=[];for(const file of files){await this.validateFileSize(file,MAX_DOCUMENT_SIZE$1,"Document");const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),fileData=`data:${file.mimetype};base64,${base64Data}`,filename=await file.getName();documentData.push({type:"input_file",file:{file_data:fileData,filename}})}return documentData}async validateFileSize(file,maxSize,fileType){await file.ready();const fileInfo=await file.getJsonData(AccessCandidate.agent("temp"));if(fileInfo.size>maxSize)throw new Error(`${fileType} file size (${fileInfo.size} bytes) exceeds maximum allowed size of ${maxSize} bytes`)}getInterfaceName(){return"responses"}validateParameters(params){return!!params.model}async prepareInputMessages(params){const messages=params?.messages||[],files=params?.files||[];let input=[...messages];return files.length>0&&(input=await this.handleFileAttachments(files,params.agentId,input)),input}async prepareFunctionTools(params){const tools=[];if(params?.toolsConfig?.tools&&Array.isArray(params.toolsConfig.tools)&¶ms.toolsConfig.tools.length>0)try{const validTools=this.transformToolsConfig({type:"function",toolDefinitions:params.toolsConfig.tools,toolChoice:params.toolsConfig.tool_choice||"auto",modelInfo:params.modelInfo||null}).filter((tool,index)=>!(tool.type!=="function"||!tool.name));tools.push(...validTools)}catch{}return tools}prepareWebSearchTool(params){const webSearch=params?.toolsInfo?.openai?.webSearch,contextSize=webSearch?.contextSize,searchCity=webSearch?.city,searchCountry=webSearch?.country,searchRegion=webSearch?.region,searchTimezone=webSearch?.timezone,userLocation={type:"approximate"};searchCity&&(userLocation.city=searchCity),searchCountry&&(userLocation.country=searchCountry),searchRegion&&(userLocation.region=searchRegion),searchTimezone&&(userLocation.timezone=searchTimezone);const hasLocationData=searchCity||searchCountry||searchRegion||searchTimezone,searchTool={type:"web_search_preview"},webSearchConfig={};return contextSize&&(webSearchConfig.search_context_size=contextSize),hasLocationData&&(webSearchConfig.user_location=userLocation),{...searchTool,...webSearchConfig}}applyToolMessageTransformation(input){const transformedMessages=[];for(let i=0;i<input.length;i++){const message=input[i];try{if(message.role==="assistant"&&message.tool_calls&&Array.isArray(message.tool_calls)){if(message.content!==void 0&&message.content!==null){const contentStr=typeof message.content=="string"?message.content:JSON.stringify(message.content);contentStr.trim().length>0&&transformedMessages.push({role:"assistant",content:contentStr})}message.tool_calls.forEach((toolCall,index)=>{if(!toolCall||!toolCall.function)return;const functionArgs=toolCall.function.arguments,normalizedArgs=functionArgs==null?void 0:typeof functionArgs=="object"?JSON.stringify(functionArgs):String(functionArgs);transformedMessages.push({type:"function_call",name:toolCall.function.name||"",arguments:normalizedArgs,call_id:toolCall.id||toolCall.call_id||`call_${Date.now()}_${index}`})})}else if(message.role==="tool"){if(!message.tool_call_id)return;const outputContent=message.content,normalizedOutput=typeof outputContent=="string"?outputContent:JSON.stringify(outputContent||"null");transformedMessages.push({type:"function_call_output",call_id:message.tool_call_id,output:normalizedOutput})}else transformedMessages.push(message)}catch{transformedMessages.push(message)}}return transformedMessages.filter((msg,index)=>!(!msg||typeof msg!="object"))}getSearchToolCost(modelName){if(!modelName)return 0;const normalized=String(modelName).toLowerCase().replace(/^smythos\//,""),match=Object.entries(SEARCH_TOOL_COSTS).find(([family])=>normalized.startsWith(family));return match?match[1]:0}async processFunctionCallResults(toolsData){const processedTools=[];for(const tool of toolsData)if(this.isValidToolData(tool))try{const processedTool={...tool,arguments:this.normalizeToolArguments(tool.arguments),function:tool.function||{name:tool.name,arguments:this.normalizeToolArguments(tool.arguments)}};processedTools.push(processedTool)}catch(error){processedTools.push({...tool,error:error instanceof Error?error.message:"Unknown processing error",result:void 0})}return processedTools}validateToolChoice(toolChoice,availableTools){return toolChoice?typeof toolChoice=="string"?["auto","required","none"].includes(toolChoice):typeof toolChoice=="object"&&toolChoice!==null&&toolChoice.type==="function"&&toolChoice.function?.name?availableTools.some(tool=>tool.type==="function"&&tool.name===toolChoice.function.name):!1:!0}upsertWebSearchToolImmutable(toolsData,id,args=""){const existingIndex=toolsData.findIndex(t=>t.id===id);if(existingIndex===-1){const index=toolsData.length,newItem={index,id,type:TToolType.WebSearch,name:"web_search",arguments:args,role:"tool"};return{toolsData:[...toolsData,newItem],index}}return args?{toolsData:toolsData.map((t,idx)=>idx===existingIndex?{...t,arguments:args}:t),index:existingIndex}:{toolsData,index:existingIndex}}}var __defProp$I=Object.defineProperty,__defNormalProp$I=(obj,key,value)=>key in obj?__defProp$I(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$I=(obj,key,value)=>__defNormalProp$I(obj,typeof key!="symbol"?key+"":key,value);const MAX_IMAGE_SIZE=20*1024*1024,MAX_DOCUMENT_SIZE=25*1024*1024;class ChatCompletionsApiInterface extends OpenAIApiInterface{constructor(context,deps){super(context),__publicField$I(this,"deps"),__publicField$I(this,"validImageMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.image),__publicField$I(this,"validDocumentMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.document),this.deps=deps}async createRequest(body,context){return await(await this.deps.getClient(context)).chat.completions.create({...body,stream:!1})}async createStream(body,context){return await(await this.deps.getClient(context)).chat.completions.create({...body,stream:!0,stream_options:{include_usage:!0}})}handleStream(stream,context){const emitter=new EventEmitter$1;return(async()=>{let finalToolsData=[];try{const streamResult=await this.processStream(stream,emitter);finalToolsData=streamResult.toolsData;const finishReason=streamResult.finishReason||"stop",usageData=streamResult.usageData,reportedUsage=this.reportUsageStatistics(usageData,context);this.emitFinalEvents(emitter,finalToolsData,reportedUsage,finishReason)}catch(error){emitter.emit("error",error)}})(),emitter}async prepareRequestBody(params){let messages=await this.prepareMessages(params);if(MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT.includes(params.modelEntryName)&&(messages=this.convertSystemMessagesToUserMessages(messages)),params.responseFormat==="json"){if(!MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT.includes(params.modelEntryName))messages?.[0]?.role===TLLMMessageRole.System?messages[0]={...messages[0],content:messages[0].content+JSON_RESPONSE_INSTRUCTION}:messages.unshift({role:TLLMMessageRole.System,content:JSON_RESPONSE_INSTRUCTION});else{const firstUserMessageIndex=messages.findIndex(msg=>msg.role===TLLMMessageRole.User);if(firstUserMessageIndex!==-1){const userMessage=messages[firstUserMessageIndex],content=typeof userMessage.content=="string"?userMessage.content:"";messages[firstUserMessageIndex]={...userMessage,content:JSON_RESPONSE_INSTRUCTION+`
|
|
188
|
+
The output JSON should only use the entries from the output format.`}return newPrompt}postProcess(response){try{return JSONContent(response).tryParse()}catch{return{error:"Invalid JSON response",data:response,details:"The response from the model is not a valid JSON object. Please check the model output and try again."}}}formatToolsConfig({type="function",toolDefinitions,toolChoice="auto",modelInfo=null}){throw new Error("This model does not support tools")}transformToolMessageBlocks({messageBlock,toolsData}){throw new Error("This model does not support tools")}getConsistentMessages(messages){return messages}async prepareParams(candidate,params){const modelsProvider=ConnectorService.getModelsProviderConnector(),files=params?.files;delete params?.files;const clonedParams=JSON.parse(JSON.stringify(params)),_params=this.formatParamValues(clonedParams),model=_params.model,teamId=await this.getTeamId(candidate);_params.modelEntryName=typeof model=="string"?model:model.modelId,_params.teamId=teamId;const modelProviderCandidate=modelsProvider.requester(candidate),modelInfo=await modelProviderCandidate.getModelInfo(model);if(modelInfo.params)for(let key in modelInfo.params)typeof _params[key]>"u"&&(_params[key]=modelInfo.params[key]);_params.credentials=await getLLMCredentials(candidate,modelInfo),_params.baseURL=modelInfo?.baseURL,_params.modelInfo=modelInfo,_params.maxTokens?_params.maxTokens=await modelProviderCandidate.adjustMaxCompletionTokens(model,_params.maxTokens,_params?.isUserKey):_params.maxTokens=await modelProviderCandidate.getMaxCompletionTokens(model,_params?.isUserKey),_params.model=await modelProviderCandidate.getModelId(model),_params.files=files;const features=modelInfo?.features||[];_params.capabilities={search:features.includes("search"),reasoning:features.includes("reasoning"),imageGeneration:features.includes("image-generation")},_params.toolsInfo={openai:await this.prepareOpenAIToolsInfo(_params),xai:await this.prepareXAIToolsInfo(_params)},_params.agentId=candidate.id;const body=await this.reqBodyAdapter(_params);return{..._params,body}}async prepareOpenAIToolsInfo(params){const openAIToolsInfo={webSearch:{enabled:params?.useWebSearch&¶ms.capabilities.search===!0,contextSize:params?.webSearchContextSize||"medium"}};return params?.webSearchCity&&(openAIToolsInfo.webSearch.city=params?.webSearchCity),params?.webSearchCountry&&(openAIToolsInfo.webSearch.country=params?.webSearchCountry),params?.webSearchRegion&&(openAIToolsInfo.webSearch.region=params?.webSearchRegion),params?.webSearchTimezone&&(openAIToolsInfo.webSearch.timezone=params?.webSearchTimezone),openAIToolsInfo}async prepareXAIToolsInfo(params){const xaiToolsInfo={search:{enabled:params?.useSearch===!0&¶ms.capabilities.search===!0}};return params?.searchMode&&(xaiToolsInfo.search.mode=params?.searchMode),params?.returnCitations&&(xaiToolsInfo.search.returnCitations=params?.returnCitations),params?.maxSearchResults&&(xaiToolsInfo.search.maxResults=params?.maxSearchResults),params?.searchDataSources&&(xaiToolsInfo.search.dataSources=params?.searchDataSources),params?.searchCountry&&(xaiToolsInfo.search.country=params?.searchCountry),params?.excludedWebsites&&(xaiToolsInfo.search.excludedWebsites=params?.excludedWebsites),params?.allowedWebsites&&(xaiToolsInfo.search.allowedWebsites=params?.allowedWebsites),params?.includedXHandles&&(xaiToolsInfo.search.includedXHandles=params?.includedXHandles),params?.excludedXHandles&&(xaiToolsInfo.search.excludedXHandles=params?.excludedXHandles),params?.postFavoriteCount&&(xaiToolsInfo.search.postFavoriteCount=params?.postFavoriteCount),params?.postViewCount&&(xaiToolsInfo.search.postViewCount=params?.postViewCount),params?.rssLinks&&(xaiToolsInfo.search.rssLinks=params?.rssLinks),params?.safeSearch&&(xaiToolsInfo.search.safeSearch=params?.safeSearch),params?.fromDate&&(xaiToolsInfo.search.fromDate=params?.fromDate),params?.toDate&&(xaiToolsInfo.search.toDate=params?.toDate),xaiToolsInfo}formatParamValues(params){let _params={};for(const[key,value]of Object.entries(params)){let _value=value;["stopSequences","excludedWebsites","allowedWebsites","includedXHandles","excludedXHandles","rssLinks"].includes(key)&&(_value&&typeof _value=="string"?_value=_value.split(/[,\n]/).map(item=>item.trim()).filter(item=>item.length>0):Array.isArray(_value)?_value=_value:_value=_value?[_value]:null),typeof _value=="string"&&_value.trim()!==""&&!isNaN(Number(_value))&&(_value=+_value),key==="messages"&&(_value=this.getConsistentMessages(_value)),_params[key]=_value}return _params}async getTeamId(candidate){const accountConnector=ConnectorService.getAccountConnector();if(!accountConnector)throw new Error("Account Connector unavailable, cannot proceed");return await accountConnector.getCandidateTeam(candidate)}}var __defProp$L=Object.defineProperty,__defNormalProp$L=(obj,key,value)=>key in obj?__defProp$L(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$L=(obj,key,value)=>__defNormalProp$L(obj,key+"",value);class EchoConnector extends LLMConnector{constructor(){super(...arguments),__publicField$L(this,"name","LLM:Echo")}async request({acRequest,body,context}){const content=body?.messages?.[0]?.content;return{content,finishReason:"stop",useTool:!1,toolsData:[],message:{content,role:"assistant"},usage:{}}}async streamRequest({acRequest,body,context}){const emitter=new EventEmitter$1;let content="";return Array.isArray(body?.messages)&&(content=body?.messages?.filter(m=>m.role==="user").pop()?.content),(async()=>{const chunks=content.split(" ");for(let i=0;i<chunks.length;i++){await new Promise(resolve=>setTimeout(resolve,50));const isLastChunk=i===chunks.length-1,delta={content:chunks[i]+(isLastChunk?"":" ")};emitter.emit("data",delta),emitter.emit("content",delta.content)}setTimeout(()=>{emitter.emit("end",[],[])},100)})(),emitter}async reqBodyAdapter(params){return params}enhancePrompt(prompt,config2){return prompt}postProcess(response){try{const result=JSONContent(response).tryFullParse();return result?.error?response:result}catch{return response}}reportUsage(usage,metadata){}}class LLMHelper{static hasSystemMessage(messages){return Array.isArray(messages)?messages?.some(message=>message.role==="system"):!1}static separateSystemMessages(messages){const systemMessage=messages.find(message=>message.role==="system")||{},otherMessages=messages.filter(message=>message.role!=="system");return{systemMessage,otherMessages}}static async countVisionPromptTokens(prompt){let tokens=0;const textObj=prompt?.filter(item=>["text","input_text"].includes(item.type)),textTokens=encode(textObj?.[0]?.text).length,images=prompt?.filter(item=>["image_url","input_image"].includes(item.type));let imageTokens=0;for(const image of images){const imageUrl=image?.image_url?.url||image?.image_url,{width,height}=await this.getImageDimensions(imageUrl),tokens2=this.countImageTokens(width,height);imageTokens+=tokens2}return tokens=textTokens+imageTokens,tokens}static async getImageDimensions(imageUrl){try{let buffer;if(isBase64FileUrl(imageUrl)){const base64Data=imageUrl.replace(/^data:image\/\w+;base64,/,"");buffer=Buffer.from(base64Data,"base64")}else if(isUrl(imageUrl)){const response=await axios.get(imageUrl,{responseType:"arraybuffer"});buffer=Buffer.from(response.data)}else throw new Error("Please provide a valid image url!");const dimensions=imageSize(buffer);return{width:dimensions?.width||0,height:dimensions?.height||0}}catch(error){throw console.error("Error getting image dimensions",error),new Error("Please provide a valid image url!")}}static countImageTokens(width,height,detailMode="auto"){if(detailMode==="low")return 85;if(width>2048||height>2048){const aspectRatio=width/height;aspectRatio>1?(width=2048,height=Math.floor(2048/aspectRatio)):(height=2048,width=Math.floor(2048*aspectRatio))}if(width>768&&height>768){const aspectRatio=width/height;aspectRatio>1?(height=768,width=Math.floor(768*aspectRatio)):(width=768,height=Math.floor(768/aspectRatio))}const tilesWidth=Math.ceil(width/512),tilesHeight=Math.ceil(height/512);return 85+170*(tilesWidth*tilesHeight)}static removeDuplicateUserMessages(messages){const _messages=JSON.parse(JSON.stringify(messages));return _messages.length>1&&_messages[0].role===TLLMMessageRole.User&&_messages[1].role===TLLMMessageRole.User&&_messages.shift(),_messages.length>1&&_messages[_messages.length-1].role===TLLMMessageRole.User&&_messages[_messages.length-2].role===TLLMMessageRole.User&&_messages.pop(),_messages}}var __defProp$K=Object.defineProperty,__defNormalProp$K=(obj,key,value)=>key in obj?__defProp$K(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$K=(obj,key,value)=>__defNormalProp$K(obj,key+"",value);class OpenAIApiInterface{constructor(context){__publicField$K(this,"context"),this.context=context}}var TToolType=(TToolType2=>(TToolType2.WebSearch="web_search_preview",TToolType2))(TToolType||{});const O3_AND_O4_MODELS=["o3","o3-pro","o4-mini"],O3_AND_O4_MODELS_PATTERN=/o3|o4/i,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT=["o1-preview"],MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT=["o1-mini","o1-preview"],SEARCH_TOOL_COSTS={"gpt-4":.025,"gpt-5":.01};function isValidOpenAIReasoningEffort(value){return["minimal","low","medium","high"].includes(value)}var __defProp$J=Object.defineProperty,__defNormalProp$J=(obj,key,value)=>key in obj?__defProp$J(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$J=(obj,key,value)=>__defNormalProp$J(obj,typeof key!="symbol"?key+"":key,value);const MAX_IMAGE_SIZE$1=20*1024*1024,MAX_DOCUMENT_SIZE$1=25*1024*1024,EVENT_TYPES={WEB_SEARCH_IN_PROGRESS:"response.web_search_call.in_progress",WEB_SEARCH_SEARCHING:"response.web_search_call.searching",WEB_SEARCH_COMPLETED:"response.web_search_call.completed",WEB_SEARCH_STARTED:"response.web_search_call.started",RESPONSE_COMPLETED:"response.completed",OUTPUT_TEXT_DELTA:"response.output_text.delta",OUTPUT_ITEM_ADDED:"response.output_item.added",FUNCTION_CALL_ARGUMENTS_DELTA:"response.function_call_arguments.delta",FUNCTION_CALL_ARGUMENTS_DONE:"response.function_call_arguments.done",OUTPUT_ITEM_DONE:"response.output_item.done"};class ResponsesApiInterface extends OpenAIApiInterface{constructor(context,deps){super(context),__publicField$J(this,"deps"),__publicField$J(this,"validImageMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.image),__publicField$J(this,"validDocumentMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.document),this.deps=deps}async createRequest(body,context){return await(await this.deps.getClient(context)).responses.create({...body,stream:!1})}async createStream(body,context){return await(await this.deps.getClient(context)).responses.create({...body,stream:!0})}handleStream(stream,context){const emitter=new EventEmitter$1;return(async()=>{let finalToolsData=[];try{const streamResult=await this.processStream(stream,emitter);finalToolsData=streamResult.toolsData;const finishReason=streamResult.finishReason||"stop",usageData=streamResult.usageData,reportedUsage=this.reportUsageStatistics(usageData,context);this.emitFinalEvents(emitter,finalToolsData,reportedUsage,finishReason)}catch(error){emitter.emit("error",error)}})(),emitter}async processStream(stream,emitter){let toolsData=[],finishReason="stop";const usageData=[];for await(const part of stream)try{if("type"in part)switch(part.type){case EVENT_TYPES.WEB_SEARCH_IN_PROGRESS:toolsData=this.handleWebSearchInProgress(part,toolsData);break;case EVENT_TYPES.WEB_SEARCH_SEARCHING:toolsData=this.handleWebSearchSearching(part,toolsData);break;case EVENT_TYPES.WEB_SEARCH_COMPLETED:toolsData=this.handleWebSearchCompleted(part,toolsData);break;case EVENT_TYPES.OUTPUT_TEXT_DELTA:this.handleOutputTextDelta(part,emitter);break;case EVENT_TYPES.OUTPUT_ITEM_ADDED:toolsData=this.handleOutputItemAdded(part,toolsData,emitter);break;case EVENT_TYPES.FUNCTION_CALL_ARGUMENTS_DELTA:toolsData=this.handleFunctionCallArgumentsDelta(part,toolsData,emitter);break;case EVENT_TYPES.FUNCTION_CALL_ARGUMENTS_DONE:toolsData=this.handleFunctionCallArgumentsDone(part,toolsData,emitter);break;case EVENT_TYPES.OUTPUT_ITEM_DONE:toolsData=this.handleOutputItemDone(part,toolsData);break;case EVENT_TYPES.RESPONSE_COMPLETED:{finishReason="stop";const responseData=part?.response;responseData?.usage&&usageData.push(responseData.usage);break}default:{const eventType=String(part.type);if(eventType===EVENT_TYPES.WEB_SEARCH_STARTED){const legacyId=part?.id;typeof legacyId=="string"&&(toolsData=this.upsertWebSearchToolImmutable(toolsData,legacyId).toolsData);break}finishReason=this.handleCompletionEvent(eventType);break}}}catch(error){console.warn("Error processing stream event:",error,"Event:",part)}return{toolsData:this.extractToolCalls(toolsData),finishReason,usageData}}extractToolCalls(output){return output.map(tool=>({index:tool.index,name:tool.name,arguments:tool.arguments,id:tool.callId||tool.id,type:tool.type,role:tool.role,callId:tool.callId}))}reportUsageStatistics(usage_data,context){const reportedUsage=[];if(usage_data.forEach(usage=>{const convertedUsage={completion_tokens:usage.completion_tokens||0,prompt_tokens:usage.prompt_tokens||0,total_tokens:usage.total_tokens||0,...usage},reported=this.deps.reportUsage(convertedUsage,this.buildUsageContext(context));reportedUsage.push(reported)}),context.toolsInfo?.openai?.webSearch?.enabled){const searchUsage=this.calculateSearchToolUsage(context),reported=this.deps.reportUsage(searchUsage,this.buildUsageContext(context));reportedUsage.push(reported)}return reportedUsage}emitFinalEvents(emitter,toolsData,reportedUsage,finishReason){toolsData.length>0&&emitter.emit(TLLMEvent.ToolInfo,toolsData),finishReason!=="stop"&&emitter.emit("interrupted",finishReason),setImmediate(()=>{emitter.emit("end",toolsData,reportedUsage,finishReason)})}buildUsageContext(context){return{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}}calculateSearchToolUsage(context){const modelName=context.modelEntryName?.replace("smythos/","");return{cost:this.getSearchToolCost(modelName),completion_tokens:0,prompt_tokens:0,total_tokens:0}}handleWebSearchCompleted(event,toolsData){try{const{item_id:itemId}=event;return this.upsertWebSearchToolImmutable(toolsData,itemId).toolsData}catch(error){return console.warn("Error handling web search completed event:",error),toolsData}}handleWebSearchInProgress(event,toolsData){try{const{item_id:itemId}=event;return this.upsertWebSearchToolImmutable(toolsData,itemId).toolsData}catch(error){return console.warn("Error handling web search in_progress event:",error),toolsData}}handleWebSearchSearching(event,toolsData){try{const{item_id:itemId}=event;return this.upsertWebSearchToolImmutable(toolsData,itemId).toolsData}catch(error){return console.warn("Error handling web search searching event:",error),toolsData}}handleOutputTextDelta(part,emitter){try{if("delta"in part&&part.delta){const deltaMsg={role:"assistant",content:part.delta};emitter.emit("data",deltaMsg),emitter.emit("content",part.delta,"assistant")}}catch(error){console.warn("Error handling output text delta:",error)}}handleOutputItemAdded(part,toolsData,emitter){try{const partAny=part;if(partAny.item&&partAny.item.type==="function_call"){const item=partAny.item,callId=item.call_id,functionName=item.name,itemId=item.id;if(callId&&itemId){const existingIndex=toolsData.findIndex(t=>t.id===itemId||t.id===callId),addingNew=existingIndex===-1,nextIndex=addingNew?toolsData.length:existingIndex;let updated;if(addingNew){const newItem={index:nextIndex,id:itemId,callId,type:"function",name:functionName||"",arguments:item.arguments||"",role:"tool"};updated=[...toolsData,newItem]}else updated=toolsData.map((t,idx)=>idx!==existingIndex?t:{...t,name:functionName||t.name,arguments:item.arguments!==void 0?item.arguments:t.arguments,callId:t.callId||callId});return addingNew&&emitter.emit("tool_call_started",{id:callId,name:functionName||"",type:"function"}),updated}}return toolsData}catch(error){return console.warn("Error handling output item added:",error),toolsData}}handleFunctionCallArgumentsDelta(part,toolsData,emitter){try{if("delta"in part&&"item_id"in part&&typeof part.delta=="string"&&typeof part.item_id=="string"){const delta=part.delta,itemId=part.item_id,existingIndex=toolsData.findIndex(t=>t.id===itemId);let updated,finalIndex;if(existingIndex===-1){finalIndex=toolsData.length;const newItem={index:finalIndex,id:itemId,type:"function",name:"",arguments:delta,role:"tool"};updated=[...toolsData,newItem]}else finalIndex=existingIndex,updated=toolsData.map((t,idx)=>idx===existingIndex?{...t,arguments:String(t.arguments||"")+delta}:t);const entry=updated[finalIndex];return emitter.emit("tool_call_progress",{id:entry.callId||itemId,name:entry.name,arguments:entry.arguments,delta}),updated}return toolsData}catch(error){return console.warn("Error handling function call arguments delta:",error),toolsData}}handleFunctionCallArgumentsDone(part,toolsData,emitter){try{const partAny=part;if(partAny.item_id&&partAny.arguments){const itemId=partAny.item_id,finalArguments=partAny.arguments,toolIndex=toolsData.findIndex(t=>t.id===itemId);if(toolIndex!==-1){const updated=toolsData.map((t,idx)=>idx===toolIndex?{...t,arguments:finalArguments}:t),updatedEntry=updated[toolIndex];return emitter.emit("tool_call_completed",{id:updatedEntry.callId||itemId,name:updatedEntry.name,arguments:finalArguments}),updated}}return toolsData}catch(error){return console.warn("Error handling function call arguments done:",error),toolsData}}handleOutputItemDone(part,toolsData){try{const partAny=part;if(partAny.item&&partAny.item.type==="function_call"&&partAny.item.status==="completed"){const item=partAny.item,callId=item.call_id,itemId=item.id,toolIndex=toolsData.findIndex(t=>t.id===itemId||t.id===callId);if(toolIndex!==-1&&item.arguments)return toolsData.map((t,idx)=>idx===toolIndex?{...t,arguments:item.arguments,callId:t.callId||callId}:t)}return toolsData}catch(error){return console.warn("Error handling output item done:",error),toolsData}}handleCompletionEvent(eventType){return eventType===EVENT_TYPES.RESPONSE_COMPLETED||eventType.includes("done"),"stop"}async prepareRequestBody(params){let input=await this.prepareInputMessages(params);input=this.applyToolMessageTransformation(input);const body={model:params.model,input};params?.maxTokens!==void 0&&(body.max_output_tokens=params.maxTokens);const isGPT5ReasoningModels=params.modelEntryName?.includes("gpt-5")&¶ms?.capabilities?.reasoning;isGPT5ReasoningModels&¶ms?.verbosity&&(body.text={verbosity:params.verbosity}),isGPT5ReasoningModels&&isValidOpenAIReasoningEffort(params.reasoningEffort)&&(body.reasoning={effort:params.reasoningEffort});let tools=[];if(params?.toolsConfig?.tools&¶ms?.toolsConfig?.tools?.length>0&&(tools=await this.prepareFunctionTools(params)),params.toolsInfo?.openai?.webSearch?.enabled){const searchTool=this.prepareWebSearchTool(params);tools.push(searchTool)}if(tools.length>0)if(body.tools=tools,params?.toolsConfig?.tool_choice){const toolChoice=params.toolsConfig.tool_choice;this.validateToolChoice(toolChoice,tools)?typeof toolChoice=="string"?body.tool_choice=toolChoice:typeof toolChoice=="object"&&toolChoice!==null&&("type"in toolChoice&&toolChoice.type==="function"&&"function"in toolChoice&&"name"in toolChoice.function?body.tool_choice={type:"function",name:toolChoice.function.name}:body.tool_choice=toolChoice):body.tool_choice="auto"}else body.tool_choice="auto";return body}transformToolsConfig(config2){return!config2?.toolDefinitions||!Array.isArray(config2.toolDefinitions)?[]:config2.toolDefinitions.map((tool,index)=>{if(!tool||typeof tool!="object")return{type:"function",name:void 0,description:void 0,parameters:{type:"object",properties:void 0,required:void 0},strict:!1};if("function"in tool&&tool.function&&typeof tool.function=="object"&&tool.function!==null){const funcTool=tool.function;return!funcTool.name||typeof funcTool.name!="string"?{type:"function",name:void 0,description:tool.description||"",parameters:{type:"object",properties:void 0,required:void 0},strict:!1}:{type:"function",name:funcTool.name,description:funcTool.description||tool.description||"",parameters:funcTool.parameters||{type:"object",properties:{},required:[]},strict:!1}}if("parameters"in tool)return{type:"function",name:tool.name,description:tool.description||"",parameters:tool.parameters||{type:"object",properties:{},required:[]},strict:!1};const legacyTool=tool;return{type:"function",name:tool.name,description:tool.description||legacyTool.desc,parameters:{type:"object",properties:legacyTool.properties,required:legacyTool.requiredFields||legacyTool.required},strict:!1}}).filter(Boolean)}normalizeToolArguments(args){if(typeof args=="string")try{return JSON.parse(args),args}catch{return JSON.stringify(args)}if(typeof args=="object"&&args!==null)try{return JSON.stringify(args)}catch{return"{}"}return args==null?"{}":JSON.stringify(args)}isValidToolData(toolData){return!!(toolData&&toolData.id&&toolData.name&&(toolData.result!==void 0||toolData.error!==void 0))}async handleFileAttachments(files,agentId,messages){if(files.length===0)return messages;const uploadedFiles=await this.uploadFiles(files,agentId),validImageFiles=this.getValidImageFiles(uploadedFiles),validDocumentFiles=this.getValidDocumentFiles(uploadedFiles),imageData=await this.processImageData(validImageFiles,agentId),documentData=await this.processDocumentData(validDocumentFiles,agentId);for(let i=messages.length-1;i>=0;i--)if(messages[i].role==="user"){typeof messages[i].content=="string"?messages[i].content=[{type:"input_text",text:messages[i].content}]:Array.isArray(messages[i].content)||(messages[i].content=[]),messages[i].content.push(...imageData,...documentData);break}return messages.some(item=>item.role==="user")||messages.push({role:"user",content:[...imageData,...documentData]}),messages}getValidImageFiles(files){return files.filter(file=>this.validImageMimeTypes.includes(file?.mimetype))}getValidDocumentFiles(files){return files.filter(file=>this.validDocumentMimeTypes.includes(file?.mimetype))}async uploadFiles(files,agentId){const promises=files.map(file=>{const binaryInput=BinaryInput.from(file);return binaryInput.upload(AccessCandidate.agent(agentId)).then(()=>binaryInput)});return Promise.all(promises)}async processImageData(files,agentId){if(files.length===0)return[];const imageData=[];for(const file of files){await this.validateFileSize(file,MAX_IMAGE_SIZE$1,"Image");const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),url=`data:${file.mimetype};base64,${base64Data}`;imageData.push({type:"input_image",image_url:url})}return imageData}async processDocumentData(files,agentId){if(files.length===0)return[];const documentData=[];for(const file of files){await this.validateFileSize(file,MAX_DOCUMENT_SIZE$1,"Document");const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),fileData=`data:${file.mimetype};base64,${base64Data}`,filename=await file.getName();documentData.push({type:"input_file",file:{file_data:fileData,filename}})}return documentData}async validateFileSize(file,maxSize,fileType){await file.ready();const fileInfo=await file.getJsonData(AccessCandidate.agent("temp"));if(fileInfo.size>maxSize)throw new Error(`${fileType} file size (${fileInfo.size} bytes) exceeds maximum allowed size of ${maxSize} bytes`)}getInterfaceName(){return"responses"}validateParameters(params){return!!params.model}async prepareInputMessages(params){const messages=params?.messages||[],files=params?.files||[];let input=[...messages];return files.length>0&&(input=await this.handleFileAttachments(files,params.agentId,input)),input}async prepareFunctionTools(params){const tools=[];if(params?.toolsConfig?.tools&&Array.isArray(params.toolsConfig.tools)&¶ms.toolsConfig.tools.length>0)try{const validTools=this.transformToolsConfig({type:"function",toolDefinitions:params.toolsConfig.tools,toolChoice:params.toolsConfig.tool_choice||"auto",modelInfo:params.modelInfo||null}).filter((tool,index)=>!(tool.type!=="function"||!tool.name));tools.push(...validTools)}catch{}return tools}prepareWebSearchTool(params){const webSearch=params?.toolsInfo?.openai?.webSearch,contextSize=webSearch?.contextSize,searchCity=webSearch?.city,searchCountry=webSearch?.country,searchRegion=webSearch?.region,searchTimezone=webSearch?.timezone,userLocation={type:"approximate"};searchCity&&(userLocation.city=searchCity),searchCountry&&(userLocation.country=searchCountry),searchRegion&&(userLocation.region=searchRegion),searchTimezone&&(userLocation.timezone=searchTimezone);const hasLocationData=searchCity||searchCountry||searchRegion||searchTimezone,searchTool={type:"web_search_preview"},webSearchConfig={};return contextSize&&(webSearchConfig.search_context_size=contextSize),hasLocationData&&(webSearchConfig.user_location=userLocation),{...searchTool,...webSearchConfig}}applyToolMessageTransformation(input){const transformedMessages=[];for(let i=0;i<input.length;i++){const message=input[i];try{if(message.role==="assistant"&&message.tool_calls&&Array.isArray(message.tool_calls)){if(message.content!==void 0&&message.content!==null){const contentStr=typeof message.content=="string"?message.content:JSON.stringify(message.content);contentStr.trim().length>0&&transformedMessages.push({role:"assistant",content:contentStr})}message.tool_calls.forEach((toolCall,index)=>{if(!toolCall||!toolCall.function)return;const functionArgs=toolCall.function.arguments,normalizedArgs=functionArgs==null?void 0:typeof functionArgs=="object"?JSON.stringify(functionArgs):String(functionArgs);transformedMessages.push({type:"function_call",name:toolCall.function.name||"",arguments:normalizedArgs,call_id:toolCall.id||toolCall.call_id||`call_${Date.now()}_${index}`})})}else if(message.role==="tool"){if(!message.tool_call_id)return;const outputContent=message.content,normalizedOutput=typeof outputContent=="string"?outputContent:JSON.stringify(outputContent||"null");transformedMessages.push({type:"function_call_output",call_id:message.tool_call_id,output:normalizedOutput})}else transformedMessages.push(message)}catch{transformedMessages.push(message)}}return transformedMessages.filter((msg,index)=>!(!msg||typeof msg!="object"))}getSearchToolCost(modelName){if(!modelName)return 0;const normalized=String(modelName).toLowerCase().replace(/^smythos\//,""),match=Object.entries(SEARCH_TOOL_COSTS).find(([family])=>normalized.startsWith(family));return match?match[1]:0}async processFunctionCallResults(toolsData){const processedTools=[];for(const tool of toolsData)if(this.isValidToolData(tool))try{const processedTool={...tool,arguments:this.normalizeToolArguments(tool.arguments),function:tool.function||{name:tool.name,arguments:this.normalizeToolArguments(tool.arguments)}};processedTools.push(processedTool)}catch(error){processedTools.push({...tool,error:error instanceof Error?error.message:"Unknown processing error",result:void 0})}return processedTools}validateToolChoice(toolChoice,availableTools){return toolChoice?typeof toolChoice=="string"?["auto","required","none"].includes(toolChoice):typeof toolChoice=="object"&&toolChoice!==null&&toolChoice.type==="function"&&toolChoice.function?.name?availableTools.some(tool=>tool.type==="function"&&tool.name===toolChoice.function.name):!1:!0}upsertWebSearchToolImmutable(toolsData,id,args=""){const existingIndex=toolsData.findIndex(t=>t.id===id);if(existingIndex===-1){const index=toolsData.length,newItem={index,id,type:TToolType.WebSearch,name:"web_search",arguments:args,role:"tool"};return{toolsData:[...toolsData,newItem],index}}return args?{toolsData:toolsData.map((t,idx)=>idx===existingIndex?{...t,arguments:args}:t),index:existingIndex}:{toolsData,index:existingIndex}}}var __defProp$I=Object.defineProperty,__defNormalProp$I=(obj,key,value)=>key in obj?__defProp$I(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$I=(obj,key,value)=>__defNormalProp$I(obj,typeof key!="symbol"?key+"":key,value);const MAX_IMAGE_SIZE=20*1024*1024,MAX_DOCUMENT_SIZE=25*1024*1024;class ChatCompletionsApiInterface extends OpenAIApiInterface{constructor(context,deps){super(context),__publicField$I(this,"deps"),__publicField$I(this,"validImageMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.image),__publicField$I(this,"validDocumentMimeTypes",SUPPORTED_MIME_TYPES_MAP.OpenAI.document),this.deps=deps}async createRequest(body,context){return await(await this.deps.getClient(context)).chat.completions.create({...body,stream:!1})}async createStream(body,context){return await(await this.deps.getClient(context)).chat.completions.create({...body,stream:!0,stream_options:{include_usage:!0}})}handleStream(stream,context){const emitter=new EventEmitter$1;return(async()=>{let finalToolsData=[];try{const streamResult=await this.processStream(stream,emitter);finalToolsData=streamResult.toolsData;const finishReason=streamResult.finishReason||"stop",usageData=streamResult.usageData,reportedUsage=this.reportUsageStatistics(usageData,context);this.emitFinalEvents(emitter,finalToolsData,reportedUsage,finishReason)}catch(error){emitter.emit("error",error)}})(),emitter}async prepareRequestBody(params){let messages=await this.prepareMessages(params);if(MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT.includes(params.modelEntryName)&&(messages=this.convertSystemMessagesToUserMessages(messages)),params.responseFormat==="json"){if(!MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT.includes(params.modelEntryName))messages?.[0]?.role===TLLMMessageRole.System?messages[0]={...messages[0],content:messages[0].content+JSON_RESPONSE_INSTRUCTION}:messages.unshift({role:TLLMMessageRole.System,content:JSON_RESPONSE_INSTRUCTION});else{const firstUserMessageIndex=messages.findIndex(msg=>msg.role===TLLMMessageRole.User);if(firstUserMessageIndex!==-1){const userMessage=messages[firstUserMessageIndex],content=typeof userMessage.content=="string"?userMessage.content:"";messages[firstUserMessageIndex]={...userMessage,content:JSON_RESPONSE_INSTRUCTION+`
|
|
189
189
|
|
|
190
|
-
`+content}}else messages.push({role:TLLMMessageRole.User,content:JSON_RESPONSE_INSTRUCTION})}params.responseFormat={type:"json_object"}}const body={model:params.model,messages};params?.maxTokens!==void 0&&(body.max_completion_tokens=params.maxTokens),params?.temperature!==void 0&&!
|
|
190
|
+
`+content}}else messages.push({role:TLLMMessageRole.User,content:JSON_RESPONSE_INSTRUCTION})}params.responseFormat={type:"json_object"}}const body={model:params.model,messages};params?.maxTokens!==void 0&&(body.max_completion_tokens=params.maxTokens);const modelName=params.modelEntryName?.replace(BUILT_IN_MODEL_PREFIX,"");params?.temperature!==void 0&&!O3_AND_O4_MODELS.includes(modelName)&&(body.temperature=params.temperature),params?.topP!==void 0&&!O3_AND_O4_MODELS.includes(modelName)&&(body.top_p=params.topP),params?.frequencyPenalty!==void 0&&!O3_AND_O4_MODELS.includes(modelName)&&(body.frequency_penalty=params.frequencyPenalty),params?.presencePenalty!==void 0&&!O3_AND_O4_MODELS.includes(modelName)&&(body.presence_penalty=params.presencePenalty),params?.responseFormat?.type&&!MODELS_WITHOUT_JSON_RESPONSE_SUPPORT.includes(modelName)&&(body.response_format=params.responseFormat),params?.stopSequences?.length&&!O3_AND_O4_MODELS.includes(modelName)&&(body.stop=params.stopSequences);const isGPT5ReasoningModels=params.modelEntryName?.includes("gpt-5")&¶ms?.capabilities?.reasoning;return isGPT5ReasoningModels&¶ms?.verbosity&&(body.verbosity=params.verbosity),isGPT5ReasoningModels&&isValidOpenAIReasoningEffort(params.reasoningEffort)&&(body.reasoning_effort=params.reasoningEffort),params?.toolsConfig?.tools&¶ms?.toolsConfig?.tools?.length>0&&(body.tools=params?.toolsConfig?.tools,body.tool_choice=params?.toolsConfig?.tool_choice),body}transformToolsConfig(config2){return config2.toolDefinitions.map(tool=>"parameters"in tool?{type:"function",function:{name:tool.name,description:tool.description,parameters:tool.parameters}}:{type:"function",function:{name:tool.name,description:tool.description,parameters:{type:"object",properties:tool.properties||{},required:tool.requiredFields||[]}}})}async handleFileAttachments(files,agentId,messages){if(files.length===0)return messages;const uploadedFiles=await this.uploadFiles(files,agentId),validImageFiles=this.getValidImageFiles(uploadedFiles),validDocumentFiles=this.getValidDocumentFiles(uploadedFiles),imageData=await this.processImageData(validImageFiles,agentId),documentData=await this.processDocumentData(validDocumentFiles,agentId),messagesCopy=[...messages],userMessage=Array.isArray(messagesCopy)&&messagesCopy.length>0?messagesCopy[messagesCopy.length-1]:{content:""},promptData=[{type:"text",text:(userMessage?.content&&typeof userMessage.content=="string"?userMessage.content:"")||""},...imageData,...documentData];return messagesCopy.length>0?messagesCopy[messagesCopy.length-1]={role:"user",content:promptData}:messagesCopy.push({role:"user",content:promptData}),messagesCopy}async processStream(stream,emitter){let toolsData=[],finishReason="stop";const usageData=[];for await(const part of stream){const delta=part.choices[0]?.delta,usage=part.usage;if(usage&&usageData.push(usage),emitter.emit("data",delta),!delta?.tool_calls&&delta?.content&&emitter.emit("content",delta?.content,delta?.role),delta?.tool_calls){const toolCall=delta?.tool_calls?.[0],index=toolCall?.index;toolsData[index]||(toolsData[index]={index:index||0,id:"",type:"function",name:"",arguments:"",role:"tool"}),toolCall?.function?.name&&(toolsData[index].name=toolCall.function.name),toolCall?.function?.arguments&&(toolsData[index].arguments+=toolCall.function.arguments),toolCall?.id&&(toolsData[index].id=toolCall.id)}part.choices[0]?.finish_reason&&(finishReason=part.choices[0].finish_reason)}return{toolsData:this.extractToolCalls(toolsData),finishReason,usageData}}extractToolCalls(toolsData){return toolsData.map(tool=>({index:tool.index,name:tool.name,arguments:tool.arguments,id:tool.id,type:tool.type,role:tool.role}))}reportUsageStatistics(usage_data,context){const reportedUsage=[];return usage_data.forEach(usage=>{const reported=this.deps.reportUsage(usage,this.buildUsageContext(context));reportedUsage.push(reported)}),reportedUsage}emitFinalEvents(emitter,toolsData,reportedUsage,finishReason){toolsData.length>0&&emitter.emit(TLLMEvent.ToolInfo,toolsData),finishReason!=="stop"&&emitter.emit("interrupted",finishReason),setImmediate(()=>{emitter.emit("end",toolsData,reportedUsage,finishReason)})}buildUsageContext(context){return{modelEntryName:context.modelEntryName,keySource:context.isUserKey?APIKeySource.User:APIKeySource.Smyth,agentId:context.agentId,teamId:context.teamId}}getValidImageFiles(files){return files.filter(file=>this.validImageMimeTypes.includes(file?.mimetype))}getValidDocumentFiles(files){return files.filter(file=>this.validDocumentMimeTypes.includes(file?.mimetype))}async uploadFiles(files,agentId){const promises=files.map(file=>{const binaryInput=BinaryInput.from(file);return binaryInput.upload(AccessCandidate.agent(agentId)).then(()=>binaryInput)});return Promise.all(promises)}async processImageData(files,agentId){if(files.length===0)return[];const imageData=[];for(const file of files){await this.validateFileSize(file,MAX_IMAGE_SIZE,"Image",agentId);const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),url=`data:${file.mimetype};base64,${base64Data}`;imageData.push({type:"image_url",image_url:{url}})}return imageData}async processDocumentData(files,agentId){if(files.length===0)return[];const documentData=[];for(const file of files){await this.validateFileSize(file,MAX_DOCUMENT_SIZE,"Document",agentId);const base64Data=(await file.readData(AccessCandidate.agent(agentId))).toString("base64"),fileData=`data:${file.mimetype};base64,${base64Data}`,filename=await file.getName();documentData.push({type:"file",file:{file_data:fileData,filename}})}return documentData}async validateFileSize(file,maxSize,fileType,agentId){await file.ready();const fileInfo=await file.getJsonData(AccessCandidate.agent(agentId));if(fileInfo.size>maxSize)throw new Error(`${fileType} file size (${fileInfo.size} bytes) exceeds maximum allowed size of ${maxSize} bytes`)}getInterfaceName(){return"chat.completions"}validateParameters(params){return!!params.model&&Array.isArray(params.messages)}convertSystemMessagesToUserMessages(messages){const convertedMessages=[],systemMessages=[];for(const message of messages)if(message.role===TLLMMessageRole.System){const content=typeof message.content=="string"?message.content:"";content.trim()&&systemMessages.push(content)}else convertedMessages.push(message);if(systemMessages.length>0){const systemContent=systemMessages.join(`
|
|
191
191
|
|
|
192
192
|
`),firstUserMessageIndex=convertedMessages.findIndex(msg=>msg.role===TLLMMessageRole.User);if(firstUserMessageIndex!==-1){const userMessage=convertedMessages[firstUserMessageIndex],existingContent=typeof userMessage.content=="string"?userMessage.content:"";convertedMessages[firstUserMessageIndex]={...userMessage,content:systemContent+`
|
|
193
193
|
|
|
@@ -219,5 +219,5 @@ ${error}
|
|
|
219
219
|
const result = await main(${getParametersString(parameters,inputs)});
|
|
220
220
|
return result;
|
|
221
221
|
})();
|
|
222
|
-
`}var __defProp$2=Object.defineProperty,__defNormalProp$2=(obj,key,value)=>key in obj?__defProp$2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$2=(obj,key,value)=>__defNormalProp$2(obj,typeof key!="symbol"?key+"":key,value);const console$2=Logger("ECMASandbox");class ECMASandbox2 extends CodeConnector{constructor(config2){super(config2),__publicField$2(this,"name","ECMASandbox"),__publicField$2(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)}}const console$1=Logger("Boot");let _booted=!1;function boot(){if(_booted){console$1.warn("SRE already booted");return}_booted=!0,SystemEvents.emit("SRE:BootStart"),console$1.debug("SRE Boot sequence started");const service={};service.NKV=new NKVService,service.Account=new AccountService,service.Vault=new VaultService,service.ManagedVault=new ManagedVaultService,service.Cache=new CacheService,service.Storage=new StorageService,service.ModelsProvider=new ModelsProviderService,service.LLM=new LLMService,service.AgentData=new AgentDataService,service.CLI=new CLIService,service.VectorDB=new VectorDBService,service.Router=new RouterService,service.Log=new LogService,service.Component=new ComponentService,service.Code=new CodeService,SystemEvents.on("SRE:Initialized",()=>{console$1.debug("SRE Initialized");for(let key in service)service[key].init();SystemEvents.emit("SRE:Booted",service),console$1.debug("SRE Boot sequence completed")})}var __defProp$1=Object.defineProperty,__defNormalProp$1=(obj,key,value)=>key in obj?__defProp$1(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1=(obj,key,value)=>__defNormalProp$1(obj,typeof key!="symbol"?key+"":key,value);const logger=Logger("SRE"),_SmythRuntime=class _SmythRuntime2{constructor(){__publicField$1(this,"started",!1),__publicField$1(this,"_smythDir"),__publicField$1(this,"_readyPromise"),__publicField$1(this,"_readyResolve"),__publicField$1(this,"defaultConfig",{Vault:{Connector:"JSONFileVault",Settings:{shared:"default"}},Account:{Connector:"DummyAccount"},Cache:{Connector:"RAM"},Storage:{Connector:"LocalStorage"},Code:{Connector:"DummyConnector"},NKV:{Connector:"LocalStorage"},VectorDB:{Connector:"RAMVec"},ModelsProvider:{Connector:"JSONModelsProvider"},AgentData:{Connector:"NullAgentData"},Component:{Connector:"LocalComponent"},ManagedVault:{Connector:"NullManagedVault"},Log:{Connector:"ConsoleLog"},Router:{Connector:"NullRouter"}}),__publicField$1(this,"_initializing",!1),__publicField$1(this,"_initialized",!1),__publicField$1(this,"_stopping",!1),this.started=!0,this._readyPromise=new Promise(resolve=>{this._readyResolve=resolve})}get smythDir(){return this._smythDir}static get Instance(){return _SmythRuntime2.instance||(_SmythRuntime2.instance=new _SmythRuntime2),_SmythRuntime2.instance}get initializing(){return this._initializing}init(_config){if((!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),this._initializing){console.warn("You tried to initialize SRE while it is already initializing ... skipping");return}if(this._initialized)throw new Error("SRE already initialized");this._initializing=!0,SystemEvents.on("SRE:Booted",()=>{this._readyResolve(!0)}),boot();const config2=this.autoConf(_config);for(let connectorType in config2)for(let configEntry of config2[connectorType])ConnectorService.init(connectorType,configEntry.Connector,configEntry.Id,configEntry.Settings,configEntry.Default)||logger.warn(`Failed to initialize connector ${connectorType}:${configEntry.Id||configEntry.Connector}`);return this._initialized=!0,SystemEvents.emit("SRE:Initialized",_SmythRuntime2.Instance),_SmythRuntime2.Instance}autoConf(config2={}){const defaultConfig=JSON.parse(JSON.stringify(this.defaultConfig)),keys=Object.keys({...defaultConfig,...config2}),newConfig={};for(let connectorType of keys){newConfig[connectorType]=[];let entry=config2[connectorType]||defaultConfig[connectorType];Array.isArray(entry)||(entry=[entry]);let hasDefault=!1;for(let connector of entry){if(!connector.Connector){logger.warn(`Missing Connector Name in ${connectorType} entry ... it will be ignored`);continue}connector.Default&&(hasDefault&&logger.warn(`Entry ${connectorType} has more than one default Connector ... only the first one will be used`),hasDefault=!0),newConfig[connectorType].push(connector)}!hasDefault&&newConfig[connectorType].length>0&&(newConfig[connectorType][0].Default=!0)}return newConfig}ready(){return this._readyPromise}async _stop(){this._stopping||(this._stopping=!0,logger.info("Sending Shutdown Signals To All Subsystems..."),await ConnectorService._stop(),_SmythRuntime2.instance=void 0,this.started=!1)}};__publicField$1(_SmythRuntime,"instance");let SmythRuntime=_SmythRuntime;const SRE=SmythRuntime.Instance;let shuttingDown=!1;async function shutdown(reason){if(SmythRuntime.Instance.started&&!shuttingDown&&(shuttingDown=!0,logger.info(`Caught ${reason} ... Attempting graceful shutdown`),SmythRuntime.Instance))try{await SmythRuntime.Instance._stop()}catch(err){logger.error("Shutdown error:",err)}}["SIGINT","SIGTERM"].forEach(signal=>{process.on(signal,async()=>{await shutdown(signal),process.exit(0)})});process.on("beforeExit",code=>{shutdown("beforeExit")});process.on("exit",code=>{logger.info("Goodbye!")});class SmythURI{static agent(id){return`smyth:agent:${id}`}}class LLMMemoryConnector extends SecureConnector{requester(candidate){return{load:async messages=>await this.load(candidate.readRequest,messages)}}}var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp(target,key,result),result},__publicField=(obj,key,value)=>__defNormalProp(obj,key+"",value);Logger("HashicorpVault");class HashicorpVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField(this,"name","HashicorpVault")}async get(acRequest,keyId){return null}async exists(acRequest,keyId){return!1}async listKeys(acRequest){return[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}}__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"get"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"exists"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"listKeys");export{ACL,ACLAccessDeniedError,APICall,APIEndpoint,APIKeySource,APIOutput,AWSAccount,AWSLambdaCode,AccessCandidate,AccessRequest,AccountConnector,AccountService,Agent,AgentDataConnector,AgentDataService,AgentLogger,AgentPlugin,AgentProcess,AgentRequest,AgentRuntime,AgentSSE,AgentSettings,AnthropicConnector,Async,Await,BUILT_IN_MODEL_PREFIX,BaseEmbedding,BedrockConnector,BinaryInput,BuiltinLLMProviders,CLIAgentDataConnector,CLIConnector,CLIService,COMP_NAMES,CacheConnector,CacheService,Classifier,CodeConnector,CodeService,Component,ComponentConnector,ComponentHost,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ERR_MSG_INVALID_BINARY,ERR_MSG_INVALID_IMAGE_SOURCE,ERR_MSG_MAX_ARRAY_SIZE,ERR_MSG_MAX_DEPTH,ERR_MSG_MAX_OBJECT_SIZE,EchoConnector,EmbeddingsFactory,EmbodimentSettings,ExpressRouter,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GoogleAIConnector,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalStorage,LocalStorageCache,LogConnector,LogHelper,LogService,Logger,LogicAND,LogicAtLeast,LogicAtMost,LogicOR,LogicXOR,MAX_ARRAY_SIZE,MAX_DEPTH,MAX_FILE_COUNT,MAX_FILE_SIZE,MAX_OBJECT_SIZE,MCPClient,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT,MODELS_WITHOUT_PRESENCE_PENALTY_SUPPORT,MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT,MODELS_WITHOUT_TEMPERATURE_SUPPORT,ManagedVaultConnector,ManagedVaultService,Match,MemoryDeleteKeyVal,MemoryReadKeyVal,MemoryWriteKeyVal,MemoryWriteObject,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,OSResourceMonitor,OpenAIConnector,OpenAIEmbeds,OpenAPIParser,PerplexityConnector,PineconeVectorDB,PromptGenerator,RAMCache,RAMVectorDB,REQUEST_CONTENT_TYPES,REQUEST_METHODS,RedisCache,ReverseLevelMap,ReverseRoleMap,RoleMap,RouterConnector,RouterService,RuntimeContext,S3Cache,S3Storage,S3_DAILY_PURGE_LIFECYCLE_TAG,S3_MONTHLY_PURGE_LIFECYCLE_TAG,S3_WEEKLY_PURGE_LIFECYCLE_TAG,SEARCH_TOOL_COSTS,SRE,SUPPORTED_MIME_TYPES_MAP,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TToolType,TavilyWebSearch,TemplateString,TemplateStringHelper,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractAllKeyNamesFromTemplateVars,extractKeyFromTemplateVar,findSmythPath,generateCodeFromLegacyComponent,generateCodeHash,generateExecutableCode,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,getCredentials,getCurrentEnvironmentVariables,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,getSortedObjectValues,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,inputErrMsg,invokeLambdaFunction,isAgent,isValidGroqReasoningEffort,isValidOpenAIReasoningEffort,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,runJs,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,validateAsyncMainFunction,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,xAIConnector,zipCode};
|
|
222
|
+
`}var __defProp$2=Object.defineProperty,__defNormalProp$2=(obj,key,value)=>key in obj?__defProp$2(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$2=(obj,key,value)=>__defNormalProp$2(obj,typeof key!="symbol"?key+"":key,value);const console$2=Logger("ECMASandbox");class ECMASandbox2 extends CodeConnector{constructor(config2){super(config2),__publicField$2(this,"name","ECMASandbox"),__publicField$2(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)}}const console$1=Logger("Boot");let _booted=!1;function boot(){if(_booted){console$1.warn("SRE already booted");return}_booted=!0,SystemEvents.emit("SRE:BootStart"),console$1.debug("SRE Boot sequence started");const service={};service.NKV=new NKVService,service.Account=new AccountService,service.Vault=new VaultService,service.ManagedVault=new ManagedVaultService,service.Cache=new CacheService,service.Storage=new StorageService,service.ModelsProvider=new ModelsProviderService,service.LLM=new LLMService,service.AgentData=new AgentDataService,service.CLI=new CLIService,service.VectorDB=new VectorDBService,service.Router=new RouterService,service.Log=new LogService,service.Component=new ComponentService,service.Code=new CodeService,SystemEvents.on("SRE:Initialized",()=>{console$1.debug("SRE Initialized");for(let key in service)service[key].init();SystemEvents.emit("SRE:Booted",service),console$1.debug("SRE Boot sequence completed")})}var __defProp$1=Object.defineProperty,__defNormalProp$1=(obj,key,value)=>key in obj?__defProp$1(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__publicField$1=(obj,key,value)=>__defNormalProp$1(obj,typeof key!="symbol"?key+"":key,value);const logger=Logger("SRE"),_SmythRuntime=class _SmythRuntime2{constructor(){__publicField$1(this,"started",!1),__publicField$1(this,"_smythDir"),__publicField$1(this,"_readyPromise"),__publicField$1(this,"_readyResolve"),__publicField$1(this,"defaultConfig",{Vault:{Connector:"JSONFileVault",Settings:{shared:"default"}},Account:{Connector:"DummyAccount"},Cache:{Connector:"RAM"},Storage:{Connector:"LocalStorage"},Code:{Connector:"DummyConnector"},NKV:{Connector:"LocalStorage"},VectorDB:{Connector:"RAMVec"},ModelsProvider:{Connector:"JSONModelsProvider"},AgentData:{Connector:"NullAgentData"},Component:{Connector:"LocalComponent"},ManagedVault:{Connector:"NullManagedVault"},Log:{Connector:"ConsoleLog"},Router:{Connector:"NullRouter"}}),__publicField$1(this,"_initializing",!1),__publicField$1(this,"_initialized",!1),__publicField$1(this,"_stopping",!1),this.started=!0,this._readyPromise=new Promise(resolve=>{this._readyResolve=resolve})}get smythDir(){return this._smythDir}static get Instance(){return _SmythRuntime2.instance||(_SmythRuntime2.instance=new _SmythRuntime2),_SmythRuntime2.instance}get initializing(){return this._initializing}init(_config){if((!_config||JSON.stringify(_config)==="{}")&&(this._smythDir=findSmythPath(),logger.info(".smyth directory found in:",this._smythDir)),this._initializing){console.warn("You tried to initialize SRE while it is already initializing ... skipping");return}if(this._initialized)throw new Error("SRE already initialized");this._initializing=!0,SystemEvents.on("SRE:Booted",()=>{this._readyResolve(!0)}),boot();const config2=this.autoConf(_config);for(let connectorType in config2)for(let configEntry of config2[connectorType])ConnectorService.init(connectorType,configEntry.Connector,configEntry.Id,configEntry.Settings,configEntry.Default)||logger.warn(`Failed to initialize connector ${connectorType}:${configEntry.Id||configEntry.Connector}`);return this._initialized=!0,SystemEvents.emit("SRE:Initialized",_SmythRuntime2.Instance),_SmythRuntime2.Instance}autoConf(config2={}){const defaultConfig=JSON.parse(JSON.stringify(this.defaultConfig)),keys=Object.keys({...defaultConfig,...config2}),newConfig={};for(let connectorType of keys){newConfig[connectorType]=[];let entry=config2[connectorType]||defaultConfig[connectorType];Array.isArray(entry)||(entry=[entry]);let hasDefault=!1;for(let connector of entry){if(!connector.Connector){logger.warn(`Missing Connector Name in ${connectorType} entry ... it will be ignored`);continue}connector.Default&&(hasDefault&&logger.warn(`Entry ${connectorType} has more than one default Connector ... only the first one will be used`),hasDefault=!0),newConfig[connectorType].push(connector)}!hasDefault&&newConfig[connectorType].length>0&&(newConfig[connectorType][0].Default=!0)}return newConfig}ready(){return this._readyPromise}async _stop(){this._stopping||(this._stopping=!0,logger.info("Sending Shutdown Signals To All Subsystems..."),await ConnectorService._stop(),_SmythRuntime2.instance=void 0,this.started=!1)}};__publicField$1(_SmythRuntime,"instance");let SmythRuntime=_SmythRuntime;const SRE=SmythRuntime.Instance;let shuttingDown=!1;async function shutdown(reason){if(SmythRuntime.Instance.started&&!shuttingDown&&(shuttingDown=!0,logger.info(`Caught ${reason} ... Attempting graceful shutdown`),SmythRuntime.Instance))try{await SmythRuntime.Instance._stop()}catch(err){logger.error("Shutdown error:",err)}}["SIGINT","SIGTERM"].forEach(signal=>{process.on(signal,async()=>{await shutdown(signal),process.exit(0)})});process.on("beforeExit",code=>{shutdown("beforeExit")});process.on("exit",code=>{logger.info("Goodbye!")});class SmythURI{static agent(id){return`smyth:agent:${id}`}}class LLMMemoryConnector extends SecureConnector{requester(candidate){return{load:async messages=>await this.load(candidate.readRequest,messages)}}}var __defProp=Object.defineProperty,__getOwnPropDesc=Object.getOwnPropertyDescriptor,__defNormalProp=(obj,key,value)=>key in obj?__defProp(obj,key,{enumerable:!0,configurable:!0,writable:!0,value}):obj[key]=value,__decorateClass=(decorators,target,key,kind)=>{for(var result=__getOwnPropDesc(target,key),i=decorators.length-1,decorator;i>=0;i--)(decorator=decorators[i])&&(result=decorator(target,key,result)||result);return result&&__defProp(target,key,result),result},__publicField=(obj,key,value)=>__defNormalProp(obj,key+"",value);Logger("HashicorpVault");class HashicorpVault extends VaultConnector{constructor(_settings){super(_settings),this._settings=_settings,__publicField(this,"name","HashicorpVault")}async get(acRequest,keyId){return null}async exists(acRequest,keyId){return!1}async listKeys(acRequest){return[]}async getResourceACL(resourceId,candidate){const teamId=await ConnectorService.getAccountConnector().getCandidateTeam(candidate),acl=new ACL;return acl.addAccess(TAccessRole.Team,teamId,TAccessLevel.Owner).addAccess(TAccessRole.Team,teamId,TAccessLevel.Read).addAccess(TAccessRole.Team,teamId,TAccessLevel.Write),acl}}__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"get"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"exists"),__decorateClass([SecureConnector.AccessControl],HashicorpVault.prototype,"listKeys");export{ACL,ACLAccessDeniedError,APICall,APIEndpoint,APIKeySource,APIOutput,AWSAccount,AWSLambdaCode,AccessCandidate,AccessRequest,AccountConnector,AccountService,Agent,AgentDataConnector,AgentDataService,AgentLogger,AgentPlugin,AgentProcess,AgentRequest,AgentRuntime,AgentSSE,AgentSettings,AnthropicConnector,Async,Await,BUILT_IN_MODEL_PREFIX,BaseEmbedding,BedrockConnector,BinaryInput,BuiltinLLMProviders,CLIAgentDataConnector,CLIConnector,CLIService,COMP_NAMES,CacheConnector,CacheService,Classifier,CodeConnector,CodeService,Component,ComponentConnector,ComponentHost,ComponentInstances,ComponentService,Connector,ConnectorService,ConnectorServiceProvider,ConsoleLog,Conversation,DEFAULT_MAX_TOKENS_FOR_LLM,DEFAULT_SMYTHOS_LLM_PROVIDERS_SETTINGS,DEFAULT_TEAM_ID,DataSourceCleaner,DataSourceIndexer,DataSourceLookup,DummyAccount,DummyConnector,EMBODIMENT_TYPES,ERR_MSG_INVALID_BINARY,ERR_MSG_INVALID_IMAGE_SOURCE,ERR_MSG_MAX_ARRAY_SIZE,ERR_MSG_MAX_DEPTH,ERR_MSG_MAX_OBJECT_SIZE,EchoConnector,EmbeddingsFactory,EmbodimentSettings,ExpressRouter,FEncDec,FHash,FSign,FSleep,FTimestamp,FileStore,ForEach,ForkedAgent,GPTPlugin,GenAILLM,GoogleAIConnector,GroqConnector,HashicorpVault,HookService,HuggingFace,ImageGenerator,ImageSettingsConfig,JSONContent,JSONContentHelper,JSONFileAccount,JSONFileVault,JSONFilter,JSONModelsProvider,JSON_RESPONSE_INSTRUCTION,LLMAssistant,LLMCache,LLMConnector,LLMContext,LLMHelper,LLMInference$1 as LLMInference,LLMMemoryConnector,LLMService,LLMStream,LevelMap,LocalAgentDataConnector,LocalCache,LocalComponentConnector,LocalStorage,LocalStorageCache,LogConnector,LogHelper,LogService,Logger,LogicAND,LogicAtLeast,LogicAtMost,LogicOR,LogicXOR,MAX_ARRAY_SIZE,MAX_DEPTH,MAX_FILE_COUNT,MAX_FILE_SIZE,MAX_OBJECT_SIZE,MCPClient,MODELS_WITHOUT_JSON_RESPONSE_SUPPORT,MODELS_WITHOUT_SYSTEM_MESSAGE_SUPPORT,ManagedVaultConnector,ManagedVaultService,Match,MemoryDeleteKeyVal,MemoryReadKeyVal,MemoryWriteKeyVal,MemoryWriteObject,MilvusVectorDB,ModelsProviderConnector,ModelsProviderService,MultimodalLLM,NKVConnector,NKVLocalStorage,NKVRAM,NKVRedis,NKVService,NullAgentData,NullManagedVault,NullRouter,NullVault,O3_AND_O4_MODELS,O3_AND_O4_MODELS_PATTERN,OSResourceMonitor,OpenAIConnector,OpenAIEmbeds,OpenAPIParser,PerplexityConnector,PineconeVectorDB,PromptGenerator,RAMCache,RAMVectorDB,REQUEST_CONTENT_TYPES,REQUEST_METHODS,RedisCache,ReverseLevelMap,ReverseRoleMap,RoleMap,RouterConnector,RouterService,RuntimeContext,S3Cache,S3Storage,S3_DAILY_PURGE_LIFECYCLE_TAG,S3_MONTHLY_PURGE_LIFECYCLE_TAG,S3_WEEKLY_PURGE_LIFECYCLE_TAG,SEARCH_TOOL_COSTS,SRE,SUPPORTED_MIME_TYPES_MAP,ScrapflyWebScrape,SecretManagerManagedVault,SecretsManager,SecureConnector,ServerlessCode,SmythFS,SmythRuntime,SmythURI,StorageConnector,StorageService,SystemEvents,TAccessLevel,TAccessResult,TAccessRole,TConnectorService,TLLMCredentials,TLLMEvent,TLLMMessageRole,TLLMProvider,TOOL_USE_DEFAULT_MODEL,TPLProcessor,TToolType,TavilyWebSearch,TemplateString,TemplateStringHelper,VaultConnector,VaultHelper,VaultService,VectorDBConnector,VectorDBService,VertexAIConnector,VisionLLM,ZapierAction,boot,buildOAuth1Header,cachePrefix,cacheTTL,calculateExecutionCost,checkAndInstallLifecycleRules,createOrUpdateLambdaFunction,customModels,destroyPublicUrls,escapeJsonField,escapeString,extractAdditionalParamsForOAuth1,extractAllKeyNamesFromTemplateVars,extractKeyFromTemplateVar,findSmythPath,generateCodeFromLegacyComponent,generateCodeHash,generateExecutableCode,generateExpiryMetadata,generateLambdaCode,generateLifecycleRules,getCredentials,getCurrentEnvironmentVariables,getDeployedCodeHash,getDeployedFunction,getLLMCredentials,getLambdaCredentials,getLambdaFunctionName,getLambdaRolePolicy,getNonExistingRules,getSanitizeCodeHash,getSortedObjectValues,handleOAuthHeaders,hook,hookAsync,hookAsyncWithContext,inputErrMsg,invokeLambdaFunction,isAgent,isValidGroqReasoningEffort,isValidOpenAIReasoningEffort,models,parseArrayBufferResponse,parseData,parseHeaders,parseProxy,parseSmythFsUrl,parseUrl,performTypeInference,reportUsage,retrieveOAuthTokens,runJs,setDeployedCodeHash,ttlToExpiryDays,updateDeployedCodeTTL,validateAsyncMainFunction,verifyFunctionDeploymentStatus,version,waitForRoleDeploymentStatus,xAIConnector,zipCode};
|
|
223
223
|
//# sourceMappingURL=index.js.map
|