Skip to content

Commit b3ceca0

Browse files
chore: speedup initial import
1 parent f3cf388 commit b3ceca0

1 file changed

Lines changed: 216 additions & 58 deletions

File tree

src/notdiamond/_client.py

Lines changed: 216 additions & 58 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
from __future__ import annotations
44

55
import os
6-
from typing import Any, Mapping
6+
from typing import TYPE_CHECKING, Any, Mapping
77
from typing_extensions import Self, override
88

99
import httpx
@@ -20,8 +20,8 @@
2020
not_given,
2121
)
2222
from ._utils import is_given, get_async_library
23+
from ._compat import cached_property
2324
from ._version import __version__
24-
from .resources import models, preferences, model_router, custom_router, prompt_adaptation
2525
from ._streaming import Stream as Stream, AsyncStream as AsyncStream
2626
from ._exceptions import APIStatusError, NotDiamondError
2727
from ._base_client import (
@@ -30,6 +30,14 @@
3030
AsyncAPIClient,
3131
)
3232

33+
if TYPE_CHECKING:
34+
from .resources import models, preferences, model_router, custom_router, prompt_adaptation
35+
from .resources.models import ModelsResource, AsyncModelsResource
36+
from .resources.preferences import PreferencesResource, AsyncPreferencesResource
37+
from .resources.model_router import ModelRouterResource, AsyncModelRouterResource
38+
from .resources.custom_router import CustomRouterResource, AsyncCustomRouterResource
39+
from .resources.prompt_adaptation import PromptAdaptationResource, AsyncPromptAdaptationResource
40+
3341
__all__ = [
3442
"Timeout",
3543
"Transport",
@@ -43,14 +51,6 @@
4351

4452

4553
class NotDiamond(SyncAPIClient):
46-
model_router: model_router.ModelRouterResource
47-
preferences: preferences.PreferencesResource
48-
prompt_adaptation: prompt_adaptation.PromptAdaptationResource
49-
custom_router: custom_router.CustomRouterResource
50-
models: models.ModelsResource
51-
with_raw_response: NotDiamondWithRawResponse
52-
with_streaming_response: NotDiamondWithStreamedResponse
53-
5454
# client options
5555
api_key: str
5656

@@ -105,13 +105,43 @@ def __init__(
105105
_strict_response_validation=_strict_response_validation,
106106
)
107107

108-
self.model_router = model_router.ModelRouterResource(self)
109-
self.preferences = preferences.PreferencesResource(self)
110-
self.prompt_adaptation = prompt_adaptation.PromptAdaptationResource(self)
111-
self.custom_router = custom_router.CustomRouterResource(self)
112-
self.models = models.ModelsResource(self)
113-
self.with_raw_response = NotDiamondWithRawResponse(self)
114-
self.with_streaming_response = NotDiamondWithStreamedResponse(self)
108+
@cached_property
109+
def model_router(self) -> ModelRouterResource:
110+
from .resources.model_router import ModelRouterResource
111+
112+
return ModelRouterResource(self)
113+
114+
@cached_property
115+
def preferences(self) -> PreferencesResource:
116+
from .resources.preferences import PreferencesResource
117+
118+
return PreferencesResource(self)
119+
120+
@cached_property
121+
def prompt_adaptation(self) -> PromptAdaptationResource:
122+
from .resources.prompt_adaptation import PromptAdaptationResource
123+
124+
return PromptAdaptationResource(self)
125+
126+
@cached_property
127+
def custom_router(self) -> CustomRouterResource:
128+
from .resources.custom_router import CustomRouterResource
129+
130+
return CustomRouterResource(self)
131+
132+
@cached_property
133+
def models(self) -> ModelsResource:
134+
from .resources.models import ModelsResource
135+
136+
return ModelsResource(self)
137+
138+
@cached_property
139+
def with_raw_response(self) -> NotDiamondWithRawResponse:
140+
return NotDiamondWithRawResponse(self)
141+
142+
@cached_property
143+
def with_streaming_response(self) -> NotDiamondWithStreamedResponse:
144+
return NotDiamondWithStreamedResponse(self)
115145

116146
@property
117147
@override
@@ -219,14 +249,6 @@ def _make_status_error(
219249

220250

221251
class AsyncNotDiamond(AsyncAPIClient):
222-
model_router: model_router.AsyncModelRouterResource
223-
preferences: preferences.AsyncPreferencesResource
224-
prompt_adaptation: prompt_adaptation.AsyncPromptAdaptationResource
225-
custom_router: custom_router.AsyncCustomRouterResource
226-
models: models.AsyncModelsResource
227-
with_raw_response: AsyncNotDiamondWithRawResponse
228-
with_streaming_response: AsyncNotDiamondWithStreamedResponse
229-
230252
# client options
231253
api_key: str
232254

@@ -281,13 +303,43 @@ def __init__(
281303
_strict_response_validation=_strict_response_validation,
282304
)
283305

284-
self.model_router = model_router.AsyncModelRouterResource(self)
285-
self.preferences = preferences.AsyncPreferencesResource(self)
286-
self.prompt_adaptation = prompt_adaptation.AsyncPromptAdaptationResource(self)
287-
self.custom_router = custom_router.AsyncCustomRouterResource(self)
288-
self.models = models.AsyncModelsResource(self)
289-
self.with_raw_response = AsyncNotDiamondWithRawResponse(self)
290-
self.with_streaming_response = AsyncNotDiamondWithStreamedResponse(self)
306+
@cached_property
307+
def model_router(self) -> AsyncModelRouterResource:
308+
from .resources.model_router import AsyncModelRouterResource
309+
310+
return AsyncModelRouterResource(self)
311+
312+
@cached_property
313+
def preferences(self) -> AsyncPreferencesResource:
314+
from .resources.preferences import AsyncPreferencesResource
315+
316+
return AsyncPreferencesResource(self)
317+
318+
@cached_property
319+
def prompt_adaptation(self) -> AsyncPromptAdaptationResource:
320+
from .resources.prompt_adaptation import AsyncPromptAdaptationResource
321+
322+
return AsyncPromptAdaptationResource(self)
323+
324+
@cached_property
325+
def custom_router(self) -> AsyncCustomRouterResource:
326+
from .resources.custom_router import AsyncCustomRouterResource
327+
328+
return AsyncCustomRouterResource(self)
329+
330+
@cached_property
331+
def models(self) -> AsyncModelsResource:
332+
from .resources.models import AsyncModelsResource
333+
334+
return AsyncModelsResource(self)
335+
336+
@cached_property
337+
def with_raw_response(self) -> AsyncNotDiamondWithRawResponse:
338+
return AsyncNotDiamondWithRawResponse(self)
339+
340+
@cached_property
341+
def with_streaming_response(self) -> AsyncNotDiamondWithStreamedResponse:
342+
return AsyncNotDiamondWithStreamedResponse(self)
291343

292344
@property
293345
@override
@@ -395,45 +447,151 @@ def _make_status_error(
395447

396448

397449
class NotDiamondWithRawResponse:
450+
_client: NotDiamond
451+
398452
def __init__(self, client: NotDiamond) -> None:
399-
self.model_router = model_router.ModelRouterResourceWithRawResponse(client.model_router)
400-
self.preferences = preferences.PreferencesResourceWithRawResponse(client.preferences)
401-
self.prompt_adaptation = prompt_adaptation.PromptAdaptationResourceWithRawResponse(client.prompt_adaptation)
402-
self.custom_router = custom_router.CustomRouterResourceWithRawResponse(client.custom_router)
403-
self.models = models.ModelsResourceWithRawResponse(client.models)
453+
self._client = client
454+
455+
@cached_property
456+
def model_router(self) -> model_router.ModelRouterResourceWithRawResponse:
457+
from .resources.model_router import ModelRouterResourceWithRawResponse
458+
459+
return ModelRouterResourceWithRawResponse(self._client.model_router)
460+
461+
@cached_property
462+
def preferences(self) -> preferences.PreferencesResourceWithRawResponse:
463+
from .resources.preferences import PreferencesResourceWithRawResponse
464+
465+
return PreferencesResourceWithRawResponse(self._client.preferences)
466+
467+
@cached_property
468+
def prompt_adaptation(self) -> prompt_adaptation.PromptAdaptationResourceWithRawResponse:
469+
from .resources.prompt_adaptation import PromptAdaptationResourceWithRawResponse
470+
471+
return PromptAdaptationResourceWithRawResponse(self._client.prompt_adaptation)
472+
473+
@cached_property
474+
def custom_router(self) -> custom_router.CustomRouterResourceWithRawResponse:
475+
from .resources.custom_router import CustomRouterResourceWithRawResponse
476+
477+
return CustomRouterResourceWithRawResponse(self._client.custom_router)
478+
479+
@cached_property
480+
def models(self) -> models.ModelsResourceWithRawResponse:
481+
from .resources.models import ModelsResourceWithRawResponse
482+
483+
return ModelsResourceWithRawResponse(self._client.models)
404484

405485

406486
class AsyncNotDiamondWithRawResponse:
487+
_client: AsyncNotDiamond
488+
407489
def __init__(self, client: AsyncNotDiamond) -> None:
408-
self.model_router = model_router.AsyncModelRouterResourceWithRawResponse(client.model_router)
409-
self.preferences = preferences.AsyncPreferencesResourceWithRawResponse(client.preferences)
410-
self.prompt_adaptation = prompt_adaptation.AsyncPromptAdaptationResourceWithRawResponse(
411-
client.prompt_adaptation
412-
)
413-
self.custom_router = custom_router.AsyncCustomRouterResourceWithRawResponse(client.custom_router)
414-
self.models = models.AsyncModelsResourceWithRawResponse(client.models)
490+
self._client = client
491+
492+
@cached_property
493+
def model_router(self) -> model_router.AsyncModelRouterResourceWithRawResponse:
494+
from .resources.model_router import AsyncModelRouterResourceWithRawResponse
495+
496+
return AsyncModelRouterResourceWithRawResponse(self._client.model_router)
497+
498+
@cached_property
499+
def preferences(self) -> preferences.AsyncPreferencesResourceWithRawResponse:
500+
from .resources.preferences import AsyncPreferencesResourceWithRawResponse
501+
502+
return AsyncPreferencesResourceWithRawResponse(self._client.preferences)
503+
504+
@cached_property
505+
def prompt_adaptation(self) -> prompt_adaptation.AsyncPromptAdaptationResourceWithRawResponse:
506+
from .resources.prompt_adaptation import AsyncPromptAdaptationResourceWithRawResponse
507+
508+
return AsyncPromptAdaptationResourceWithRawResponse(self._client.prompt_adaptation)
509+
510+
@cached_property
511+
def custom_router(self) -> custom_router.AsyncCustomRouterResourceWithRawResponse:
512+
from .resources.custom_router import AsyncCustomRouterResourceWithRawResponse
513+
514+
return AsyncCustomRouterResourceWithRawResponse(self._client.custom_router)
515+
516+
@cached_property
517+
def models(self) -> models.AsyncModelsResourceWithRawResponse:
518+
from .resources.models import AsyncModelsResourceWithRawResponse
519+
520+
return AsyncModelsResourceWithRawResponse(self._client.models)
415521

416522

417523
class NotDiamondWithStreamedResponse:
524+
_client: NotDiamond
525+
418526
def __init__(self, client: NotDiamond) -> None:
419-
self.model_router = model_router.ModelRouterResourceWithStreamingResponse(client.model_router)
420-
self.preferences = preferences.PreferencesResourceWithStreamingResponse(client.preferences)
421-
self.prompt_adaptation = prompt_adaptation.PromptAdaptationResourceWithStreamingResponse(
422-
client.prompt_adaptation
423-
)
424-
self.custom_router = custom_router.CustomRouterResourceWithStreamingResponse(client.custom_router)
425-
self.models = models.ModelsResourceWithStreamingResponse(client.models)
527+
self._client = client
528+
529+
@cached_property
530+
def model_router(self) -> model_router.ModelRouterResourceWithStreamingResponse:
531+
from .resources.model_router import ModelRouterResourceWithStreamingResponse
532+
533+
return ModelRouterResourceWithStreamingResponse(self._client.model_router)
534+
535+
@cached_property
536+
def preferences(self) -> preferences.PreferencesResourceWithStreamingResponse:
537+
from .resources.preferences import PreferencesResourceWithStreamingResponse
538+
539+
return PreferencesResourceWithStreamingResponse(self._client.preferences)
540+
541+
@cached_property
542+
def prompt_adaptation(self) -> prompt_adaptation.PromptAdaptationResourceWithStreamingResponse:
543+
from .resources.prompt_adaptation import PromptAdaptationResourceWithStreamingResponse
544+
545+
return PromptAdaptationResourceWithStreamingResponse(self._client.prompt_adaptation)
546+
547+
@cached_property
548+
def custom_router(self) -> custom_router.CustomRouterResourceWithStreamingResponse:
549+
from .resources.custom_router import CustomRouterResourceWithStreamingResponse
550+
551+
return CustomRouterResourceWithStreamingResponse(self._client.custom_router)
552+
553+
@cached_property
554+
def models(self) -> models.ModelsResourceWithStreamingResponse:
555+
from .resources.models import ModelsResourceWithStreamingResponse
556+
557+
return ModelsResourceWithStreamingResponse(self._client.models)
426558

427559

428560
class AsyncNotDiamondWithStreamedResponse:
561+
_client: AsyncNotDiamond
562+
429563
def __init__(self, client: AsyncNotDiamond) -> None:
430-
self.model_router = model_router.AsyncModelRouterResourceWithStreamingResponse(client.model_router)
431-
self.preferences = preferences.AsyncPreferencesResourceWithStreamingResponse(client.preferences)
432-
self.prompt_adaptation = prompt_adaptation.AsyncPromptAdaptationResourceWithStreamingResponse(
433-
client.prompt_adaptation
434-
)
435-
self.custom_router = custom_router.AsyncCustomRouterResourceWithStreamingResponse(client.custom_router)
436-
self.models = models.AsyncModelsResourceWithStreamingResponse(client.models)
564+
self._client = client
565+
566+
@cached_property
567+
def model_router(self) -> model_router.AsyncModelRouterResourceWithStreamingResponse:
568+
from .resources.model_router import AsyncModelRouterResourceWithStreamingResponse
569+
570+
return AsyncModelRouterResourceWithStreamingResponse(self._client.model_router)
571+
572+
@cached_property
573+
def preferences(self) -> preferences.AsyncPreferencesResourceWithStreamingResponse:
574+
from .resources.preferences import AsyncPreferencesResourceWithStreamingResponse
575+
576+
return AsyncPreferencesResourceWithStreamingResponse(self._client.preferences)
577+
578+
@cached_property
579+
def prompt_adaptation(self) -> prompt_adaptation.AsyncPromptAdaptationResourceWithStreamingResponse:
580+
from .resources.prompt_adaptation import AsyncPromptAdaptationResourceWithStreamingResponse
581+
582+
return AsyncPromptAdaptationResourceWithStreamingResponse(self._client.prompt_adaptation)
583+
584+
@cached_property
585+
def custom_router(self) -> custom_router.AsyncCustomRouterResourceWithStreamingResponse:
586+
from .resources.custom_router import AsyncCustomRouterResourceWithStreamingResponse
587+
588+
return AsyncCustomRouterResourceWithStreamingResponse(self._client.custom_router)
589+
590+
@cached_property
591+
def models(self) -> models.AsyncModelsResourceWithStreamingResponse:
592+
from .resources.models import AsyncModelsResourceWithStreamingResponse
593+
594+
return AsyncModelsResourceWithStreamingResponse(self._client.models)
437595

438596

439597
Client = NotDiamond

0 commit comments

Comments
 (0)