Skip to content

Commit 3b0a8a6

Browse files
authored
feat: add supabase_vectorstore (#117)
* 魔改一下 SupabaseVectorStore,支持 doc 表字段扩展 ![image](https://github.com/ant-xuexiao/petercat/assets/10885578/d832aed9-62a3-475e-a2cb-3c11fe4c66c5)
2 parents 4f7f870 + 46f1563 commit 3b0a8a6

File tree

5 files changed

+402
-21
lines changed

5 files changed

+402
-21
lines changed

server/agent/base.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,10 @@
88
)
99
from langchain_core.messages import AIMessage, FunctionMessage, HumanMessage
1010
from langchain.agents.output_parsers.openai_tools import OpenAIToolsAgentOutputParser
11-
from langchain.prompts import PromptTemplate, MessagesPlaceholder
11+
from langchain.prompts import MessagesPlaceholder
1212
from langchain_core.utils.function_calling import convert_to_openai_tool
1313
from langchain_core.prompts import ChatPromptTemplate
14-
from langchain.utilities.tavily_search import TavilySearchAPIWrapper
14+
from langchain_community.utilities.tavily_search import TavilySearchAPIWrapper
1515
from langchain.tools.tavily_search import TavilySearchResults
1616
from langchain_openai import ChatOpenAI
1717
from uilts.env import get_env_variable

server/data_class.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class GitIssueConfig(BaseModel):
3939
class GitDocConfig(BaseModel):
4040
repo_name: str
4141
file_path: str
42+
commit_id: Optional[str] = None
43+
commit_sha: Optional[str] = None
4244
"""File path of the documentation file. eg:'docs/blog/build-ghost.zh-CN.md'"""
4345
branch: Optional[str] = 'main'
4446

server/rag/retrieval.py

Lines changed: 34 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import json
2+
from typing import Any, Optional
23
from langchain_openai import OpenAIEmbeddings
3-
from langchain_community.vectorstores import SupabaseVectorStore
4+
from rag.supabase_vectorstore import SupabaseVectorStore
45
from db.supabase.client import get_client
56
from data_class import GitDocConfig, GitIssueConfig, S3Config
67
from rag.github_file_loader import GithubFileLoader
@@ -23,15 +24,15 @@ def convert_document_to_dict(document):
2324

2425
def init_retriever():
2526
embeddings = OpenAIEmbeddings()
26-
db = SupabaseVectorStore(
27+
vector_store = SupabaseVectorStore(
2728
embedding=embeddings,
2829
client=get_client(),
2930
table_name=TABLE_NAME,
3031
query_name=QUERY_NAME,
3132
chunk_size=CHUNK_SIZE,
3233
)
3334

34-
return db.as_retriever()
35+
return vector_store.as_retriever()
3536

3637

3738
def init_s3_Loader(config: S3Config):
@@ -61,38 +62,43 @@ def init_github_file_loader(config: GitDocConfig):
6162
)
6263
return loader
6364

64-
def supabase_embedding(documents):
65+
def supabase_embedding(documents, **kwargs: Any):
6566
from langchain_text_splitters import CharacterTextSplitter
6667

6768
try:
6869
text_splitter = CharacterTextSplitter(chunk_size=CHUNK_SIZE, chunk_overlap=CHUNK_OVERLAP)
6970
docs = text_splitter.split_documents(documents)
7071
embeddings = OpenAIEmbeddings()
71-
SupabaseVectorStore.from_documents(
72+
vector_store = SupabaseVectorStore.from_documents(
7273
docs,
7374
embeddings,
7475
client=get_client(),
7576
table_name=TABLE_NAME,
7677
query_name=QUERY_NAME,
7778
chunk_size=CHUNK_SIZE,
79+
**kwargs
7880
)
79-
return json.dumps({
80-
"success": True,
81-
"message": "Knowledge added successfully!",
82-
"docs_len": len(documents)
83-
})
81+
return vector_store
8482
except Exception as e:
85-
return json.dumps({
86-
"success": False,
87-
"message": str(e)
88-
})
83+
print(e)
84+
return None
8985

9086

91-
def add_knowledge_by_issues(config: GitIssueConfig):
87+
def add_knowledge_by_issues(config: GitIssueConfig, ):
9288
try:
9389
loader = init_github_issue_loader(config)
9490
documents = loader.load()
95-
supabase_embedding(documents)
91+
store = supabase_embedding(documents, repo_name=config.repo_name)
92+
if(store):
93+
return json.dumps({
94+
"success": True,
95+
"message": "Knowledge added successfully!",
96+
})
97+
else:
98+
return json.dumps({
99+
"success": False,
100+
"message": "Knowledge not added!"
101+
})
96102
except Exception as e:
97103
return json.dumps({
98104
"success": False,
@@ -103,7 +109,18 @@ def add_knowledge_by_doc(config: GitDocConfig):
103109
try:
104110
loader = init_github_file_loader(config)
105111
documents = loader.load()
106-
supabase_embedding(documents)
112+
store = supabase_embedding(documents, repo_name=config.repo_name, commit_id=config.commit_id, commit_sha=config.commit_sha)
113+
if(store):
114+
return json.dumps({
115+
"success": True,
116+
"message": "Knowledge added successfully!",
117+
})
118+
else:
119+
return json.dumps({
120+
"success": False,
121+
"message": "Knowledge not added!"
122+
})
123+
107124
except Exception as e:
108125
return json.dumps({
109126
"success": False,

0 commit comments

Comments
 (0)