Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix(agent): move app resource implement to serv pkg #2310

Open
wants to merge 5 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 17 additions & 45 deletions dbgpt/agent/resource/app.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Application Resources for the agent."""

import dataclasses
import uuid
from abc import abstractmethod
from typing import Any, Dict, List, Optional, Tuple, Type, cast

from dbgpt.agent import AgentMessage, ConversableAgent
Expand Down Expand Up @@ -79,27 +79,30 @@ def from_dict(
class AppResource(Resource[ResourceParameters]):
"""AppResource resource class."""

def __init__(self, name: str, app_code: str, **kwargs):
def __init__(self, name: str, **kwargs):
"""Initialize AppResource resource."""
# TODO: Don't import dbgpt.serve in dbgpt.agent module
from dbgpt.serve.agent.agents.app_agent_manage import get_app_manager

self._resource_name = name
self._app_code = app_code

app = get_app_manager().get_app(self._app_code)
self._app_name = app.app_name
self._app_desc = app.app_describe

@property
@abstractmethod
def app_desc(self):
"""Return the app description."""
return self._app_desc
# return self._app_desc

@property
@abstractmethod
def app_name(self):
"""Return the app name."""
return self._app_name
# return self._app_name

@abstractmethod
async def _start_app(
self,
user_input: str,
sender: ConversableAgent,
conv_uid: Optional[str] = None,
) -> AgentMessage:
"""Start the app."""

@classmethod
def type(cls) -> ResourceType:
Expand Down Expand Up @@ -137,7 +140,7 @@ async def get_prompt(

return (
template.format(
name=self.name, app_name=self._app_name, description=self._app_desc
name=self.name, app_name=self.app_name, description=self.app_desc
),
None,
)
Expand Down Expand Up @@ -174,36 +177,5 @@ async def async_execute(
if parent_agent is None:
raise RuntimeError("AppResource async execution parent_agent is None")

reply_message = await _start_app(self._app_code, user_input, parent_agent)
reply_message = await self._start_app(user_input, parent_agent)
return reply_message.content


async def _start_app(
app_code: str,
user_input: str,
sender: ConversableAgent,
conv_uid: Optional[str] = None,
) -> AgentMessage:
"""Start App By AppResource."""
# TODO: Don't import dbgpt.serve in dbgpt.agent module
from dbgpt.serve.agent.agents.app_agent_manage import get_app_manager

conv_uid = str(uuid.uuid4()) if conv_uid is None else conv_uid
gpts_app = get_app_manager().get_app(app_code)
app_agent = await get_app_manager().create_agent_by_app_code(
gpts_app, conv_uid=conv_uid
)

agent_message = AgentMessage(
content=user_input,
current_goal=user_input,
context={
"conv_uid": conv_uid,
},
rounds=0,
)
reply_message: AgentMessage = await app_agent.generate_reply(
received_message=agent_message, sender=sender
)

return reply_message
4 changes: 2 additions & 2 deletions dbgpt/app/component_configs.py
Original file line number Diff line number Diff line change
Expand Up @@ -106,9 +106,9 @@ def _initialize_resource_manager(system_app: SystemApp):
get_current_host_system_load,
)
from dbgpt.agent.expand.resources.search_tool import baidu_search
from dbgpt.agent.resource.app import AppResource
from dbgpt.agent.resource.base import ResourceType
from dbgpt.agent.resource.manage import get_resource_manager, initialize_resource
from dbgpt.serve.agent.resource.app import GptAppResource
from dbgpt.serve.agent.resource.datasource import DatasourceResource
from dbgpt.serve.agent.resource.knowledge import KnowledgeSpaceRetrieverResource
from dbgpt.serve.agent.resource.plugin import PluginToolPack
Expand All @@ -118,7 +118,7 @@ def _initialize_resource_manager(system_app: SystemApp):
rm.register_resource(DatasourceResource)
rm.register_resource(KnowledgeSpaceRetrieverResource)
rm.register_resource(PluginToolPack, resource_type=ResourceType.Tool)
rm.register_resource(AppResource)
rm.register_resource(GptAppResource)
# Register a search tool
rm.register_resource(resource_instance=baidu_search)
rm.register_resource(resource_instance=list_dbgpt_support_models)
Expand Down
60 changes: 60 additions & 0 deletions dbgpt/serve/agent/resource/app.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
"""Application Resources for the agent."""

import uuid
from typing import Optional

from dbgpt.agent import AgentMessage, ConversableAgent
from dbgpt.agent.resource.app import AppResource
from dbgpt.serve.agent.agents.app_agent_manage import get_app_manager


class GptAppResource(AppResource):
"""AppResource resource class."""

def __init__(self, name: str, app_code: str, **kwargs):
"""Initialize AppResource resource."""
# TODO: Don't import dbgpt.serve in dbgpt.agent module
super().__init__(name, **kwargs)

self._app_code = app_code

self.gpt_app = get_app_manager().get_app(self._app_code)
self._app_name = self.gpt_app.app_name
self._app_desc = self.gpt_app.app_describe

@property
def app_desc(self):
"""Return the app description."""
return self._app_desc

@property
def app_name(self):
"""Return the app name."""
return self._app_name

async def _start_app(
self,
user_input: str,
sender: ConversableAgent,
conv_uid: Optional[str] = None,
) -> AgentMessage:
"""Start App By AppResource."""
conv_uid = str(uuid.uuid4()) if conv_uid is None else conv_uid
gpts_app = get_app_manager().get_app(self._app_code)
app_agent = await get_app_manager().create_agent_by_app_code(
gpts_app, conv_uid=conv_uid
)

agent_message = AgentMessage(
content=user_input,
current_goal=user_input,
context={
"conv_uid": conv_uid,
},
rounds=0,
)
reply_message: AgentMessage = await app_agent.generate_reply(
received_message=agent_message, sender=sender
)

return reply_message
Loading