julien-c HF staff commited on
Commit
218d226
·
verified ·
1 Parent(s): 992104c

Format code

Browse files
Files changed (3) hide show
  1. .gitignore +1 -0
  2. .vscode/settings.json +6 -0
  3. app.py +52 -14
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .env/
.vscode/settings.json ADDED
@@ -0,0 +1,6 @@
 
 
 
 
 
 
 
1
+ {
2
+ "[python]": {
3
+ "editor.defaultFormatter": "ms-python.black-formatter"
4
+ },
5
+ "editor.formatOnSave": true
6
+ }
app.py CHANGED
@@ -5,50 +5,79 @@ import torch
5
  from transformers import AutoModel, AutoTokenizer
6
  import meilisearch
7
 
8
- tokenizer = AutoTokenizer.from_pretrained('BAAI/bge-base-en-v1.5')
9
- model = AutoModel.from_pretrained('BAAI/bge-base-en-v1.5')
 
10
  model.eval()
11
 
12
  cuda_available = torch.cuda.is_available()
13
  print(f"CUDA available: {cuda_available}")
14
 
15
- meilisearch_client = meilisearch.Client("https://edge.meilisearch.com", os.environ["MEILISEARCH_KEY"])
 
 
16
  meilisearch_index_name = "docs-embed"
17
  meilisearch_index = meilisearch_client.index(meilisearch_index_name)
18
 
19
  output_options = ["RAG-friendly", "human-friendly"]
20
 
 
21
  def search_embeddings(query_text, output_option):
22
  start_time_embedding = time.time()
23
- query_prefix = 'Represent this sentence for searching code documentation: '
24
- query_tokens = tokenizer(query_prefix + query_text, padding=True, truncation=True, return_tensors='pt', max_length=512)
 
 
 
 
 
 
25
  # step1: tokenizer the query
26
  with torch.no_grad():
27
  # Compute token embeddings
28
  model_output = model(**query_tokens)
29
  sentence_embeddings = model_output[0][:, 0]
30
  # normalize embeddings
31
- sentence_embeddings = torch.nn.functional.normalize(sentence_embeddings, p=2, dim=1)
 
 
32
  sentence_embeddings_list = sentence_embeddings[0].tolist()
33
  elapsed_time_embedding = time.time() - start_time_embedding
34
-
35
  # step2: search meilisearch
36
  start_time_meilisearch = time.time()
37
  response = meilisearch_index.search(
38
- "", opt_params={"vector": sentence_embeddings_list, "hybrid": {"semanticRatio": 1.0}, "limit": 5, "attributesToRetrieve": ["text", "source_page_url", "source_page_title", "library"]}
 
 
 
 
 
 
 
 
 
 
 
39
  )
40
  elapsed_time_meilisearch = time.time() - start_time_meilisearch
41
  hits = response["hits"]
42
 
43
- sources_md = [f"[\"{hit['source_page_title']}\"]({hit['source_page_url']})" for hit in hits]
 
 
44
  sources_md = ", ".join(sources_md)
45
 
46
  # step3: present the results in markdown
47
  if output_option == "human-friendly":
48
  md = f"Stats:\n\nembedding time: {elapsed_time_embedding:.2f}s\n\nmeilisearch time: {elapsed_time_meilisearch:.2f}s\n\n---\n\n"
49
  for hit in hits:
50
- text, source_page_url, source_page_title = hit["text"], hit["source_page_url"], hit["source_page_title"]
51
- source = f"src: [\"{source_page_title}\"]({source_page_url})"
 
 
 
 
52
  md += text + f"\n\n{source}\n\n---\n\n"
53
  return md, sources_md
54
  elif output_option == "RAG-friendly":
@@ -59,11 +88,20 @@ def search_embeddings(query_text, output_option):
59
 
60
  demo = gr.Interface(
61
  fn=search_embeddings,
62
- inputs=[gr.Textbox(label="enter your query", placeholder="Type Markdown here...", lines=10), gr.Radio(label="Select an output option", choices=output_options, value="RAG-friendly")],
 
 
 
 
 
 
 
 
 
63
  outputs=[gr.Markdown(), gr.Markdown()],
64
  title="HF Docs Emebddings Explorer",
65
- allow_flagging="never"
66
  )
