Skip to content

Commit ab54dde

Browse files
feat: simplify Loader.fetch api patching
1 parent fb0a8ac commit ab54dde

File tree

2 files changed

+30
-10
lines changed

2 files changed

+30
-10
lines changed

src/promplate_pyodide/__init__.py

+17-10
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,18 @@
44
from pathlib import Path
55
from types import FunctionType
66

7+
from .utils.check import is_fake_httpx, is_fake_openai
78
from .utils.stack_switching import stack_switching_supported
89

910

1011
def patch_promplate():
1112
import promplate
1213

13-
class Loader(promplate.template.Loader):
14-
"""making HTTP requests in pyodide runtime"""
14+
if is_fake_httpx():
15+
from promplate.prompt.template import Loader
1516

1617
@classmethod
18+
@wraps(Loader.afetch)
1719
async def afetch(cls, url: str, **kwargs):
1820
from pyodide.http import pyfetch
1921

@@ -24,6 +26,7 @@ async def afetch(cls, url: str, **kwargs):
2426
return obj
2527

2628
@classmethod
29+
@wraps(Loader.fetch)
2730
def fetch(cls, url: str, **kwargs):
2831
if stack_switching_supported():
2932
from pyodide.ffi import run_sync # type: ignore
@@ -39,15 +42,11 @@ def fetch(cls, url: str, **kwargs):
3942

4043
return obj
4144

42-
class Node(Loader, promplate.Node):
43-
"""patched for making HTTP requests in pyodide runtime"""
45+
Loader.afetch = afetch # type: ignore
46+
Loader.fetch = fetch # type: ignore
4447

45-
class Template(Loader, promplate.Template):
46-
"""patched for making HTTP requests in pyodide runtime"""
47-
48-
promplate.template.Loader = Loader
49-
promplate.template.Template = promplate.Template = Template
50-
promplate.node.Node = promplate.Node = Node
48+
if not is_fake_openai():
49+
return
5150

5251
patch_class(promplate.node.Interruptable)
5352

@@ -87,12 +86,20 @@ async def patch_openai(fallback_import_url: str = "https://esm.sh/openai"):
8786

8887
await ensure_openai(fallback_import_url)
8988

89+
if not is_fake_openai():
90+
return
91+
9092
import openai
9193

9294
openai.Client = openai.AsyncClient = translate_openai()
9395

9496

9597
def patch_httpx():
98+
with suppress(ModuleNotFoundError):
99+
import httpx # noqa: F401
100+
101+
return
102+
96103
from pyodide.code import run_js
97104
from pyodide.ffi import register_js_module
98105

src/promplate_pyodide/utils/check.py

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
from pyodide.ffi import JsProxy
2+
3+
4+
def is_fake_openai():
5+
import openai
6+
7+
return isinstance(openai, JsProxy)
8+
9+
10+
def is_fake_httpx():
11+
import httpx
12+
13+
return isinstance(httpx, JsProxy)

0 commit comments

Comments
 (0)