commit 676fdf85fe655e65fc0d46cb26766d2cb42a7742 parent 552a66e3689b914d911f736da4ab1ac7a4a671ea Author: andrewlaack-collab <andrew.laack@imbue.com> Date: Thu, 12 Feb 2026 00:11:15 +0000 Added isort, improved readme consistency (#63) * Improved readme * Added and ran isort Diffstat:
37 files changed, 133 insertions(+), 230 deletions(-)
diff --git a/README.md b/README.md @@ -201,6 +201,8 @@ You can customize the guide text for the issue codes via `guides.toml`. Guide fi - `$XDG_CONFIG_HOME/vet/guides.toml` (or `~/.config/vet/guides.toml`) - `guides.toml` at your repo root +#### Example `guides.toml` + ```toml [logic_error] suffix = """ @@ -217,7 +219,7 @@ replace = """ """ ``` -Section keys must be valid issue codes (`vet --list-issue-codes`). Each section supports three optional fields: `prefix` (prepends to built-in guide), `suffix` (appends to built-in guide), and `replace` (fully replaces the built-in guide). `prefix` and `suffix` can be used together, but `replace` is mutually exclusive with the other two. Guide text should be formatted as a list of items starting with `-`. +Section keys must be valid issue codes (`vet --list-issue-codes`). Each section supports three optional fields: `prefix` (prepends to built-in guide), `suffix` (appends to built-in guide), and `replace` (fully replaces the built-in guide). `prefix` and `suffix` can be used together, but `replace` is mutually exclusive with the other two. Guide text should be formatted as a list. ## License diff --git a/pyproject.toml b/pyproject.toml @@ -73,6 +73,7 @@ include = ["vet*"] dev = [ "black", "hypothesis", + "isort", "pytest", "syrupy", ] @@ -80,3 +81,12 @@ dev = [ [tool.black] line-length = 120 target-version = ['py311'] + +[tool.isort] +profile = "black" +line_length = 120 +force_single_line = true +case_sensitive = true +order_by_type = false +known_first_party = ["vet"] +no_lines_before = ["future"] diff --git a/uv.lock b/uv.lock @@ -510,6 +510,15 @@ wheels = [ ] [[package]] +name = "isort" +version = "7.0.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/63/53/4f3c058e3bace40282876f9b553343376ee687f3c35a525dc79dbd450f88/isort-7.0.0.tar.gz", hash = "sha256:5513527951aadb3ac4292a41a16cbc50dd1642432f5e8c20057d414bdafb4187", size = 805049, upload-time = "2025-10-11T13:30:59.107Z" } +wheels = [ + { url = "https://files.pythonhosted.org/packages/7f/ed/e3705d6d02b4f7aea715a353c8ce193efd0b5db13e204df895d38734c244/isort-7.0.0-py3-none-any.whl", hash = "sha256:1bcabac8bc3c36c7fb7b98a76c8abb18e0f841a3ba81decac7691008592499c1", size = 94672, upload-time = "2025-10-11T13:30:57.665Z" }, +] + +[[package]] name = "jinja2" version = "3.1.6" source = { registry = "https://pypi.org/simple" } @@ -1555,6 +1564,7 @@ dependencies = [ dev = [ { name = "black" }, { name = "hypothesis" }, + { name = "isort" }, { name = "pytest" }, { name = "syrupy" }, ] @@ -1590,6 +1600,7 @@ requires-dist = [ dev = [ { name = "black" }, { name = "hypothesis" }, + { name = "isort" }, { name = "pytest" }, { name = "syrupy" }, ] diff --git a/vet/api.py b/vet/api.py @@ -10,25 +10,21 @@ from loguru import logger from vet.imbue_core.data_types import IdentifiedVerifyIssue from vet.imbue_core.data_types import IssueIdentificationDebugInfo -from vet.vet_types.messages import ConversationMessageUnion -from vet.imbue_tools.get_conversation_history.get_conversation_history import ( - ConversationLoadingError, -) +from vet.imbue_tools.get_conversation_history.get_conversation_history import ConversationLoadingError from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs from vet.imbue_tools.repo_utils.project_context import LazyProjectContext from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.imbue_tools.types.vet_config import VetConfig -from vet.imbue_tools.util_prompts.goal_from_conversation import ( - get_goal_from_conversation, -) +from vet.imbue_tools.util_prompts.goal_from_conversation import get_goal_from_conversation from vet.issue_identifiers import registry from vet.issue_identifiers.utils import ReturnCapturingGenerator -from vet.repo_utils import get_code_to_check from vet.repo_utils import VET_MAX_PROMPT_TOKENS +from vet.repo_utils import get_code_to_check from vet.truncation import ContextBudget from vet.truncation import get_available_tokens from vet.truncation import get_token_budget from vet.truncation import truncate_to_token_limit +from vet.vet_types.messages import ConversationMessageUnion def get_issues_with_raw_responses( diff --git a/vet/cli/main.py b/vet/cli/main.py @@ -11,12 +11,6 @@ from pathlib import Path from loguru import logger -from vet.imbue_core.data_types import IssueCode -from vet.imbue_core.data_types import get_valid_issue_code_values -from vet.imbue_tools.get_conversation_history.get_conversation_history import ( - parse_conversation_history, -) -from vet.imbue_tools.types.vet_config import VetConfig from vet.api import find_issues from vet.cli.config.cli_config_schema import CLI_DEFAULTS from vet.cli.config.cli_config_schema import CliConfigPreset @@ -39,6 +33,10 @@ from vet.formatters import format_github_review from vet.formatters import format_issue_text from vet.formatters import issue_to_dict from vet.formatters import validate_output_fields +from vet.imbue_core.data_types import IssueCode +from vet.imbue_core.data_types import get_valid_issue_code_values +from vet.imbue_tools.get_conversation_history.get_conversation_history import parse_conversation_history +from vet.imbue_tools.types.vet_config import VetConfig VERSION = version("verify-everything") diff --git a/vet/cli/models.py b/vet/cli/models.py @@ -1,13 +1,13 @@ from __future__ import annotations +from vet.cli.config.loader import get_models_by_provider_from_config +from vet.cli.config.loader import get_user_defined_model_ids +from vet.cli.config.schema import ModelsConfig from vet.imbue_core.agents.llm_apis.anthropic_api import AnthropicModelName from vet.imbue_core.agents.llm_apis.common import get_all_model_names from vet.imbue_core.agents.llm_apis.gemini_api import GeminiModelName from vet.imbue_core.agents.llm_apis.groq_api import GroqSupportedModelName from vet.imbue_core.agents.llm_apis.openai_api import OpenAIModelName -from vet.cli.config.loader import get_models_by_provider_from_config -from vet.cli.config.loader import get_user_defined_model_ids -from vet.cli.config.schema import ModelsConfig DEFAULT_MODEL_ID = AnthropicModelName.CLAUDE_4_6_OPUS.value diff --git a/vet/formatters_test.py b/vet/formatters_test.py @@ -2,14 +2,13 @@ from __future__ import annotations from syrupy.assertion import SnapshotAssertion -from vet.formatters import OUTPUT_FIELDS, format_github_review -from vet.imbue_core.data_types import ( - ConfidenceScore, - IdentifiedVerifyIssue, - IssueCode, - IssueLocation, - SeverityScore, -) +from vet.formatters import OUTPUT_FIELDS +from vet.formatters import format_github_review +from vet.imbue_core.data_types import ConfidenceScore +from vet.imbue_core.data_types import IdentifiedVerifyIssue +from vet.imbue_core.data_types import IssueCode +from vet.imbue_core.data_types import IssueLocation +from vet.imbue_core.data_types import SeverityScore def _make_issue( diff --git a/vet/formatting_test.py b/vet/formatting_test.py @@ -12,3 +12,15 @@ def test_black_formatting(): text=True, ) assert result.returncode == 0, f"black found formatting issues:\n{result.stderr}{result.stdout}" + + +def test_isort_ordering(): + """Ensure all Python files have correctly sorted imports.""" + repo_root = Path(__file__).resolve().parent.parent + result = subprocess.run( + ["isort", "--check-only", "--diff", "."], + cwd=repo_root, + capture_output=True, + text=True, + ) + assert result.returncode == 0, f"isort found import ordering issues:\n{result.stderr}{result.stdout}" diff --git a/vet/git.py b/vet/git.py @@ -9,8 +9,8 @@ from typing import Sequence import anyio from loguru import logger -from vet.imbue_core.async_monkey_patches import log_exception from vet.errors import RunCommandError +from vet.imbue_core.async_monkey_patches import log_exception # Flexible path type alias AnyPath = Path | str | anyio.Path diff --git a/vet/imbue_core/agents/agent_api/transport.py b/vet/imbue_core/agents/agent_api/transport.py @@ -19,9 +19,7 @@ from typing import TypeVar from vet.imbue_core.agents.agent_api.data_types import AgentOptions from vet.imbue_core.agents.agent_api.errors import AgentCLIConnectionError -from vet.imbue_core.agents.agent_api.errors import ( - AgentCLIJSONDecodeError as SDKJSONDecodeError, -) +from vet.imbue_core.agents.agent_api.errors import AgentCLIJSONDecodeError as SDKJSONDecodeError from vet.imbue_core.agents.agent_api.errors import AgentCLINotFoundError from vet.imbue_core.agents.agent_api.errors import AgentProcessError from vet.imbue_core.pydantic_serialization import SerializableModel diff --git a/vet/imbue_core/agents/llm_apis/anthropic_api.py b/vet/imbue_core/agents/llm_apis/anthropic_api.py @@ -10,20 +10,18 @@ from typing import Iterator import anthropic import httpx +import tiktoken from anthropic._types import NOT_GIVEN from anthropic.types import CacheControlEphemeralParam from anthropic.types import MessageParam from anthropic.types import TextBlockParam from loguru import logger from pydantic.functional_validators import field_validator -import tiktoken from vet.imbue_core.agents.llm_apis.anthropic_data_types import AnthropicCachingInfo from vet.imbue_core.agents.llm_apis.anthropic_data_types import AnthropicModelInfo from vet.imbue_core.agents.llm_apis.api_utils import convert_prompt_to_messages -from vet.imbue_core.agents.llm_apis.api_utils import ( - create_costed_language_model_response_for_single_result, -) +from vet.imbue_core.agents.llm_apis.api_utils import create_costed_language_model_response_for_single_result from vet.imbue_core.agents.llm_apis.data_types import CachedCountTokensResponse from vet.imbue_core.agents.llm_apis.data_types import CachingInfo from vet.imbue_core.agents.llm_apis.data_types import CostedLanguageModelResponse @@ -36,9 +34,7 @@ from vet.imbue_core.agents.llm_apis.errors import BadAPIRequestError from vet.imbue_core.agents.llm_apis.errors import LanguageModelInvalidModelNameError from vet.imbue_core.agents.llm_apis.errors import MissingAPIKeyError from vet.imbue_core.agents.llm_apis.errors import NewSeedRetriableLanguageModelError -from vet.imbue_core.agents.llm_apis.errors import ( - SafelyRetriableTransientLanguageModelError, -) +from vet.imbue_core.agents.llm_apis.errors import SafelyRetriableTransientLanguageModelError from vet.imbue_core.agents.llm_apis.errors import TransientLanguageModelError from vet.imbue_core.agents.llm_apis.errors import UnsetCachePathError from vet.imbue_core.agents.llm_apis.language_model_api import LanguageModelAPI diff --git a/vet/imbue_core/agents/llm_apis/common.py b/vet/imbue_core/agents/llm_apis/common.py @@ -3,15 +3,11 @@ from vet.imbue_core.agents.llm_apis.anthropic_api import AnthropicModelName from vet.imbue_core.agents.llm_apis.gemini_api import GEMINI_MODEL_INFO_BY_NAME from vet.imbue_core.agents.llm_apis.gemini_api import GeminiModelName from vet.imbue_core.agents.llm_apis.groq_api import GroqSupportedModelName -from vet.imbue_core.agents.llm_apis.groq_api import ( - get_model_info as get_groq_model_info, -) +from vet.imbue_core.agents.llm_apis.groq_api import get_model_info as get_groq_model_info from vet.imbue_core.agents.llm_apis.mock_api import MY_MOCK_MODEL_INFO from vet.imbue_core.agents.llm_apis.models import ModelInfo from vet.imbue_core.agents.llm_apis.openai_api import OpenAIModelName -from vet.imbue_core.agents.llm_apis.openai_api import ( - get_model_info as get_openai_model_info, -) +from vet.imbue_core.agents.llm_apis.openai_api import get_model_info as get_openai_model_info ModelName = AnthropicModelName | OpenAIModelName | GroqSupportedModelName | GeminiModelName diff --git a/vet/imbue_core/agents/llm_apis/gemini_api.py b/vet/imbue_core/agents/llm_apis/gemini_api.py @@ -28,9 +28,7 @@ from loguru import logger from pydantic.functional_validators import field_validator from vet.imbue_core.agents.llm_apis.api_utils import convert_prompt_to_messages -from vet.imbue_core.agents.llm_apis.api_utils import ( - create_costed_language_model_response_for_single_result, -) +from vet.imbue_core.agents.llm_apis.api_utils import create_costed_language_model_response_for_single_result from vet.imbue_core.agents.llm_apis.data_types import CachedCountTokensResponse from vet.imbue_core.agents.llm_apis.data_types import CostedLanguageModelResponse from vet.imbue_core.agents.llm_apis.data_types import CountTokensInputs diff --git a/vet/imbue_core/agents/llm_apis/openai_api.py b/vet/imbue_core/agents/llm_apis/openai_api.py @@ -38,9 +38,7 @@ from vet.imbue_core.agents.llm_apis.errors import PromptTooLongError from vet.imbue_core.agents.llm_apis.errors import TransientLanguageModelError from vet.imbue_core.agents.llm_apis.models import ModelInfo from vet.imbue_core.agents.llm_apis.openai_compatible_api import OpenAICompatibleAPI -from vet.imbue_core.agents.llm_apis.openai_compatible_api import ( - _OPENAI_COMPATIBLE_STOP_REASON_TO_STOP_REASON, -) +from vet.imbue_core.agents.llm_apis.openai_compatible_api import _OPENAI_COMPATIBLE_STOP_REASON_TO_STOP_REASON from vet.imbue_core.agents.llm_apis.openai_data_types import OpenAICachingInfo from vet.imbue_core.agents.llm_apis.stream import LanguageModelStreamDeltaEvent from vet.imbue_core.agents.llm_apis.stream import LanguageModelStreamEndEvent diff --git a/vet/imbue_tools/get_conversation_history/get_conversation_history.py b/vet/imbue_tools/get_conversation_history/get_conversation_history.py @@ -6,8 +6,8 @@ from loguru import logger from pydantic import TypeAdapter from pydantic import ValidationError -from vet.vet_types.chat_state import ContentBlockTypes from vet.truncation import truncate_to_token_limit +from vet.vet_types.chat_state import ContentBlockTypes from vet.vet_types.messages import ChatInputUserMessage from vet.vet_types.messages import ConversationMessageUnion from vet.vet_types.messages import ResponseBlockAgentMessage diff --git a/vet/imbue_tools/repo_utils/context_prefix.py b/vet/imbue_tools/repo_utils/context_prefix.py @@ -32,9 +32,7 @@ from vet.imbue_tools.repo_utils.subrepo_formatting import SubrepoContextMatchers from vet.imbue_tools.repo_utils.subrepo_formatting import UnionFilenamePattern from vet.imbue_tools.repo_utils.subrepo_formatting import compute_file_context_format_styles from vet.imbue_tools.repo_utils.subrepo_formatting import format_subrepo_context -from vet.imbue_tools.repo_utils.subrepo_formatting import ( - parse_subrepo_context_matchers_from_toml, -) +from vet.imbue_tools.repo_utils.subrepo_formatting import parse_subrepo_context_matchers_from_toml class SubrepoContext(SerializableModel): diff --git a/vet/imbue_tools/repo_utils/diff_utils.py b/vet/imbue_tools/repo_utils/diff_utils.py @@ -11,12 +11,8 @@ from vet.imbue_tools.repo_utils.errors import DiffApplicationError from vet.imbue_tools.repo_utils.file_system import FileContents from vet.imbue_tools.repo_utils.file_system import InMemoryFileSystem from vet.imbue_tools.repo_utils.file_system import SymlinkContents -from vet.imbue_tools.repo_utils.file_system_utils import ( - create_initial_placeholder_commit_for_dir, -) -from vet.imbue_tools.repo_utils.file_system_utils import ( - temporary_local_dir_from_in_memory_file_system, -) +from vet.imbue_tools.repo_utils.file_system_utils import create_initial_placeholder_commit_for_dir +from vet.imbue_tools.repo_utils.file_system_utils import temporary_local_dir_from_in_memory_file_system @alru_cache diff --git a/vet/imbue_tools/repo_utils/project_context.py b/vet/imbue_tools/repo_utils/project_context.py @@ -21,9 +21,7 @@ from vet.imbue_tools.repo_utils.context_prefix import create_context_prompt_pref from vet.imbue_tools.repo_utils.context_prefix import get_repo_context from vet.imbue_tools.repo_utils.context_retrieval import RepoContextManager from vet.imbue_tools.repo_utils.file_system import InMemoryFileSystem -from vet.imbue_tools.repo_utils.subrepo_formatting import ( - REPO_CONTEXT_TEMPLATE_WITH_NO_MENTION_OF_DIFF, -) +from vet.imbue_tools.repo_utils.subrepo_formatting import REPO_CONTEXT_TEMPLATE_WITH_NO_MENTION_OF_DIFF @lru_cache diff --git a/vet/imbue_tools/util_prompts/goal_from_conversation.py b/vet/imbue_tools/util_prompts/goal_from_conversation.py @@ -5,13 +5,9 @@ from vet.imbue_core.agents.llm_apis.build_apis import build_language_model_from_ from vet.imbue_core.agents.llm_apis.data_types import CostedLanguageModelResponse from vet.imbue_core.agents.llm_apis.data_types import LanguageModelGenerationParams from vet.imbue_core.itertools import only +from vet.imbue_tools.get_conversation_history.get_conversation_history import format_conversation_history_for_prompt +from vet.imbue_tools.util_prompts.conversation_prefix import CONVERSATION_PREFIX_TEMPLATE from vet.vet_types.messages import ConversationMessageUnion -from vet.imbue_tools.get_conversation_history.get_conversation_history import ( - format_conversation_history_for_prompt, -) -from vet.imbue_tools.util_prompts.conversation_prefix import ( - CONVERSATION_PREFIX_TEMPLATE, -) # TODO: see how this does on actual examples where the agent did something other than what the user asked for PROMPT_TEMPLATE = ( diff --git a/vet/issue_identifiers/agentic_issue_collation.py b/vet/issue_identifiers/agentic_issue_collation.py @@ -11,24 +11,18 @@ from vet.imbue_core.data_types import IssueIdentificationLLMResponseMetadata from vet.imbue_core.data_types import LLMResponse from vet.imbue_tools.get_conversation_history.input_data_types import CommitInputs from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs -from vet.imbue_tools.get_conversation_history.input_data_types import ( - to_specific_inputs_type, -) +from vet.imbue_tools.get_conversation_history.input_data_types import to_specific_inputs_type from vet.imbue_tools.repo_utils.context_utils import escape_prompt_markers from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.imbue_tools.types.vet_config import VetConfig from vet.issue_identifiers.common import GeneratedIssueSchema from vet.issue_identifiers.common import GeneratedResponseSchema from vet.issue_identifiers.common import extract_invocation_info_from_messages -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm from vet.issue_identifiers.common import generate_issues_from_response_texts from vet.issue_identifiers.common import generate_response_from_claude_code from vet.issue_identifiers.common import get_claude_code_options -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE from vet.issue_identifiers.utils import ReturnCapturingGenerator COLLATION_PROMPT_TEMPLATE = """You are reviewing the results from parallel code analysis for potential issues. diff --git a/vet/issue_identifiers/base.py b/vet/issue_identifiers/base.py @@ -7,9 +7,7 @@ from vet.imbue_core.data_types import IssueCode from vet.imbue_core.data_types import IssueIdentificationDebugInfo from vet.imbue_core.pydantic_serialization import SerializableModel from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs -from vet.imbue_tools.get_conversation_history.input_data_types import ( - to_specific_inputs_type, -) +from vet.imbue_tools.get_conversation_history.input_data_types import to_specific_inputs_type from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.imbue_tools.types.vet_config import VetConfig from vet.issue_identifiers.common import GeneratedIssueSchema diff --git a/vet/issue_identifiers/common.py b/vet/issue_identifiers/common.py @@ -32,16 +32,10 @@ from vet.imbue_core.data_types import IssueLocation from vet.imbue_core.data_types import LineRange from vet.imbue_core.data_types import SeverityScore from vet.imbue_core.pydantic_serialization import SerializableModel -from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ( - ResponseParsingError, -) -from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ( - parse_model_json_response, -) +from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ResponseParsingError +from vet.imbue_tools.llm_output_parsing.parse_model_json_response import parse_model_json_response from vet.imbue_tools.repo_utils.project_context import ProjectContext -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide from vet.issue_identifiers.utils import ReturnCapturingGenerator diff --git a/vet/issue_identifiers/common_test.py b/vet/issue_identifiers/common_test.py @@ -7,27 +7,15 @@ from vet.imbue_core.data_types import IdentifiedVerifyIssue from vet.imbue_core.data_types import IssueCode from vet.imbue_core.frozen_utils import FrozenDict from vet.imbue_core.itertools import only -from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ( - ResponseParsingError, -) -from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ( - parse_model_json_response, -) +from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ResponseParsingError +from vet.imbue_tools.llm_output_parsing.parse_model_json_response import parse_model_json_response from vet.imbue_tools.repo_utils.project_context import BaseProjectContext from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.issue_identifiers.common import GeneratedResponseSchema -from vet.issue_identifiers.common import ( - convert_generated_issue_to_identified_issue, -) -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_CODES_FOR_CORRECTNESS_CHECK, -) -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.common import convert_generated_issue_to_identified_issue +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm +from vet.issue_identifiers.identification_guides import ISSUE_CODES_FOR_CORRECTNESS_CHECK +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide def _parse_issues( diff --git a/vet/issue_identifiers/harnesses/agentic.py b/vet/issue_identifiers/harnesses/agentic.py @@ -31,15 +31,11 @@ from vet.issue_identifiers.base import IssueIdentifier from vet.issue_identifiers.common import GeneratedIssueSchema from vet.issue_identifiers.common import GeneratedResponseSchema from vet.issue_identifiers.common import extract_invocation_info_from_messages -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm from vet.issue_identifiers.common import generate_issues_from_response_texts from vet.issue_identifiers.common import generate_response_from_claude_code from vet.issue_identifiers.harnesses.base import IssueIdentifierHarness -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide PROMPT_TEMPLATE = """You are analyzing a code repository for potential issues. The repository files are available in {{ repo_path }}. diff --git a/vet/issue_identifiers/harnesses/base.py b/vet/issue_identifiers/harnesses/base.py @@ -4,9 +4,7 @@ from typing import TypeVar from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs from vet.issue_identifiers.base import IssueIdentifier -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide T = TypeVar("T", bound=IdentifierInputs) diff --git a/vet/issue_identifiers/harnesses/conversation_single_prompt.py b/vet/issue_identifiers/harnesses/conversation_single_prompt.py @@ -18,29 +18,19 @@ from vet.imbue_core.data_types import IssueIdentificationDebugInfo from vet.imbue_core.data_types import IssueIdentificationLLMResponseMetadata from vet.imbue_core.data_types import LLMResponse from vet.imbue_core.itertools import only -from vet.imbue_tools.get_conversation_history.get_conversation_history import ( - format_conversation_history_for_prompt, -) +from vet.imbue_tools.get_conversation_history.get_conversation_history import format_conversation_history_for_prompt from vet.imbue_tools.get_conversation_history.input_data_types import ConversationInputs from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.imbue_tools.types.vet_config import VetConfig -from vet.imbue_tools.util_prompts.conversation_prefix import ( - CONVERSATION_PREFIX_TEMPLATE, -) +from vet.imbue_tools.util_prompts.conversation_prefix import CONVERSATION_PREFIX_TEMPLATE from vet.issue_identifiers.base import IssueIdentifier from vet.issue_identifiers.common import GeneratedIssueSchema from vet.issue_identifiers.common import GeneratedResponseSchema -from vet.issue_identifiers.common import ( - extract_invocation_info_from_costed_response, -) -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) +from vet.issue_identifiers.common import extract_invocation_info_from_costed_response +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm from vet.issue_identifiers.common import generate_issues_from_response_texts from vet.issue_identifiers.harnesses.base import IssueIdentifierHarness -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide from vet.truncation import ContextBudget from vet.truncation import get_available_tokens from vet.truncation import get_token_budget diff --git a/vet/issue_identifiers/harnesses/conversation_single_prompt_test.py b/vet/issue_identifiers/harnesses/conversation_single_prompt_test.py @@ -1,23 +1,17 @@ import pytest from vet.imbue_core.data_types import IssueCode +from vet.imbue_tools.get_conversation_history.input_data_types import ConversationInputs +from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs +from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputsMissingError +from vet.issue_identifiers.harnesses.conversation_single_prompt import ConversationSinglePromptHarness +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE from vet.vet_types.chat_state import TextBlock from vet.vet_types.ids import AssistantMessageID from vet.vet_types.messages import AgentMessageSource from vet.vet_types.messages import ChatInputUserMessage from vet.vet_types.messages import LLMModel from vet.vet_types.messages import ResponseBlockAgentMessage -from vet.imbue_tools.get_conversation_history.input_data_types import ConversationInputs -from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs -from vet.imbue_tools.get_conversation_history.input_data_types import ( - IdentifierInputsMissingError, -) -from vet.issue_identifiers.harnesses.conversation_single_prompt import ( - ConversationSinglePromptHarness, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) def test_to_required_inputs() -> None: diff --git a/vet/issue_identifiers/harnesses/single_prompt.py b/vet/issue_identifiers/harnesses/single_prompt.py @@ -23,17 +23,11 @@ from vet.imbue_tools.types.vet_config import VetConfig from vet.issue_identifiers.base import IssueIdentifier from vet.issue_identifiers.common import GeneratedIssueSchema from vet.issue_identifiers.common import GeneratedResponseSchema -from vet.issue_identifiers.common import ( - extract_invocation_info_from_costed_response, -) -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) +from vet.issue_identifiers.common import extract_invocation_info_from_costed_response +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm from vet.issue_identifiers.common import generate_issues_from_response_texts from vet.issue_identifiers.harnesses.base import IssueIdentifierHarness -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide from vet.truncation import ContextBudget from vet.truncation import get_available_tokens from vet.truncation import get_token_budget diff --git a/vet/issue_identifiers/harnesses/single_prompt_test.py b/vet/issue_identifiers/harnesses/single_prompt_test.py @@ -17,19 +17,13 @@ from vet.imbue_core.data_types import IssueCode from vet.imbue_core.frozen_utils import FrozenDict from vet.imbue_tools.get_conversation_history.input_data_types import CommitInputs from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs -from vet.imbue_tools.get_conversation_history.input_data_types import ( - IdentifierInputsMissingError, -) +from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputsMissingError from vet.imbue_tools.repo_utils.project_context import BaseProjectContext from vet.imbue_tools.types.vet_config import VetConfig from vet.issue_identifiers.base import IssueIdentifier from vet.issue_identifiers.harnesses.single_prompt import SinglePromptHarness -from vet.issue_identifiers.identification_guides import ( - ISSUE_CODES_FOR_CORRECTNESS_CHECK, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) +from vet.issue_identifiers.identification_guides import ISSUE_CODES_FOR_CORRECTNESS_CHECK +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE from vet.issue_identifiers.utils import ReturnCapturingGenerator diff --git a/vet/issue_identifiers/issue_deduplication.py b/vet/issue_identifiers/issue_deduplication.py @@ -16,16 +16,10 @@ from vet.imbue_tools.repo_utils.context_utils import escape_prompt_markers from vet.imbue_tools.types.vet_config import VetConfig from vet.issue_identifiers.common import GeneratedIssueSchema from vet.issue_identifiers.common import GeneratedResponseSchema -from vet.issue_identifiers.common import ( - extract_invocation_info_from_costed_response, -) -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) +from vet.issue_identifiers.common import extract_invocation_info_from_costed_response +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm from vet.issue_identifiers.common import generate_issues_from_response_texts -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE from vet.issue_identifiers.utils import ReturnCapturingGenerator DEDUPLICATION_PROMPT_TEMPLATE = """[ROLE=USER] diff --git a/vet/issue_identifiers/issue_evaluation.py b/vet/issue_identifiers/issue_evaluation.py @@ -11,36 +11,20 @@ from vet.imbue_core.data_types import IssueIdentificationLLMResponseMetadata from vet.imbue_core.data_types import LLMResponse from vet.imbue_core.itertools import only from vet.imbue_core.pydantic_serialization import SerializableModel -from vet.imbue_tools.get_conversation_history.get_conversation_history import ( - format_conversation_history_for_prompt, -) +from vet.imbue_tools.get_conversation_history.get_conversation_history import format_conversation_history_for_prompt from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs -from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ( - ResponseParsingError, -) -from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ( - parse_model_json_response, -) +from vet.imbue_tools.llm_output_parsing.parse_model_json_response import ResponseParsingError +from vet.imbue_tools.llm_output_parsing.parse_model_json_response import parse_model_json_response from vet.imbue_tools.repo_utils.context_utils import escape_prompt_markers from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.imbue_tools.types.vet_config import DEFAULT_CONFIDENCE_THRESHOLD from vet.imbue_tools.types.vet_config import VetConfig -from vet.imbue_tools.util_prompts.conversation_prefix import ( - CONVERSATION_PREFIX_TEMPLATE, -) +from vet.imbue_tools.util_prompts.conversation_prefix import CONVERSATION_PREFIX_TEMPLATE from vet.issue_identifiers.common import GeneratedIssueSchema -from vet.issue_identifiers.common import ( - extract_invocation_info_from_costed_response, -) -from vet.issue_identifiers.common import ( - format_issue_identification_guide_for_llm, -) -from vet.issue_identifiers.harnesses.single_prompt import ( - USER_REQUEST_PREFIX_TEMPLATE, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) +from vet.issue_identifiers.common import extract_invocation_info_from_costed_response +from vet.issue_identifiers.common import format_issue_identification_guide_for_llm +from vet.issue_identifiers.harnesses.single_prompt import USER_REQUEST_PREFIX_TEMPLATE +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE from vet.issue_identifiers.utils import ReturnCapturingGenerator from vet.truncation import ContextBudget from vet.truncation import get_available_tokens diff --git a/vet/issue_identifiers/registry.py b/vet/issue_identifiers/registry.py @@ -11,48 +11,30 @@ from typing import TypeVar from loguru import logger -from vet.imbue_core.agents.primitives.resource_limits import ( - ensure_global_resource_limits, -) +from vet.imbue_core.agents.primitives.resource_limits import ensure_global_resource_limits from vet.imbue_core.data_types import IssueCode from vet.imbue_core.data_types import IssueIdentificationDebugInfo from vet.imbue_core.data_types import IssueIdentificationLLMResponseMetadata from vet.imbue_core.data_types import IssueIdentifierResult from vet.imbue_core.data_types import IssueIdentifierType from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputs -from vet.imbue_tools.get_conversation_history.input_data_types import ( - IdentifierInputsMissingError, -) +from vet.imbue_tools.get_conversation_history.input_data_types import IdentifierInputsMissingError from vet.imbue_tools.repo_utils.project_context import ProjectContext from vet.imbue_tools.types.vet_config import VetConfig from vet.imbue_tools.types.vet_config import get_enabled_issue_codes -from vet.issue_identifiers.agentic_issue_collation import ( - collate_issues_with_agent, -) +from vet.issue_identifiers.agentic_issue_collation import collate_issues_with_agent from vet.issue_identifiers.base import IssueIdentifier from vet.issue_identifiers.common import GeneratedIssueSchema from vet.issue_identifiers.common import convert_to_issue_identifier_result from vet.issue_identifiers.harnesses.agentic import AgenticHarness from vet.issue_identifiers.harnesses.base import IssueIdentifierHarness -from vet.issue_identifiers.harnesses.conversation_single_prompt import ( - ConversationSinglePromptHarness, -) +from vet.issue_identifiers.harnesses.conversation_single_prompt import ConversationSinglePromptHarness from vet.issue_identifiers.harnesses.single_prompt import SinglePromptHarness -from vet.issue_identifiers.identification_guides import ( - ISSUE_CODES_FOR_BATCHED_COMMIT_CHECK, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_CODES_FOR_CONVERSATION_HISTORY_CHECK, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_CODES_FOR_CORRECTNESS_CHECK, -) -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) -from vet.issue_identifiers.identification_guides import ( - IssueIdentificationGuide, -) +from vet.issue_identifiers.identification_guides import ISSUE_CODES_FOR_BATCHED_COMMIT_CHECK +from vet.issue_identifiers.identification_guides import ISSUE_CODES_FOR_CONVERSATION_HISTORY_CHECK +from vet.issue_identifiers.identification_guides import ISSUE_CODES_FOR_CORRECTNESS_CHECK +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE +from vet.issue_identifiers.identification_guides import IssueIdentificationGuide from vet.issue_identifiers.identification_guides import apply_custom_guides from vet.issue_identifiers.issue_deduplication import deduplicate_issues from vet.issue_identifiers.issue_evaluation import filter_issues diff --git a/vet/issue_identifiers/test_prompt_lengths.py b/vet/issue_identifiers/test_prompt_lengths.py @@ -5,9 +5,7 @@ from vet.imbue_tools.get_conversation_history.input_data_types import CommitInpu from vet.imbue_tools.repo_utils.project_context import BaseProjectContext from vet.imbue_tools.types.vet_config import VetConfig from vet.issue_identifiers import registry -from vet.issue_identifiers.identification_guides import ( - ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE, -) +from vet.issue_identifiers.identification_guides import ISSUE_IDENTIFICATION_GUIDES_BY_ISSUE_CODE from vet.repo_utils import VET_MAX_PROMPT_TOKENS EMPTY_PROJECT_CONTEXT = BaseProjectContext(file_contents_by_path=FrozenDict(), cached_prompt_prefix="") diff --git a/vet/repo_utils.py b/vet/repo_utils.py @@ -1,10 +1,10 @@ from pathlib import Path -from vet.imbue_core.async_monkey_patches import log_exception from vet.errors import GitException from vet.errors import RunCommandError from vet.git import SyncLocalGitRepo from vet.git import find_relative_to_commit_hash +from vet.imbue_core.async_monkey_patches import log_exception # Maximum length of LLM prompts used within vet in tokens, without the repository-specific context. # Currently, the prompt is well under 10k tokens, but this value might need to be bumped up if we add a lot of additional diff --git a/vet/truncation.py b/vet/truncation.py @@ -3,9 +3,8 @@ from typing import Callable from loguru import logger -from vet.repo_utils import VET_MAX_PROMPT_TOKENS - from vet.imbue_tools.types.vet_config import VetConfig +from vet.repo_utils import VET_MAX_PROMPT_TOKENS class ContextBudget(Enum): diff --git a/vet/truncation_test.py b/vet/truncation_test.py @@ -1,9 +1,14 @@ from typing import Callable import tiktoken -from hypothesis import given, settings, strategies as st, assume - -from vet.truncation import ContextBudget, get_token_budget, truncate_to_token_limit +from hypothesis import assume +from hypothesis import given +from hypothesis import settings +from hypothesis import strategies as st + +from vet.truncation import ContextBudget +from vet.truncation import get_token_budget +from vet.truncation import truncate_to_token_limit def word_count(text: str) -> int: diff --git a/vet/vet_types/chat_state.py b/vet/vet_types/chat_state.py @@ -12,7 +12,6 @@ from vet.imbue_core.pydantic_serialization import build_discriminator from vet.vet_types.ids import TaskID from vet.vet_types.ids import ToolUseID - # ======================== # Chat Type Definitions # ========================