67
 
68
  if __name__ == "__main__":
69
- demo.launch()
 
5
  from transformers import AutoModel, AutoTokenizer
6
  import meilisearch
7
 
8
+
9
+ tokenizer = AutoTokenizer.from_pretrained("BAAI/bge-base-en-v1.5")
10
+ model = AutoModel.from_pretrained("BAAI/bge-base-en-v1.5")
11
  model.eval()
12
 
13
  cuda_available = torch.cuda.is_available()
14
  print(f"CUDA available: {cuda_available}")
15
 
16
+ meilisearch_client = meilisearch.Client(
17
+ "https://edge.meilisearch.com", os.environ["MEILISEARCH_KEY"]
18
+ )
19
  meilisearch_index_name = "docs-embed"
20
  meilisearch_index = meilisearch_client.index(meilisearch_index_name)
21
 
22
  output_options = ["RAG-friendly", "human-friendly"]
23
 
24
+
25
  def search_embeddings(query_text, output_option):
26
  start_time_embedding = time.time()
27
+ query_prefix = "Represent this sentence for searching code documentation: "
28
+ query_tokens = tokenizer(
29
+ query_prefix + query_text,
30
+ padding=True,
31
+ truncation=True,
32
+ return_tensors="pt",
33
+ max_length=512,
34
+ )
35
  # step1: tokenizer the query
36
  with torch.no_grad():
37
  # Compute token embeddings
38
  model_output = model(**query_tokens)
39
  sentence_embeddings = model_output[0][:, 0]
40
  # normalize embeddings
41
+ sentence_embeddings = torch.nn.functional.normalize(
42
+ sentence_embeddings, p=2, dim=1
43
+ )
44
  sentence_embeddings_list = sentence_embeddings[0].tolist()
45
  elapsed_time_embedding = time.time() - start_time_embedding
46
+
47
  # step2: search meilisearch
48
  start_time_meilisearch = time.time()
49
  response = meilisearch_index.search(
50
+ "",
51
+ opt_params={
52
+ "vector": sentence_embeddings_list,
53
+ "hybrid": {"semanticRatio": 1.0},
54
+ "limit": 5,
55
+ "attributesToRetrieve": [
56
+ "text",
57
+ "source_page_url",
58
+ "source_page_title",
59
+ "library",
60
+ ],
61
+ },
62
  )
63
  elapsed_time_meilisearch = time.time() - start_time_meilisearch
64
  hits = response["hits"]
65
 
66
+ sources_md = [
67
+ f"[\"{hit['source_page_title']}\"]({hit['source_page_url']})" for hit in hits
68
+ ]
69
  sources_md = ", ".join(sources_md)
70
 
71
  # step3: present the results in markdown
72
  if output_option == "human-friendly":
73
  md = f"Stats:\n\nembedding time: {elapsed_time_embedding:.2f}s\n\nmeilisearch time: {elapsed_time_meilisearch:.2f}s\n\n---\n\n"
74
  for hit in hits:
75
+ text, source_page_url, source_page_title = (
76
+ hit["text"],
77
+ hit["source_page_url"],
78
+ hit["source_page_title"],
79
+ )
80
+ source = f'src: ["{source_page_title}"]({source_page_url})'
81
  md += text + f"\n\n{source}\n\n---\n\n"
82
  return md, sources_md
83
  elif output_option == "RAG-friendly":
 
88
 
89
  demo = gr.Interface(
90
  fn=search_embeddings,
91
+ inputs=[
92
+ gr.Textbox(
93
+ label="enter your query", placeholder="Type Markdown here...", lines=10
94
+ ),
95
+ gr.Radio(
96
+ label="Select an output option",
97
+ choices=output_options,
98
+ value="RAG-friendly",
99
+ ),
100
+ ],
101
  outputs=[gr.Markdown(), gr.Markdown()],
102
  title="HF Docs Emebddings Explorer",
103
+ allow_flagging="never",
104
  )
105
 
106
  if __name__ == "__main__":
107
+ demo.launch()