relay-audit 2.3.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- relay_audit/__init__.py +136 -0
- relay_audit/__main__.py +6 -0
- relay_audit/_version.py +3 -0
- relay_audit/analysis.py +660 -0
- relay_audit/calibrate.py +286 -0
- relay_audit/cli.py +628 -0
- relay_audit/client.py +317 -0
- relay_audit/models.py +173 -0
- relay_audit/patterns.py +208 -0
- relay_audit/reporter.py +808 -0
- relay_audit/scanner.py +757 -0
- relay_audit/serve.py +389 -0
- relay_audit-2.3.0.dist-info/METADATA +301 -0
- relay_audit-2.3.0.dist-info/RECORD +18 -0
- relay_audit-2.3.0.dist-info/WHEEL +5 -0
- relay_audit-2.3.0.dist-info/entry_points.txt +3 -0
- relay_audit-2.3.0.dist-info/licenses/LICENSE +21 -0
- relay_audit-2.3.0.dist-info/top_level.txt +1 -0
relay_audit/__init__.py
ADDED
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
"""Relay Audit - OpenAI-compatible 中转 API 安全与质量检测工具
|
|
2
|
+
|
|
3
|
+
模块化设计:
|
|
4
|
+
- models: 数据模型 (Severity, Finding, ChatResult, ScanConfig, ScanResult)
|
|
5
|
+
- patterns: 检测模式 & 常量 (危险内容、模型名、代理头、拒绝模式)
|
|
6
|
+
- analysis: 分析逻辑 (乱码、模型、响应头、Token、安全、稳定性、并发)
|
|
7
|
+
- client: httpx 异步 API 客户端
|
|
8
|
+
- scanner: 测试编排 (6大类别 20+ 项检测)
|
|
9
|
+
- reporter: 报告生成 (HTML/终端/JSON)
|
|
10
|
+
- cli: 命令行入口 + 交互模式
|
|
11
|
+
- serve: HTTP 报告浏览服务器
|
|
12
|
+
"""
|
|
13
|
+
|
|
14
|
+
import os
|
|
15
|
+
import sys
|
|
16
|
+
from pathlib import Path
|
|
17
|
+
|
|
18
|
+
from ._version import __version__
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
def _default_reports_dir() -> Path:
|
|
22
|
+
"""报告目录:优先环境变量,其次用户数据目录。
|
|
23
|
+
|
|
24
|
+
- RELAY_AUDIT_REPORTS_DIR=<path> 显式指定
|
|
25
|
+
- Windows: %LOCALAPPDATA%/relay-audit/reports
|
|
26
|
+
- Linux/macOS: ~/.relay_audit/reports
|
|
27
|
+
|
|
28
|
+
不使用包安装位置上级目录,避免 pip 安装后写入 site-packages。
|
|
29
|
+
"""
|
|
30
|
+
env = os.environ.get("RELAY_AUDIT_REPORTS_DIR", "").strip()
|
|
31
|
+
if env:
|
|
32
|
+
return Path(env).expanduser().resolve()
|
|
33
|
+
if sys.platform == "win32":
|
|
34
|
+
base = os.environ.get("LOCALAPPDATA") or str(Path.home())
|
|
35
|
+
return Path(base) / "relay-audit" / "reports"
|
|
36
|
+
return Path.home() / ".relay_audit" / "reports"
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
REPORTS_DIR = _default_reports_dir()
|
|
40
|
+
|
|
41
|
+
from relay_audit.analysis import (
|
|
42
|
+
analyze_chat,
|
|
43
|
+
analyze_concurrent,
|
|
44
|
+
analyze_error_pattern,
|
|
45
|
+
analyze_headers,
|
|
46
|
+
analyze_model_swap,
|
|
47
|
+
analyze_models,
|
|
48
|
+
analyze_stability,
|
|
49
|
+
analyze_usage,
|
|
50
|
+
encoding_consistency,
|
|
51
|
+
mojibake_score,
|
|
52
|
+
)
|
|
53
|
+
from relay_audit.client import ApiClient
|
|
54
|
+
from relay_audit.models import (
|
|
55
|
+
ChatResult,
|
|
56
|
+
Finding,
|
|
57
|
+
ModelInfo,
|
|
58
|
+
ScanConfig,
|
|
59
|
+
ScanResult,
|
|
60
|
+
Severity,
|
|
61
|
+
)
|
|
62
|
+
from relay_audit.patterns import (
|
|
63
|
+
CAT_CN,
|
|
64
|
+
DANGER_PATTERNS,
|
|
65
|
+
KNOWN_FAMILIES,
|
|
66
|
+
PROVIDER_HINTS,
|
|
67
|
+
PROXY_HEADERS,
|
|
68
|
+
REFUSAL_PATTERNS,
|
|
69
|
+
SAFETY_TEST_NAMES,
|
|
70
|
+
SEV_CN,
|
|
71
|
+
SUS_MODEL_PATTERNS,
|
|
72
|
+
redact,
|
|
73
|
+
short,
|
|
74
|
+
)
|
|
75
|
+
from relay_audit.reporter import (
|
|
76
|
+
compute_pass_rate,
|
|
77
|
+
generate_html,
|
|
78
|
+
print_json,
|
|
79
|
+
print_terminal,
|
|
80
|
+
save_report,
|
|
81
|
+
)
|
|
82
|
+
from relay_audit.scanner import (
|
|
83
|
+
FUNCTION_CALLING_TOOLS,
|
|
84
|
+
PROMPTS,
|
|
85
|
+
TestCase,
|
|
86
|
+
fetch_models,
|
|
87
|
+
run_scan,
|
|
88
|
+
)
|
|
89
|
+
|
|
90
|
+
__all__ = [
|
|
91
|
+
"__version__",
|
|
92
|
+
# models
|
|
93
|
+
"ChatResult",
|
|
94
|
+
"Finding",
|
|
95
|
+
"ModelInfo",
|
|
96
|
+
"ScanConfig",
|
|
97
|
+
"ScanResult",
|
|
98
|
+
"Severity",
|
|
99
|
+
# patterns
|
|
100
|
+
"CAT_CN",
|
|
101
|
+
"DANGER_PATTERNS",
|
|
102
|
+
"KNOWN_FAMILIES",
|
|
103
|
+
"PROVIDER_HINTS",
|
|
104
|
+
"PROXY_HEADERS",
|
|
105
|
+
"REFUSAL_PATTERNS",
|
|
106
|
+
"SAFETY_TEST_NAMES",
|
|
107
|
+
"SEV_CN",
|
|
108
|
+
"SUS_MODEL_PATTERNS",
|
|
109
|
+
"redact",
|
|
110
|
+
"short",
|
|
111
|
+
# analysis
|
|
112
|
+
"analyze_chat",
|
|
113
|
+
"analyze_concurrent",
|
|
114
|
+
"analyze_error_pattern",
|
|
115
|
+
"analyze_headers",
|
|
116
|
+
"analyze_model_swap",
|
|
117
|
+
"analyze_models",
|
|
118
|
+
"analyze_stability",
|
|
119
|
+
"analyze_usage",
|
|
120
|
+
"encoding_consistency",
|
|
121
|
+
"mojibake_score",
|
|
122
|
+
# client
|
|
123
|
+
"ApiClient",
|
|
124
|
+
# scanner
|
|
125
|
+
"FUNCTION_CALLING_TOOLS",
|
|
126
|
+
"PROMPTS",
|
|
127
|
+
"TestCase",
|
|
128
|
+
"fetch_models",
|
|
129
|
+
"run_scan",
|
|
130
|
+
# reporter
|
|
131
|
+
"compute_pass_rate",
|
|
132
|
+
"generate_html",
|
|
133
|
+
"print_json",
|
|
134
|
+
"print_terminal",
|
|
135
|
+
"save_report",
|
|
136
|
+
]
|
relay_audit/__main__.py
ADDED
relay_audit/_version.py
ADDED