fix bugs~

This commit is contained in:
Liu Zhicong
2023-09-26 18:46:26 -07:00
parent 6d63c3ed53
commit 857a7ed956
10 changed files with 183 additions and 178 deletions
+3 -3
View File
@@ -1,8 +1,8 @@
from .environment import Environment,EnvironmentEvent
from .agent_message import AgentMsg,AgentMsgStatus
from .agent_message import AgentMsg,AgentMsgStatus,AgentMsgType
from .chatsession import AIChatSession
from .agent import AIAgent,AIAgentTemplete,AgentPrompt
from .compute_kernel import ComputeKernel,ComputeTask
from .compute_kernel import ComputeKernel,ComputeTask,ComputeTaskResult,ComputeTaskState,ComputeTaskType
from .compute_node import ComputeNode,LocalComputeNode
from .open_ai_node import OpenAI_ComputeNode
from .knowledge_base import KnowledgeBase
@@ -24,5 +24,5 @@ from .workspace_env import WorkspaceEnvironment
from .local_stability_node import Local_Stability_ComputeNode
from .stability_node import Stability_ComputeNode
AIOS_Version = "0.5.1, build 2023-9-17"
AIOS_Version = "0.5.1, build 2023-9-26"
+1
View File
@@ -11,6 +11,7 @@ class AgentMsgType(Enum):
TYPE_INTERNAL_CALL = 1
TYPE_ACTION = 2
TYPE_EVENT = 3
TYPE_SYSTEM = 4
class AgentMsgStatus(Enum):
RESPONSED = 0
+1 -1
View File
@@ -78,7 +78,7 @@ class AIBus:
retry_times = 0
while True:
resp = sender_handler.results.get(msg.msg_id)
resp : AgentMsg = sender_handler.results.get(msg.msg_id)
if resp is not None:
msg.resp_msg = resp
msg.status = AgentMsgStatus.RESPONSED
+19 -58
View File
@@ -7,7 +7,7 @@ from asyncio import Queue
from .agent import AgentPrompt
from .compute_node import ComputeNode
from .compute_task import ComputeTask, ComputeTaskState, ComputeTaskResult, ComputeTaskType
from .compute_task import ComputeTask, ComputeTaskState, ComputeTaskResult, ComputeTaskType,ComputeTaskResultCode
logger = logging.getLogger(__name__)
@@ -105,10 +105,8 @@ class ComputeKernel:
task_req.set_llm_params(prompt, mode_name, max_token,inner_functions)
self.run(task_req)
return task_req
async def do_llm_completion(self, prompt: AgentPrompt, mode_name: Optional[str] = None, max_token: int = 0, inner_functions = None) -> str:
task_req = self.llm_completion(prompt, mode_name, max_token,inner_functions)
async def _send_task(self,task_req:ComputeTask)->ComputeTaskResult:
async def check_timer():
check_times = 0
while True:
@@ -126,10 +124,18 @@ class ComputeKernel:
check_times += 1
await asyncio.create_task(check_timer())
if task_req.state == ComputeTaskState.DONE:
if task_req.result:
return task_req.result
else:
time_out_result = ComputeTaskResult()
time_out_result.result_code = ComputeTaskResultCode.TIMEOUT
time_out_result.set_from_task(task_req)
## craete timeout task_result
async def do_llm_completion(self, prompt: AgentPrompt, mode_name: Optional[str] = None, max_token: int = 0, inner_functions = None) -> str:
task_req = self.llm_completion(prompt, mode_name, max_token,inner_functions)
return await self._send_task(task_req)
raise Exception("error!")
def text_embedding(self,input:str,model_name:Optional[str] = None):
@@ -140,25 +146,10 @@ class ComputeKernel:
async def do_text_embedding(self,input:str,model_name:Optional[str] = None) -> [float]:
task_req = self.text_embedding(input,model_name)
async def check_timer():
check_times = 0
while True:
if task_req.state == ComputeTaskState.DONE:
break
task_result = await self._send_task(task_req)
if task_req.state == ComputeTaskState.ERROR:
break
if check_times >= 20:
task_req.state = ComputeTaskState.ERROR
break
await asyncio.sleep(0.5)
check_times += 1
await asyncio.create_task(check_timer())
if task_req.state == ComputeTaskState.DONE:
return task_req.result.result
return task_result.result
return "error!"
@@ -179,22 +170,10 @@ class ComputeKernel:
task_req.task_type = ComputeTaskType.TEXT_2_VOICE
self.run(task_req)
check_times = 0
while True:
if task_req.state == ComputeTaskState.DONE:
break
if task_req.state == ComputeTaskState.ERROR:
break
if check_times >= 60:
task_req.state = ComputeTaskState.ERROR
break
await asyncio.sleep(0.5)
check_times += 1
task_result = await self._send_task(task_req)
if task_req.state == ComputeTaskState.DONE:
return task_req.result.result
else:
raise Exception("do_text_to_speech failed!")
return task_result.result
def text_2_image(self, prompt:str, model_name:Optional[str] = None):
@@ -205,27 +184,9 @@ class ComputeKernel:
async def do_text_2_image(self, prompt:str, model_name:Optional[str] = None) -> [str, ComputeTaskResult]:
task_req = self.text_2_image(prompt,model_name)
async def check_timer():
check_times = 0
while True:
if task_req.state == ComputeTaskState.DONE:
break
if task_req.state == ComputeTaskState.ERROR:
break
#may be it will take a long time to generate a image
if check_times >= 60:
task_req.state = ComputeTaskState.ERROR
break
await asyncio.sleep(0.5)
check_times += 1
await asyncio.create_task(check_timer())
task_result = self._send_task(task_req)
if task_req.state == ComputeTaskState.DONE:
return None, task_req.result
return None, task_result
return task_req.error_str, None
+6
View File
@@ -3,6 +3,11 @@ from enum import Enum
import uuid
import time
class ComputeTaskResultCode(Enum):
OK = 0
TIMEOUT = 1
NO_WORK = 2
class ComputeTaskState(Enum):
DONE = 0
@@ -95,3 +100,4 @@ class ComputeTaskResult:
def set_from_task(self, task: ComputeTask):
self.task_id = task.task_id
self.callchain_id = task.callchain_id
task.result = self
+4 -2
View File
@@ -92,14 +92,16 @@ class UserConfig:
def get_config_item(self,key:str) -> Any:
config_item = self.config_table.get(key)
if config_item is None:
raise Exception("user config key %s not exist",key)
logger.warning(f"user config key {key} not exist")
return None
return config_item
def get_value(self,key:str)->Any:
config_item = self.config_table.get(key)
if config_item is None:
raise Exception("user config key %s not exist",key)
logger.warning(f"user config key {key} not exist")
return None
if config_item.value is None:
return config_item.default_value
+19 -1
View File
@@ -32,10 +32,13 @@ class TelegramTunnel(AgentTunnel):
async def load_from_config(self,config:dict)->bool:
self.type = "TelegramTunnel"
self.tg_token = config["token"]
self.target_id = config["target"]
self.tunnel_id = config["tunnel_id"]
self.type = "TelegramTunnel"
if config.get("allow") is not None:
self.allow_group = config["allow"]
return True
def dump_to_config(self) -> dict:
@@ -47,6 +50,7 @@ class TelegramTunnel(AgentTunnel):
self.tg_token = tg_token
self.bot:Bot = None
self.update_queue = None
self.allow_group = "contact"
async def _do_process_raw_message(self,bot: Bot, update_id: int) -> int:
# Request updates after the last update_id
@@ -88,6 +92,11 @@ class TelegramTunnel(AgentTunnel):
except Forbidden:
# The user has removed or blocked the bot.
update_id += 1
except Exception as e:
logger.error(f"tg_tunnel error:{e}")
await asyncio.sleep(1)
asyncio.create_task(_run_app())
logger.info(f"tunnel {self.tunnel_id} started.")
@@ -130,7 +139,16 @@ class TelegramTunnel(AgentTunnel):
if contact is not None:
reomte_user_name = contact.name
if not contact.is_family_member:
if self.allow_group != "contact" and self.allow_group !="guest":
await update.message.reply_text(f"You are not allowed to talk to me! Please contact my father~")
return
else:
if self.allow_group != "guest":
await update.message.reply_text(f"You are not allowed to talk to me! Please contact my father~")
return
if cm.is_auto_create_contact_from_telegram:
contact_name = update.effective_user.first_name
if update.effective_user.last_name is not None: