Francogv commited on
Commit
fb8a717
verified
1 Parent(s): e87e27a

Update api_semantica.py

Browse files
Files changed (1) hide show
  1. api_semantica.py +56 -51
api_semantica.py CHANGED
@@ -1,51 +1,56 @@
1
- from fastapi import FastAPI
2
- from pydantic import BaseModel
3
- from sentence_transformers import SentenceTransformer, util
4
- import numpy as np
5
- import json
6
- import uvicorn
7
-
8
- app = FastAPI()
9
-
10
- # Cargar el modelo
11
- modelo = SentenceTransformer("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
12
-
13
- # Cargar la base de embeddings
14
- with open("base_semantica.json", "r", encoding="utf-8") as f:
15
- base = json.load(f)
16
-
17
- # Pydantic schema para entrada
18
- class PreguntaInput(BaseModel):
19
- pregunta: str
20
- top_k: int = 3
21
-
22
- # Funci贸n de b煤squeda
23
- def buscar_semanticamente(pregunta, top_k=3):
24
- emb_pregunta = modelo.encode(pregunta)
25
- resultados = []
26
- for item in base:
27
- emb_item = np.array(item["embedding"], dtype=np.float32)
28
- score = util.cos_sim(emb_pregunta, emb_item).item()
29
- resultados.append((score, item))
30
- resultados.sort(reverse=True, key=lambda x: x[0])
31
- return resultados[:top_k]
32
-
33
- # Endpoint principal
34
- @app.post("/buscar")
35
- async def buscar(input: PreguntaInput):
36
- resultados = buscar_semanticamente(input.pregunta, input.top_k)
37
- return {
38
- "pregunta": input.pregunta,
39
- "resultados": [
40
- {
41
- "score": round(score, 4),
42
- "titulo": item["titulo"],
43
- "url": item["url"],
44
- "texto": item["texto"]
45
- } for score, item in resultados
46
- ]
47
- }
48
-
49
- # Para correr en Hugging Face
50
- if __name__ == "__main__":
51
- uvicorn.run(app, host="0.0.0.0", port=7860)
 
 
 
 
 
 
1
+ from fastapi import FastAPI
2
+ from pydantic import BaseModel
3
+ from sentence_transformers import SentenceTransformer, util
4
+ import numpy as np
5
+ import json
6
+ import uvicorn
7
+ import os
8
+
9
+ os.environ["HF_HOME"] = "/data"
10
+ os.environ["TRANSFORMERS_CACHE"] = "/data"
11
+ os.environ["SENTENCE_TRANSFORMERS_HOME"] = "/data"
12
+
13
+ app = FastAPI()
14
+
15
+ # Cargar el modelo
16
+ modelo = SentenceTransformer("sentence-transformers/paraphrase-multilingual-mpnet-base-v2")
17
+
18
+ # Cargar la base de embeddings
19
+ with open("base_semantica.json", "r", encoding="utf-8") as f:
20
+ base = json.load(f)
21
+
22
+ # Pydantic schema para entrada
23
+ class PreguntaInput(BaseModel):
24
+ pregunta: str
25
+ top_k: int = 3
26
+
27
+ # Funci贸n de b煤squeda
28
+ def buscar_semanticamente(pregunta, top_k=3):
29
+ emb_pregunta = modelo.encode(pregunta)
30
+ resultados = []
31
+ for item in base:
32
+ emb_item = np.array(item["embedding"], dtype=np.float32)
33
+ score = util.cos_sim(emb_pregunta, emb_item).item()
34
+ resultados.append((score, item))
35
+ resultados.sort(reverse=True, key=lambda x: x[0])
36
+ return resultados[:top_k]
37
+
38
+ # Endpoint principal
39
+ @app.post("/buscar")
40
+ async def buscar(input: PreguntaInput):
41
+ resultados = buscar_semanticamente(input.pregunta, input.top_k)
42
+ return {
43
+ "pregunta": input.pregunta,
44
+ "resultados": [
45
+ {
46
+ "score": round(score, 4),
47
+ "titulo": item["titulo"],
48
+ "url": item["url"],
49
+ "texto": item["texto"]
50
+ } for score, item in resultados
51
+ ]
52
+ }
53
+
54
+ # Para correr en Hugging Face
55
+ if __name__ == "__main__":
56
+ uvicorn.run(app, host="0.0.0.0", port=7860)