From 904e917f1fe820cc49f3e67f1e963a852b73fcc4 Mon Sep 17 00:00:00 2001 From: Marker689 Date: Sun, 10 May 2026 07:59:57 +0300 Subject: [PATCH] =?UTF-8?q?refactor:=20=D1=84=D0=B0=D0=B7=D0=B0=205=20?= =?UTF-8?q?=E2=80=94=20=D1=87=D0=B8=D1=81=D1=82=D0=BA=D0=B0=20(APP=5FVERSI?= =?UTF-8?q?ON,=20LLM=20=D0=BA=D0=BE=D0=BD=D1=81=D1=82=D0=B0=D0=BD=D1=82?= =?UTF-8?q?=D1=8B)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - constants.py: APP_VERSION, LLM_DEFAULT_TEMPERATURE, LLM_RESPONSE_FORMAT - main.py: версия из APP_VERSION (вместо хардкод '0.1.0'×2) - llm.py: temperature и response_format из constants Всего: 85 тестов, ruff clean --- guarddog_nexus/constants.py | 3 +++ guarddog_nexus/core/llm.py | 6 +++--- guarddog_nexus/main.py | 12 +++++++++--- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/guarddog_nexus/constants.py b/guarddog_nexus/constants.py index 9747e9b..448ed70 100644 --- a/guarddog_nexus/constants.py +++ b/guarddog_nexus/constants.py @@ -154,6 +154,8 @@ CSV_MEDIA_TYPE = "text/csv" LLM_DEFAULT_MODEL = "gpt-4o-mini" LLM_DEFAULT_API_BASE = "https://api.openai.com/v1" LLM_DEFAULT_TIMEOUT = 30 +LLM_DEFAULT_TEMPERATURE = 0.3 +LLM_RESPONSE_FORMAT = "json_object" LLM_ANALYSIS_SYSTEM_PROMPT = ( "You are a security analyst reviewing GuardDog findings for a software package. " "Given a finding (rule name, severity, message, code snippet, location), " @@ -173,6 +175,7 @@ LLM_ANALYSIS_SYSTEM_PROMPT = ( APP_NAME = "GuardDog Nexus" APP_DESCRIPTION = "Scan PyPI packages from Sonatype Nexus webhooks using GuardDog" APP_PACKAGE = "guarddog_nexus" +APP_VERSION = "0.1.0" # --------------------------------------------------------------------------- # HTTP diff --git a/guarddog_nexus/core/llm.py b/guarddog_nexus/core/llm.py index b5055a7..74af3cd 100644 --- a/guarddog_nexus/core/llm.py +++ b/guarddog_nexus/core/llm.py @@ -9,7 +9,7 @@ import json import httpx from ..config import config -from ..constants import LLM_ANALYSIS_SYSTEM_PROMPT +from ..constants import LLM_ANALYSIS_SYSTEM_PROMPT, LLM_DEFAULT_TEMPERATURE, LLM_RESPONSE_FORMAT from ..logging_setup import log _llm_semaphore = asyncio.Semaphore(config.llm_max_concurrent) @@ -60,8 +60,8 @@ async def analyze_finding(finding_data: dict) -> dict | None: {"role": "system", "content": LLM_ANALYSIS_SYSTEM_PROMPT}, {"role": "user", "content": _build_user_message(finding_data)}, ], - "temperature": 0.3, - "response_format": {"type": "json_object"}, + "temperature": LLM_DEFAULT_TEMPERATURE, + "response_format": {"type": LLM_RESPONSE_FORMAT}, } try: diff --git a/guarddog_nexus/main.py b/guarddog_nexus/main.py index 2013f1c..9536575 100644 --- a/guarddog_nexus/main.py +++ b/guarddog_nexus/main.py @@ -9,7 +9,13 @@ from fastapi.staticfiles import StaticFiles from starlette.middleware.base import BaseHTTPMiddleware from guarddog_nexus.config import config -from guarddog_nexus.constants import APP_DESCRIPTION, APP_NAME, APP_PACKAGE, STATIC_MOUNT_PATH +from guarddog_nexus.constants import ( + APP_DESCRIPTION, + APP_NAME, + APP_PACKAGE, + APP_VERSION, + STATIC_MOUNT_PATH, +) from guarddog_nexus.db.engine import init_db from guarddog_nexus.i18n import DEFAULT_LANG, LANGUAGES from guarddog_nexus.logging_setup import log @@ -52,7 +58,7 @@ async def lifespan(app: FastAPI): app = FastAPI( title=APP_NAME, - version="0.1.0", + version=APP_VERSION, description=APP_DESCRIPTION, lifespan=lifespan, ) @@ -71,7 +77,7 @@ if os.path.isdir(STATIC_DIR): @app.get("/health") async def health(): - return {"status": "ok", "version": "0.1.0"} + return {"status": "ok", "version": APP_VERSION} def main():