From adeca91e0a8e55f966e58b7a7da059da6671e99a Mon Sep 17 00:00:00 2001 From: Liu Zhicong Date: Thu, 30 Nov 2023 21:04:19 -0800 Subject: [PATCH] Refactor the code directory structure to better suit the current complexity --- .../knowledge_pipelines/Mail/Issue/local.py | 2 +- .../knowledge_pipelines/Mail/Issue/parser.py | 2 +- src/aios/__init__.py | 32 ++++ src/{aios_kernel => aios/agent}/agent.py | 25 +-- src/{aios_kernel => aios/agent}/agent_base.py | 167 +----------------- .../agent}/ai_function.py | 0 src/aios/agent/behavior.py | 4 + .../agent}/chatsession.py | 2 +- src/{aios_kernel => aios/agent}/role.py | 0 src/{aios_kernel => aios/agent}/workflow.py | 16 +- .../environment}/asr_function.py | 4 +- .../environment}/code_interpreter.py | 2 +- .../environment}/code_interpreter_function.py | 4 +- .../duckduckgo_text_search_function.py | 2 +- .../environment}/environment.py | 2 +- .../environment}/image_2_text_function.py | 4 +- .../environment}/script_to_speech_function.py | 6 +- .../environment}/simple_kb_db.py | 0 .../environment}/sql_database.py | 0 .../environment}/sql_database_function.py | 4 +- .../environment}/text_to_speech_function.py | 6 +- .../environment}/workflow_env.py | 20 +-- .../environment}/workspace_env.py | 11 +- src/{aios_kernel => aios/frame}/bus.py | 5 +- .../frame}/compute_kernel.py | 8 +- .../frame}/compute_node.py | 2 +- src/{aios_kernel => aios/frame}/contact.py | 2 +- .../frame}/contact_manager.py | 6 +- .../frame}/queue_compute_node.py | 3 +- src/{aios_kernel => aios/frame}/tunnel.py | 3 +- src/{ => aios}/knowledge/__init__.py | 0 .../knowledge/core_object/__init__.py | 0 .../knowledge/core_object/document_object.py | 0 .../knowledge/core_object/email_object.py | 0 .../knowledge/core_object/image_object.py | 0 .../knowledge/core_object/rich_text_object.py | 2 +- .../knowledge/core_object/video_object.py | 0 src/{ => aios}/knowledge/data/__init__.py | 0 src/{ => aios}/knowledge/data/chunk.py | 0 src/{ => aios}/knowledge/data/chunk_list.py | 0 src/{ => aios}/knowledge/data/chunk_store.py | 0 src/{ => aios}/knowledge/data/reader.py | 0 src/{ => aios}/knowledge/data/tracker.py | 0 src/{ => aios}/knowledge/data/writer.py | 0 src/{ => aios}/knowledge/object/__init__.py | 0 src/{ => aios}/knowledge/object/blob.py | 0 src/{ => aios}/knowledge/object/hash.py | 0 src/{ => aios}/knowledge/object/object.py | 0 src/{ => aios}/knowledge/object/object_id.py | 0 .../knowledge/object/object_store.py | 0 src/{ => aios}/knowledge/object/relation.py | 0 src/{ => aios}/knowledge/pipeline.py | 0 src/{ => aios}/knowledge/store.py | 11 +- src/{ => aios}/knowledge/vector/__init__.py | 0 .../knowledge/vector/chroma_store.py | 0 .../knowledge/vector/vector_base.py | 0 .../ndn_client => aios/net}/__init__.py | 0 src/{component/ndn_client => aios/net}/cid.py | 0 .../ndn_client => aios/net}/ndn_client.py | 0 .../package_manager/README | 0 .../package_manager/__init__.py | 0 .../package_manager/env.py | 0 .../package_manager/index_db.py | 0 .../package_manager/index_syncer.py | 0 .../package_manager/installer.py | 3 +- .../package_manager/media_reader.py | 0 .../package_manager/pkg.py | 0 src/aios/proto/agent_msg.py | 167 ++++++++++++++++++ .../proto}/compute_task.py | 4 +- src/{aios_kernel => aios/storage}/storage.py | 4 +- src/aios_kernel/__init__.py | 32 ---- src/component/agent_manager/agent_manager.py | 4 +- .../email_tunnel.py | 5 +- src/component/google_node/__init__.py | 1 + .../google_text_to_speech_node.py | 4 +- src/component/knowledge_manager/pipeline.py | 2 +- src/component/llama_node/__init__.py | 1 + .../llama_node}/local_llama_compute_node.py | 28 ++- src/component/mail_environment/issue.py | 3 +- src/component/mail_environment/local.py | 3 +- src/component/mail_environment/mail.py | 2 +- src/component/mail_environment/spider.py | 3 +- src/component/openai_node/__init__.py | 3 + .../openai_node}/open_ai_node.py | 5 +- .../openai_node}/openai_tts_node.py | 2 +- .../openai_node}/whisper_node.py | 5 +- src/component/sd_node/__init__.py | 2 + .../sd_node}/local_stability_node.py | 4 +- .../sd_node}/stability_node.py | 4 +- src/component/st_node/__init__.py | 1 + .../st_node}/local_st_compute_node.py | 5 +- src/{aios_kernel => component}/tg_tunnel.py | 8 +- .../workflow_manager/workflow_manager.py | 3 +- src/node_daemon/__init__.py | 1 + src/readme.txt | 34 ++++ src/service/aios_shell/aios_shell.py | 19 +- .../aios_shell}/compute_node_config.py | 11 +- src/service/aios_shell/proxy.py | 2 +- src/service/app_manager/README | 1 - 99 files changed, 391 insertions(+), 342 deletions(-) create mode 100644 src/aios/__init__.py rename src/{aios_kernel => aios/agent}/agent.py (98%) rename src/{aios_kernel => aios/agent}/agent_base.py (80%) rename src/{aios_kernel => aios/agent}/ai_function.py (100%) create mode 100644 src/aios/agent/behavior.py rename src/{aios_kernel => aios/agent}/chatsession.py (99%) rename src/{aios_kernel => aios/agent}/role.py (100%) rename src/{aios_kernel => aios/agent}/workflow.py (98%) rename src/{aios_kernel => aios/environment}/asr_function.py (95%) rename src/{aios_kernel => aios/environment}/code_interpreter.py (99%) rename src/{aios_kernel => aios/environment}/code_interpreter_function.py (90%) rename src/{aios_kernel => aios/environment}/duckduckgo_text_search_function.py (96%) rename src/{aios_kernel => aios/environment}/environment.py (99%) rename src/{aios_kernel => aios/environment}/image_2_text_function.py (92%) rename src/{aios_kernel => aios/environment}/script_to_speech_function.py (96%) rename src/{aios_kernel => aios/environment}/simple_kb_db.py (100%) rename src/{aios_kernel => aios/environment}/sql_database.py (100%) rename src/{aios_kernel => aios/environment}/sql_database_function.py (96%) rename src/{aios_kernel => aios/environment}/text_to_speech_function.py (94%) rename src/{aios_kernel => aios/environment}/workflow_env.py (98%) rename src/{aios_kernel => aios/environment}/workspace_env.py (99%) rename src/{aios_kernel => aios/frame}/bus.py (98%) rename src/{aios_kernel => aios/frame}/compute_kernel.py (98%) rename src/{aios_kernel => aios/frame}/compute_node.py (92%) rename src/{aios_kernel => aios/frame}/contact.py (98%) rename src/{aios_kernel => aios/frame}/contact_manager.py (98%) rename src/{aios_kernel => aios/frame}/queue_compute_node.py (91%) rename src/{aios_kernel => aios/frame}/tunnel.py (98%) rename src/{ => aios}/knowledge/__init__.py (100%) rename src/{ => aios}/knowledge/core_object/__init__.py (100%) rename src/{ => aios}/knowledge/core_object/document_object.py (100%) rename src/{ => aios}/knowledge/core_object/email_object.py (100%) rename src/{ => aios}/knowledge/core_object/image_object.py (100%) rename src/{ => aios}/knowledge/core_object/rich_text_object.py (97%) rename src/{ => aios}/knowledge/core_object/video_object.py (100%) rename src/{ => aios}/knowledge/data/__init__.py (100%) rename src/{ => aios}/knowledge/data/chunk.py (100%) rename src/{ => aios}/knowledge/data/chunk_list.py (100%) rename src/{ => aios}/knowledge/data/chunk_store.py (100%) rename src/{ => aios}/knowledge/data/reader.py (100%) rename src/{ => aios}/knowledge/data/tracker.py (100%) rename src/{ => aios}/knowledge/data/writer.py (100%) rename src/{ => aios}/knowledge/object/__init__.py (100%) rename src/{ => aios}/knowledge/object/blob.py (100%) rename src/{ => aios}/knowledge/object/hash.py (100%) rename src/{ => aios}/knowledge/object/object.py (100%) rename src/{ => aios}/knowledge/object/object_id.py (100%) rename src/{ => aios}/knowledge/object/object_store.py (100%) rename src/{ => aios}/knowledge/object/relation.py (100%) rename src/{ => aios}/knowledge/pipeline.py (100%) rename src/{ => aios}/knowledge/store.py (95%) rename src/{ => aios}/knowledge/vector/__init__.py (100%) rename src/{ => aios}/knowledge/vector/chroma_store.py (100%) rename src/{ => aios}/knowledge/vector/vector_base.py (100%) rename src/{component/ndn_client => aios/net}/__init__.py (100%) rename src/{component/ndn_client => aios/net}/cid.py (100%) rename src/{component/ndn_client => aios/net}/ndn_client.py (100%) rename src/{component => aios}/package_manager/README (100%) rename src/{component => aios}/package_manager/__init__.py (100%) rename src/{component => aios}/package_manager/env.py (100%) rename src/{component => aios}/package_manager/index_db.py (100%) rename src/{component => aios}/package_manager/index_syncer.py (100%) rename src/{component => aios}/package_manager/installer.py (98%) rename src/{component => aios}/package_manager/media_reader.py (100%) rename src/{component => aios}/package_manager/pkg.py (100%) create mode 100644 src/aios/proto/agent_msg.py rename src/{aios_kernel => aios/proto}/compute_task.py (98%) rename src/{aios_kernel => aios/storage}/storage.py (98%) delete mode 100644 src/aios_kernel/__init__.py rename src/{aios_kernel => component}/email_tunnel.py (98%) create mode 100644 src/component/google_node/__init__.py rename src/{aios_kernel => component/google_node}/google_text_to_speech_node.py (97%) create mode 100644 src/component/llama_node/__init__.py rename src/{aios_kernel => component/llama_node}/local_llama_compute_node.py (92%) create mode 100644 src/component/openai_node/__init__.py rename src/{aios_kernel => component/openai_node}/open_ai_node.py (98%) rename src/{aios_kernel => component/openai_node}/openai_tts_node.py (96%) rename src/{aios_kernel => component/openai_node}/whisper_node.py (98%) create mode 100644 src/component/sd_node/__init__.py rename src/{aios_kernel => component/sd_node}/local_stability_node.py (97%) rename src/{aios_kernel => component/sd_node}/stability_node.py (97%) create mode 100644 src/component/st_node/__init__.py rename src/{aios_kernel => component/st_node}/local_st_compute_node.py (97%) rename src/{aios_kernel => component}/tg_tunnel.py (98%) create mode 100644 src/node_daemon/__init__.py create mode 100644 src/readme.txt rename src/{aios_kernel => service/aios_shell}/compute_node_config.py (92%) delete mode 100644 src/service/app_manager/README diff --git a/rootfs/knowledge_pipelines/Mail/Issue/local.py b/rootfs/knowledge_pipelines/Mail/Issue/local.py index 1edfff8..7c08bfd 100644 --- a/rootfs/knowledge_pipelines/Mail/Issue/local.py +++ b/rootfs/knowledge_pipelines/Mail/Issue/local.py @@ -1,6 +1,6 @@ import sys import os -from knowledge import KnowledgePipelineEnvironment +from aios import KnowledgePipelineEnvironment directory = os.path.dirname(__file__) sys.path.append(directory + '/../../../../src/component/') diff --git a/rootfs/knowledge_pipelines/Mail/Issue/parser.py b/rootfs/knowledge_pipelines/Mail/Issue/parser.py index a5f819b..fd0779e 100644 --- a/rootfs/knowledge_pipelines/Mail/Issue/parser.py +++ b/rootfs/knowledge_pipelines/Mail/Issue/parser.py @@ -1,6 +1,6 @@ import sys import os -from knowledge import * +from aios import * directory = os.path.dirname(__file__) sys.path.append(directory + '/../../../../src/component/') diff --git a/src/aios/__init__.py b/src/aios/__init__.py new file mode 100644 index 0000000..1a0c512 --- /dev/null +++ b/src/aios/__init__.py @@ -0,0 +1,32 @@ + +from .proto.agent_msg import * +from .proto.compute_task import * + +from .agent.agent_base import AgentPrompt,CustomAIAgent +from .agent.chatsession import AIChatSession +from .agent.agent import AIAgent,AIAgentTemplete, BaseAIAgent +from .agent.role import AIRole,AIRoleGroup +from .agent.workflow import Workflow +from .agent.ai_function import SimpleAIFunction + +from .frame.compute_kernel import ComputeKernel,ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskType +from .frame.compute_node import ComputeNode,LocalComputeNode +from .frame.bus import AIBus +from .frame.tunnel import AgentTunnel +from .frame.contact_manager import ContactManager,Contact,FamilyMember +from .frame.queue_compute_node import Queue_ComputeNode + +from .environment.environment import Environment,EnvironmentEvent +from .environment.workflow_env import WorkflowEnvironment,CalenderEnvironment,CalenderEvent,PaintEnvironment +from .environment.text_to_speech_function import TextToSpeechFunction +from .environment.image_2_text_function import Image2TextFunction +from .environment.workspace_env import ShellEnvironment,WorkspaceEnvironment + +from .storage.storage import ResourceLocation,AIStorage,UserConfig,UserConfigItem + +from .net import * +from .knowledge import * +from .package_manager import * + + +AIOS_Version = "0.5.2, build 2023-11-30" \ No newline at end of file diff --git a/src/aios_kernel/agent.py b/src/aios/agent/agent.py similarity index 98% rename from src/aios_kernel/agent.py rename to src/aios/agent/agent.py index bf03eab..ad8dcf8 100644 --- a/src/aios_kernel/agent.py +++ b/src/aios/agent/agent.py @@ -12,20 +12,21 @@ import datetime import copy import sys -from .agent_base import AgentMsg, AgentMsgStatus, AgentMsgType, FunctionItem, LLMResult, AgentPrompt, AgentReport, \ - AgentTodo, AgentTodoResult, AgentWorkLog, BaseAIAgent +from ..proto.agent_msg import AgentMsg +from ..proto.compute_task import ComputeTaskResult,ComputeTaskResultCode -from .chatsession import AIChatSession -from .compute_task import ComputeTaskResult,ComputeTaskResultCode -from .ai_function import AIFunction -from .environment import Environment -from .contact_manager import ContactManager,Contact,FamilyMember -from .compute_kernel import ComputeKernel -from .bus import AIBus -from .workspace_env import WorkspaceEnvironment -from .storage import AIStorage +from .agent_base import * +from .chatsession import * +from .ai_function import * -from knowledge import * +from ..frame.contact_manager import ContactManager,Contact,FamilyMember +from ..frame.compute_kernel import ComputeKernel +from ..frame.bus import AIBus +from ..environment.environment import * +from ..environment.workspace_env import WorkspaceEnvironment +from ..storage.storage import AIStorage + +from ..knowledge import * logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/agent_base.py b/src/aios/agent/agent_base.py similarity index 80% rename from src/aios_kernel/agent_base.py rename to src/aios/agent/agent_base.py index 452b42e..2977bc8 100644 --- a/src/aios_kernel/agent_base.py +++ b/src/aios/agent/agent_base.py @@ -12,170 +12,13 @@ import json from typing import List from .ai_function import FunctionItem, AIFunction -from .compute_task import ComputeTaskResult,ComputeTaskResultCode -from .environment import Environment +from ..proto.agent_msg import AgentMsg, AgentMsgType +from ..proto.compute_task import ComputeTaskResult,ComputeTaskResultCode +from ..environment.environment import Environment logger = logging.getLogger(__name__) -class AgentMsgType(Enum): - TYPE_MSG = 0 - TYPE_GROUPMSG = 1 - TYPE_INTERNAL_CALL = 10 - TYPE_ACTION = 20 - TYPE_EVENT = 30 - TYPE_SYSTEM = 40 - - -class AgentMsgStatus(Enum): - RESPONSED = 0 - INIT = 1 - SENDING = 2 - PROCESSING = 3 - ERROR = 4 - RECVED = 5 - EXECUTED = 6 - -# msg is a msg / msg resp -# msg body可以有内容类型(MIME标签),text, image, voice, video, file,以及富文本(html) -# msg is a inner function call with result -# msg is a Action with result - -# qutoe Msg -# forword msg -# reply msg - -# 逻辑上的同一个Message在同一个session中看到的msgid相同 -# 在不同的session中看到的msgid不同 - -class AgentMsg: - def __init__(self,msg_type=AgentMsgType.TYPE_MSG) -> None: - self.msg_id = "msg#" + uuid.uuid4().hex - self.msg_type:AgentMsgType = msg_type - - self.prev_msg_id:str = None - self.quote_msg_id:str = None - self.rely_msg_id:str = None # if not none means this is a respone msg - self.session_id:str = None - - #forword info - - - self.create_time = 0 - self.done_time = 0 - self.topic:str = None # topic is use to find session, not store in db - - self.sender:str = None # obj_id.sub_objid@tunnel_id - self.target:str = None - self.mentions:[] = None #use in group chat only - #self.title:str = None - self.body:str = None - self.body_mime:str = None #//default is "text/plain",encode is utf8 - - #type is call / action - self.func_name = None - self.args = None - self.result_str = None - - #type is event - self.event_name = None - self.event_args = None - - self.status = AgentMsgStatus.INIT - self.inner_call_chain = [] - self.resp_msg = None - - @classmethod - def from_json(cls,json_obj:dict) -> 'AgentMsg': - msg = AgentMsg() - - return msg - - @classmethod - def create_internal_call_msg(self,func_name:str,args:dict,prev_msg_id:str,caller:str): - msg = AgentMsg(AgentMsgType.TYPE_INTERNAL_CALL) - msg.create_time = time.time() - msg.func_name = func_name - msg.args = args - msg.prev_msg_id = prev_msg_id - msg.sender = caller - return msg - - def create_action_msg(self,action_name:str,args:dict,caller:str): - msg = AgentMsg(AgentMsgType.TYPE_ACTION) - msg.create_time = time.time() - msg.func_name = action_name - msg.args = args - msg.prev_msg_id = self.msg_id - msg.topic = self.topic - msg.sender = caller - return msg - - def create_error_resp(self,error_msg:str): - resp_msg = AgentMsg(AgentMsgType.TYPE_SYSTEM) - resp_msg.create_time = time.time() - - resp_msg.rely_msg_id = self.msg_id - resp_msg.body = error_msg - resp_msg.topic = self.topic - resp_msg.sender = self.target - resp_msg.target = self.sender - - return resp_msg - - def create_resp_msg(self,resp_body): - resp_msg = AgentMsg() - resp_msg.create_time = time.time() - - resp_msg.rely_msg_id = self.msg_id - resp_msg.sender = self.target - resp_msg.target = self.sender - resp_msg.body = resp_body - resp_msg.topic = self.topic - - return resp_msg - - def create_group_resp_msg(self,sender_id,resp_body): - resp_msg = AgentMsg(AgentMsgType.TYPE_GROUPMSG) - resp_msg.create_time = time.time() - - resp_msg.rely_msg_id = self.msg_id - resp_msg.target = self.target - resp_msg.sender = sender_id - resp_msg.body = resp_body - resp_msg.topic = self.topic - - return resp_msg - - def set(self,sender:str,target:str,body:str,topic:str=None) -> None: - self.sender = sender - self.target = target - self.body = body - self.create_time = time.time() - if topic: - self.topic = topic - - def get_msg_id(self) -> str: - return self.msg_id - - def get_sender(self) -> str: - return self.sender - - def get_target(self) -> str: - return self.target - - def get_prev_msg_id(self) -> str: - return self.prev_msg_id - - def get_quote_msg_id(self) -> str: - return self.quote_msg_id - - @classmethod - def parse_function_call(cls,func_string:str): - str_list = shlex.split(func_string) - func_name = str_list[0] - params = str_list[1:] - return func_name, params class AgentPrompt: def __init__(self,prompt_str = None) -> None: @@ -597,7 +440,8 @@ class BaseAIAgent(abc.ABC): inner_functions=None, is_json_resp=False, ) -> ComputeTaskResult: - from .compute_kernel import ComputeKernel + from ..frame.compute_kernel import ComputeKernel + #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} ") if inner_functions is None and env is not None: inner_functions,_ = BaseAIAgent.get_inner_functions(env) @@ -633,7 +477,6 @@ class BaseAIAgent(abc.ABC): org_msg:AgentMsg, stack_limit = 5 ) -> ComputeTaskResult: - from .compute_kernel import ComputeKernel arguments = None try: func_name = inner_func_call_node.get("name") diff --git a/src/aios_kernel/ai_function.py b/src/aios/agent/ai_function.py similarity index 100% rename from src/aios_kernel/ai_function.py rename to src/aios/agent/ai_function.py diff --git a/src/aios/agent/behavior.py b/src/aios/agent/behavior.py new file mode 100644 index 0000000..64b8834 --- /dev/null +++ b/src/aios/agent/behavior.py @@ -0,0 +1,4 @@ +# TODO: let agent develolp custmized behavior easily +class AgentBehavior: + def __init__(self) -> None: + pass \ No newline at end of file diff --git a/src/aios_kernel/chatsession.py b/src/aios/agent/chatsession.py similarity index 99% rename from src/aios_kernel/chatsession.py rename to src/aios/agent/chatsession.py index 0302e12..8500faf 100644 --- a/src/aios_kernel/chatsession.py +++ b/src/aios/agent/chatsession.py @@ -7,7 +7,7 @@ import datetime import uuid import json -from .agent_base import AgentMsgType, AgentMsg, AgentMsgStatus +from ..proto.agent_msg import AgentMsgType, AgentMsg, AgentMsgStatus class ChatSessionDB: def __init__(self, db_file): diff --git a/src/aios_kernel/role.py b/src/aios/agent/role.py similarity index 100% rename from src/aios_kernel/role.py rename to src/aios/agent/role.py diff --git a/src/aios_kernel/workflow.py b/src/aios/agent/workflow.py similarity index 98% rename from src/aios_kernel/workflow.py rename to src/aios/agent/workflow.py index a7e562d..7855483 100644 --- a/src/aios_kernel/workflow.py +++ b/src/aios/agent/workflow.py @@ -7,15 +7,19 @@ from asyncio import Queue from typing import Optional,Tuple,List from abc import ABC, abstractmethod -from .environment import Environment,EnvironmentEvent -from .agent_base import AgentMsg,AgentMsgStatus,FunctionItem,LLMResult,AgentPrompt +from ..proto.compute_task import * +from ..proto.agent_msg import * + +from .agent_base import * from .chatsession import AIChatSession from .role import AIRole,AIRoleGroup from .ai_function import AIFunction,FunctionItem -from .compute_kernel import ComputeKernel -from .compute_task import ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskResultCode -from .bus import AIBus -from .workflow_env import WorkflowEnvironment + +from ..frame.compute_kernel import ComputeKernel +from ..frame.bus import AIBus + +from ..environment.environment import Environment,EnvironmentEvent +from ..environment.workflow_env import WorkflowEnvironment logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/asr_function.py b/src/aios/environment/asr_function.py similarity index 95% rename from src/aios_kernel/asr_function.py rename to src/aios/environment/asr_function.py index 11acde1..9b97006 100644 --- a/src/aios_kernel/asr_function.py +++ b/src/aios/environment/asr_function.py @@ -1,8 +1,8 @@ import logging from typing import Dict -from aios_kernel import ComputeKernel -from aios_kernel.ai_function import AIFunction +from ..frame.compute_kernel import ComputeKernel +from ..agent.ai_function import AIFunction logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/code_interpreter.py b/src/aios/environment/code_interpreter.py similarity index 99% rename from src/aios_kernel/code_interpreter.py rename to src/aios/environment/code_interpreter.py index 850356a..68c00d8 100644 --- a/src/aios_kernel/code_interpreter.py +++ b/src/aios/environment/code_interpreter.py @@ -12,7 +12,7 @@ from hashlib import md5 from typing import Optional, Union, List, Tuple from generic_escape import GenericEscape -from aios_kernel import AIStorage +from ..storage.storage import AIStorage try: import docker diff --git a/src/aios_kernel/code_interpreter_function.py b/src/aios/environment/code_interpreter_function.py similarity index 90% rename from src/aios_kernel/code_interpreter_function.py rename to src/aios/environment/code_interpreter_function.py index 0bf366c..734af71 100644 --- a/src/aios_kernel/code_interpreter_function.py +++ b/src/aios/environment/code_interpreter_function.py @@ -1,7 +1,7 @@ from typing import Dict -from aios_kernel.ai_function import AIFunction -from aios_kernel.code_interpreter import execute_code +from ..agent.ai_function import AIFunction +from .code_interpreter import execute_code class CodeInterpreterFunction(AIFunction): diff --git a/src/aios_kernel/duckduckgo_text_search_function.py b/src/aios/environment/duckduckgo_text_search_function.py similarity index 96% rename from src/aios_kernel/duckduckgo_text_search_function.py rename to src/aios/environment/duckduckgo_text_search_function.py index 154f761..5418095 100644 --- a/src/aios_kernel/duckduckgo_text_search_function.py +++ b/src/aios/environment/duckduckgo_text_search_function.py @@ -1,7 +1,7 @@ import json from typing import Dict -from aios_kernel.ai_function import AIFunction +from ..agent.ai_function import AIFunction from duckduckgo_search import AsyncDDGS diff --git a/src/aios_kernel/environment.py b/src/aios/environment/environment.py similarity index 99% rename from src/aios_kernel/environment.py rename to src/aios/environment/environment.py index ab384cd..eafe74f 100644 --- a/src/aios_kernel/environment.py +++ b/src/aios/environment/environment.py @@ -5,7 +5,7 @@ from abc import ABC, abstractmethod from typing import Any, Callable, Optional,Dict,Awaitable,List import logging -from .ai_function import AIFunction +from ..agent.ai_function import AIFunction logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/image_2_text_function.py b/src/aios/environment/image_2_text_function.py similarity index 92% rename from src/aios_kernel/image_2_text_function.py rename to src/aios/environment/image_2_text_function.py index da84b04..8760f56 100644 --- a/src/aios_kernel/image_2_text_function.py +++ b/src/aios/environment/image_2_text_function.py @@ -1,8 +1,8 @@ import logging from typing import Dict -from aios_kernel import ComputeKernel -from aios_kernel.ai_function import AIFunction +from ..frame.compute_kernel import ComputeKernel +from ..agent.ai_function import AIFunction logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/script_to_speech_function.py b/src/aios/environment/script_to_speech_function.py similarity index 96% rename from src/aios_kernel/script_to_speech_function.py rename to src/aios/environment/script_to_speech_function.py index 7ccd116..6c71229 100644 --- a/src/aios_kernel/script_to_speech_function.py +++ b/src/aios/environment/script_to_speech_function.py @@ -5,8 +5,10 @@ import random from pathlib import Path from typing import Dict -from aios_kernel import ComputeKernel, AIStorage -from aios_kernel.ai_function import AIFunction +from ..agent.ai_function import AIFunction +from ..frame.compute_kernel import ComputeKernel +from ..storage.storage import AIStorage + from pydub import AudioSegment diff --git a/src/aios_kernel/simple_kb_db.py b/src/aios/environment/simple_kb_db.py similarity index 100% rename from src/aios_kernel/simple_kb_db.py rename to src/aios/environment/simple_kb_db.py diff --git a/src/aios_kernel/sql_database.py b/src/aios/environment/sql_database.py similarity index 100% rename from src/aios_kernel/sql_database.py rename to src/aios/environment/sql_database.py diff --git a/src/aios_kernel/sql_database_function.py b/src/aios/environment/sql_database_function.py similarity index 96% rename from src/aios_kernel/sql_database_function.py rename to src/aios/environment/sql_database_function.py index 2e208e6..989b82b 100644 --- a/src/aios_kernel/sql_database_function.py +++ b/src/aios/environment/sql_database_function.py @@ -3,8 +3,8 @@ from typing import Dict from cachetools import TLRUCache, cached -from aios_kernel.ai_function import AIFunction -from aios_kernel.sql_database import SQLDatabase, get_from_env +from ..agent.ai_function import AIFunction +from .sql_database import SQLDatabase, get_from_env def _my_ttu(_key, _value, now): diff --git a/src/aios_kernel/text_to_speech_function.py b/src/aios/environment/text_to_speech_function.py similarity index 94% rename from src/aios_kernel/text_to_speech_function.py rename to src/aios/environment/text_to_speech_function.py index 0f90ee1..e93a568 100644 --- a/src/aios_kernel/text_to_speech_function.py +++ b/src/aios/environment/text_to_speech_function.py @@ -5,8 +5,10 @@ import random from pathlib import Path from typing import Dict -from aios_kernel import ComputeKernel, AIStorage -from aios_kernel.ai_function import AIFunction +from ..agent.ai_function import AIFunction +from ..frame.compute_kernel import ComputeKernel +from ..storage.storage import AIStorage + from pydub import AudioSegment diff --git a/src/aios_kernel/workflow_env.py b/src/aios/environment/workflow_env.py similarity index 98% rename from src/aios_kernel/workflow_env.py rename to src/aios/environment/workflow_env.py index 03cd128..c5dcce6 100644 --- a/src/aios_kernel/workflow_env.py +++ b/src/aios/environment/workflow_env.py @@ -7,19 +7,19 @@ from sqlite3 import Error import threading import logging from typing import Optional - -from .script_to_speech_function import ScriptToSpeechFunction -from .image_2_text_function import Image2TextFunction -from .compute_kernel import ComputeKernel, ComputeTaskResultCode -from .environment import Environment,EnvironmentEvent -from .ai_function import SimpleAIFunction -from .storage import AIStorage -from .contact_manager import ContactManager,Contact,FamilyMember - import aiosqlite -logger = logging.getLogger(__name__) +from ..proto.compute_task import * +from ..agent.ai_function import SimpleAIFunction +from ..frame.compute_kernel import ComputeKernel +from ..frame.contact_manager import ContactManager,Contact,FamilyMember +from ..storage.storage import AIStorage +from .environment import Environment,EnvironmentEvent +from .script_to_speech_function import ScriptToSpeechFunction +from .image_2_text_function import Image2TextFunction + +logger = logging.getLogger(__name__) class CalenderEvent(EnvironmentEvent): def __init__(self,data) -> None: diff --git a/src/aios_kernel/workspace_env.py b/src/aios/environment/workspace_env.py similarity index 99% rename from src/aios_kernel/workspace_env.py rename to src/aios/environment/workspace_env.py index bde7114..d54c7b8 100644 --- a/src/aios_kernel/workspace_env.py +++ b/src/aios/environment/workspace_env.py @@ -17,14 +17,15 @@ import aiofiles from typing import Any,List import os import chardet - from markdown import Markdown import PyPDF2 -from .agent_base import AgentMsg,AgentTodo,AgentPrompt,AgentTodoResult -from .environment import Environment,EnvironmentEvent -from .ai_function import AIFunction,SimpleAIFunction -from .storage import AIStorage,ResourceLocation + +from ..proto.agent_msg import * +from ..agent.agent_base import AgentTodo,AgentPrompt,AgentTodoResult +from ..agent.ai_function import AIFunction,SimpleAIFunction +from ..storage.storage import AIStorage,ResourceLocation from .simple_kb_db import SimpleKnowledgeDB +from .environment import Environment,EnvironmentEvent logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/bus.py b/src/aios/frame/bus.py similarity index 98% rename from src/aios_kernel/bus.py rename to src/aios/frame/bus.py index 94f789e..090865c 100644 --- a/src/aios_kernel/bus.py +++ b/src/aios/frame/bus.py @@ -1,10 +1,11 @@ from typing import Coroutine,Dict,Any -from .agent_base import AgentMsg,AgentMsgStatus,AgentMsgType import asyncio from asyncio import Queue - import logging +from ..proto.agent_msg import * +from ..agent.agent_base import * + logger = logging.getLogger(__name__) class AIBusHandler: diff --git a/src/aios_kernel/compute_kernel.py b/src/aios/frame/compute_kernel.py similarity index 98% rename from src/aios_kernel/compute_kernel.py rename to src/aios/frame/compute_kernel.py index 1c6219a..229819a 100644 --- a/src/aios_kernel/compute_kernel.py +++ b/src/aios/frame/compute_kernel.py @@ -4,13 +4,12 @@ from typing import Optional import logging import asyncio import tiktoken - from asyncio import Queue -from knowledge import ObjectID -from .agent_base import AgentPrompt +from ..proto.compute_task import * +from ..knowledge import ObjectID +from ..agent.agent_base import AgentPrompt from .compute_node import ComputeNode -from .compute_task import ComputeTask, ComputeTaskState, ComputeTaskResult, ComputeTaskType,ComputeTaskResultCode logger = logging.getLogger(__name__) @@ -18,7 +17,6 @@ logger = logging.getLogger(__name__) # to suitable computing nodes, achieving a balance of speed, cost, and power consumption, # is the CORE GOAL of the entire computing task schedule system (aios_kernel). - class ComputeKernel: _instance = None @classmethod diff --git a/src/aios_kernel/compute_node.py b/src/aios/frame/compute_node.py similarity index 92% rename from src/aios_kernel/compute_node.py rename to src/aios/frame/compute_node.py index 7ce7292..6b8a43d 100644 --- a/src/aios_kernel/compute_node.py +++ b/src/aios/frame/compute_node.py @@ -1,6 +1,6 @@ from abc import ABC, abstractmethod -from .compute_task import ComputeTask, ComputeTaskType +from ..proto.compute_task import ComputeTask, ComputeTaskType class ComputeNode(ABC): def __init__(self) -> None: diff --git a/src/aios_kernel/contact.py b/src/aios/frame/contact.py similarity index 98% rename from src/aios_kernel/contact.py rename to src/aios/frame/contact.py index 361c699..f29e45c 100644 --- a/src/aios_kernel/contact.py +++ b/src/aios/frame/contact.py @@ -2,7 +2,7 @@ from typing import List import logging from datetime import datetime -from .agent_base import AgentMsg +from ..proto.agent_msg import AgentMsg from .tunnel import AgentTunnel diff --git a/src/aios_kernel/contact_manager.py b/src/aios/frame/contact_manager.py similarity index 98% rename from src/aios_kernel/contact_manager.py rename to src/aios/frame/contact_manager.py index daeced6..871cfab 100644 --- a/src/aios_kernel/contact_manager.py +++ b/src/aios/frame/contact_manager.py @@ -1,11 +1,13 @@ from typing import List import toml import time +import logging + from datetime import datetime -from .agent_base import AgentMsg +from ..proto.agent_msg import AgentMsg from .tunnel import AgentTunnel from .contact import Contact,FamilyMember -import logging + logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/queue_compute_node.py b/src/aios/frame/queue_compute_node.py similarity index 91% rename from src/aios_kernel/queue_compute_node.py rename to src/aios/frame/queue_compute_node.py index 4eb22f4..be8a48e 100644 --- a/src/aios_kernel/queue_compute_node.py +++ b/src/aios/frame/queue_compute_node.py @@ -4,8 +4,7 @@ from asyncio import Queue import logging from abc import abstractmethod -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskResultCode, ComputeTaskState, ComputeTaskType -from .compute_node import ComputeNode +from aios import ComputeTask, ComputeNode,ComputeTaskResult, ComputeTaskResultCode, ComputeTaskState, ComputeTaskType logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/tunnel.py b/src/aios/frame/tunnel.py similarity index 98% rename from src/aios_kernel/tunnel.py rename to src/aios/frame/tunnel.py index 2300c2c..0c6d79d 100644 --- a/src/aios_kernel/tunnel.py +++ b/src/aios/frame/tunnel.py @@ -1,7 +1,8 @@ from abc import ABC, abstractmethod import logging from typing import Coroutine -from .agent_base import AgentMsg + +from ..proto.agent_msg import AgentMsg from .bus import AIBus logger = logging.getLogger(__name__) diff --git a/src/knowledge/__init__.py b/src/aios/knowledge/__init__.py similarity index 100% rename from src/knowledge/__init__.py rename to src/aios/knowledge/__init__.py diff --git a/src/knowledge/core_object/__init__.py b/src/aios/knowledge/core_object/__init__.py similarity index 100% rename from src/knowledge/core_object/__init__.py rename to src/aios/knowledge/core_object/__init__.py diff --git a/src/knowledge/core_object/document_object.py b/src/aios/knowledge/core_object/document_object.py similarity index 100% rename from src/knowledge/core_object/document_object.py rename to src/aios/knowledge/core_object/document_object.py diff --git a/src/knowledge/core_object/email_object.py b/src/aios/knowledge/core_object/email_object.py similarity index 100% rename from src/knowledge/core_object/email_object.py rename to src/aios/knowledge/core_object/email_object.py diff --git a/src/knowledge/core_object/image_object.py b/src/aios/knowledge/core_object/image_object.py similarity index 100% rename from src/knowledge/core_object/image_object.py rename to src/aios/knowledge/core_object/image_object.py diff --git a/src/knowledge/core_object/rich_text_object.py b/src/aios/knowledge/core_object/rich_text_object.py similarity index 97% rename from src/knowledge/core_object/rich_text_object.py rename to src/aios/knowledge/core_object/rich_text_object.py index 7791689..8d9437e 100644 --- a/src/knowledge/core_object/rich_text_object.py +++ b/src/aios/knowledge/core_object/rich_text_object.py @@ -1,4 +1,4 @@ -from knowledge.object.object_id import ObjectType +from ..object.object_id import ObjectType from ..object import KnowledgeObject from ..data import ChunkList, ChunkListWriter from ..object import ObjectType diff --git a/src/knowledge/core_object/video_object.py b/src/aios/knowledge/core_object/video_object.py similarity index 100% rename from src/knowledge/core_object/video_object.py rename to src/aios/knowledge/core_object/video_object.py diff --git a/src/knowledge/data/__init__.py b/src/aios/knowledge/data/__init__.py similarity index 100% rename from src/knowledge/data/__init__.py rename to src/aios/knowledge/data/__init__.py diff --git a/src/knowledge/data/chunk.py b/src/aios/knowledge/data/chunk.py similarity index 100% rename from src/knowledge/data/chunk.py rename to src/aios/knowledge/data/chunk.py diff --git a/src/knowledge/data/chunk_list.py b/src/aios/knowledge/data/chunk_list.py similarity index 100% rename from src/knowledge/data/chunk_list.py rename to src/aios/knowledge/data/chunk_list.py diff --git a/src/knowledge/data/chunk_store.py b/src/aios/knowledge/data/chunk_store.py similarity index 100% rename from src/knowledge/data/chunk_store.py rename to src/aios/knowledge/data/chunk_store.py diff --git a/src/knowledge/data/reader.py b/src/aios/knowledge/data/reader.py similarity index 100% rename from src/knowledge/data/reader.py rename to src/aios/knowledge/data/reader.py diff --git a/src/knowledge/data/tracker.py b/src/aios/knowledge/data/tracker.py similarity index 100% rename from src/knowledge/data/tracker.py rename to src/aios/knowledge/data/tracker.py diff --git a/src/knowledge/data/writer.py b/src/aios/knowledge/data/writer.py similarity index 100% rename from src/knowledge/data/writer.py rename to src/aios/knowledge/data/writer.py diff --git a/src/knowledge/object/__init__.py b/src/aios/knowledge/object/__init__.py similarity index 100% rename from src/knowledge/object/__init__.py rename to src/aios/knowledge/object/__init__.py diff --git a/src/knowledge/object/blob.py b/src/aios/knowledge/object/blob.py similarity index 100% rename from src/knowledge/object/blob.py rename to src/aios/knowledge/object/blob.py diff --git a/src/knowledge/object/hash.py b/src/aios/knowledge/object/hash.py similarity index 100% rename from src/knowledge/object/hash.py rename to src/aios/knowledge/object/hash.py diff --git a/src/knowledge/object/object.py b/src/aios/knowledge/object/object.py similarity index 100% rename from src/knowledge/object/object.py rename to src/aios/knowledge/object/object.py diff --git a/src/knowledge/object/object_id.py b/src/aios/knowledge/object/object_id.py similarity index 100% rename from src/knowledge/object/object_id.py rename to src/aios/knowledge/object/object_id.py diff --git a/src/knowledge/object/object_store.py b/src/aios/knowledge/object/object_store.py similarity index 100% rename from src/knowledge/object/object_store.py rename to src/aios/knowledge/object/object_store.py diff --git a/src/knowledge/object/relation.py b/src/aios/knowledge/object/relation.py similarity index 100% rename from src/knowledge/object/relation.py rename to src/aios/knowledge/object/relation.py diff --git a/src/knowledge/pipeline.py b/src/aios/knowledge/pipeline.py similarity index 100% rename from src/knowledge/pipeline.py rename to src/aios/knowledge/pipeline.py diff --git a/src/knowledge/store.py b/src/aios/knowledge/store.py similarity index 95% rename from src/knowledge/store.py rename to src/aios/knowledge/store.py index a2ebd77..5e848d7 100644 --- a/src/knowledge/store.py +++ b/src/aios/knowledge/store.py @@ -1,13 +1,11 @@ import os +import json +import logging from .object import ObjectStore, ObjectRelationStore, ObjectID, ObjectType, KnowledgeObject from .core_object import DocumentObject, ImageObject, VideoObject, RichTextObject, EmailObject from .data import ChunkStore, ChunkTracker, ChunkListWriter, ChunkReader -import json -import logging - - - +from ..storage.storage import AIStorage # KnowledgeStore class, which aggregates ChunkStore, ChunkTracker, and ObjectStore, and is a global singleton that makes it easy to use these three built-in store examples class KnowledgeStore: @@ -17,8 +15,7 @@ class KnowledgeStore: if cls._instance is None: cls._instance = super().__new__(cls) - import aios_kernel - knowledge_dir = aios_kernel.storage.AIStorage().get_myai_dir() / "knowledge" / "objects" + knowledge_dir = AIStorage.get_instance().get_myai_dir() / "knowledge" / "objects" if not os.path.exists(knowledge_dir): os.makedirs(knowledge_dir) diff --git a/src/knowledge/vector/__init__.py b/src/aios/knowledge/vector/__init__.py similarity index 100% rename from src/knowledge/vector/__init__.py rename to src/aios/knowledge/vector/__init__.py diff --git a/src/knowledge/vector/chroma_store.py b/src/aios/knowledge/vector/chroma_store.py similarity index 100% rename from src/knowledge/vector/chroma_store.py rename to src/aios/knowledge/vector/chroma_store.py diff --git a/src/knowledge/vector/vector_base.py b/src/aios/knowledge/vector/vector_base.py similarity index 100% rename from src/knowledge/vector/vector_base.py rename to src/aios/knowledge/vector/vector_base.py diff --git a/src/component/ndn_client/__init__.py b/src/aios/net/__init__.py similarity index 100% rename from src/component/ndn_client/__init__.py rename to src/aios/net/__init__.py diff --git a/src/component/ndn_client/cid.py b/src/aios/net/cid.py similarity index 100% rename from src/component/ndn_client/cid.py rename to src/aios/net/cid.py diff --git a/src/component/ndn_client/ndn_client.py b/src/aios/net/ndn_client.py similarity index 100% rename from src/component/ndn_client/ndn_client.py rename to src/aios/net/ndn_client.py diff --git a/src/component/package_manager/README b/src/aios/package_manager/README similarity index 100% rename from src/component/package_manager/README rename to src/aios/package_manager/README diff --git a/src/component/package_manager/__init__.py b/src/aios/package_manager/__init__.py similarity index 100% rename from src/component/package_manager/__init__.py rename to src/aios/package_manager/__init__.py diff --git a/src/component/package_manager/env.py b/src/aios/package_manager/env.py similarity index 100% rename from src/component/package_manager/env.py rename to src/aios/package_manager/env.py diff --git a/src/component/package_manager/index_db.py b/src/aios/package_manager/index_db.py similarity index 100% rename from src/component/package_manager/index_db.py rename to src/aios/package_manager/index_db.py diff --git a/src/component/package_manager/index_syncer.py b/src/aios/package_manager/index_syncer.py similarity index 100% rename from src/component/package_manager/index_syncer.py rename to src/aios/package_manager/index_syncer.py diff --git a/src/component/package_manager/installer.py b/src/aios/package_manager/installer.py similarity index 98% rename from src/component/package_manager/installer.py rename to src/aios/package_manager/installer.py index 8ab8f5f..98a5f7b 100644 --- a/src/component/package_manager/installer.py +++ b/src/aios/package_manager/installer.py @@ -6,7 +6,8 @@ import aiofiles import os from typing import Tuple -from ndn_client import ContentId,NDN_Client +#from ndn_client import ContentId,NDN_Client +from ..net import ContentId,NDN_Client from .pkg import PackageInfo,PackageMediaInfo from .env import PackageEnv diff --git a/src/component/package_manager/media_reader.py b/src/aios/package_manager/media_reader.py similarity index 100% rename from src/component/package_manager/media_reader.py rename to src/aios/package_manager/media_reader.py diff --git a/src/component/package_manager/pkg.py b/src/aios/package_manager/pkg.py similarity index 100% rename from src/component/package_manager/pkg.py rename to src/aios/package_manager/pkg.py diff --git a/src/aios/proto/agent_msg.py b/src/aios/proto/agent_msg.py new file mode 100644 index 0000000..3c1e2a0 --- /dev/null +++ b/src/aios/proto/agent_msg.py @@ -0,0 +1,167 @@ +import logging +import uuid +from enum import Enum +import time + +logger = logging.getLogger(__name__) + +class AgentMsgType(Enum): + TYPE_MSG = 0 + TYPE_GROUPMSG = 1 + TYPE_INTERNAL_CALL = 10 + TYPE_ACTION = 20 + TYPE_EVENT = 30 + TYPE_SYSTEM = 40 + + +class AgentMsgStatus(Enum): + RESPONSED = 0 + INIT = 1 + SENDING = 2 + PROCESSING = 3 + ERROR = 4 + RECVED = 5 + EXECUTED = 6 + +# msg is a msg / msg resp +# msg body可以有内容类型(MIME标签),text, image, voice, video, file,以及富文本(html) +# msg is a inner function call with result +# msg is a Action with result + +# qutoe Msg +# forword msg +# reply msg + +# 逻辑上的同一个Message在同一个session中看到的msgid相同 +# 在不同的session中看到的msgid不同 + + + +class AgentMsg: + def __init__(self,msg_type=AgentMsgType.TYPE_MSG) -> None: + self.msg_id = "msg#" + uuid.uuid4().hex + self.msg_type:AgentMsgType = msg_type + + self.prev_msg_id:str = None + self.quote_msg_id:str = None + self.rely_msg_id:str = None # if not none means this is a respone msg + self.session_id:str = None + + #forword info + + + self.create_time = 0 + self.done_time = 0 + self.topic:str = None # topic is use to find session, not store in db + + self.sender:str = None # obj_id.sub_objid@tunnel_id + self.target:str = None + self.mentions:[] = None #use in group chat only + #self.title:str = None + self.body:str = None + self.body_mime:str = None #//default is "text/plain",encode is utf8 + + #type is call / action + self.func_name = None + self.args = None + self.result_str = None + + #type is event + self.event_name = None + self.event_args = None + + self.status = AgentMsgStatus.INIT + self.inner_call_chain = [] + self.resp_msg = None + + @classmethod + def from_json(cls,json_obj:dict) -> 'AgentMsg': + msg = AgentMsg() + + return msg + + @classmethod + def create_internal_call_msg(self,func_name:str,args:dict,prev_msg_id:str,caller:str): + msg = AgentMsg(AgentMsgType.TYPE_INTERNAL_CALL) + msg.create_time = time.time() + msg.func_name = func_name + msg.args = args + msg.prev_msg_id = prev_msg_id + msg.sender = caller + return msg + + def create_action_msg(self,action_name:str,args:dict,caller:str): + msg = AgentMsg(AgentMsgType.TYPE_ACTION) + msg.create_time = time.time() + msg.func_name = action_name + msg.args = args + msg.prev_msg_id = self.msg_id + msg.topic = self.topic + msg.sender = caller + return msg + + def create_error_resp(self,error_msg:str): + resp_msg = AgentMsg(AgentMsgType.TYPE_SYSTEM) + resp_msg.create_time = time.time() + + resp_msg.rely_msg_id = self.msg_id + resp_msg.body = error_msg + resp_msg.topic = self.topic + resp_msg.sender = self.target + resp_msg.target = self.sender + + return resp_msg + + def create_resp_msg(self,resp_body): + resp_msg = AgentMsg() + resp_msg.create_time = time.time() + + resp_msg.rely_msg_id = self.msg_id + resp_msg.sender = self.target + resp_msg.target = self.sender + resp_msg.body = resp_body + resp_msg.topic = self.topic + + return resp_msg + + def create_group_resp_msg(self,sender_id,resp_body): + resp_msg = AgentMsg(AgentMsgType.TYPE_GROUPMSG) + resp_msg.create_time = time.time() + + resp_msg.rely_msg_id = self.msg_id + resp_msg.target = self.target + resp_msg.sender = sender_id + resp_msg.body = resp_body + resp_msg.topic = self.topic + + return resp_msg + + def set(self,sender:str,target:str,body:str,topic:str=None) -> None: + self.sender = sender + self.target = target + self.body = body + self.create_time = time.time() + if topic: + self.topic = topic + + def get_msg_id(self) -> str: + return self.msg_id + + def get_sender(self) -> str: + return self.sender + + def get_target(self) -> str: + return self.target + + def get_prev_msg_id(self) -> str: + return self.prev_msg_id + + def get_quote_msg_id(self) -> str: + return self.quote_msg_id + + @classmethod + def parse_function_call(cls,func_string:str): + str_list = shlex.split(func_string) + func_name = str_list[0] + params = str_list[1:] + return func_name, params \ No newline at end of file diff --git a/src/aios_kernel/compute_task.py b/src/aios/proto/compute_task.py similarity index 98% rename from src/aios_kernel/compute_task.py rename to src/aios/proto/compute_task.py index 3728cdf..c226b51 100644 --- a/src/aios_kernel/compute_task.py +++ b/src/aios/proto/compute_task.py @@ -3,8 +3,8 @@ from enum import Enum import uuid import time from typing import Union -from knowledge import ObjectID -from .storage import AIStorage +from ..knowledge import ObjectID +from ..storage.storage import AIStorage class ComputeTaskResultCode(Enum): OK = 0 diff --git a/src/aios_kernel/storage.py b/src/aios/storage/storage.py similarity index 98% rename from src/aios_kernel/storage.py rename to src/aios/storage/storage.py index ca3bb56..fe0b3fd 100644 --- a/src/aios_kernel/storage.py +++ b/src/aios/storage/storage.py @@ -195,7 +195,7 @@ class AIStorage: /opt/aios """ if self.is_dev_mode: - return os.path.abspath(_file_dir + "/../") + return os.path.abspath(_file_dir + "/../../") else: return "/opt/aios/" @@ -206,7 +206,7 @@ class AIStorage: /opt/aios/app """ if self.is_dev_mode: - return os.path.abspath(_file_dir + "/../../rootfs/") + return os.path.abspath(_file_dir + "/../../../rootfs/") else: return "/opt/aios/app/" diff --git a/src/aios_kernel/__init__.py b/src/aios_kernel/__init__.py deleted file mode 100644 index 1ea0d7c..0000000 --- a/src/aios_kernel/__init__.py +++ /dev/null @@ -1,32 +0,0 @@ -from .environment import Environment,EnvironmentEvent -from .agent_base import AgentMsg,AgentMsgStatus,AgentMsgType,AgentPrompt,CustomAIAgent -from .chatsession import AIChatSession -from .agent import AIAgent,AIAgentTemplete, BaseAIAgent -from .compute_kernel import ComputeKernel,ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskType -from .compute_node import ComputeNode,LocalComputeNode -from .open_ai_node import OpenAI_ComputeNode -from .role import AIRole,AIRoleGroup -from .storage import ResourceLocation,AIStorage,UserConfig,UserConfigItem -from .workflow import Workflow -from .bus import AIBus -from .workflow_env import WorkflowEnvironment,CalenderEnvironment,CalenderEvent,PaintEnvironment -from .local_llama_compute_node import LocalLlama_ComputeNode -from .whisper_node import WhisperComputeNode -from .google_text_to_speech_node import GoogleTextToSpeechNode -from .tunnel import AgentTunnel -from .tg_tunnel import TelegramTunnel -from .email_tunnel import EmailTunnel -from .contact_manager import ContactManager,Contact,FamilyMember -from .text_to_speech_function import TextToSpeechFunction -from .image_2_text_function import Image2TextFunction -from .workspace_env import ShellEnvironment -from .local_stability_node import Local_Stability_ComputeNode -from .stability_node import Stability_ComputeNode -from .local_st_compute_node import LocalSentenceTransformer_Text_ComputeNode,LocalSentenceTransformer_Image_ComputeNode -from .compute_node_config import ComputeNodeConfig -from .ai_function import SimpleAIFunction -from .workspace_env import WorkspaceEnvironment -from .openai_tts_node import OpenAITTSComputeNode - -AIOS_Version = "0.5.2, build 2023-11-29" - diff --git a/src/component/agent_manager/agent_manager.py b/src/component/agent_manager/agent_manager.py index 8f39f71..aeff7b4 100644 --- a/src/component/agent_manager/agent_manager.py +++ b/src/component/agent_manager/agent_manager.py @@ -6,9 +6,7 @@ import sys import runpy from typing import Any, Callable, Dict, List, Optional, Union -from aios_kernel import AIAgent,AIAgentTemplete,AIStorage,Environment -from aios_kernel.agent_base import BaseAIAgent -from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,PackageInstallTask +from aios import AIAgent,AIAgentTemplete,AIStorage,Environment,BaseAIAgent,PackageEnv,PackageEnvManager,PackageMediaInfo,PackageInstallTask logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/email_tunnel.py b/src/component/email_tunnel.py similarity index 98% rename from src/aios_kernel/email_tunnel.py rename to src/component/email_tunnel.py index c0be9d2..c5e906a 100644 --- a/src/aios_kernel/email_tunnel.py +++ b/src/component/email_tunnel.py @@ -7,9 +7,8 @@ import mailparser import logging import time import datetime -from .tunnel import AgentTunnel -from .agent_base import AgentMsg -from .contact_manager import ContactManager + +from aios import AgentTunnel,AgentMsg,ContactManager from email.message import EmailMessage diff --git a/src/component/google_node/__init__.py b/src/component/google_node/__init__.py new file mode 100644 index 0000000..22ac89b --- /dev/null +++ b/src/component/google_node/__init__.py @@ -0,0 +1 @@ +from .google_text_to_speech_node import * \ No newline at end of file diff --git a/src/aios_kernel/google_text_to_speech_node.py b/src/component/google_node/google_text_to_speech_node.py similarity index 97% rename from src/aios_kernel/google_text_to_speech_node.py rename to src/component/google_node/google_text_to_speech_node.py index ccf9034..ecdb874 100644 --- a/src/aios_kernel/google_text_to_speech_node.py +++ b/src/component/google_node/google_text_to_speech_node.py @@ -7,9 +7,7 @@ from typing import Optional from google.cloud import texttospeech -from .storage import AIStorage -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType -from .compute_node import ComputeNode +from aios import AIStorage,ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType,ComputeNode logger = logging.getLogger(__name__) diff --git a/src/component/knowledge_manager/pipeline.py b/src/component/knowledge_manager/pipeline.py index efe0936..31b105d 100644 --- a/src/component/knowledge_manager/pipeline.py +++ b/src/component/knowledge_manager/pipeline.py @@ -2,7 +2,7 @@ import os import runpy import toml import asyncio -from knowledge import KnowledgePipelineEnvironment, KnowledgePipeline +from aios import KnowledgePipelineEnvironment, KnowledgePipeline class KnowledgePipelineManager: diff --git a/src/component/llama_node/__init__.py b/src/component/llama_node/__init__.py new file mode 100644 index 0000000..e6623f9 --- /dev/null +++ b/src/component/llama_node/__init__.py @@ -0,0 +1 @@ +from .local_llama_compute_node import LocalLlama_ComputeNode \ No newline at end of file diff --git a/src/aios_kernel/local_llama_compute_node.py b/src/component/llama_node/local_llama_compute_node.py similarity index 92% rename from src/aios_kernel/local_llama_compute_node.py rename to src/component/llama_node/local_llama_compute_node.py index 3b1fcb8..0a22369 100644 --- a/src/aios_kernel/local_llama_compute_node.py +++ b/src/component/llama_node/local_llama_compute_node.py @@ -5,9 +5,7 @@ import requests from typing import Optional, List from pydantic import BaseModel -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskResultCode, ComputeTaskState, ComputeTaskType -from .queue_compute_node import Queue_ComputeNode -from .storage import AIStorage,UserConfig +from aios import ComputeTask,Queue_ComputeNode, ComputeTaskResult, ComputeTaskResultCode, ComputeTaskState, ComputeTaskType,AIStorage,UserConfig logger = logging.getLogger(__name__) @@ -121,18 +119,18 @@ class LocalLlama_ComputeNode(Queue_ComputeNode): "tool_choices": [], "max_tokens": 4000 } - - for fun in llm_inner_functions: - body["tools"].append({ - "type": "function", - "function": fun, - }) - body["tool_choices"].append({ - "type": "function", - "function": { - "name": fun["name"] - } - }) + if llm_inner_functions is not None: + for fun in llm_inner_functions: + body["tools"].append({ + "type": "function", + "function": fun, + }) + body["tool_choices"].append({ + "type": "function", + "function": { + "name": fun["name"] + } + }) for prompt in prompts: body["messages"].append({ diff --git a/src/component/mail_environment/issue.py b/src/component/mail_environment/issue.py index 246171e..0c55e7e 100644 --- a/src/component/mail_environment/issue.py +++ b/src/component/mail_environment/issue.py @@ -1,8 +1,7 @@ # define a knowledge base class import json import string -from aios_kernel import AIStorage, Environment, SimpleAIFunction, CustomAIAgent, AgentPrompt, AgentMsg -from knowledge import * +from aios import * from .mail import MailStorage, Mail class IssueState(Enum): diff --git a/src/component/mail_environment/local.py b/src/component/mail_environment/local.py index 6ddbfba..21f3a94 100644 --- a/src/component/mail_environment/local.py +++ b/src/component/mail_environment/local.py @@ -2,8 +2,7 @@ import os import logging import json import string -from knowledge import * -from aios_kernel.storage import AIStorage +from aios import * from .mail import Mail, MailStorage diff --git a/src/component/mail_environment/mail.py b/src/component/mail_environment/mail.py index 9f76c0b..ad9ba2e 100644 --- a/src/component/mail_environment/mail.py +++ b/src/component/mail_environment/mail.py @@ -7,7 +7,7 @@ import datetime from bs4 import BeautifulSoup import sqlite3 import html2text -from knowledge import * +from aios import * class Mail: def __init__(self, **kwargs) -> None: diff --git a/src/component/mail_environment/spider.py b/src/component/mail_environment/spider.py index 2502468..cc6586b 100644 --- a/src/component/mail_environment/spider.py +++ b/src/component/mail_environment/spider.py @@ -3,8 +3,7 @@ import logging import json import imaplib import mailparser -from knowledge import * -from aios_kernel.storage import AIStorage +from aios import * class EmailSpider: diff --git a/src/component/openai_node/__init__.py b/src/component/openai_node/__init__.py new file mode 100644 index 0000000..6453fbf --- /dev/null +++ b/src/component/openai_node/__init__.py @@ -0,0 +1,3 @@ +from .open_ai_node import * +from .openai_tts_node import * +from .whisper_node import * \ No newline at end of file diff --git a/src/aios_kernel/open_ai_node.py b/src/component/openai_node/open_ai_node.py similarity index 98% rename from src/aios_kernel/open_ai_node.py rename to src/component/openai_node/open_ai_node.py index cbe1885..1e595fd 100644 --- a/src/aios_kernel/open_ai_node.py +++ b/src/component/openai_node/open_ai_node.py @@ -9,10 +9,7 @@ import aiohttp import base64 import requests -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType,ComputeTaskResultCode -from .compute_node import ComputeNode -from .storage import AIStorage,UserConfig - +from aios import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType,ComputeTaskResultCode,ComputeNode,AIStorage,UserConfig logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/openai_tts_node.py b/src/component/openai_node/openai_tts_node.py similarity index 96% rename from src/aios_kernel/openai_tts_node.py rename to src/component/openai_node/openai_tts_node.py index 36c80e2..f71ee41 100644 --- a/src/aios_kernel/openai_tts_node.py +++ b/src/component/openai_node/openai_tts_node.py @@ -4,7 +4,7 @@ import logging import os from asyncio import Queue -from aios_kernel import ComputeNode, ComputeTask, ComputeTaskState, ComputeTaskResult, ComputeTaskType, AIStorage +from aios import ComputeNode, ComputeTask, ComputeTaskState, ComputeTaskResult, ComputeTaskType, AIStorage logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/whisper_node.py b/src/component/openai_node/whisper_node.py similarity index 98% rename from src/aios_kernel/whisper_node.py rename to src/component/openai_node/whisper_node.py index f9dcee5..9b9cd37 100644 --- a/src/aios_kernel/whisper_node.py +++ b/src/component/openai_node/whisper_node.py @@ -13,9 +13,7 @@ from openai.cli._progress import BufferReader from pydub import AudioSegment from datetime import timedelta -from . import AIStorage -from .compute_node import ComputeNode -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType +from aios import AIStorage,ComputeNode,ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType logger = logging.getLogger(__name__) @@ -24,7 +22,6 @@ SECONDS_IN_MINUTE = 60 HOURS_IN_DAY = 24 MICROSECONDS_IN_MILLISECOND = 1000 - def timedelta_to_vtt_timestamp(timedelta_timestamp): hrs, secs_remainder = divmod(timedelta_timestamp.seconds, SECONDS_IN_HOUR) hrs += timedelta_timestamp.days * HOURS_IN_DAY diff --git a/src/component/sd_node/__init__.py b/src/component/sd_node/__init__.py new file mode 100644 index 0000000..bd6d2b8 --- /dev/null +++ b/src/component/sd_node/__init__.py @@ -0,0 +1,2 @@ +from .local_stability_node import * +from .stability_node import * \ No newline at end of file diff --git a/src/aios_kernel/local_stability_node.py b/src/component/sd_node/local_stability_node.py similarity index 97% rename from src/aios_kernel/local_stability_node.py rename to src/component/sd_node/local_stability_node.py index d0d7f9d..6341590 100644 --- a/src/aios_kernel/local_stability_node.py +++ b/src/component/sd_node/local_stability_node.py @@ -9,9 +9,7 @@ import requests from typing import Tuple from pathlib import Path -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType, ComputeTaskResultCode -from .compute_node import ComputeNode -from .storage import AIStorage, UserConfig +from aios import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType,ComputeTaskResultCode,ComputeNode,AIStorage,UserConfig logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/stability_node.py b/src/component/sd_node/stability_node.py similarity index 97% rename from src/aios_kernel/stability_node.py rename to src/component/sd_node/stability_node.py index 2ea1f44..8c8cc9f 100644 --- a/src/aios_kernel/stability_node.py +++ b/src/component/sd_node/stability_node.py @@ -9,9 +9,7 @@ from PIL import Image from stability_sdk import client import stability_sdk.interfaces.gooseai.generation.generation_pb2 as generation -from .compute_task import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType, ComputeTaskResultCode -from .compute_node import ComputeNode -from .storage import AIStorage, UserConfig +from aios import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType,ComputeTaskResultCode,ComputeNode,AIStorage,UserConfig logger = logging.getLogger(__name__) diff --git a/src/component/st_node/__init__.py b/src/component/st_node/__init__.py new file mode 100644 index 0000000..a1fd2e0 --- /dev/null +++ b/src/component/st_node/__init__.py @@ -0,0 +1 @@ +from .local_st_compute_node import * \ No newline at end of file diff --git a/src/aios_kernel/local_st_compute_node.py b/src/component/st_node/local_st_compute_node.py similarity index 97% rename from src/aios_kernel/local_st_compute_node.py rename to src/component/st_node/local_st_compute_node.py index 4142d5a..659d123 100644 --- a/src/aios_kernel/local_st_compute_node.py +++ b/src/component/st_node/local_st_compute_node.py @@ -5,9 +5,8 @@ from pydantic import BaseModel from typing import Union from PIL import Image import io -from .compute_task import ComputeTask, ComputeTaskState, ComputeTaskType,ComputeTaskResult,ComputeTaskResultCode -from .queue_compute_node import Queue_ComputeNode -from knowledge import ObjectID + +from aios import ComputeTask, ComputeTaskResult, ComputeTaskState, ComputeTaskType,ComputeTaskResultCode,ComputeNode,AIStorage,UserConfig,ObjectID,Queue_ComputeNode logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/tg_tunnel.py b/src/component/tg_tunnel.py similarity index 98% rename from src/aios_kernel/tg_tunnel.py rename to src/component/tg_tunnel.py index eefc5fe..c0941ba 100644 --- a/src/aios_kernel/tg_tunnel.py +++ b/src/component/tg_tunnel.py @@ -10,13 +10,7 @@ from telegram import Bot from telegram.ext import Updater from telegram.error import Forbidden, NetworkError -from knowledge import ObjectType, KnowledgeStore - -from .tunnel import AgentTunnel -from .storage import AIStorage -from .contact_manager import ContactManager,Contact,FamilyMember -from .agent_base import AgentMsg,AgentMsgType - +from aios import ObjectType, KnowledgeStore,AgentTunnel,AIStorage,ContactManager,Contact,FamilyMember,AgentMsg,AgentMsgType logger = logging.getLogger(__name__) diff --git a/src/component/workflow_manager/workflow_manager.py b/src/component/workflow_manager/workflow_manager.py index 28bd523..923aa81 100644 --- a/src/component/workflow_manager/workflow_manager.py +++ b/src/component/workflow_manager/workflow_manager.py @@ -2,8 +2,7 @@ import logging import toml import os -from aios_kernel import Workflow,AIStorage -from package_manager import PackageEnv,PackageEnvManager,PackageMediaInfo,PackageInstallTask +from aios import Workflow,AIStorage,PackageEnv,PackageEnvManager,PackageMediaInfo,PackageInstallTask from agent_manager import AgentManager logger = logging.getLogger(__name__) diff --git a/src/node_daemon/__init__.py b/src/node_daemon/__init__.py new file mode 100644 index 0000000..66f65c6 --- /dev/null +++ b/src/node_daemon/__init__.py @@ -0,0 +1 @@ +# might implement by Rust in the future \ No newline at end of file diff --git a/src/readme.txt b/src/readme.txt new file mode 100644 index 0000000..a9a6729 --- /dev/null +++ b/src/readme.txt @@ -0,0 +1,34 @@ +#目录说明 +## aios +系统的主要内核部分 +### agent +智能体相关目录(包括agent和workflow),也是aios的关键抽象 + +### frame +aios的核心框架 + +### proto +非系统内部的,承诺长期兼容的协议定义 + +### enviroment +enviroment定义 +其它内置的基础环境实现,包含其它非LLM AI能力的function + +### knowledge +知识库相关实现 + +### storage +传统的存储组件 + +### net +基础网络库(主要是NDN,NON网络)的基础组件 + +## node_daemon +运行在host_os上,通过传统os概念控制aios的各个基础组件的启动。可以看成是aios的bios +aios是一个network os, 因此这个组件里还包含了最为基础的仓库实现,以支持各个组件的在线发布\安装\更新 + + +## component +可以按需加载的build-in组件 +## service +内置的service \ No newline at end of file diff --git a/src/service/aios_shell/aios_shell.py b/src/service/aios_shell/aios_shell.py index 12d79e9..59220de 100644 --- a/src/service/aios_shell/aios_shell.py +++ b/src/service/aios_shell/aios_shell.py @@ -11,7 +11,6 @@ from logging.handlers import RotatingFileHandler from typing import Any, Optional, TypeVar, Tuple, Sequence import argparse - from prompt_toolkit import HTML, PromptSession, prompt,print_formatted_text from prompt_toolkit.formatted_text import FormattedText from prompt_toolkit.selection import SelectionState @@ -20,8 +19,6 @@ from prompt_toolkit.auto_suggest import AutoSuggestFromHistory from prompt_toolkit.completion import WordCompleter from prompt_toolkit.styles import Style - - directory = os.path.dirname(__file__) sys.path.append(directory + '/../../') @@ -30,15 +27,23 @@ sys.path.append(directory + '/../../') # os.environ['HTTPS_PROXY'] = '127.0.0.1:10809' import proxy -from aios_kernel import * -from knowledge import * - - +from aios import * sys.path.append(directory + '/../../component/') + +from google_node import * +from llama_node import * +from openai_node import * +from sd_node import * +from st_node import * + from agent_manager import AgentManager from workflow_manager import WorkflowManager from knowledge_manager import KnowledgePipelineManager +from tg_tunnel import TelegramTunnel +from email_tunnel import EmailTunnel + +from compute_node_config import * logger = logging.getLogger(__name__) diff --git a/src/aios_kernel/compute_node_config.py b/src/service/aios_shell/compute_node_config.py similarity index 92% rename from src/aios_kernel/compute_node_config.py rename to src/service/aios_shell/compute_node_config.py index c3b2c96..6528d74 100644 --- a/src/aios_kernel/compute_node_config.py +++ b/src/service/aios_shell/compute_node_config.py @@ -1,4 +1,5 @@ """ +compute node config Configuration for nodes: ``` @@ -14,12 +15,18 @@ Configuration for nodes: """ import logging from typing import List +import sys import os import toml -from .local_llama_compute_node import LocalLlama_ComputeNode -from .storage import AIStorage + +from aios import AIStorage +directory = os.path.dirname(__file__) +sys.path.append(directory + '/../../component/') + +from llama_node import LocalLlama_ComputeNode + # define singleton class knowledge pipline class ComputeNodeConfig: diff --git a/src/service/aios_shell/proxy.py b/src/service/aios_shell/proxy.py index 2ed8a82..208c1a6 100644 --- a/src/service/aios_shell/proxy.py +++ b/src/service/aios_shell/proxy.py @@ -9,7 +9,7 @@ import logging directory = os.path.dirname(__file__) sys.path.append(directory + '/../../') -from aios_kernel import AIStorage +from aios import AIStorage logger = logging.getLogger(__name__) diff --git a/src/service/app_manager/README b/src/service/app_manager/README deleted file mode 100644 index 30404ce..0000000 --- a/src/service/app_manager/README +++ /dev/null @@ -1 +0,0 @@ -TODO \ No newline at end of file