Commit Graph

31 Commits

Author SHA1 Message Date
Ettore Di Giacinto 7a37056d12 feat: improve control loop
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 23:05:51 +00:00
Ettore Di Giacinto af34921ff5 chore: consume reasoning (#34)
* chore: consume reasoning

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* break instead

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Refactor

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Adapt tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-15 22:34:13 +01:00
Ettore Di Giacinto da0d4ceb2b Return last message when no tools are selected (#33)
* Return last message when no tools are selected

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve logging

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Allow agent to disengage also without sink state

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* ask when needed

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Allow to keep old behavior

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* tests fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-14 21:17:34 +01:00
Ettore Di Giacinto a5346975d4 chore: return any result from tools in the status (#32)
This allows to put arbitrary data as results of any tool and be later
picked up when inspecting the execution results of the agent.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-06 16:34:01 +01:00
Ettore Di Giacinto b5fa1ef9ec chore: add message manipulator callback (#31)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-02-05 22:40:59 +01:00
Ettore Di Giacinto 1321987e12 feat(tools): add parallel tool support (#30)
* feat(tools): add parallel tool support

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* linting

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-01-19 23:12:45 +01:00
Ettore Di Giacinto 2ec99d0648 fix(plan): add description in the schema
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2026-01-15 20:36:24 +00:00
Ettore Di Giacinto 1a6237e2ec chore: move logging to its own package so can be shared across repos (#23)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-12-19 23:02:17 +01:00
Ettore Di Giacinto 19ffb31772 chore: return status if we terminate for other reasons (#19)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-12-16 21:45:32 +01:00
Ettore Di Giacinto 2324131eaa feat: add state and feedback (#18)
* feat: allow to adjust tool call with user feedback

Expand the callback signature such as we accept a string for adjusting
the toolcall. If an adjustment is provided and we should continue, then
cogito prompts again the selection process with the user feedback to
improve the tool call.

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat: return a state such as the execution can be resumed

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* chore: style changes

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* chore: add tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-12-07 23:42:24 +01:00
Ettore Di Giacinto ab5e39c511 feat(sink): allow to configure and disable sink state (#17)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-12-03 22:57:05 +01:00
Grant Foster d7a0254ef1 fix: ensure tool call IDs are properly set and matched between tool calls and results (#15)
* fix: chat id

* fix: format code (gofmt)

* chore: test comment change
2025-11-07 22:02:37 +01:00
Ettore Di Giacinto 8859641f81 feat: declare tool args via struct (#14)
* feat: declare tool args via struct

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* simplify even more the API

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-29 19:20:17 +01:00
Ettore Di Giacinto d94e0bd20e fix: make sure we propagate reasoning
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-28 18:47:21 +01:00
Ettore Di Giacinto 3f982f8fe7 chore: add Reasoning to ToolChoice
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-27 13:24:54 +01:00
Ettore Di Giacinto 933e11d826 chore: add a way to track tool calls
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-27 13:17:52 +01:00
Ettore Di Giacinto 2d07420497 chore: add a way to track reasoning only
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-27 12:45:00 +01:00
Ettore Di Giacinto 23c7064141 feat: enhance tool selection (#13)
* feat: enhance tool selection

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* try to adapt tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Make tests more stable

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add autoplan test

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Don't load MCP prompts if we don't have any

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Reorder things

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* TEST

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Revert "TEST"

This reverts commit b08bbc56d5.

* TEST

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* TEST2

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Try to fix tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add back guidelines

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve next action logic

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* tests

* tests2

* forcereasoning

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* maxiterations

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Fix tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Better error handling

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* test

* error handling

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Force text reply

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Two-step param generation approach

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Code cleanup

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add a small note/comment

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Small refinements

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-26 21:37:24 +01:00
Ettore Di Giacinto 550aad0fa0 Consistently return fragments in case of errors
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 22:16:04 +02:00
Ettore Di Giacinto 921ed81d33 Small refactorings
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 20:00:18 +02:00
Ettore Di Giacinto cfcdd18e82 fix: do not always return ErrNoToolSelected
Let's check first if we actually didn't run any tool before assuming so
2025-10-21 16:14:29 +02:00
Ettore Di Giacinto 9c04ac0b45 Correctly handle errors
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-21 12:48:53 +02:00
Ettore Di Giacinto f21710b138 chore(plans): improve planning when no tool calls are called
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-20 22:40:43 +02:00
Ettore Di Giacinto 08f259a3a3 fix: correctly pass by tool status results
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-19 21:23:00 +02:00
Ettore Di Giacinto 2f0f800d95 feat(tools): allow to automatically plan (#9)
* feat(tools): allow to automatically plan

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feat(mcp): display MCPs prompts during tool selection

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* feature gate mcp prompts

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add test

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* fix plans, strict tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-13 09:11:13 +02:00
Ettore Di Giacinto 6307cdecae feat(mcp): Support MCP sessions to source available tools (#8)
* feat(mcp): Support MCP sessions to source available tools

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* chore: docs

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* add e2e test

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* docs

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Update README

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Style cleanup

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-08 23:40:41 +02:00
Ettore Di Giacinto 6bb97feb18 feat: add guidelines to steer tool selection (#6)
* feat: add guidelines to steer tool selection

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Display suggested tools

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-10-03 00:07:19 +02:00
Ettore Di Giacinto 2f20fcce01 Change LLM to interface, split tests, improve content review loop (#3)
* Split e2e and unit tests

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Abstract away LLM to an interface

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Update README

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Enhance content improve generation

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add unit test for reviewer

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Better handling of result status of tool calls

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Fixups

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Add tools test file

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-09-29 22:55:43 +02:00
Ettore Di Giacinto 043d5dc6e2 feat: improve returned fragment during content review (#2)
* feat: improve returned fragment during content review

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve prompts

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

* Improve prompts

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>

---------

Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-09-27 23:43:24 +02:00
Ettore Di Giacinto 3057d37397 chore: add callbacks to interrupt actions and track tools being called (#1)
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-09-24 18:43:05 +02:00
Ettore Di Giacinto af41faaa19 Initial import
Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
2025-09-23 23:24:00 +02:00