Skip to content

Commit 5538fad

Browse files
committed
feat: add prompt caching and the option to not use CoT for the agent reasoning (not needed for reasoning models)
1 parent 3918d44 commit 5538fad

File tree

5 files changed

+37
-14
lines changed

5 files changed

+37
-14
lines changed

coverage-badge.svg

Lines changed: 1 addition & 1 deletion
Loading

synalinks/src/language_models/language_model.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -355,6 +355,9 @@ async def __call__(self, messages, schema=None, streaming=False, **kwargs):
355355
streaming = False
356356
if streaming:
357357
kwargs.update({"stream": True})
358+
# Enable prompt caching for the system instructions (that only change during training not inference)
359+
system_message_with_cache_control = {**formatted_messages[0], "cache_control": {"type": "ephemeral"}}
360+
formatted_messages[0] = system_message_with_cache_control
358361
for i in range(self.retry):
359362
try:
360363
response_str = ""

synalinks/src/modules/agents/function_calling_agent.py

Lines changed: 31 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,8 @@ async def main():
354354
reasoning_effort (string): Optional. The reasoning effort for the LM call
355355
between ['minimal', 'low', 'medium', 'high', 'disable', 'none', None].
356356
Default to None (no reasoning).
357+
use_chain_of_thought (bool): Optional. Use chain of thought for tool calls generator,
358+
usefull when using non-reasoning models. Default False.
357359
tools (list): The list of `Tool` or MCP tools available to the agent.
358360
autonomous (bool): Optional. Whether the agent runs autonomously
359361
(executing tools automatically) or in interactive mode where the user
@@ -379,6 +381,7 @@ def __init__(
379381
use_inputs_schema=False,
380382
use_outputs_schema=False,
381383
reasoning_effort=None,
384+
use_chain_of_thought=False,
382385
tools=None,
383386
autonomous=True,
384387
return_inputs_with_trajectory=True,
@@ -409,6 +412,7 @@ def __init__(
409412
self.use_inputs_schema = use_inputs_schema
410413
self.use_outputs_schema = use_outputs_schema
411414
self.reasoning_effort = reasoning_effort
415+
self.use_chain_of_thought = use_chain_of_thought
412416
self.language_model = language_model
413417

414418
self.tools = {}
@@ -422,19 +426,34 @@ def __init__(
422426
self.return_inputs_with_trajectory = return_inputs_with_trajectory
423427
self.max_iterations = max_iterations
424428

425-
self.tool_calls_generator = ChainOfThought(
426-
schema=tool_calls_schema,
427-
prompt_template=self.prompt_template,
428-
examples=self.examples,
429-
instructions=self.instructions,
430-
temperature=self.temperature,
431-
use_inputs_schema=self.use_inputs_schema,
432-
use_outputs_schema=self.use_outputs_schema,
433-
reasoning_effort=self.reasoning_effort,
434-
language_model=self.language_model,
435-
name="tool_calls_generator_" + self.name,
436-
)
429+
if use_chain_of_thought:
430+
self.tool_calls_generator = ChainOfThought(
431+
schema=tool_calls_schema,
432+
prompt_template=self.prompt_template,
433+
examples=self.examples,
434+
instructions=self.instructions,
435+
temperature=self.temperature,
436+
use_inputs_schema=self.use_inputs_schema,
437+
use_outputs_schema=self.use_outputs_schema,
438+
reasoning_effort=self.reasoning_effort,
439+
language_model=self.language_model,
440+
name="tool_calls_generator_" + self.name,
441+
)
442+
else:
443+
self.tool_calls_generator = Generator(
444+
schema=tool_calls_schema,
445+
prompt_template=self.prompt_template,
446+
examples=self.examples,
447+
instructions=self.instructions,
448+
temperature=self.temperature,
449+
use_inputs_schema=self.use_inputs_schema,
450+
use_outputs_schema=self.use_outputs_schema,
451+
reasoning_effort=self.reasoning_effort,
452+
language_model=self.language_model,
453+
name="tool_calls_generator_" + self.name,
454+
)
437455

456+
438457
self.final_generator = Generator(
439458
schema=self.schema,
440459
language_model=self.language_model,

synalinks/src/modules/agents/function_calling_agent_test.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -152,6 +152,7 @@ async def test_agent_default_reasoning_effort_is_none(self):
152152
agent = FunctionCallingAgent(
153153
language_model=language_model,
154154
tools=tools,
155+
use_chain_of_thought=True,
155156
name="default_test",
156157
)
157158

synalinks/src/version.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from synalinks.src.api_export import synalinks_export
44

55
# Unique source of truth for the version number.
6-
__version__ = "0.6.013"
6+
__version__ = "0.6.014"
77

88

99
@synalinks_export("synalinks.version")

0 commit comments

Comments
 (0)