Skip to content

[BUG]: Python error when requesting BQ NUMERIC FIELDS : {"error": "Object of type Decimal is not JSON serializable"} #330

@pasflein

Description

@pasflein

Name of sample affected

python/agents/data-science/

Description of issue

when requesting big query, I get the following issue
{"error": "Object of type Decimal is not JSON serializable"}

Environment

  • OS & Architecture: Redhat 9.5
  • Python version: [e.g. 3.12]

Big query has fields of type NUMERIC, for example : INCIDENTNUMBER (NUMERIC)

Sample code has not been changed.

Error log

<img width="562" height="491" alt="Image" src="https://github.com/user-attachments/assets/e0d4e6dd-19de-4eaa-b2fc-1be443538839" />
2025-08-19 10:24:25,097 - ERROR - fast_api.py:889 - Error in event_generator: Object of type Decimal is not JSON serializable
Traceback (most recent call last):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/cli/fast_api.py", line 877, in event_generator
    async for event in runner.run_async(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/runners.py", line 233, in run_async
    async for event in self._exec_with_plugin(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/runners.py", line 273, in _exec_with_plugin
    async for event in execute_fn(invocation_context):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/runners.py", line 230, in execute
    async for event in ctx.agent.run_async(ctx):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/agents/base_agent.py", line 208, in run_async
    async for event in self._run_async_impl(ctx):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/agents/llm_agent.py", line 283, in _run_async_impl
    async for event in self._llm_flow.run_async(ctx):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 283, in run_async
    async for event in self._run_one_step_async(invocation_context):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 315, in _run_one_step_async
    async for event in self._postprocess_async(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 388, in _postprocess_async
    async for event in self._postprocess_handle_function_calls_async(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 463, in _postprocess_handle_function_calls_async
    if function_response_event := await functions.handle_function_calls_async(
                                  ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/functions.py", line 179, in handle_function_calls_async
    function_response = await __call_tool_async(
                        ^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/functions.py", line 480, in __call_tool_async
    return await tool.run_async(args=args, tool_context=tool_context)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/tools/function_tool.py", line 116, in run_async
    return await self.func(**args_to_call)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/data_science/tools.py", line 39, in call_db_agent
    db_agent_output = await agent_tool.run_async(
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/tools/agent_tool.py", line 128, in run_async
    async for event in runner.run_async(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/runners.py", line 233, in run_async
    async for event in self._exec_with_plugin(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/runners.py", line 273, in _exec_with_plugin
    async for event in execute_fn(invocation_context):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/runners.py", line 230, in execute
    async for event in ctx.agent.run_async(ctx):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/agents/base_agent.py", line 208, in run_async
    async for event in self._run_async_impl(ctx):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/agents/llm_agent.py", line 283, in _run_async_impl
    async for event in self._llm_flow.run_async(ctx):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 283, in run_async
    async for event in self._run_one_step_async(invocation_context):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 311, in _run_one_step_async
    async for llm_response in self._call_llm_async(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 537, in _call_llm_async
    async for llm_response in llm.generate_content_async(
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/models/google_llm.py", line 175, in generate_content_async
    response = await self.api_client.aio.models.generate_content(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/genai/models.py", line 7267, in generate_content
    response = await self._generate_content(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/genai/models.py", line 6234, in _generate_content
    response = await self._api_client.async_request(
               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/genai/_api_client.py", line 1111, in async_request
    result = await self._async_request(http_request=http_request, stream=False)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/genai/_api_client.py", line 1056, in _async_request
    return await self._async_retry(  # type: ignore[no-any-return]
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/tenacity/asyncio/__init__.py", line 111, in __call__
    do = await self.iter(retry_state=retry_state)
         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/tenacity/asyncio/__init__.py", line 153, in iter
    result = await action(retry_state)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/tenacity/_utils.py", line 99, in inner
    return call(*args, **kwargs)
           ^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/tenacity/__init__.py", line 418, in exc_check
    raise retry_exc.reraise()
          ^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/tenacity/__init__.py", line 185, in reraise
    raise self.last_attempt.result()
          ^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/concurrent/futures/_base.py", line 449, in result
    return self.__get_result()
           ^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/concurrent/futures/_base.py", line 401, in __get_result
    raise self._exception
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/tenacity/asyncio/__init__.py", line 114, in __call__
    result = await fn(*args, **kwargs)
             ^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/genai/_api_client.py", line 983, in _async_request_once
    data = json.dumps(http_request.data) if http_request.data else None
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib64/python3.12/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type Decimal is not JSON serializable
2025-08-19 10:24:25,101 - ERROR - __init__.py:157 - Failed to detach context
Traceback (most recent call last):
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/opentelemetry/trace/__init__.py", line 589, in use_span
    yield span
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/opentelemetry/sdk/trace/__init__.py", line 1105, in start_as_current_span
    yield span
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/opentelemetry/trace/__init__.py", line 454, in start_as_current_span
    yield span
  File "/workspaces/data-science-adk/data-science/.venv/lib64/python3.12/site-packages/google/adk/flows/llm_flows/base_llm_flow.py", line 554, in _call_llm_async
    yield llm_response
GeneratorExit

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions