1- import os
2- import sys
31import importlib .util
2+ import sys
43from importlib .machinery import SourceFileLoader
5-
64from deepeval .openai .patch import patch_openai
75
8- # ——— 1) Locate the real OpenAI package on disk ———
9- spec = importlib .util .find_spec ("openai" )
10- if not spec or not spec .origin :
11- raise ImportError ("OpenAI package not found" )
12- origin = spec .origin
13- subpkg_paths = spec .submodule_search_locations
14-
15- # ——— 2) Prepare a “fork” module loader ———
16- loader = SourceFileLoader ("deepeval_openai_fork" , origin )
17- fork_spec = importlib .util .spec_from_loader (
18- "deepeval_openai_fork" , loader , origin = origin , is_package = True
19- )
20-
21- # ——— 3) Instantiate the module and preserve its package path ———
22- fork = importlib .util .module_from_spec (fork_spec )
23- fork .__path__ = subpkg_paths # so internal imports still resolve
24-
25- # ——— 4) Register, load, and patch the forked copy ———
26- sys .modules [fork_spec .name ] = fork
27- loader .exec_module (fork )
28- patch_openai (fork )
6+ def load_and_patch_openai ():
7+ openai_spec = importlib .util .find_spec ("openai" )
8+ if not openai_spec or not openai_spec .origin :
9+ raise ImportError ("Could not find the OpenAI package" )
2910
30- # ——— 5) Export only inside deepeval.openai ———
31- openai = fork
32- OpenAI = fork .OpenAI
33- AsyncOpenAI = fork .AsyncOpenAI
11+ init_file = openai_spec .origin
12+ package_dirs = openai_spec .submodule_search_locations
13+ loader = SourceFileLoader ("deepeval_openai" , init_file )
14+ new_spec = importlib .util .spec_from_loader (
15+ "deepeval_openai" ,
16+ loader ,
17+ origin = init_file ,
18+ is_package = True ,
19+ )
20+ deepeval_openai = importlib .util .module_from_spec (new_spec )
21+ deepeval_openai .__path__ = package_dirs
22+ sys .modules ["deepeval_openai" ] = deepeval_openai
23+ loader .exec_module (deepeval_openai )
24+ patch_openai (deepeval_openai )
25+ return deepeval_openai
3426
27+ # Load and patch OpenAI
28+ _openai = load_and_patch_openai ()
29+ openai = _openai
30+ OpenAI = _openai .OpenAI
31+ AsyncOpenAI = _openai .AsyncOpenAI
3532__all__ = ["openai" , "OpenAI" , "AsyncOpenAI" ] + [
3633 name for name in dir (openai ) if not name .startswith ("_" )
37- ]
34+ ]
0 commit comments