Spaces:
Configuration error
Configuration error
from langchain_openai import OpenAIEmbeddings | |
from langchain_community.vectorstores import FAISS | |
import os | |
import gradio as gr | |
import json | |
import os | |
# get the root path of the project | |
current_file_path = os.path.dirname(os.path.abspath(__file__)) | |
root_path = os.path.abspath(current_file_path) | |
class RepoSearch: | |
def __init__(self): | |
# db_path = os.path.join(root_path, "database", "faiss_index") | |
db_path = root_path | |
embeddings = OpenAIEmbeddings(api_key="sk-Mo5K9m2hKXjV1DeGeBAIzXLZFxxiOTvSwUoemKmfMXdmE9Bs", | |
base_url="https://api.wlai.vip/v1", | |
model="text-embedding-3-small") | |
assert os.path.exists(db_path), f"Database not found: {db_path}" | |
self.vector_db = FAISS.load_local(db_path, embeddings, | |
allow_dangerous_deserialization=True) | |
def search(self, query, k=10): | |
''' | |
name + description + html_url + topics | |
''' | |
results = self.vector_db.similarity_search(query + " technology", k=k) | |
simple_str = "" | |
for i, doc in enumerate(results): | |
content = json.loads(doc.page_content) | |
if content["description"] is None: | |
content["description"] = "" | |
desc = content["description"] if len(content["description"]) < 300 else content["description"][:300] + "..." | |
simple_str += f"\t**{i+1}. {content['name']}** || **Description:** {desc} || **Url:** {content['html_url']} \n" | |
return simple_str | |
def main(): | |
search = RepoSearch() | |
def respond( | |
prompt: str, | |
history, | |
): | |
if not history: | |
history = [{"role": "system", "content": "You are a friendly chatbot"}] | |
history.append({"role": "user", "content": prompt}) | |
yield history | |
response = {"role": "assistant", "content": ""} | |
response["content"] = search.search(prompt) | |
yield history + [response] | |
with gr.Blocks() as demo: | |
gr.Markdown("## Semantic github search (基于语义的 github 仓库搜索) 🌐") | |
chatbot = gr.Chatbot( | |
label="Agent", | |
type="messages", | |
avatar_images=( | |
None, | |
"https://img1.baidu.com/it/u=2193901176,1740242983&fm=253&fmt=auto&app=138&f=JPEG?w=500&h=500", | |
), | |
height="65vh" | |
) | |
prompt = gr.Textbox(max_lines=2, label="Chat Message") | |
prompt.submit(respond, [prompt, chatbot], [chatbot]) | |
prompt.submit(lambda: "", None, [prompt]) | |
demo.launch(share=True) | |
if __name__ == "__main__": | |
main() |