Skip to content

Commit c98cf51

Browse files
committed
[GuideLLM Refactor] core updates for pyproject.toml and settings.py \#352\n\nfeatures/refactor/core
2 parents a2d19cd + c12c4f8 commit c98cf51

File tree

21 files changed

+92
-80
lines changed

21 files changed

+92
-80
lines changed

pyproject.toml

Lines changed: 71 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -24,9 +24,8 @@ name = "guidellm"
2424
description = "Guidance platform for deploying and managing large language models."
2525
readme = { file = "README.md", content-type = "text/markdown" }
2626
requires-python = ">=3.9.0,<4.0"
27-
license = "Apache-2.0"
28-
license-files = ["LICENSE"]
29-
authors = [ { name = "Red Hat" } ]
27+
license = { text = "Apache-2.0" }
28+
authors = [{ name = "Red Hat" }]
3029
keywords = [
3130
"ai",
3231
"benchmarking",
@@ -47,18 +46,24 @@ keywords = [
4746
]
4847
dependencies = [
4948
"click>=8.0.0,<8.2.0",
49+
"culsans~=0.9.0",
5050
"datasets",
51+
"eval_type_backport",
52+
"faker",
5153
"ftfy>=6.0.0",
5254
"httpx[http2]<1.0.0",
5355
"loguru",
56+
"msgpack",
5457
"numpy",
5558
"pillow",
5659
"protobuf",
5760
"pydantic>=2.11.7",
5861
"pydantic-settings>=2.0.0",
5962
"pyyaml>=6.0.0",
6063
"rich",
64+
"sanic",
6165
"transformers",
66+
"uvloop>=0.18",
6267
]
6368

6469
[project.optional-dependencies]
@@ -81,7 +86,7 @@ dev = [
8186
# testing
8287
"lorem~=0.1.1",
8388
"pytest~=8.2.2",
84-
"pytest-asyncio~=0.23.8",
89+
"pytest-asyncio~=1.1.0",
8590
"pytest-cov~=5.0.0",
8691
"pytest-mock~=3.14.0",
8792
"pytest-rerunfailures~=14.0",
@@ -143,11 +148,17 @@ exclude = ["venv", ".tox"]
143148
follow_imports = 'silent'
144149

145150
[[tool.mypy.overrides]]
146-
module = ["datasets.*", "transformers.*", "setuptools.*", "setuptools_git_versioning.*"]
147-
ignore_missing_imports=true
151+
module = [
152+
"datasets.*",
153+
"transformers.*",
154+
"setuptools.*",
155+
"setuptools_git_versioning.*",
156+
]
157+
ignore_missing_imports = true
148158

149159

150160
[tool.ruff]
161+
target-version = "py39"
151162
line-length = 88
152163
indent-width = 4
153164
exclude = ["build", "dist", "env", ".venv"]
@@ -158,82 +169,83 @@ indent-style = "space"
158169

159170
[tool.ruff.lint]
160171
ignore = [
161-
"PLR0913",
162-
"TC001",
163-
"COM812",
164-
"ISC001",
165-
"TC002",
172+
"COM812", # ignore trailing comma errors due to older Python versions
173+
"PD011", # ignore .values usage since ruff assumes it's a Pandas DataFrame
174+
"PLR0913", # ignore too many arguments in function definitions
166175
"PLW1514", # allow Path.open without encoding
167-
"RET505", # allow `else` blocks
168-
"RET506", # allow `else` blocks
169-
"PD011", # ignore .values usage since ruff assumes it's a Pandas DataFrame
176+
"RET505", # allow `else` blocks
177+
"RET506", # allow `else` blocks
178+
"S311", # allow standard pseudo-random generators
179+
"TC001", # ignore imports used only for type checking
180+
"TC002", # ignore imports used only for type checking
181+
"TC003", # ignore imports used only for type checking
170182
]
171183
select = [
172184
# Rules reference: https://docs.astral.sh/ruff/rules/
173185

174186
# Code Style / Formatting
175-
"E", # pycodestyle: checks adherence to PEP 8 conventions including spacing, indentation, and line length
176-
"W", # pycodestyle: checks adherence to PEP 8 conventions including spacing, indentation, and line length
177-
"A", # flake8-builtins: prevents shadowing of Python built-in names
178-
"C", # Convention: ensures code adheres to specific style and formatting conventions
179-
"COM", # flake8-commas: enforces the correct use of trailing commas
180-
"ERA", # eradicate: detects commented-out code that should be removed
181-
"I", # isort: ensures imports are sorted in a consistent manner
182-
"ICN", # flake8-import-conventions: enforces import conventions for better readability
183-
"N", # pep8-naming: enforces PEP 8 naming conventions for classes, functions, and variables
184-
"NPY", # NumPy: enforces best practices for using the NumPy library
185-
"PD", # pandas-vet: enforces best practices for using the pandas library
186-
"PT", # flake8-pytest-style: enforces best practices and style conventions for pytest tests
187-
"PTH", # flake8-use-pathlib: encourages the use of pathlib over os.path for file system operations
188-
"Q", # flake8-quotes: enforces consistent use of single or double quotes
189-
"TCH", # flake8-type-checking: enforces type checking practices and standards
190-
"TID", # flake8-tidy-imports: enforces tidy and well-organized imports
187+
"E", # pycodestyle: checks adherence to PEP 8 conventions including spacing, indentation, and line length
188+
"W", # pycodestyle: checks adherence to PEP 8 conventions including spacing, indentation, and line length
189+
"A", # flake8-builtins: prevents shadowing of Python built-in names
190+
"C", # Convention: ensures code adheres to specific style and formatting conventions
191+
"COM", # flake8-commas: enforces the correct use of trailing commas
192+
"ERA", # eradicate: detects commented-out code that should be removed
193+
"I", # isort: ensures imports are sorted in a consistent manner
194+
"ICN", # flake8-import-conventions: enforces import conventions for better readability
195+
"N", # pep8-naming: enforces PEP 8 naming conventions for classes, functions, and variables
196+
"NPY", # NumPy: enforces best practices for using the NumPy library
197+
"PD", # pandas-vet: enforces best practices for using the pandas library
198+
"PT", # flake8-pytest-style: enforces best practices and style conventions for pytest tests
199+
"PTH", # flake8-use-pathlib: encourages the use of pathlib over os.path for file system operations
200+
"Q", # flake8-quotes: enforces consistent use of single or double quotes
201+
"TCH", # flake8-type-checking: enforces type checking practices and standards
202+
"TID", # flake8-tidy-imports: enforces tidy and well-organized imports
191203
"RUF022", # flake8-ruff: enforce sorting of __all__ in modules
192204

193205
# Code Structure / Complexity
194-
"C4", # flake8-comprehensions: improves readability and performance of list, set, and dict comprehensions
206+
"C4", # flake8-comprehensions: improves readability and performance of list, set, and dict comprehensions
195207
"C90", # mccabe: checks for overly complex code using cyclomatic complexity
196208
"ISC", # flake8-implicit-str-concat: prevents implicit string concatenation
197209
"PIE", # flake8-pie: identifies and corrects common code inefficiencies and mistakes
198-
"R", # Refactor: suggests improvements to code structure and readability
210+
"R", # Refactor: suggests improvements to code structure and readability
199211
"SIM", # flake8-simplify: simplifies complex expressions and improves code readability
200212

201213
# Code Security / Bug Prevention
202-
"ARG", # flake8-unused-arguments: detects unused function and method arguments
214+
"ARG", # flake8-unused-arguments: detects unused function and method arguments
203215
"ASYNC", # flake8-async: identifies incorrect or inefficient usage patterns in asynchronous code
204-
"B", # flake8-bugbear: detects common programming mistakes and potential bugs
205-
"BLE", # flake8-blind-except: prevents blind exceptions that catch all exceptions without handling
206-
"E", # Error: detects and reports errors in the code
207-
"F", # Pyflakes: detects unused imports, shadowed imports, undefined variables, and various formatting errors in string operations
208-
"INP", # flake8-no-pep420: prevents implicit namespace packages by requiring __init__.py
209-
"PGH", # pygrep-hooks: detects deprecated and dangerous code patterns
210-
"PL", # Pylint: comprehensive source code analyzer for enforcing coding standards and detecting errors
211-
"RSE", # flake8-raise: ensures exceptions are raised correctly
212-
"S", # flake8-bandit: detects security issues and vulnerabilities in the code
213-
"SLF", # flake8-self: prevents incorrect usage of the self argument in class methods
214-
"T10", # flake8-debugger: detects the presence of debugging tools such as pdb
215-
"T20", # flake8-print: detects print statements left in the code
216-
"UP", # pyupgrade: automatically upgrades syntax for newer versions of Python
217-
"W", # Warning: provides warnings about potential issues in the code
218-
"YTT", # flake8-2020: identifies code that will break with future Python releases
216+
"B", # flake8-bugbear: detects common programming mistakes and potential bugs
217+
"BLE", # flake8-blind-except: prevents blind exceptions that catch all exceptions without handling
218+
"E", # Error: detects and reports errors in the code
219+
"F", # Pyflakes: detects unused imports, shadowed imports, undefined variables, and various formatting errors in string operations
220+
"INP", # flake8-no-pep420: prevents implicit namespace packages by requiring __init__.py
221+
"PGH", # pygrep-hooks: detects deprecated and dangerous code patterns
222+
"PL", # Pylint: comprehensive source code analyzer for enforcing coding standards and detecting errors
223+
"RSE", # flake8-raise: ensures exceptions are raised correctly
224+
"S", # flake8-bandit: detects security issues and vulnerabilities in the code
225+
"SLF", # flake8-self: prevents incorrect usage of the self argument in class methods
226+
"T10", # flake8-debugger: detects the presence of debugging tools such as pdb
227+
"T20", # flake8-print: detects print statements left in the code
228+
"UP", # pyupgrade: automatically upgrades syntax for newer versions of Python
229+
"W", # Warning: provides warnings about potential issues in the code
230+
"YTT", # flake8-2020: identifies code that will break with future Python releases
219231

220232
# Code Documentation
221233
"FIX", # flake8-fixme: detects FIXMEs and other temporary comments that should be resolved
222234
]
223235

224236
[tool.ruff.lint.extend-per-file-ignores]
225237
"tests/**/*.py" = [
226-
"S101", # asserts allowed in tests
227-
"ARG", # Unused function args allowed in tests
238+
"S101", # asserts allowed in tests
239+
"ARG", # Unused function args allowed in tests
228240
"PLR2004", # Magic value used in comparison
229-
"TCH002", # No import only type checking in tests
230-
"SLF001", # enable private member access in tests
231-
"S105", # allow hardcoded passwords in tests
232-
"S311", # allow standard pseudo-random generators in tests
233-
"PT011", # allow generic exceptions in tests
234-
"N806", # allow uppercase variable names in tests
235-
"PGH003", # allow general ignores in tests
236-
"S106", # allow hardcoded passwords in tests
241+
"TCH002", # No import only type checking in tests
242+
"SLF001", # enable private member access in tests
243+
"S105", # allow hardcoded passwords in tests
244+
"S311", # allow standard pseudo-random generators in tests
245+
"PT011", # allow generic exceptions in tests
246+
"N806", # allow uppercase variable names in tests
247+
"PGH003", # allow general ignores in tests
248+
"S106", # allow hardcoded passwords in tests
237249
"PLR0915", # allow complext statements in tests
238250
]
239251

@@ -246,5 +258,5 @@ addopts = '-s -vvv --cache-clear'
246258
markers = [
247259
"smoke: quick tests to check basic functionality",
248260
"sanity: detailed tests to ensure major functions work correctly",
249-
"regression: tests to ensure that new changes do not break existing functionality"
261+
"regression: tests to ensure that new changes do not break existing functionality",
250262
]

src/guidellm/__init__.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,8 @@
2020
hf_logging.set_verbosity_error()
2121
logging.getLogger("transformers").setLevel(logging.ERROR)
2222

23-
from .config import (
23+
from .logger import configure_logger, logger
24+
from .settings import (
2425
DatasetSettings,
2526
Environment,
2627
LoggingSettings,
@@ -30,7 +31,6 @@
3031
reload_settings,
3132
settings,
3233
)
33-
from .logger import configure_logger, logger
3434

3535
__all__ = [
3636
"DatasetSettings",

src/guidellm/__main__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@
1313
)
1414
from guidellm.benchmark.entrypoints import benchmark_with_scenario
1515
from guidellm.benchmark.scenario import GenerativeTextScenario, get_builtin_scenarios
16-
from guidellm.config import print_config
1716
from guidellm.preprocess.dataset import ShortPromptStrategy, process_dataset
1817
from guidellm.scheduler import StrategyType
18+
from guidellm.settings import print_config
1919
from guidellm.utils import DefaultGroupHandler
2020
from guidellm.utils import cli as cli_tools
2121

src/guidellm/backend/backend.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from PIL import Image
88

99
from guidellm.backend.response import ResponseSummary, StreamingTextResponse
10-
from guidellm.config import settings
10+
from guidellm.settings import settings
1111

1212
__all__ = [
1313
"Backend",

src/guidellm/backend/openai.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
ResponseSummary,
1717
StreamingTextResponse,
1818
)
19-
from guidellm.config import settings
19+
from guidellm.settings import settings
2020

2121
__all__ = [
2222
"CHAT_COMPLETIONS",

src/guidellm/backend/response.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,8 @@
22

33
from pydantic import computed_field
44

5-
from guidellm.config import settings
65
from guidellm.objects.pydantic import StandardBaseModel
6+
from guidellm.settings import settings
77

88
__all__ = [
99
"RequestArgs",

src/guidellm/benchmark/aggregator.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
GenerativeTextErrorStats,
2222
GenerativeTextResponseStats,
2323
)
24-
from guidellm.config import settings
2524
from guidellm.objects import (
2625
RunningStats,
2726
StandardBaseModel,
@@ -40,6 +39,7 @@
4039
SchedulerRequestResult,
4140
WorkerDescription,
4241
)
42+
from guidellm.settings import settings
4343
from guidellm.utils import check_load_processor
4444

4545
__all__ = [

src/guidellm/benchmark/output.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@
2020
SweepProfile,
2121
ThroughputProfile,
2222
)
23-
from guidellm.config import settings
2423
from guidellm.objects import (
2524
DistributionSummary,
2625
StandardBaseModel,
@@ -29,6 +28,7 @@
2928
from guidellm.presentation import UIDataBuilder
3029
from guidellm.presentation.injector import create_report
3130
from guidellm.scheduler import strategy_display_str
31+
from guidellm.settings import settings
3232
from guidellm.utils import Colors, split_text_list_by_length
3333
from guidellm.utils.dict import recursive_key_update
3434
from guidellm.utils.text import camelize_str

src/guidellm/benchmark/profile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import numpy as np
55
from pydantic import Field, computed_field
66

7-
from guidellm.config import settings
87
from guidellm.objects import StandardBaseModel
98
from guidellm.scheduler import (
109
AsyncConstantStrategy,
@@ -15,6 +14,7 @@
1514
SynchronousStrategy,
1615
ThroughputStrategy,
1716
)
17+
from guidellm.settings import settings
1818

1919
__all__ = [
2020
"AsyncProfile",

src/guidellm/logger.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@
4141

4242
from loguru import logger
4343

44-
from guidellm.config import LoggingSettings, settings
44+
from guidellm.settings import LoggingSettings, settings
4545

4646
__all__ = ["configure_logger", "logger"]
4747

@@ -72,7 +72,7 @@ def configure_logger(config: LoggingSettings = settings.logging):
7272
sys.stdout,
7373
level=config.console_log_level.upper(),
7474
format="<green>{time:YY-MM-DD HH:mm:ss}</green>|<level>{level: <8}</level> \
75-
|<cyan>{name}:{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>"
75+
|<cyan>{name}:{function}</cyan>:<cyan>{line}</cyan> - <level>{message}</level>",
7676
)
7777

7878
if config.log_file or config.log_file_level:

0 commit comments

Comments
 (0)