Source code for gptcache.adapter.base
from abc import ABCMeta
from typing import Any, Dict, Callable, Optional
[docs]class BaseCacheLLM(metaclass=ABCMeta):
"""Base LLM, When you have enhanced llm without using the original llm api,
you can use this class as a proxy to use the ability of the cache.
NOTE: Please make sure that the custom llm returns the same value as the original llm.
For example, if you use the openai proxy, you perform delay statistics before sending the openai request,
and then you package this part of the function, so you may have a separate package, which is different from openai.
If the api request parameters and return results you wrap are the same as the original ones,
then you can use this class to obtain cache-related capabilities.
Example:
.. code-block:: python
import time
import openai
from gptcache import Cache
from gptcache.adapter import openai as cache_openai
def proxy_openai_chat_complete(*args, **kwargs):
start_time = time.time()
res = openai.ChatCompletion.create(*args, **kwargs)
print("Consume Time Spent =", round((time.time() - start_time), 2))
return res
llm_cache = Cache()
cache_openai.ChatCompletion.llm = proxy_openai_chat_complete
cache_openai.ChatCompletion.cache_args = {"cache_obj": llm_cache}
cache_openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=[
{
"role": "user",
"content": "What's GitHub?",
}
],
)
"""
llm: Optional[Callable] = None
"""
On a cache miss, if that variable is set, it will be called;
if not, it will call the original llm.
"""
cache_args: Dict[str, Any] = {}
"""
It can be used to set some cache-related public parameters.
If you don't want to set the same parameters every time when using cache, say cache_obj, you can use it.
"""
[docs] @classmethod
def fill_base_args(cls, **kwargs):
""" Fill the base args to the cache args
"""
for key, value in cls.cache_args.items():
if key not in kwargs:
kwargs[key] = value
return kwargs