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.
@@ -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
+ ]
@@ -0,0 +1,6 @@
1
+ """python -m relay_audit 入口"""
2
+
3
+ from .cli import main
4
+
5
+ if __name__ == "__main__":
6
+ raise SystemExit(main())
@@ -0,0 +1,3 @@
1
+ """版本号单一来源 — 供 __init__ / models / pyproject 引用,避免重复硬编码漂移"""
2
+
3
+ __version__ = "2.3.0"