1- import uuid
2-
31from typing import Any
42
53from a2a .server .context import ServerCallContext
4+ from a2a .server .id_generator import (
5+ IDGenerator ,
6+ IDGeneratorContext ,
7+ UUIDGenerator ,
8+ )
69from a2a .types import (
710 InvalidParamsError ,
811 Message ,
@@ -30,6 +33,8 @@ def __init__( # noqa: PLR0913
3033 task : Task | None = None ,
3134 related_tasks : list [Task ] | None = None ,
3235 call_context : ServerCallContext | None = None ,
36+ task_id_generator : IDGenerator | None = None ,
37+ context_id_generator : IDGenerator | None = None ,
3338 ):
3439 """Initializes the RequestContext.
3540
@@ -40,6 +45,8 @@ def __init__( # noqa: PLR0913
4045 task: The existing `Task` object retrieved from the store, if any.
4146 related_tasks: A list of other tasks related to the current request (e.g., for tool use).
4247 call_context: The server call context associated with this request.
48+ task_id_generator: ID generator for new task IDs. Defaults to UUID generator.
49+ context_id_generator: ID generator for new context IDs. Defaults to UUID generator.
4350 """
4451 if related_tasks is None :
4552 related_tasks = []
@@ -49,6 +56,12 @@ def __init__( # noqa: PLR0913
4956 self ._current_task = task
5057 self ._related_tasks = related_tasks
5158 self ._call_context = call_context
59+ self ._task_id_generator = (
60+ task_id_generator if task_id_generator else UUIDGenerator ()
61+ )
62+ self .context_id_generator = (
63+ context_id_generator if context_id_generator else UUIDGenerator ()
64+ )
5265 # If the task id and context id were provided, make sure they
5366 # match the request. Otherwise, create them
5467 if self ._params :
@@ -163,7 +176,9 @@ def _check_or_generate_task_id(self) -> None:
163176 return
164177
165178 if not self ._task_id and not self ._params .message .task_id :
166- self ._params .message .task_id = str (uuid .uuid4 ())
179+ self ._params .message .task_id = self ._task_id_generator .generate (
180+ IDGeneratorContext (context_id = self ._context_id )
181+ )
167182 if self ._params .message .task_id :
168183 self ._task_id = self ._params .message .task_id
169184
@@ -173,6 +188,10 @@ def _check_or_generate_context_id(self) -> None:
173188 return
174189
175190 if not self ._context_id and not self ._params .message .context_id :
176- self ._params .message .context_id = str (uuid .uuid4 ())
191+ self ._params .message .context_id = (
192+ self .context_id_generator .generate (
193+ IDGeneratorContext (task_id = self ._task_id )
194+ )
195+ )
177196 if self ._params .message .context_id :
178197 self ._context_id = self ._params .message .context_id
0 commit comments