Add feature: Users can load their own downloaded agents or workflows from the myai directory.
This commit is contained in:
@@ -1,6 +0,0 @@
|
|||||||
instance_id = "agent_1"
|
|
||||||
fullname = "tracy wang"
|
|
||||||
|
|
||||||
[[prompt]]
|
|
||||||
role = "system"
|
|
||||||
content = "你是我的私人英文老师,和我用地道的美式英语进行交流。你会在和我交流的同时,调整我的输入成为更地道的美式句子,并根据你对我英文水平的预测,对可能发错英的单词标上音标。如果我给你发中文,说明我不知道这句话用美式英语怎么说,你依旧按上述规则回应我。"
|
|
||||||
@@ -317,7 +317,7 @@ class AIAgent:
|
|||||||
prompt.append(msg_prompt)
|
prompt.append(msg_prompt)
|
||||||
|
|
||||||
self._format_msg_by_env_value(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)
|
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
|
final_result = task_result.result_str
|
||||||
|
|
||||||
|
|||||||
@@ -63,6 +63,7 @@ class UserConfig:
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.warn(f"load user config from {file_path} failed!")
|
logger.warn(f"load user config from {file_path} failed!")
|
||||||
|
|
||||||
|
|
||||||
async def save_to_user_config(self) -> None:
|
async def save_to_user_config(self) -> None:
|
||||||
will_save_config = {}
|
will_save_config = {}
|
||||||
for key,value in self.config_table.items():
|
for key,value in self.config_table.items():
|
||||||
@@ -184,3 +185,18 @@ class AIStorage:
|
|||||||
def put_named_object(self,name:str,obj:Any) -> None:
|
def put_named_object(self,name:str,obj:Any) -> None:
|
||||||
pass
|
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)}")
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,10 @@ from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,Packag
|
|||||||
|
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
default_agent_cfg = """
|
||||||
|
main = "./"
|
||||||
|
cache = "./.agents"
|
||||||
|
"""
|
||||||
|
|
||||||
class AgentManager:
|
class AgentManager:
|
||||||
_instance = None
|
_instance = None
|
||||||
@@ -24,12 +28,17 @@ class AgentManager:
|
|||||||
self.db_path : str = None
|
self.db_path : str = None
|
||||||
self.loaded_agent_instance : Dict[str,AIAgent] = 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()
|
system_app_dir = AIStorage.get_instance().get_system_app_dir()
|
||||||
user_data_dir = AIStorage.get_instance().get_myai_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_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.db_path = f"{user_data_dir}/messages.db"
|
||||||
self.loaded_agent_instance = {}
|
self.loaded_agent_instance = {}
|
||||||
if self.agent_templete_env is None:
|
if self.agent_templete_env is None:
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ class PackageEnv:
|
|||||||
|
|
||||||
self.locked_index : str = "./pkg.lock"
|
self.locked_index : str = "./pkg.lock"
|
||||||
self.is_strict : bool = True
|
self.is_strict : bool = True
|
||||||
self.parent_envs : list[PackageEnv] = None
|
self.parent_envs : list[PackageEnv] = []
|
||||||
self.index_dbs = None
|
self.index_dbs = None
|
||||||
|
|
||||||
self.env_dir = None
|
self.env_dir = None
|
||||||
@@ -56,7 +56,7 @@ class PackageEnv:
|
|||||||
if media_info is None:
|
if media_info is None:
|
||||||
if search_parent is True and self.parent_envs is not None:
|
if search_parent is True and self.parent_envs is not None:
|
||||||
for parent_env in self.parent_envs:
|
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:
|
if media_info is not None:
|
||||||
return media_info
|
return media_info
|
||||||
|
|
||||||
|
|||||||
@@ -7,6 +7,11 @@ from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,Packag
|
|||||||
from agent_manager import AgentManager
|
from agent_manager import AgentManager
|
||||||
logger = logging.getLogger(__name__)
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
default_workflow_cfg = """
|
||||||
|
main = "./"
|
||||||
|
cache = "./.agents"
|
||||||
|
"""
|
||||||
|
|
||||||
class WorkflowManager:
|
class WorkflowManager:
|
||||||
_instance = None
|
_instance = None
|
||||||
|
|
||||||
@@ -17,12 +22,18 @@ class WorkflowManager:
|
|||||||
return cls._instance
|
return cls._instance
|
||||||
|
|
||||||
|
|
||||||
def initial(self) -> None:
|
async def initial(self) -> None:
|
||||||
self.loaded_workflow = {}
|
self.loaded_workflow = {}
|
||||||
system_app_dir = AIStorage.get_instance().get_system_app_dir()
|
system_app_dir = AIStorage.get_instance().get_system_app_dir()
|
||||||
user_data_dir = AIStorage.get_instance().get_myai_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")
|
self.db_file = os.path.abspath(f"{user_data_dir}/messages.db")
|
||||||
if self.workflow_env is None:
|
if self.workflow_env is None:
|
||||||
raise Exception("WorkflowManager initial failed")
|
raise Exception("WorkflowManager initial failed")
|
||||||
|
|||||||
@@ -85,8 +85,8 @@ class AIOS_Shell:
|
|||||||
await cal_env.start()
|
await cal_env.start()
|
||||||
Environment.set_env_by_id("calender",cal_env)
|
Environment.set_env_by_id("calender",cal_env)
|
||||||
|
|
||||||
AgentManager.get_instance().initial()
|
await AgentManager.get_instance().initial()
|
||||||
WorkflowManager.get_instance().initial()
|
await WorkflowManager.get_instance().initial()
|
||||||
|
|
||||||
open_ai_node = OpenAI_ComputeNode.get_instance()
|
open_ai_node = OpenAI_ComputeNode.get_instance()
|
||||||
if await open_ai_node.initial() is not True:
|
if await open_ai_node.initial() is not True:
|
||||||
|
|||||||
Reference in New Issue
Block a user