Skip to content

Commit

Permalink
add caching
Browse files Browse the repository at this point in the history
  • Loading branch information
zhourunlong committed Nov 29, 2024
1 parent 1e96873 commit aa8de91
Show file tree
Hide file tree
Showing 2 changed files with 61 additions and 0 deletions.
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -348,3 +348,4 @@ out
data/mini-husky/basic/
experiments/transformer-vs-recursive/results/
experiments/transformer-vs-recursive/figures/
projects/ai-math-autoformalization/python/.chat_completion_cache/cache.db
60 changes: 60 additions & 0 deletions projects/ai-math-autoformalization/python/utils.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
from openai import OpenAI
import hashlib
from diskcache import Cache

cache = Cache(".chat_completion_cache")

class ChatCompletionAPI:
def __init__(self, type, model=None):
if type == "local":
self.client = OpenAI(base_url="http://172.28.6.60:8000/v1") # DO NOT CHANGE THIS LINE
self.model = "/local1/models/models--meta-llama--Llama-3.1-70B-Instruct/snapshots/945c8663693130f8be2ee66210e062158b2a9693" # DO NOT CHANGE THIS LINE
elif type == "openai":
self.client = OpenAI()
self.model = model
else:
raise ValueError("Invalid type")

def _generate_cache_key(self, model, messages):
messages_str = "".join([msg["role"] + msg["content"] for msg in messages])
key_base = f"{model}:{messages_str}"
cache_key = hashlib.md5(key_base.encode()).hexdigest()
return cache_key

def _fetch_completion(self, model, messages, use_cache):
if use_cache:
cache_key = self._generate_cache_key(model, messages)
cached_result = cache.get(cache_key)
if cached_result:
return cached_result

completion = self.client.chat.completions.create(
model=model,
messages=messages
)
result = {
"role": completion.choices[0].message.role,
"content": completion.choices[0].message.content,
}
cache.set(cache_key, result)
return result

def chat_completion(self, messages, use_cache=True):
return self._fetch_completion(self.model, messages, use_cache)

if __name__ == "__main__":
api = ChatCompletionAPI("local")

messages = [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": "What is the capital of France?"},
]
for _ in range(3):
completion = api.chat_completion(messages)
print(completion["content"])

messages.append(completion)
messages.append({
"role": "user",
"content": "Tell me more fun facts about this city.",
})

0 comments on commit aa8de91

Please sign in to comment.