add --show-thoughts flag
This commit is contained in:
parent
4d2b10c80c
commit
96dbd1c4e7
|
|
@ -280,6 +280,11 @@ Examples:
|
||||||
action="store_true",
|
action="store_true",
|
||||||
help="Delete the project database file (.ra-aid/pk.db) before starting, effectively wiping all stored memory",
|
help="Delete the project database file (.ra-aid/pk.db) before starting, effectively wiping all stored memory",
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
"--show-thoughts",
|
||||||
|
action="store_true",
|
||||||
|
help="Display model thinking content extracted from think tags when supported by the model",
|
||||||
|
)
|
||||||
if args is None:
|
if args is None:
|
||||||
args = sys.argv[1:]
|
args = sys.argv[1:]
|
||||||
parsed_args = parser.parse_args(args)
|
parsed_args = parser.parse_args(args)
|
||||||
|
|
@ -563,6 +568,7 @@ def main():
|
||||||
config_repo.set("temperature", args.temperature)
|
config_repo.set("temperature", args.temperature)
|
||||||
config_repo.set("experimental_fallback_handler", args.experimental_fallback_handler)
|
config_repo.set("experimental_fallback_handler", args.experimental_fallback_handler)
|
||||||
config_repo.set("web_research_enabled", web_research_enabled)
|
config_repo.set("web_research_enabled", web_research_enabled)
|
||||||
|
config_repo.set("show_thoughts", args.show_thoughts)
|
||||||
|
|
||||||
# Build status panel with memory statistics
|
# Build status panel with memory statistics
|
||||||
status = build_status()
|
status = build_status()
|
||||||
|
|
@ -635,6 +641,7 @@ def main():
|
||||||
config_repo.set("expert_provider", args.expert_provider)
|
config_repo.set("expert_provider", args.expert_provider)
|
||||||
config_repo.set("expert_model", args.expert_model)
|
config_repo.set("expert_model", args.expert_model)
|
||||||
config_repo.set("temperature", args.temperature)
|
config_repo.set("temperature", args.temperature)
|
||||||
|
config_repo.set("show_thoughts", args.show_thoughts)
|
||||||
|
|
||||||
# Set modification tools based on use_aider flag
|
# Set modification tools based on use_aider flag
|
||||||
set_modification_tools(args.use_aider)
|
set_modification_tools(args.use_aider)
|
||||||
|
|
|
||||||
|
|
@ -635,6 +635,7 @@ class CiaynAgent:
|
||||||
if supports_think_tag or supports_thinking:
|
if supports_think_tag or supports_thinking:
|
||||||
think_content, remaining_text = extract_think_tag(response.content)
|
think_content, remaining_text = extract_think_tag(response.content)
|
||||||
if think_content:
|
if think_content:
|
||||||
|
if self.config.get("show_thoughts", False):
|
||||||
console.print(Panel(Markdown(think_content), title="💭 Thoughts"))
|
console.print(Panel(Markdown(think_content), title="💭 Thoughts"))
|
||||||
response.content = remaining_text
|
response.content = remaining_text
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -255,6 +255,7 @@ def ask_expert(question: str) -> str:
|
||||||
think_content, remaining_text = extract_think_tag(content)
|
think_content, remaining_text = extract_think_tag(content)
|
||||||
if think_content:
|
if think_content:
|
||||||
logger.debug(f"Found think tag content ({len(think_content)} chars)")
|
logger.debug(f"Found think tag content ({len(think_content)} chars)")
|
||||||
|
if get_config_repository().get("show_thoughts", False):
|
||||||
console.print(
|
console.print(
|
||||||
Panel(Markdown(think_content), title="💭 Thoughts", border_style="yellow")
|
Panel(Markdown(think_content), title="💭 Thoughts", border_style="yellow")
|
||||||
)
|
)
|
||||||
|
|
@ -282,7 +283,7 @@ def ask_expert(question: str) -> str:
|
||||||
logger.debug("Found structured response text")
|
logger.debug("Found structured response text")
|
||||||
|
|
||||||
# Display thinking content in a separate panel if available
|
# Display thinking content in a separate panel if available
|
||||||
if thinking_content:
|
if thinking_content and get_config_repository().get("show_thoughts", False):
|
||||||
logger.debug(f"Displaying structured thinking content ({len(thinking_content)} chars)")
|
logger.debug(f"Displaying structured thinking content ({len(thinking_content)} chars)")
|
||||||
console.print(
|
console.print(
|
||||||
Panel(Markdown(thinking_content), title="Expert Thinking", border_style="yellow")
|
Panel(Markdown(thinking_content), title="Expert Thinking", border_style="yellow")
|
||||||
|
|
|
||||||
|
|
@ -21,10 +21,11 @@ def test_stream_supports_think_tag(mock_get_model):
|
||||||
mock_response = AIMessage(content="<think>These are my thoughts</think>Actual response")
|
mock_response = AIMessage(content="<think>These are my thoughts</think>Actual response")
|
||||||
mock_model.invoke.return_value = mock_response
|
mock_model.invoke.return_value = mock_response
|
||||||
|
|
||||||
# Setup agent with config that supports think tags
|
# Setup agent with config that supports think tags and show_thoughts
|
||||||
config = {
|
config = {
|
||||||
"provider": "openai-compatible",
|
"provider": "openai-compatible",
|
||||||
"model": "qwen-qwq-32b"
|
"model": "qwen-qwq-32b",
|
||||||
|
"show_thoughts": True
|
||||||
}
|
}
|
||||||
agent = CiaynAgent(mock_model, [], config=config)
|
agent = CiaynAgent(mock_model, [], config=config)
|
||||||
|
|
||||||
|
|
@ -98,10 +99,11 @@ def test_stream_with_no_think_tags(mock_get_model):
|
||||||
mock_response = AIMessage(content="Actual response without tags")
|
mock_response = AIMessage(content="Actual response without tags")
|
||||||
mock_model.invoke.return_value = mock_response
|
mock_model.invoke.return_value = mock_response
|
||||||
|
|
||||||
# Setup agent with config that supports think tags
|
# Setup agent with config that supports think tags and show_thoughts
|
||||||
config = {
|
config = {
|
||||||
"provider": "openai-compatible",
|
"provider": "openai-compatible",
|
||||||
"model": "qwen-qwq-32b"
|
"model": "qwen-qwq-32b",
|
||||||
|
"show_thoughts": True
|
||||||
}
|
}
|
||||||
agent = CiaynAgent(mock_model, [], config=config)
|
agent = CiaynAgent(mock_model, [], config=config)
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,83 @@
|
||||||
|
"""Unit tests for the --show-thoughts CLI flag."""
|
||||||
|
|
||||||
|
import pytest
|
||||||
|
from unittest.mock import patch, MagicMock
|
||||||
|
|
||||||
|
from ra_aid.__main__ import parse_arguments
|
||||||
|
|
||||||
|
|
||||||
|
def test_show_thoughts_flag():
|
||||||
|
"""Test that the --show-thoughts flag is correctly parsed."""
|
||||||
|
# Test default value (False)
|
||||||
|
args = parse_arguments(["-m", "test message"])
|
||||||
|
assert args.show_thoughts is False
|
||||||
|
|
||||||
|
# Test with flag (True)
|
||||||
|
args = parse_arguments(["-m", "test message", "--show-thoughts"])
|
||||||
|
assert args.show_thoughts is True
|
||||||
|
|
||||||
|
|
||||||
|
@pytest.fixture(autouse=True)
|
||||||
|
def mock_config_repository():
|
||||||
|
"""Mock the ConfigRepository to avoid database operations during tests"""
|
||||||
|
with patch('ra_aid.database.repositories.config_repository.config_repo_var') as mock_repo_var:
|
||||||
|
# Setup a mock repository
|
||||||
|
mock_repo = MagicMock()
|
||||||
|
|
||||||
|
# Create a dictionary to simulate config
|
||||||
|
config = {}
|
||||||
|
|
||||||
|
# Setup get method to return config values
|
||||||
|
def get_config(key, default=None):
|
||||||
|
return config.get(key, default)
|
||||||
|
mock_repo.get.side_effect = get_config
|
||||||
|
|
||||||
|
# Setup set method to update config values
|
||||||
|
def set_config(key, value):
|
||||||
|
config[key] = value
|
||||||
|
mock_repo.set.side_effect = set_config
|
||||||
|
|
||||||
|
# Setup update method to update multiple config values
|
||||||
|
def update_config(config_dict):
|
||||||
|
config.update(config_dict)
|
||||||
|
mock_repo.update.side_effect = update_config
|
||||||
|
|
||||||
|
# Setup get_all method to return the config dict
|
||||||
|
def get_all_config():
|
||||||
|
return config.copy()
|
||||||
|
mock_repo.get_all.side_effect = get_all_config
|
||||||
|
|
||||||
|
# Make the mock context var return our mock repo
|
||||||
|
mock_repo_var.get.return_value = mock_repo
|
||||||
|
|
||||||
|
yield mock_repo
|
||||||
|
|
||||||
|
|
||||||
|
def test_show_thoughts_config(mock_config_repository):
|
||||||
|
"""Test that the show_thoughts flag is correctly stored in config."""
|
||||||
|
import sys
|
||||||
|
from unittest.mock import patch
|
||||||
|
|
||||||
|
from ra_aid.__main__ import main
|
||||||
|
|
||||||
|
# Reset mocks
|
||||||
|
mock_config_repository.set.reset_mock()
|
||||||
|
|
||||||
|
# For testing, we need to patch ConfigRepositoryManager.__enter__ to return our mock
|
||||||
|
with patch('ra_aid.database.repositories.config_repository.ConfigRepositoryManager.__enter__', return_value=mock_config_repository):
|
||||||
|
# Test with --show-thoughts flag
|
||||||
|
with patch.object(sys, "argv", ["ra-aid", "-m", "test message", "--show-thoughts"]):
|
||||||
|
with patch("ra_aid.__main__.run_research_agent", return_value=None):
|
||||||
|
main()
|
||||||
|
# Verify the show_thoughts flag is set to True in config
|
||||||
|
mock_config_repository.set.assert_any_call("show_thoughts", True)
|
||||||
|
|
||||||
|
# Reset mocks
|
||||||
|
mock_config_repository.set.reset_mock()
|
||||||
|
|
||||||
|
# Test without --show-thoughts flag (default: False)
|
||||||
|
with patch.object(sys, "argv", ["ra-aid", "-m", "test message"]):
|
||||||
|
with patch("ra_aid.__main__.run_research_agent", return_value=None):
|
||||||
|
main()
|
||||||
|
# Verify the show_thoughts flag is set to False in config
|
||||||
|
mock_config_repository.set.assert_any_call("show_thoughts", False)
|
||||||
Loading…
Reference in New Issue