Add OpenMemory (#2676)
Co-authored-by: Saket Aryan <94069182+whysosaket@users.noreply.github.com> Co-authored-by: Saket Aryan <saketaryan2002@gmail.com>
This commit is contained in:
37
openmemory/api/app/utils/categorization.py
Normal file
37
openmemory/api/app/utils/categorization.py
Normal file
@@ -0,0 +1,37 @@
|
||||
import json
|
||||
import logging
|
||||
|
||||
from openai import OpenAI
|
||||
from typing import List
|
||||
from dotenv import load_dotenv
|
||||
from pydantic import BaseModel
|
||||
from tenacity import retry, stop_after_attempt, wait_exponential
|
||||
from app.utils.prompts import MEMORY_CATEGORIZATION_PROMPT
|
||||
|
||||
load_dotenv()
|
||||
|
||||
openai_client = OpenAI()
|
||||
|
||||
|
||||
class MemoryCategories(BaseModel):
|
||||
categories: List[str]
|
||||
|
||||
|
||||
@retry(stop=stop_after_attempt(3), wait=wait_exponential(multiplier=1, min=4, max=15))
|
||||
def get_categories_for_memory(memory: str) -> List[str]:
|
||||
"""Get categories for a memory."""
|
||||
try:
|
||||
response = openai_client.responses.parse(
|
||||
model="gpt-4o-mini",
|
||||
instructions=MEMORY_CATEGORIZATION_PROMPT,
|
||||
input=memory,
|
||||
temperature=0,
|
||||
text_format=MemoryCategories,
|
||||
)
|
||||
response_json =json.loads(response.output[0].content[0].text)
|
||||
categories = response_json['categories']
|
||||
categories = [cat.strip().lower() for cat in categories]
|
||||
# TODO: Validate categories later may be
|
||||
return categories
|
||||
except Exception as e:
|
||||
raise e
|
||||
Reference in New Issue
Block a user