Add feature: Users can load their own downloaded agents or workflows from the myai directory.

This commit is contained in:
Liu Zhicong
2023-09-20 22:47:52 -07:00
parent bde91771a8
commit 080a8918fe
7 changed files with 45 additions and 15 deletions
+1 -1
View File
@@ -317,7 +317,7 @@ class AIAgent:
prompt.append(msg_prompt)
self._format_msg_by_env_value(prompt)
logger.info(f"Agent {self.agent_id} do llm token static system:{system_prompt_len},function:{function_token_len},history:{history_token_len},input:{input_len}")
logger.debug(f"Agent {self.agent_id} do llm token static system:{system_prompt_len},function:{function_token_len},history:{history_token_len},input:{input_len}totoal prompt:{system_prompt_len + function_token_len + history_token_len} ")
task_result:ComputeTaskResult = await ComputeKernel.get_instance().do_llm_completion(prompt,self.llm_model_name,self.max_token_size,inner_functions)
final_result = task_result.result_str
+16
View File
@@ -63,6 +63,7 @@ class UserConfig:
except Exception as e:
logger.warn(f"load user config from {file_path} failed!")
async def save_to_user_config(self) -> None:
will_save_config = {}
for key,value in self.config_table.items():
@@ -183,4 +184,19 @@ class AIStorage:
def put_named_object(self,name:str,obj:Any) -> None:
pass
async def try_create_file_with_default_value(self,path:str,default_value:str):
if os.path.exists(path):
return None
try:
directory = os.path.dirname(path)
if not os.path.exists(directory):
os.makedirs(directory)
async with aiofiles.open(path,"w") as f:
await f.write(default_value)
except Exception as e:
logger.error(f"open or create file {path} failed! {str(e)}")
+11 -2
View File
@@ -8,6 +8,10 @@ from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,Packag
logger = logging.getLogger(__name__)
default_agent_cfg = """
main = "./"
cache = "./.agents"
"""
class AgentManager:
_instance = None
@@ -24,12 +28,17 @@ class AgentManager:
self.db_path : str = None
self.loaded_agent_instance : Dict[str,AIAgent] = None
def initial(self) -> None:
async def initial(self) -> None:
system_app_dir = AIStorage.get_instance().get_system_app_dir()
user_data_dir = AIStorage.get_instance().get_myai_dir()
self.agent_templete_env : PackageEnv = PackageEnvManager().get_env(f"{system_app_dir}/templates/templetes.cfg")
self.agent_env : PackageEnv = PackageEnvManager().get_env(f"{system_app_dir}/agents/agents.cfg")
sys_agent_env : PackageEnv = PackageEnvManager().get_env(f"{system_app_dir}/agents/agents.cfg")
user_agent_config_path = f"{user_data_dir}/agents/agents.cfg"
await AIStorage.get_instance().try_create_file_with_default_value(user_agent_config_path,default_agent_cfg)
self.agent_env : PackageEnv = PackageEnvManager().get_env(user_agent_config_path)
self.agent_env.parent_envs.append(sys_agent_env)
self.db_path = f"{user_data_dir}/messages.db"
self.loaded_agent_instance = {}
if self.agent_templete_env is None:
+2 -2
View File
@@ -16,7 +16,7 @@ class PackageEnv:
self.locked_index : str = "./pkg.lock"
self.is_strict : bool = True
self.parent_envs : list[PackageEnv] = None
self.parent_envs : list[PackageEnv] = []
self.index_dbs = None
self.env_dir = None
@@ -56,7 +56,7 @@ class PackageEnv:
if media_info is None:
if search_parent is True and self.parent_envs is not None:
for parent_env in self.parent_envs:
media_info = parent_env.load(pkg_id,cid,False)
media_info = parent_env.load(pkg_id,False)
if media_info is not None:
return media_info
@@ -7,6 +7,11 @@ from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,Packag
from agent_manager import AgentManager
logger = logging.getLogger(__name__)
default_workflow_cfg = """
main = "./"
cache = "./.agents"
"""
class WorkflowManager:
_instance = None
@@ -17,12 +22,18 @@ class WorkflowManager:
return cls._instance
def initial(self) -> None:
async def initial(self) -> None:
self.loaded_workflow = {}
system_app_dir = AIStorage.get_instance().get_system_app_dir()
user_data_dir = AIStorage.get_instance().get_myai_dir()
self.workflow_env = PackageEnvManager().get_env(f"{system_app_dir}/workflows/workflows.cfg")
sys_workflow_env = PackageEnvManager().get_env(f"{system_app_dir}/workflows/workflows.cfg")
user_workflow_config_path = f"{user_data_dir}/workflows/workflows.cfg"
await AIStorage.get_instance().try_create_file_with_default_value(user_workflow_config_path,default_workflow_cfg)
self.workflow_env = PackageEnvManager().get_env(f"{user_data_dir}/workflows/workflows.cfg")
self.workflow_env.parent_envs.append(sys_workflow_env)
self.db_file = os.path.abspath(f"{user_data_dir}/messages.db")
if self.workflow_env is None:
raise Exception("WorkflowManager initial failed")
+2 -2
View File
@@ -85,8 +85,8 @@ class AIOS_Shell:
await cal_env.start()
Environment.set_env_by_id("calender",cal_env)
AgentManager.get_instance().initial()
WorkflowManager.get_instance().initial()
await AgentManager.get_instance().initial()
await WorkflowManager.get_instance().initial()
open_ai_node = OpenAI_ComputeNode.get_instance()
if await open_ai_node.initial() is not True: