mirror of
https://github.com/EvolutionAPI/adk-python.git
synced 2025-12-25 14:37:45 -06:00
Changes for 0.1.0 release
This commit is contained in:
@@ -74,7 +74,7 @@ class BaseLlmFlow(ABC):
|
||||
return
|
||||
|
||||
llm = self.__get_llm(invocation_context)
|
||||
logger.info(
|
||||
logger.debug(
|
||||
'Establishing live connection for agent: %s with llm request: %s',
|
||||
invocation_context.agent.name,
|
||||
llm_request,
|
||||
|
||||
@@ -27,6 +27,7 @@ from ...events.event import Event
|
||||
from ...models.llm_request import LlmRequest
|
||||
from ._base_llm_processor import BaseLlmRequestProcessor
|
||||
from .functions import remove_client_function_call_id
|
||||
from .functions import REQUEST_EUC_FUNCTION_CALL_NAME
|
||||
|
||||
|
||||
class _ContentLlmRequestProcessor(BaseLlmRequestProcessor):
|
||||
@@ -208,7 +209,9 @@ def _get_contents(
|
||||
if not _is_event_belongs_to_branch(current_branch, event):
|
||||
# Skip events not belong to current branch.
|
||||
continue
|
||||
|
||||
if _is_auth_event(event):
|
||||
# skip auth event
|
||||
continue
|
||||
filtered_events.append(
|
||||
_convert_foreign_event(event)
|
||||
if _is_other_agent_reply(agent_name, event)
|
||||
@@ -368,3 +371,20 @@ def _is_event_belongs_to_branch(
|
||||
if not invocation_branch or not event.branch:
|
||||
return True
|
||||
return invocation_branch.startswith(event.branch)
|
||||
|
||||
|
||||
def _is_auth_event(event: Event) -> bool:
|
||||
if not event.content.parts:
|
||||
return False
|
||||
for part in event.content.parts:
|
||||
if (
|
||||
part.function_call
|
||||
and part.function_call.name == REQUEST_EUC_FUNCTION_CALL_NAME
|
||||
):
|
||||
return True
|
||||
if (
|
||||
part.function_response
|
||||
and part.function_response.name == REQUEST_EUC_FUNCTION_CALL_NAME
|
||||
):
|
||||
return True
|
||||
return False
|
||||
|
||||
@@ -32,6 +32,8 @@ from ...agents.invocation_context import InvocationContext
|
||||
from ...auth.auth_tool import AuthToolArguments
|
||||
from ...events.event import Event
|
||||
from ...events.event_actions import EventActions
|
||||
from ...telemetry import trace_tool_call
|
||||
from ...telemetry import trace_tool_response
|
||||
from ...telemetry import tracer
|
||||
from ...tools.base_tool import BaseTool
|
||||
from ...tools.tool_context import ToolContext
|
||||
@@ -114,7 +116,9 @@ def generate_auth_event(
|
||||
invocation_id=invocation_context.invocation_id,
|
||||
author=invocation_context.agent.name,
|
||||
branch=invocation_context.branch,
|
||||
content=types.Content(parts=parts),
|
||||
content=types.Content(
|
||||
parts=parts, role=function_response_event.content.role
|
||||
),
|
||||
long_running_tool_ids=long_running_tool_ids,
|
||||
)
|
||||
|
||||
@@ -186,6 +190,16 @@ async def handle_function_calls_async(
|
||||
merged_event = merge_parallel_function_response_events(
|
||||
function_response_events
|
||||
)
|
||||
if len(function_response_events) > 1:
|
||||
# this is needed for debug traces of parallel calls
|
||||
# individual response with tool.name is traced in __build_response_event
|
||||
# (we drop tool.name from span name here as this is merged event)
|
||||
with tracer.start_as_current_span('tool_response'):
|
||||
trace_tool_response(
|
||||
invocation_context=invocation_context,
|
||||
event_id=merged_event.id,
|
||||
function_response_event=merged_event,
|
||||
)
|
||||
return merged_event
|
||||
|
||||
|
||||
@@ -375,7 +389,8 @@ async def __call_tool_live(
|
||||
invocation_context: InvocationContext,
|
||||
) -> AsyncGenerator[Event, None]:
|
||||
"""Calls the tool asynchronously (awaiting the coroutine)."""
|
||||
with tracer.start_as_current_span(f'call_tool [{tool.name}]'):
|
||||
with tracer.start_as_current_span(f'tool_call [{tool.name}]'):
|
||||
trace_tool_call(args=args)
|
||||
async for item in tool._call_live(
|
||||
args=args,
|
||||
tool_context=tool_context,
|
||||
@@ -390,7 +405,8 @@ async def __call_tool_async(
|
||||
tool_context: ToolContext,
|
||||
) -> Any:
|
||||
"""Calls the tool."""
|
||||
with tracer.start_as_current_span(f'call_tool [{tool.name}]'):
|
||||
with tracer.start_as_current_span(f'tool_call [{tool.name}]'):
|
||||
trace_tool_call(args=args)
|
||||
return await tool.run_async(args=args, tool_context=tool_context)
|
||||
|
||||
|
||||
@@ -400,26 +416,35 @@ def __build_response_event(
|
||||
tool_context: ToolContext,
|
||||
invocation_context: InvocationContext,
|
||||
) -> Event:
|
||||
# Specs requires the result to be a dict.
|
||||
if not isinstance(function_result, dict):
|
||||
function_result = {'result': function_result}
|
||||
with tracer.start_as_current_span(f'tool_response [{tool.name}]'):
|
||||
# Specs requires the result to be a dict.
|
||||
if not isinstance(function_result, dict):
|
||||
function_result = {'result': function_result}
|
||||
|
||||
part_function_response = types.Part.from_function_response(
|
||||
name=tool.name, response=function_result
|
||||
)
|
||||
part_function_response.function_response.id = tool_context.function_call_id
|
||||
part_function_response = types.Part.from_function_response(
|
||||
name=tool.name, response=function_result
|
||||
)
|
||||
part_function_response.function_response.id = tool_context.function_call_id
|
||||
|
||||
content = types.Content(
|
||||
role='user',
|
||||
parts=[part_function_response],
|
||||
)
|
||||
return Event(
|
||||
invocation_id=invocation_context.invocation_id,
|
||||
author=invocation_context.agent.name,
|
||||
content=content,
|
||||
actions=tool_context.actions,
|
||||
branch=invocation_context.branch,
|
||||
)
|
||||
content = types.Content(
|
||||
role='user',
|
||||
parts=[part_function_response],
|
||||
)
|
||||
|
||||
function_response_event = Event(
|
||||
invocation_id=invocation_context.invocation_id,
|
||||
author=invocation_context.agent.name,
|
||||
content=content,
|
||||
actions=tool_context.actions,
|
||||
branch=invocation_context.branch,
|
||||
)
|
||||
|
||||
trace_tool_response(
|
||||
invocation_context=invocation_context,
|
||||
event_id=function_response_event.id,
|
||||
function_response_event=function_response_event,
|
||||
)
|
||||
return function_response_event
|
||||
|
||||
|
||||
def merge_parallel_function_response_events(
|
||||
|
||||
Reference in New Issue
Block a user