From 5f44f89de272318d101d3679940eb1e6d3446394 Mon Sep 17 00:00:00 2001 From: Simon Willison Date: Wed, 21 May 2025 22:04:12 -0700 Subject: [PATCH] Ident + tests for tool logging, closes #1042 --- llm/cli.py | 4 ++-- tests/test_llm_logs.py | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 2 deletions(-) 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()