@@ -26,6 +26,20 @@ class FieldInfoWithName(NamedTuple):
2626
2727
2828class ChatAdapter (Adapter ):
29+ def __init__ (
30+ self ,
31+ callbacks = None ,
32+ use_native_function_calling : bool = False ,
33+ native_response_types = None ,
34+ use_json_adapter_fallback : bool = True ,
35+ ):
36+ super ().__init__ (
37+ callbacks = callbacks ,
38+ use_native_function_calling = use_native_function_calling ,
39+ native_response_types = native_response_types ,
40+ )
41+ self .use_json_adapter_fallback = use_json_adapter_fallback
42+
2943 def __call__ (
3044 self ,
3145 lm : LM ,
@@ -40,9 +54,13 @@ def __call__(
4054 # fallback to JSONAdapter
4155 from dspy .adapters .json_adapter import JSONAdapter
4256
43- if isinstance (e , ContextWindowExceededError ) or isinstance (self , JSONAdapter ):
44- # On context window exceeded error or already using JSONAdapter, we don't want to retry with a different
45- # adapter.
57+ if (
58+ isinstance (e , ContextWindowExceededError )
59+ or isinstance (self , JSONAdapter )
60+ or not self .use_json_adapter_fallback
61+ ):
62+ # On context window exceeded error, already using JSONAdapter, or use_json_adapter_fallback is False
63+ # we don't want to retry with a different adapter. Raise the original error instead of the fallback error.
4664 raise e
4765 return JSONAdapter ()(lm , lm_kwargs , signature , demos , inputs )
4866
@@ -60,9 +78,13 @@ async def acall(
6078 # fallback to JSONAdapter
6179 from dspy .adapters .json_adapter import JSONAdapter
6280
63- if isinstance (e , ContextWindowExceededError ) or isinstance (self , JSONAdapter ):
64- # On context window exceeded error or already using JSONAdapter, we don't want to retry with a different
65- # adapter.
81+ if (
82+ isinstance (e , ContextWindowExceededError )
83+ or isinstance (self , JSONAdapter )
84+ or not self .use_json_adapter_fallback
85+ ):
86+ # On context window exceeded error, already using JSONAdapter, or use_json_adapter_fallback is False
87+ # we don't want to retry with a different adapter. Raise the original error instead of the fallback error.
6688 raise e
6789 return await JSONAdapter ().acall (lm , lm_kwargs , signature , demos , inputs )
6890
0 commit comments