|
4 | 4 |
|
5 | 5 | from __future__ import annotations |
6 | 6 |
|
| 7 | +import dataclasses |
7 | 8 | from typing import Any |
8 | 9 |
|
9 | 10 | from lmdeploy.messages import GenerationConfig |
10 | 11 | from lmdeploy.utils import get_logger |
11 | 12 |
|
12 | 13 | logger = get_logger('lmdeploy') |
13 | 14 |
|
14 | | -PROTOCOL_FALLBACKS: dict[str, Any] = { |
15 | | - 'temperature': 0.7, |
16 | | - 'top_p': 1.0, |
17 | | - 'top_k': 40, |
18 | | - 'repetition_penalty': 1.0, |
19 | | - 'min_p': 0.0, |
20 | | - 'do_sample': True, |
21 | | -} |
22 | | - |
23 | | -REQUEST_SAMPLING_FIELDS = ( |
24 | | - 'temperature', |
25 | | - 'top_p', |
26 | | - 'top_k', |
27 | | - 'min_p', |
28 | | - 'repetition_penalty', |
29 | | -) |
30 | | - |
31 | 15 |
|
32 | 16 | def _load_hf_generation_config(path: str, trust_remote_code: bool) -> dict[str, Any]: |
33 | 17 | from transformers import GenerationConfig |
@@ -66,55 +50,45 @@ def resolve_default_gen_config( |
66 | 50 | def merge_sampling_params( |
67 | 51 | request_values: dict[str, Any], |
68 | 52 | default_gen_config: dict[str, Any], |
69 | | - fallbacks: dict[str, Any] | None = None, |
70 | 53 | ) -> dict[str, Any]: |
71 | | - """Merge sampling params with request > default_gen_config > protocol |
72 | | - fallback priority.""" |
73 | | - fallbacks = fallbacks or PROTOCOL_FALLBACKS |
| 54 | + """Merge sampling params with request > default_gen_config priority.""" |
74 | 55 | merged: dict[str, Any] = {} |
75 | | - all_keys = set(fallbacks) | set(default_gen_config) | set(request_values) |
76 | | - for key in all_keys: |
| 56 | + for key in set(default_gen_config) | set(request_values): |
77 | 57 | if key in request_values: |
78 | 58 | merged[key] = request_values[key] |
79 | | - elif key in default_gen_config: |
| 59 | + else: |
80 | 60 | merged[key] = default_gen_config[key] |
81 | | - elif key in fallbacks: |
82 | | - merged[key] = fallbacks[key] |
83 | 61 | return merged |
84 | 62 |
|
85 | 63 |
|
86 | 64 | def extract_request_sampling_values(request: Any) -> dict[str, Any]: |
87 | | - """Extract explicitly provided sampling fields from a request object.""" |
| 65 | + """Extract non-None GenerationConfig fields present on the request.""" |
88 | 66 | values: dict[str, Any] = {} |
89 | | - for field in REQUEST_SAMPLING_FIELDS: |
90 | | - if not hasattr(request, field): |
| 67 | + for field in dataclasses.fields(GenerationConfig): |
| 68 | + if not hasattr(request, field.name): |
91 | 69 | continue |
92 | | - value = getattr(request, field) |
| 70 | + value = getattr(request, field.name) |
93 | 71 | if value is not None: |
94 | | - values[field] = value |
| 72 | + values[field.name] = value |
95 | 73 | return values |
96 | 74 |
|
97 | 75 |
|
98 | 76 | def build_generation_config( |
99 | | - request_values: dict[str, Any], |
| 77 | + request: Any, |
100 | 78 | default_gen_config: dict[str, Any], |
101 | 79 | *, |
102 | | - max_completion_tokens: int | None = None, |
103 | | - max_tokens: int | None = None, |
104 | | - fallbacks: dict[str, Any] | None = None, |
| 80 | + max_new_tokens: int | None = None, |
105 | 81 | **extra_kwargs: Any, |
106 | 82 | ) -> GenerationConfig: |
107 | 83 | """Build ``GenerationConfig`` from merged sampling defaults and request |
108 | 84 | values.""" |
109 | | - merged = merge_sampling_params(request_values, default_gen_config, fallbacks) |
110 | | - max_new_tokens = max_completion_tokens if max_completion_tokens is not None else max_tokens |
| 85 | + request_values = extract_request_sampling_values(request) |
| 86 | + merged = merge_sampling_params(request_values, default_gen_config) |
| 87 | + merged.pop('max_new_tokens', None) |
| 88 | + merged.pop('do_sample', None) |
111 | 89 | return GenerationConfig( |
112 | 90 | max_new_tokens=max_new_tokens, |
113 | | - do_sample=merged.get('do_sample', PROTOCOL_FALLBACKS['do_sample']), |
114 | | - top_k=merged['top_k'], |
115 | | - top_p=merged['top_p'], |
116 | | - temperature=merged['temperature'], |
117 | | - repetition_penalty=merged['repetition_penalty'], |
118 | | - min_p=merged['min_p'], |
| 91 | + do_sample=True, |
| 92 | + **merged, |
119 | 93 | **extra_kwargs, |
120 | 94 | ) |
0 commit comments