-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathllm_functions.py
More file actions
96 lines (83 loc) · 2.67 KB
/
llm_functions.py
File metadata and controls
96 lines (83 loc) · 2.67 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import json
import streamlit as st
from db import db_client
from llm import embed
_functions_dict = {
"remember": {
"name": "remember",
"description": "Remember information for future reference.",
"parameters": {
"type": "object",
"properties": {
"memory": {
"type": "string",
"description": "The information you want to remember.",
},
},
"required": ["memory"],
},
},
"recall": {
"name": "recall",
"description": "Recall information from memory.",
"parameters": {
"type": "object",
"properties": {
"query": {
"type": "string",
"description": (
"A natural language query to retrieve a memory."
),
},
},
"required": ["query"],
},
},
}
functions = list(_functions_dict.values()) # Export for OpenAI as an array
def call_function(name: str, arguments: str) -> str:
"""Calls a function and returns the result."""
# Ensure the function is defined
if name not in _functions_dict:
return "Function not defined."
# Convert the function arguments from a string to a dict
function_arguments_dict = json.loads(arguments)
# Ensure the function arguments are valid
function_parameters = _functions_dict[name]["parameters"]["properties"]
for argument in function_arguments_dict:
if argument not in function_parameters:
return f"{argument} not defined."
# Call the function and return the result
return globals()[name](**function_arguments_dict)
def remember(memory: str) -> str:
"""Remembers information for future reference."""
embedding = embed(memory)
db_client().table("memories").insert(
{
"user_email": st.experimental_user.email,
"memory_text": memory,
"memory_embedding": embedding,
}
).execute()
return "Remembered."
def recall(query: str) -> str:
"""Recalls information from memory."""
query_embedding = embed(query)
memories = (
db_client()
.rpc(
"recall_memories",
{
"query_embedding": query_embedding,
"match_threshold": 0.8,
"match_count": 10,
},
)
.eq("user_email", st.experimental_user.email)
.execute()
)
if len(memories.data) == 0:
return "No memories found."
return "Remembered:\n\n" + "\n\n".join(
[m["memory_text"] for m in memories.data]
)