diff --git a/llm/cli.py b/llm/cli.py
index 2a72ab3..a773195 100644
--- a/llm/cli.py
+++ b/llm/cli.py
@@ -1883,10 +1883,10 @@ def logs_list(
click.echo("\n### Tool results\n")
for tool_result in row["tool_results"]:
click.echo(
- "- **{}**: `{}`
\n {}".format(
+ "- **{}**: `{}`
\n{}".format(
tool_result["name"],
tool_result["tool_call_id"],
- tool_result["output"],
+ textwrap.indent(tool_result["output"], " "),
)
)
attachments = attachments_by_id.get(row["id"])
diff --git a/tests/test_llm_logs.py b/tests/test_llm_logs.py
index e7b5173..ed3edb1 100644
--- a/tests/test_llm_logs.py
+++ b/tests/test_llm_logs.py
@@ -10,6 +10,7 @@ import pytest
import re
import sqlite_utils
import sys
+import textwrap
import time
import yaml
@@ -845,6 +846,37 @@ def test_expand_fragment_markdown(fragments_fixture):
assert interesting_bit.endswith("")
+def test_logs_tools(logs_db):
+ runner = CliRunner()
+ code = textwrap.dedent(
+ """
+ def demo():
+ return "one\\ntwo\\nthree"
+ """
+ )
+ result1 = runner.invoke(
+ cli,
+ [
+ "-m",
+ "echo",
+ "--functions",
+ code,
+ json.dumps({"tool_calls": [{"name": "demo"}]}),
+ ],
+ )
+ assert result1.exit_code == 0
+ result2 = runner.invoke(cli, ["logs", "-c"])
+ assert (
+ "### Tool results\n"
+ "\n"
+ "- **demo**: `None`
\n"
+ " one\n"
+ " two\n"
+ " three\n"
+ "\n"
+ ) in result2.output
+
+
def test_logs_backup(logs_db):
assert not logs_db.tables
runner = CliRunner()