|
26 | 26 | OpenAIResponsesCompactionMode = Literal["previous_response_id", "input", "auto"] |
27 | 27 |
|
28 | 28 |
|
29 | | -def _method_accepts_wrapper(method: Any) -> bool: |
| 29 | +def _method_signature(method: Any) -> tuple[inspect.Parameter, ...]: |
30 | 30 | try: |
31 | | - parameters = tuple(inspect.signature(method).parameters.values()) |
| 31 | + return tuple(inspect.signature(method).parameters.values()) |
32 | 32 | except (TypeError, ValueError): |
33 | | - return False |
| 33 | + return () |
| 34 | + |
| 35 | + |
34 | 36 |
|
| 37 | +def _method_accepts_wrapper(method: Any) -> bool: |
| 38 | + parameters = _method_signature(method) |
35 | 39 | return any( |
36 | 40 | parameter.kind is inspect.Parameter.VAR_KEYWORD or parameter.name == "wrapper" |
37 | 41 | for parameter in parameters |
38 | 42 | ) |
39 | 43 |
|
40 | 44 |
|
| 45 | + |
| 46 | +def _method_accepts_limit(method: Any) -> bool: |
| 47 | + parameters = _method_signature(method) |
| 48 | + return any( |
| 49 | + ( |
| 50 | + parameter.kind |
| 51 | + in (inspect.Parameter.POSITIONAL_OR_KEYWORD, inspect.Parameter.KEYWORD_ONLY) |
| 52 | + and parameter.name == "limit" |
| 53 | + ) |
| 54 | + or parameter.kind is inspect.Parameter.VAR_KEYWORD |
| 55 | + for parameter in parameters |
| 56 | + ) |
| 57 | + |
| 58 | + |
41 | 59 | def select_compaction_candidate_items( |
42 | 60 | items: list[TResponseInputItem], |
43 | 61 | ) -> list[TResponseInputItem]: |
@@ -255,8 +273,17 @@ async def get_items( |
255 | 273 | limit: int | None = None, |
256 | 274 | wrapper: RunContextWrapper[Any] | None = None, |
257 | 275 | ) -> list[TResponseInputItem]: |
258 | | - if wrapper is not None and _method_accepts_wrapper(self.underlying_session.get_items): |
259 | | - return await self.underlying_session.get_items(limit, wrapper=wrapper) |
| 276 | + accepts_wrapper = wrapper is not None and _method_accepts_wrapper( |
| 277 | + self.underlying_session.get_items |
| 278 | + ) |
| 279 | + |
| 280 | + if limit is None: |
| 281 | + if accepts_wrapper: |
| 282 | + return await self.underlying_session.get_items(wrapper=wrapper) |
| 283 | + return await self.underlying_session.get_items() |
| 284 | + |
| 285 | + if accepts_wrapper and _method_accepts_limit(self.underlying_session.get_items): |
| 286 | + return await self.underlying_session.get_items(limit=limit, wrapper=wrapper) |
260 | 287 | return await self.underlying_session.get_items(limit) |
261 | 288 |
|
262 | 289 | async def _defer_compaction(self, response_id: str, store: bool | None = None) -> None: |
|
0 commit comments