Compare commits
3 Commits
b5f235f5ae
...
7a9a9f7de1
Author | SHA1 | Date |
---|---|---|
|
7a9a9f7de1 | |
|
3514733885 | |
|
881d3074cf |
788
apis.py
788
apis.py
|
@ -45,6 +45,14 @@ class Response(BaseModel):
|
||||||
"""
|
"""
|
||||||
path: str = Query("", description="Style and sentiments of text")
|
path: str = Query("", description="Style and sentiments of text")
|
||||||
model : str = Query("whisper", description="Style and sentiments of text")
|
model : str = Query("whisper", description="Style and sentiments of text")
|
||||||
|
class Response4(BaseModel):
|
||||||
|
path: str = Query("", description="path file")
|
||||||
|
system: str = Query("", description="prompt system LLM model with ocr and image claude")
|
||||||
|
content: str = Query("%s", description="prompt content LLM model with ocr")
|
||||||
|
max_tokens: int = Query(1024, description="maxtoken LLM OCR model")
|
||||||
|
model: str = Query("Claude-sonnet", description="model")
|
||||||
|
|
||||||
|
|
||||||
class Response1(BaseModel):
|
class Response1(BaseModel):
|
||||||
path: str = Query("", description="path file")
|
path: str = Query("", description="path file")
|
||||||
task_prompt: str = Query("", description="task of model")
|
task_prompt: str = Query("", description="task of model")
|
||||||
|
@ -66,7 +74,14 @@ class Response3(BaseModel):
|
||||||
"""
|
"""
|
||||||
path: str = Query("", description="Style and sentiments of text")
|
path: str = Query("", description="Style and sentiments of text")
|
||||||
Trusted: str = Query("", description="Style and sentiments of text")
|
Trusted: str = Query("", description="Style and sentiments of text")
|
||||||
mode : str = Query("whisper", description="Style and sentiments of text")
|
mode : str = Query("", description="Style and sentiments of text")
|
||||||
|
|
||||||
|
class Response5(BaseModel):
|
||||||
|
"""Structure of data to querry of make post from X or article blog
|
||||||
|
"""
|
||||||
|
prompt: str = Query("", description="Style and sentiments of text")
|
||||||
|
mode : str = Query("", description="Style and sentiments of text")
|
||||||
|
|
||||||
|
|
||||||
#Funcionales
|
#Funcionales
|
||||||
@app.get("/addTrusted")
|
@app.get("/addTrusted")
|
||||||
|
@ -99,11 +114,11 @@ def addTrusted(response:Response3):
|
||||||
content={"content": "file no found" }
|
content={"content": "file no found" }
|
||||||
)
|
)
|
||||||
if mode_list[mode]=="texto":
|
if mode_list[mode]=="texto":
|
||||||
hash1 = hashlib.sha256(path.encode()).hexdigest()+".txt"
|
info=str({"path":path,"trusted":Trusted,"mode":mode})
|
||||||
f = open("example/texto/"+hash1, "w")
|
hash1 = hashlib.sha256(info.encode()).hexdigest()
|
||||||
f.write(path)
|
# with open("example/texto/"+hash1, 'w') as f:
|
||||||
f.close()
|
# json.dump(info, f)
|
||||||
path=pwd+"/"+pathText+hash1
|
# path=pwd+"/"+pathText+hash1
|
||||||
length=len(Trusted)
|
length=len(Trusted)
|
||||||
size=0
|
size=0
|
||||||
duration=0
|
duration=0
|
||||||
|
@ -112,22 +127,63 @@ def addTrusted(response:Response3):
|
||||||
size=file_stats.st_size / (1024 * 1024)
|
size=file_stats.st_size / (1024 * 1024)
|
||||||
length=0
|
length=0
|
||||||
duration=0
|
duration=0
|
||||||
|
hash1=""
|
||||||
elif mode_list[mode]=="audio":
|
elif mode_list[mode]=="audio":
|
||||||
with audioread.audio_open(path) as f:
|
with audioread.audio_open(path) as f:
|
||||||
duration = f.duration
|
duration = f.duration
|
||||||
length=0
|
length=0
|
||||||
size=0
|
size=0
|
||||||
|
hash1=""
|
||||||
if db((db.trusted.path == path)&(db.trusted.mode == mode)).count()==0:
|
if db((db.trusted.path == path)&(db.trusted.mode == mode)).count()==0:
|
||||||
db.trusted.insert(path=path,trusted=Trusted,mode=mode,size=size,duration=duration,last_modified=last_modified,length=length )
|
db.trusted.insert(path=path,trusted=Trusted,mode=mode,size=size,duration=duration,last_modified=last_modified,length=length,hash=hash1 )
|
||||||
db.commit()
|
db.commit()
|
||||||
return "Add %s in mode %s"%(path,mode)
|
return "Add %s in mode %s"%(path,mode)
|
||||||
else:
|
else:
|
||||||
item=db((db.trusted.path == path)&(db.trusted.mode == mode)).select().last()
|
item=db((db.trusted.path == path)&(db.trusted.mode == mode)).select().last()
|
||||||
modification_count=item.modification_count + 1
|
modification_count=item.modification_count + 1
|
||||||
db((db.trusted.path == path)&(db.trusted.mode == mode)).update(trusted=Trusted,size=size,duration =duration,length=length,last_modified=last_modified,modification_count= modification_count)
|
db((db.trusted.path == path)&(db.trusted.mode == mode)).update(trusted=Trusted,size=size,duration =duration,length=length,last_modified=last_modified,modification_count= modification_count,hash=hash1)
|
||||||
db.commit()
|
db.commit()
|
||||||
return "Update %s in mode %s"%(path,mode)
|
return "Update %s in mode %s"%(path,mode)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/addPrompt")
|
||||||
|
@app.post("/addPrompt")
|
||||||
|
def addPrompt(response:Response5):
|
||||||
|
"""Api to add information of Trusted data
|
||||||
|
|
||||||
|
Args:
|
||||||
|
response (Response3): 3 params:
|
||||||
|
path : path of archive on system if is a file OR text if is text.
|
||||||
|
Trusted : information Trusted or better information in a process.
|
||||||
|
mode: llm_compra,llm_factura,llm_generaciontexto,llm_rag,ocr,voice,
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
_type_: _description_
|
||||||
|
"""
|
||||||
|
prompt=response.prompt
|
||||||
|
mode=response.mode
|
||||||
|
last_modified=datetime.now()
|
||||||
|
if mode not in mode_list.keys():
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=404,
|
||||||
|
content={"content": "mode no found" }
|
||||||
|
)
|
||||||
|
if mode == "llm_compra" or mode == "llm_generaciontexto":
|
||||||
|
hash1 = str(hashlib.sha256(prompt.encode()).hexdigest())
|
||||||
|
# with open("example/texto/"+hash1, 'w') as f:
|
||||||
|
# json.dump(info, f)
|
||||||
|
# path=pwd+"/"+pathText+hash1
|
||||||
|
length=len(prompt)
|
||||||
|
if db((db.prompt.hash == hash1)&(db.prompt.mode == mode)).count()==0:
|
||||||
|
db.prompt.insert(prompt=prompt,mode=mode,last_modified=last_modified,length=length,hash=hash1 )
|
||||||
|
db.commit()
|
||||||
|
return "Add %s in mode %s"%(prompt,mode)
|
||||||
|
else:
|
||||||
|
A=db((db.prompt.hash == hash1)&(db.prompt.mode == mode)).update(prompt=prompt,mode=mode,last_modified=last_modified,length=length+1,hash=hash1)
|
||||||
|
db.commit()
|
||||||
|
print(A,last_modified)
|
||||||
|
return "Update %s in mode %s"%(prompt,mode)
|
||||||
|
|
||||||
|
|
||||||
@app.get("/EvalVoice")
|
@app.get("/EvalVoice")
|
||||||
@app.post("/EvalVoice")
|
@app.post("/EvalVoice")
|
||||||
|
@ -141,17 +197,18 @@ def EvalVoice(response:Response):
|
||||||
)
|
)
|
||||||
|
|
||||||
Trusted=db((db.trusted.path == path ) & ( db.trusted.mode == "voice")).select().last().trusted
|
Trusted=db((db.trusted.path == path ) & ( db.trusted.mode == "voice")).select().last().trusted
|
||||||
print(Trusted)
|
|
||||||
if model=="whisper":
|
if model=="whisper":
|
||||||
Sal=main.EvalWhisper(path,Trusted)
|
Sal=main.EvalWhisper(path,Trusted)
|
||||||
else:
|
else:
|
||||||
Sal=main.EvalVosk(path,Trusted)
|
Sal=main.EvalVosk(path,Trusted)
|
||||||
Sal["last_modified"]=datetime.now()
|
Sal["last_modified"]=datetime.now()
|
||||||
if db(db.analitic_voice.path == Sal["path"] and db.analitic_voice.model == Sal["model"]).count()==0:
|
if db((db.analitic_voice.path == Sal["path"]) & (db.analitic_voice.model == Sal["model"])).count()==0:
|
||||||
|
print(1,Sal)
|
||||||
db.analitic_voice.insert(**Sal)
|
db.analitic_voice.insert(**Sal)
|
||||||
db.commit()
|
db.commit()
|
||||||
else:
|
else:
|
||||||
db(db.analitic_voice.path == Sal["path"] and db.analitic_voice.model == Sal["model"]).update(similarity= Sal["similarity"],similaritypartial= Sal["similaritypartial"],last_modified=Sal["last_modified"])
|
print(2,Sal)
|
||||||
|
db((db.analitic_voice.path == Sal["path"]) & (db.analitic_voice.model == Sal["model"])).update(similarity= Sal["similarity"],similaritypartial= Sal["similaritypartial"],last_modified=Sal["last_modified"])
|
||||||
db.commit()
|
db.commit()
|
||||||
return Sal
|
return Sal
|
||||||
|
|
||||||
|
@ -192,7 +249,7 @@ def EvalVoicehtml():
|
||||||
</style>
|
</style>
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<h1>Petición POST a API</h1>
|
<h1>Petición Evaluar modelo de voz contra datos curados</h1>
|
||||||
|
|
||||||
<select id="texto1">
|
<select id="texto1">
|
||||||
%s
|
%s
|
||||||
|
@ -237,6 +294,495 @@ def EvalVoicehtml():
|
||||||
"""%(Sal)
|
"""%(Sal)
|
||||||
return HTMLResponse(content=html, status_code=200)
|
return HTMLResponse(content=html, status_code=200)
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/EvalLLMCompra")
|
||||||
|
@app.post("/EvalLLMCompra")
|
||||||
|
def EvalLLMCompra(response:Response4):
|
||||||
|
content=response.path
|
||||||
|
model=response.model
|
||||||
|
system= response.system
|
||||||
|
max_tokens= response.max_tokens
|
||||||
|
path=content
|
||||||
|
|
||||||
|
if db((db.trusted.path == path ) & ( db.trusted.mode == "llm_compra")).count()==0:
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=404,
|
||||||
|
content={"content": "Trusted no found" }
|
||||||
|
)
|
||||||
|
|
||||||
|
Trusted=db((db.trusted.path == path ) & ( db.trusted.mode == "llm_compra")).select().last().trusted
|
||||||
|
Sal=main.EvalModelLLMCompra(system,content,model,max_tokens,Trusted)
|
||||||
|
Sal["last_modified"]=datetime.now()
|
||||||
|
if db((db.analitic_llm_compra.path == Sal["path"]) & (db.analitic_llm_compra.model == Sal["model"])).count()==0:
|
||||||
|
print(1,Sal)
|
||||||
|
db.analitic_llm_compra.insert(**Sal)
|
||||||
|
db.commit()
|
||||||
|
else:
|
||||||
|
print(2,Sal)
|
||||||
|
db((db.analitic_llm_compra.path == Sal["path"]) & (db.analitic_llm_compra.model == Sal["model"])).update(last_modified=Sal["last_modified"],relevance=Sal["relevance"],bias=Sal["bias"],toxic=Sal["toxic"],correctness=Sal["correctness"],relevance_r=Sal["relevance_r"],bias_r=Sal["bias_r"],toxic_r=Sal["toxic_r"],correctness_r=Sal["correctness_r"])
|
||||||
|
db.commit()
|
||||||
|
return Sal
|
||||||
|
|
||||||
|
@app.get("/evalllmcomprahtml")
|
||||||
|
def EvalLLMComprahtml():
|
||||||
|
dir_list = db((db.trusted.mode == "llm_compra" )).select()
|
||||||
|
Sal=""
|
||||||
|
t=1
|
||||||
|
for i in dir_list:
|
||||||
|
temp="""<option value="%s">Opción %s, %s</option>
|
||||||
|
"""%(i.path,str(t),str(i.path))
|
||||||
|
Sal=Sal+temp
|
||||||
|
t=t+1
|
||||||
|
|
||||||
|
dir_list2 = db((db.prompt.mode == "llm_compra" )).select()
|
||||||
|
Sal2=""
|
||||||
|
t=1
|
||||||
|
for i in dir_list2:
|
||||||
|
temp="""<option value="%s">Opción %s, %s</option>
|
||||||
|
"""%(i.prompt,str(t),str(i.prompt))
|
||||||
|
Sal2=Sal2+temp
|
||||||
|
t=t+1
|
||||||
|
|
||||||
|
|
||||||
|
html="""<!DOCTYPE html>
|
||||||
|
<html lang="es">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Evaluacion de modelos voice2txt</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
input, button {
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
#respuesta {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Petición Evaluar modelo de LLM para evaluar compras contra datos curados</h1>
|
||||||
|
|
||||||
|
<select id="texto1">
|
||||||
|
%s
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<select id="texto2">
|
||||||
|
<option value="meta-llama/Meta-Llama-3.1-70B-Instruct">meta-llama/Meta-Llama-3.1-70B-Instruct</option>
|
||||||
|
<option value="meta-llama/Meta-Llama-3.1-8B-Instruct">meta-llama/Meta-Llama-3.1-8B-Instruct</option>
|
||||||
|
<option value="Mistral">Mistral</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<select id="texto3">
|
||||||
|
%s
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto4" placeholder="max_tokens">
|
||||||
|
<br>
|
||||||
|
<button onclick="enviarPeticion()">Enviar petición</button>
|
||||||
|
<div id="respuesta"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function enviarPeticion() {
|
||||||
|
const texto1 = document.getElementById('texto1').value;
|
||||||
|
const texto2 = document.getElementById('texto2').value;
|
||||||
|
const texto3 = document.getElementById('texto3').value;
|
||||||
|
const datos = {
|
||||||
|
path: texto1,
|
||||||
|
model: texto2,
|
||||||
|
system: texto3
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
fetch('/EvalLLMCompra', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(datos)
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
document.getElementById('respuesta').innerHTML = JSON.stringify(data, null, 2);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
document.getElementById('respuesta').innerHTML = 'Error: ' + error;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""%(Sal,Sal2)
|
||||||
|
return HTMLResponse(content=html, status_code=200)
|
||||||
|
|
||||||
|
#
|
||||||
|
@app.get("/EvalLLMGeneracionTexto")
|
||||||
|
@app.post("/EvalLLMGeneracionTexto")
|
||||||
|
def EvalLLMGeneracionTexto(response:Response4):
|
||||||
|
content=response.path
|
||||||
|
model=response.model
|
||||||
|
system= response.system
|
||||||
|
max_tokens= response.max_tokens
|
||||||
|
path=content
|
||||||
|
|
||||||
|
if db((db.trusted.path == path ) & ( db.trusted.mode == "llm_generaciontexto")).count()==0:
|
||||||
|
return JSONResponse(
|
||||||
|
status_code=404,
|
||||||
|
content={"content": "Trusted no found" }
|
||||||
|
)
|
||||||
|
|
||||||
|
Trusted=db((db.trusted.path == path ) & ( db.trusted.mode == "llm_generaciontexto")).select().last().trusted
|
||||||
|
Sal=main.EvalModelLLMCompra(system,content,model,max_tokens,Trusted)
|
||||||
|
Sal["last_modified"]=datetime.now()
|
||||||
|
if db((db.analitic_llm_generaciontexto.path == Sal["path"]) & (db.analitic_llm_generaciontexto.model == Sal["model"])).count()==0:
|
||||||
|
print(1,Sal)
|
||||||
|
db.analitic_llm_generaciontexto.insert(**Sal)
|
||||||
|
db.commit()
|
||||||
|
else:
|
||||||
|
print(2,Sal)
|
||||||
|
db((db.analitic_llm_generaciontexto.path == Sal["path"]) & (db.analitic_llm_generaciontexto.model == Sal["model"])).update(last_modified=Sal["last_modified"],relevance=Sal["relevance"],bias=Sal["bias"],toxic=Sal["toxic"],correctness=Sal["correctness"],relevance_r=Sal["relevance_r"],bias_r=Sal["bias_r"],toxic_r=Sal["toxic_r"],correctness_r=Sal["correctness_r"])
|
||||||
|
db.commit()
|
||||||
|
return Sal
|
||||||
|
|
||||||
|
@app.get("/evalllmgeneraciontextohtml")
|
||||||
|
def EvalLLMGeneracionTextohtml():
|
||||||
|
dir_list = db((db.trusted.mode == "llm_generaciontexto" )).select()
|
||||||
|
Sal=""
|
||||||
|
t=1
|
||||||
|
for i in dir_list:
|
||||||
|
temp="""<option value="%s">Opción %s, %s</option>
|
||||||
|
"""%(i.path,str(t),str(i.path))
|
||||||
|
Sal=Sal+temp
|
||||||
|
t=t+1
|
||||||
|
|
||||||
|
dir_list2 = db((db.prompt.mode == "llm_generaciontexto" )).select()
|
||||||
|
Sal2=""
|
||||||
|
t=1
|
||||||
|
for i in dir_list2:
|
||||||
|
temp="""<option value="%s">Opción %s, %s</option>
|
||||||
|
"""%(i.prompt,str(t),str(i.prompt))
|
||||||
|
Sal2=Sal2+temp
|
||||||
|
t=t+1
|
||||||
|
|
||||||
|
|
||||||
|
html="""<!DOCTYPE html>
|
||||||
|
<html lang="es">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Evaluacion de modelos voice2txt</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
input, button {
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
#respuesta {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Petición Evaluar modelo de LLM para generar texto contra datos curados</h1>
|
||||||
|
|
||||||
|
<select id="texto1">
|
||||||
|
%s
|
||||||
|
</select>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
<select id="texto2">
|
||||||
|
<option value="meta-llama/Meta-Llama-3.1-70B-Instruct">meta-llama/Meta-Llama-3.1-70B-Instruct</option>
|
||||||
|
<option value="meta-llama/Meta-Llama-3.1-8B-Instruct">meta-llama/Meta-Llama-3.1-8B-Instruct</option>
|
||||||
|
<option value="Mistral">Mistral</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<select id="texto3">
|
||||||
|
%s
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto4" placeholder="max_tokens">
|
||||||
|
<br>
|
||||||
|
<button onclick="enviarPeticion()">Enviar petición</button>
|
||||||
|
<div id="respuesta"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function enviarPeticion() {
|
||||||
|
const texto1 = document.getElementById('texto1').value;
|
||||||
|
const texto2 = document.getElementById('texto2').value;
|
||||||
|
const texto3 = document.getElementById('texto3').value;
|
||||||
|
const datos = {
|
||||||
|
path: texto1,
|
||||||
|
model: texto2,
|
||||||
|
system: texto3
|
||||||
|
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
fetch('/EvalLLMGeneracionTexto', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(datos)
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
document.getElementById('respuesta').innerHTML = JSON.stringify(data, null, 2);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
document.getElementById('respuesta').innerHTML = 'Error: ' + error;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""%(Sal,Sal2)
|
||||||
|
return HTMLResponse(content=html, status_code=200)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#
|
||||||
|
|
||||||
|
@app.get("/EvalFact")
|
||||||
|
@app.post("/EvalFact")
|
||||||
|
def EvalFact(response:Response1):
|
||||||
|
path=response.path
|
||||||
|
task_prompt=response.task_prompt
|
||||||
|
option=response.model
|
||||||
|
TrustedOCR=response.TrustedOCR
|
||||||
|
Trusted=TrustedOCR
|
||||||
|
if task_prompt=="":
|
||||||
|
if Trusted=="":
|
||||||
|
row=db(db.trusted.path == path and db.trusted.mode == "OCR").select().first()
|
||||||
|
try:
|
||||||
|
Trusted=row.trusted
|
||||||
|
except:
|
||||||
|
pass
|
||||||
|
Sal=main.EvalFacturas(path,task_prompt,TrustedOCR,option)
|
||||||
|
Sal["path"]=path
|
||||||
|
if db(db.analitic_ocr.path == Sal["path"] and db.analitic_ocr.model == Sal["model"]).count()==0:
|
||||||
|
db.analitic_ocr.insert(**Sal)
|
||||||
|
db.commit()
|
||||||
|
else:
|
||||||
|
db(db.analitic_ocr.path == Sal["path"] and db.analitic_ocr.model == Sal["model"]).update(similarity= Sal["similarity"],similaritypartial= Sal["similaritypartial"],jsonok=Sal["jsonok"])
|
||||||
|
db.commit()
|
||||||
|
return Sal
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/evalocrfactura")
|
||||||
|
def EvalOCRFactura():
|
||||||
|
dir_list = os.listdir(pathFact)
|
||||||
|
Sal=""
|
||||||
|
t=1
|
||||||
|
for i in dir_list:
|
||||||
|
temp="""<option value="%s">Opción %s, %s</option>
|
||||||
|
"""%(str(pwd+"/"+pathFact+"/"+i),str(t),str(i))
|
||||||
|
Sal=Sal+temp
|
||||||
|
t=t+1
|
||||||
|
html="""<!DOCTYPE html>
|
||||||
|
<html lang="es">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Evaluacion de modelos OCR</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
input, button {
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
#respuesta {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Petición POST a API</h1>
|
||||||
|
<select id="texto1">
|
||||||
|
%s
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<select id="texto2">
|
||||||
|
<option value="More Detailed Caption">More Detailed Caption</option>
|
||||||
|
<option value="OCR">OCR</option>
|
||||||
|
<option value="parsed">parsed</option>
|
||||||
|
<option value="scan">scan</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto3" placeholder="TrustedOCR">
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto4" placeholder="option">
|
||||||
|
<br>
|
||||||
|
<button onclick="enviarPeticion()">Enviar petición</button>
|
||||||
|
<div id="respuesta"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function enviarPeticion() {
|
||||||
|
const texto1 = document.getElementById('texto1').value;
|
||||||
|
const texto2 = document.getElementById('texto2').value;
|
||||||
|
const texto3 = document.getElementById('texto3').value;
|
||||||
|
const texto4 = document.getElementById('texto4').value;
|
||||||
|
const datos = {
|
||||||
|
path: texto1,
|
||||||
|
task_prompt: texto2,
|
||||||
|
TrustedOCR: texto3,
|
||||||
|
option: texto4
|
||||||
|
};
|
||||||
|
|
||||||
|
fetch('/EvalFact', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(datos)
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
document.getElementById('respuesta').innerHTML = JSON.stringify(data, null, 2);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
document.getElementById('respuesta').innerHTML = 'Error: ' + error;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""%(Sal)
|
||||||
|
return HTMLResponse(content=html, status_code=200)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@app.get("/evalllmfacturas")
|
||||||
|
def EvalllmFacturas():
|
||||||
|
dir_list = os.listdir(pathFact)
|
||||||
|
Sal=""
|
||||||
|
t=1
|
||||||
|
for i in dir_list:
|
||||||
|
temp="""<option value="%s">Opción %s, %s</option>
|
||||||
|
"""%(str(pwd+"/"+pathFact+"/"+i),str(t),str(i))
|
||||||
|
Sal=Sal+temp
|
||||||
|
t=t+1
|
||||||
|
html="""<!DOCTYPE html>
|
||||||
|
<html lang="es">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||||
|
<title>Evaluacion modelos LLM</title>
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
font-family: Arial, sans-serif;
|
||||||
|
margin: 20px;
|
||||||
|
}
|
||||||
|
input, button {
|
||||||
|
margin: 10px 0;
|
||||||
|
padding: 5px;
|
||||||
|
}
|
||||||
|
#respuesta {
|
||||||
|
margin-top: 20px;
|
||||||
|
padding: 10px;
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
background-color: #f9f9f9;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<h1>Petición POST a API</h1>
|
||||||
|
<select id="texto1">
|
||||||
|
%s
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<select id="texto2">
|
||||||
|
<option value="">N.A.</option>
|
||||||
|
<option value="More Detailed Caption">More Detailed Caption</option>
|
||||||
|
<option value="OCR">OCR</option>
|
||||||
|
<option value="parsed">parsed</option>
|
||||||
|
<option value="scan">scan</option>
|
||||||
|
</select>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto3" placeholder="system" value="Eres un chatbot amable">
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto4" placeholder="content" value="%s">
|
||||||
|
<br>
|
||||||
|
<input type="number" id="texto5" placeholder="max_tokens" value=1024>
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto6" placeholder="model" value="Claude-sonnet">
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto7" placeholder="prompt" value="Analiza la factura">
|
||||||
|
<br>
|
||||||
|
<input type="text" id="texto8" placeholder="TrustedLLmjson" value="{'A':''}">
|
||||||
|
<br>
|
||||||
|
<button onclick="enviarPeticion()">Enviar petición</button>
|
||||||
|
<div id="respuesta"></div>
|
||||||
|
|
||||||
|
<script>
|
||||||
|
function enviarPeticion() {
|
||||||
|
const texto1 = document.getElementById('texto1').value;
|
||||||
|
const texto2 = document.getElementById('texto2').value;
|
||||||
|
const texto3 = document.getElementById('texto3').value;
|
||||||
|
const texto4 = document.getElementById('texto4').value;
|
||||||
|
const texto5 = document.getElementById('texto5').value;
|
||||||
|
const texto6 = document.getElementById('texto6').value;
|
||||||
|
const texto7 = document.getElementById('texto7').value;
|
||||||
|
const texto8 = document.getElementById('texto8').value;
|
||||||
|
|
||||||
|
const datos = {
|
||||||
|
path: texto1,
|
||||||
|
task_prompt: texto2,
|
||||||
|
system: texto3,
|
||||||
|
content:texto4,
|
||||||
|
max_tokens:texto5,
|
||||||
|
model:texto6,
|
||||||
|
prompt:texto7,
|
||||||
|
TrustedLLmjson:texto8,
|
||||||
|
};
|
||||||
|
|
||||||
|
fetch('/EvalLLMFact', {
|
||||||
|
method: 'POST',
|
||||||
|
headers: {
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
},
|
||||||
|
body: JSON.stringify(datos)
|
||||||
|
})
|
||||||
|
.then(response => response.json())
|
||||||
|
.then(data => {
|
||||||
|
document.getElementById('respuesta').innerHTML = JSON.stringify(data, null, 2);
|
||||||
|
})
|
||||||
|
.catch(error => {
|
||||||
|
document.getElementById('respuesta').innerHTML = 'Error: ' + error;
|
||||||
|
});
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
|
"""%(Sal,"%s")
|
||||||
|
return HTMLResponse(content=html, status_code=200)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#Por revisar
|
#Por revisar
|
||||||
|
|
||||||
def list2tablehtml(listdata,model):
|
def list2tablehtml(listdata,model):
|
||||||
|
@ -385,33 +931,8 @@ display:flex;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/EvalFact")
|
|
||||||
@app.post("/EvalFact")
|
|
||||||
def EvalFact(response:Response1):
|
|
||||||
path=response.path
|
|
||||||
task_prompt=response.task_prompt
|
|
||||||
option=response.model
|
|
||||||
TrustedOCR=response.TrustedOCR
|
|
||||||
Trusted=TrustedOCR
|
|
||||||
if task_prompt=="":
|
|
||||||
if Trusted=="":
|
|
||||||
row=db(db.trusted.path == path and db.trusted.mode == "OCR").select().first()
|
|
||||||
try:
|
|
||||||
Trusted=row.trusted
|
|
||||||
except:
|
|
||||||
pass
|
|
||||||
Sal=main.EvalFacturas(path,task_prompt,TrustedOCR,option)
|
|
||||||
Sal["path"]=path
|
|
||||||
if db(db.analitic_ocr.path == Sal["path"] and db.analitic_ocr.model == Sal["model"]).count()==0:
|
|
||||||
db.analitic_ocr.insert(**Sal)
|
|
||||||
db.commit()
|
|
||||||
else:
|
|
||||||
db(db.analitic_ocr.path == Sal["path"] and db.analitic_ocr.model == Sal["model"]).update(similarity= Sal["similarity"],similaritypartial= Sal["similaritypartial"],jsonok=Sal["jsonok"])
|
|
||||||
db.commit()
|
|
||||||
|
|
||||||
|
|
||||||
return Sal
|
|
||||||
|
|
||||||
@app.get("/EvalLLMFact")
|
@app.get("/EvalLLMFact")
|
||||||
@app.post("/EvalLLMFact")
|
@app.post("/EvalLLMFact")
|
||||||
def EvalLLMFact(response:Response2):
|
def EvalLLMFact(response:Response2):
|
||||||
|
@ -429,93 +950,7 @@ def EvalLLMFact(response:Response2):
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/evalocrfactura")
|
|
||||||
def EvalOCRFactura():
|
|
||||||
dir_list = os.listdir(pathFact)
|
|
||||||
Sal=""
|
|
||||||
t=1
|
|
||||||
for i in dir_list:
|
|
||||||
temp="""<option value="%s">Opción %s, %s</option>
|
|
||||||
"""%(str(pwd+"/"+pathFact+"/"+i),str(t),str(i))
|
|
||||||
Sal=Sal+temp
|
|
||||||
t=t+1
|
|
||||||
html="""<!DOCTYPE html>
|
|
||||||
<html lang="es">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Evaluacion de modelos OCR</title>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
margin: 20px;
|
|
||||||
}
|
|
||||||
input, button {
|
|
||||||
margin: 10px 0;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
#respuesta {
|
|
||||||
margin-top: 20px;
|
|
||||||
padding: 10px;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Petición POST a API</h1>
|
|
||||||
<select id="texto1">
|
|
||||||
%s
|
|
||||||
</select>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<select id="texto2">
|
|
||||||
<option value="More Detailed Caption">More Detailed Caption</option>
|
|
||||||
<option value="OCR">OCR</option>
|
|
||||||
<option value="parsed">parsed</option>
|
|
||||||
<option value="scan">scan</option>
|
|
||||||
</select>
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto3" placeholder="TrustedOCR">
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto4" placeholder="option">
|
|
||||||
<br>
|
|
||||||
<button onclick="enviarPeticion()">Enviar petición</button>
|
|
||||||
<div id="respuesta"></div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function enviarPeticion() {
|
|
||||||
const texto1 = document.getElementById('texto1').value;
|
|
||||||
const texto2 = document.getElementById('texto2').value;
|
|
||||||
const texto3 = document.getElementById('texto3').value;
|
|
||||||
const texto4 = document.getElementById('texto4').value;
|
|
||||||
const datos = {
|
|
||||||
path: texto1,
|
|
||||||
task_prompt: texto2,
|
|
||||||
TrustedOCR: texto3,
|
|
||||||
option: texto4
|
|
||||||
};
|
|
||||||
|
|
||||||
fetch('/EvalFact', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify(datos)
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
document.getElementById('respuesta').innerHTML = JSON.stringify(data, null, 2);
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
document.getElementById('respuesta').innerHTML = 'Error: ' + error;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
"""%(Sal)
|
|
||||||
return HTMLResponse(content=html, status_code=200)
|
|
||||||
|
|
||||||
def list2tablehtmlOCR(listdata,model):
|
def list2tablehtmlOCR(listdata,model):
|
||||||
html="""<h2>Table of {0}</h2>
|
html="""<h2>Table of {0}</h2>
|
||||||
|
@ -651,108 +1086,3 @@ display:flex;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@app.get("/evalllmfacturas")
|
|
||||||
def EvalllmFacturas():
|
|
||||||
dir_list = os.listdir(pathFact)
|
|
||||||
Sal=""
|
|
||||||
t=1
|
|
||||||
for i in dir_list:
|
|
||||||
temp="""<option value="%s">Opción %s, %s</option>
|
|
||||||
"""%(str(pwd+"/"+pathFact+"/"+i),str(t),str(i))
|
|
||||||
Sal=Sal+temp
|
|
||||||
t=t+1
|
|
||||||
html="""<!DOCTYPE html>
|
|
||||||
<html lang="es">
|
|
||||||
<head>
|
|
||||||
<meta charset="UTF-8">
|
|
||||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
||||||
<title>Evaluacion modelos LLM</title>
|
|
||||||
<style>
|
|
||||||
body {
|
|
||||||
font-family: Arial, sans-serif;
|
|
||||||
margin: 20px;
|
|
||||||
}
|
|
||||||
input, button {
|
|
||||||
margin: 10px 0;
|
|
||||||
padding: 5px;
|
|
||||||
}
|
|
||||||
#respuesta {
|
|
||||||
margin-top: 20px;
|
|
||||||
padding: 10px;
|
|
||||||
border: 1px solid #ccc;
|
|
||||||
background-color: #f9f9f9;
|
|
||||||
}
|
|
||||||
</style>
|
|
||||||
</head>
|
|
||||||
<body>
|
|
||||||
<h1>Petición POST a API</h1>
|
|
||||||
<select id="texto1">
|
|
||||||
%s
|
|
||||||
</select>
|
|
||||||
<br>
|
|
||||||
|
|
||||||
<select id="texto2">
|
|
||||||
<option value="">N.A.</option>
|
|
||||||
<option value="More Detailed Caption">More Detailed Caption</option>
|
|
||||||
<option value="OCR">OCR</option>
|
|
||||||
<option value="parsed">parsed</option>
|
|
||||||
<option value="scan">scan</option>
|
|
||||||
</select>
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto3" placeholder="system" value="Eres un chatbot amable">
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto4" placeholder="content" value="%s">
|
|
||||||
<br>
|
|
||||||
<input type="number" id="texto5" placeholder="max_tokens" value=1024>
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto6" placeholder="model" value="Claude-sonnet">
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto7" placeholder="prompt" value="Analiza la factura">
|
|
||||||
<br>
|
|
||||||
<input type="text" id="texto8" placeholder="TrustedLLmjson" value="{'A':''}">
|
|
||||||
<br>
|
|
||||||
<button onclick="enviarPeticion()">Enviar petición</button>
|
|
||||||
<div id="respuesta"></div>
|
|
||||||
|
|
||||||
<script>
|
|
||||||
function enviarPeticion() {
|
|
||||||
const texto1 = document.getElementById('texto1').value;
|
|
||||||
const texto2 = document.getElementById('texto2').value;
|
|
||||||
const texto3 = document.getElementById('texto3').value;
|
|
||||||
const texto4 = document.getElementById('texto4').value;
|
|
||||||
const texto5 = document.getElementById('texto5').value;
|
|
||||||
const texto6 = document.getElementById('texto6').value;
|
|
||||||
const texto7 = document.getElementById('texto7').value;
|
|
||||||
const texto8 = document.getElementById('texto8').value;
|
|
||||||
|
|
||||||
const datos = {
|
|
||||||
path: texto1,
|
|
||||||
task_prompt: texto2,
|
|
||||||
system: texto3,
|
|
||||||
content:texto4,
|
|
||||||
max_tokens:texto5,
|
|
||||||
model:texto6,
|
|
||||||
prompt:texto7,
|
|
||||||
TrustedLLmjson:texto8,
|
|
||||||
};
|
|
||||||
|
|
||||||
fetch('/EvalLLMFact', {
|
|
||||||
method: 'POST',
|
|
||||||
headers: {
|
|
||||||
'Content-Type': 'application/json'
|
|
||||||
},
|
|
||||||
body: JSON.stringify(datos)
|
|
||||||
})
|
|
||||||
.then(response => response.json())
|
|
||||||
.then(data => {
|
|
||||||
document.getElementById('respuesta').innerHTML = JSON.stringify(data, null, 2);
|
|
||||||
})
|
|
||||||
.catch(error => {
|
|
||||||
document.getElementById('respuesta').innerHTML = 'Error: ' + error;
|
|
||||||
});
|
|
||||||
}
|
|
||||||
</script>
|
|
||||||
</body>
|
|
||||||
</html>
|
|
||||||
"""%(Sal,"%s")
|
|
||||||
return HTMLResponse(content=html, status_code=200)
|
|
36
databases.py
36
databases.py
|
@ -9,8 +9,20 @@ db.define_table(
|
||||||
Field("sizeMB",type="double",default=0),# audio,factura
|
Field("sizeMB",type="double",default=0),# audio,factura
|
||||||
Field("length",type="integer",default=0),#texto
|
Field("length",type="integer",default=0),#texto
|
||||||
Field('last_modified', 'datetime'),
|
Field('last_modified', 'datetime'),
|
||||||
Field('modification_count', 'integer', default=0)
|
Field('modification_count', 'integer', default=0),
|
||||||
|
Field('hash')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
db.define_table(
|
||||||
|
"prompt",
|
||||||
|
Field("prompt"),
|
||||||
|
Field("mode"),
|
||||||
|
Field("length",type="integer",default=0),
|
||||||
|
Field('hash',unique=True),
|
||||||
|
Field('last_modified', 'datetime'),
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
db.define_table(
|
db.define_table(
|
||||||
"analitic_voice",
|
"analitic_voice",
|
||||||
Field("content"),
|
Field("content"),
|
||||||
|
@ -43,8 +55,14 @@ db.define_table(
|
||||||
Field("model"),
|
Field("model"),
|
||||||
Field("time", type="double"),
|
Field("time", type="double"),
|
||||||
Field("path"),
|
Field("path"),
|
||||||
Field("similarity", type="double"),
|
Field("relevance", type="double"),
|
||||||
Field("similaritypartial", type="double"),
|
Field("bias", type="double"),
|
||||||
|
Field("toxic", type="double"),
|
||||||
|
Field("correctness", type="double"),
|
||||||
|
Field("relevance_r"),
|
||||||
|
Field("bias_r"),
|
||||||
|
Field("toxic_r"),
|
||||||
|
Field("correctness_r"),
|
||||||
Field('last_modified', 'datetime')
|
Field('last_modified', 'datetime')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
@ -67,9 +85,15 @@ db.define_table(
|
||||||
Field("model"),
|
Field("model"),
|
||||||
Field("time", type="double"),
|
Field("time", type="double"),
|
||||||
Field("path"),
|
Field("path"),
|
||||||
Field("similarity", type="double"),
|
Field("relevance", type="double"),
|
||||||
Field("similaritypartial", type="double"),
|
Field("bias", type="double"),
|
||||||
Field('last_modified', 'datetime')
|
Field("toxic", type="double"),
|
||||||
|
Field("correctness", type="double"),
|
||||||
|
Field("relevance_r"),
|
||||||
|
Field("bias_r"),
|
||||||
|
Field("toxic_r"),
|
||||||
|
Field("correctness_r"),
|
||||||
|
Field('last_modified', 'datetime')
|
||||||
)
|
)
|
||||||
|
|
||||||
db.define_table(
|
db.define_table(
|
||||||
|
|
270
gui.py
270
gui.py
|
@ -7,12 +7,9 @@ import pandas as pd
|
||||||
import requests
|
import requests
|
||||||
import statistics
|
import statistics
|
||||||
from databases import db
|
from databases import db
|
||||||
|
import time
|
||||||
pwd = os.getcwd()
|
pwd = os.getcwd()
|
||||||
|
|
||||||
HTML = os.path.join(pwd,"html", "index.html")
|
|
||||||
file_read = codecs.open(HTML, "r", "utf-8")
|
|
||||||
index = file_read.read()
|
|
||||||
html_page_index = Html(index)
|
|
||||||
def extractConfig(nameModel="SystemData",relPath=os.path.join(pwd,"conf/experiment_config.json"),dataOut="keyantrophics"):
|
def extractConfig(nameModel="SystemData",relPath=os.path.join(pwd,"conf/experiment_config.json"),dataOut="keyantrophics"):
|
||||||
configPath=os.path.join(os.getcwd(),relPath)
|
configPath=os.path.join(os.getcwd(),relPath)
|
||||||
with open(configPath, 'r', encoding='utf-8') as file:
|
with open(configPath, 'r', encoding='utf-8') as file:
|
||||||
|
@ -20,6 +17,8 @@ def extractConfig(nameModel="SystemData",relPath=os.path.join(pwd,"conf/experime
|
||||||
Output= config[dataOut]
|
Output= config[dataOut]
|
||||||
return Output
|
return Output
|
||||||
mode_list=extractConfig(nameModel="SystemData",dataOut="mode_list")
|
mode_list=extractConfig(nameModel="SystemData",dataOut="mode_list")
|
||||||
|
|
||||||
|
|
||||||
def getmetricvoice(model):
|
def getmetricvoice(model):
|
||||||
rows = db(db.analitic_voice.model==model).select()
|
rows = db(db.analitic_voice.model==model).select()
|
||||||
rows_list = rows.as_list()
|
rows_list = rows.as_list()
|
||||||
|
@ -36,70 +35,247 @@ def getmetricvoice(model):
|
||||||
|
|
||||||
def html_getmetricvoice():
|
def html_getmetricvoice():
|
||||||
models=list()
|
models=list()
|
||||||
|
t=time.time()
|
||||||
for row in db().select(db.analitic_voice.model, distinct=True):
|
for row in db().select(db.analitic_voice.model, distinct=True):
|
||||||
models.append(row.model)
|
models.append(row.model)
|
||||||
data={}
|
data={}
|
||||||
for model in models:
|
for model in models:
|
||||||
data[model]=getmetricvoice(model)
|
data[model]=getmetricvoice(model)
|
||||||
data=pd.DataFrame(data).T
|
data=pd.DataFrame(data).T
|
||||||
datafiles={}
|
data_files={}
|
||||||
for row in db().select(db.analitic_voice.ALL):
|
for row in db().select(db.analitic_voice.ALL):
|
||||||
datafiles[row.id]=row.as_dict()
|
data_files[row.id]=row.as_dict()
|
||||||
datafiles=pd.DataFrame(datafiles).T
|
|
||||||
|
data_files=pd.DataFrame(data_files).T
|
||||||
|
|
||||||
|
#table = pd.pivot_table(data_files, values=['path', 'similarity','similaritypartial'], index=['path'],
|
||||||
|
#columns=['model'], aggfunc="sum")
|
||||||
|
|
||||||
|
|
||||||
html="""
|
html="""
|
||||||
|
<h1>Data general de los modelos</h1>
|
||||||
<taipy:table>{data_voice}</taipy:table>
|
<taipy:table>{data_voice}</taipy:table>
|
||||||
|
<h1>Data de cada muestra</h1>
|
||||||
<taipy:table filter=True>{data_files_voice}</taipy:table>
|
<taipy:table filter=True>{data_files_voice}</taipy:table>
|
||||||
"""
|
|
||||||
|
|
||||||
return html,data,datafiles
|
|
||||||
html_page_getmetricsvoice,data_voice,data_files_voices=html_getmetricvoice()
|
|
||||||
|
|
||||||
mode="voice"
|
|
||||||
modetypedata="audio"
|
|
||||||
file="id2"
|
|
||||||
def changemenu(mode):
|
|
||||||
if mode_list[mode]=="audio":
|
|
||||||
pathori="example/audio"
|
|
||||||
if mode_list[mode]=="factura":
|
|
||||||
pathori="example/factura"
|
|
||||||
if mode_list[mode]=="texto":
|
|
||||||
pathori="example/texto"
|
|
||||||
seltypedata=mode_list[mode]
|
|
||||||
dir_list = os.listdir(pathori)
|
|
||||||
|
|
||||||
return pathori,seltypedata,dir_list
|
|
||||||
|
"""
|
||||||
|
#<taipy:chart mode="markers" x="x" y[1]="time" y[2]="similarity">{data_files_voice}</taipy:chart>
|
||||||
|
|
||||||
|
return html,data,data_files
|
||||||
|
|
||||||
|
|
||||||
def trustedallhtml(mode):
|
|
||||||
pathori,seltypedata,dir_list=changemenu(mode)
|
|
||||||
|
|
||||||
|
|
||||||
textmode=""
|
|
||||||
for modeused in mode_list.keys():
|
|
||||||
textmode=textmode+"('%s','%s'),"%(modeused,modeused)
|
|
||||||
html="""<taipy:selector lov="{[%s]}" dropdown True on_change=changemenu>{sel}</taipy:selector>"""%(textmode)
|
|
||||||
Sal=""
|
|
||||||
for i in dir_list:
|
|
||||||
temp="""('%s', '%s'),"""%(str(pwd+"/"+pathori+"/"+i),str(i))
|
|
||||||
Sal=Sal+temp
|
|
||||||
html2="""<taipy:selector lov="{[%s]}" dropdown True >{sel2}</taipy:selector>"""%(Sal)
|
|
||||||
return html+html2
|
|
||||||
|
|
||||||
html_page_trustedall = Html(trustedallhtml(mode))
|
def getmetricllm_compra(model):
|
||||||
#print(sel,sel2,seltypedata)
|
rows = db(db.analitic_llm_compra.model==model).select()
|
||||||
HTML = os.path.join(pwd,"html", "index.html")
|
rows_list = rows.as_list()
|
||||||
file_read = codecs.open(HTML, "r", "utf-8")
|
data=pd.DataFrame(rows_list)
|
||||||
index = file_read.read()
|
|
||||||
html_page_index = Html(index)
|
#durationL=list()
|
||||||
|
#for i in rows_list:
|
||||||
|
#durationL.append(db(db.trusted.path == i["path"] ).select().last().duration)
|
||||||
|
#duration=statistics.mean(durationL)
|
||||||
|
time=pd.pivot_table(data,values=['time'],index="model")['time'].values[0]
|
||||||
|
relevance=pd.pivot_table(data,values=["relevance"],index="model")['relevance'].values[0]
|
||||||
|
bias=pd.pivot_table(data,values=["bias"],index="model")['bias'].values[0]
|
||||||
|
toxic=pd.pivot_table(data,values=["toxic"],index="model")['toxic'].values[0]
|
||||||
|
|
||||||
|
correctness=pd.pivot_table(data,values=["correctness"],index="model")['correctness'].values[0]
|
||||||
|
#similarity=pd.pivot_table(data,values=['time','similarity', 'similaritypartial'],index="model")['similarity'].values[0]
|
||||||
|
#similaritypartial=pd.pivot_table(data,values=['time','similarity', 'similaritypartial'],index="model")['similaritypartial'].values[0]
|
||||||
|
#efectivetime=time/duration
|
||||||
|
return ({"model":model,"time":time,"relevance":relevance,"bias":bias,"toxic":toxic,"correctness":correctness})
|
||||||
|
|
||||||
|
def html_getmetricllm_compra():
|
||||||
|
models=list()
|
||||||
|
t=time.time()
|
||||||
|
for row in db().select(db.analitic_llm_compra.model, distinct=True):
|
||||||
|
models.append(row.model)
|
||||||
|
data={}
|
||||||
|
for model in models:
|
||||||
|
data[model]=getmetricllm_compra(model)
|
||||||
|
data=pd.DataFrame(data).T
|
||||||
|
data_files={}
|
||||||
|
for row in db().select(db.analitic_llm_compra.ALL):
|
||||||
|
data_files[row.id]=row.as_dict()
|
||||||
|
|
||||||
|
data_files=pd.DataFrame(data_files).T
|
||||||
|
|
||||||
|
#table = pd.pivot_table(data_files, values=['path', 'similarity','similaritypartial'], index=['path'],
|
||||||
|
#columns=['model'], aggfunc="sum")
|
||||||
|
|
||||||
|
|
||||||
|
html="""
|
||||||
|
<h1>Data general de los modelos</h1>
|
||||||
|
<taipy:table>{data_llm_compra}</taipy:table>
|
||||||
|
<h1>Data de cada muestra</h1>
|
||||||
|
<taipy:table filter=True >{data_files_llm_compra}</taipy:table>
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
#<taipy:chart mode="markers" x="x" y[1]="time" y[2]="similarity">{data_files_voice}</taipy:chart>
|
||||||
|
|
||||||
|
return html,data,data_files
|
||||||
|
|
||||||
|
|
||||||
|
def getmetricllm_generaciontexto(model):
|
||||||
|
rows = db(db.analitic_llm_generaciontexto.model==model).select()
|
||||||
|
rows_list = rows.as_list()
|
||||||
|
data=pd.DataFrame(rows_list)
|
||||||
|
|
||||||
|
#durationL=list()
|
||||||
|
#for i in rows_list:
|
||||||
|
#durationL.append(db(db.trusted.path == i["path"] ).select().last().duration)
|
||||||
|
#duration=statistics.mean(durationL)
|
||||||
|
time=pd.pivot_table(data,values=['time'],index="model")['time'].values[0]
|
||||||
|
relevance=pd.pivot_table(data,values=["relevance"],index="model")['relevance'].values[0]
|
||||||
|
bias=pd.pivot_table(data,values=["bias"],index="model")['bias'].values[0]
|
||||||
|
toxic=pd.pivot_table(data,values=["toxic"],index="model")['toxic'].values[0]
|
||||||
|
|
||||||
|
correctness=pd.pivot_table(data,values=["correctness"],index="model")['correctness'].values[0]
|
||||||
|
#similarity=pd.pivot_table(data,values=['time','similarity', 'similaritypartial'],index="model")['similarity'].values[0]
|
||||||
|
#similaritypartial=pd.pivot_table(data,values=['time','similarity', 'similaritypartial'],index="model")['similaritypartial'].values[0]
|
||||||
|
#efectivetime=time/duration
|
||||||
|
return ({"model":model,"time":time,"relevance":relevance,"bias":bias,"toxic":toxic,"correctness":correctness})
|
||||||
|
|
||||||
|
def html_getmetricllm_generaciontexto():
|
||||||
|
models=list()
|
||||||
|
t=time.time()
|
||||||
|
for row in db().select(db.analitic_llm_generaciontexto.model, distinct=True):
|
||||||
|
models.append(row.model)
|
||||||
|
data={}
|
||||||
|
for model in models:
|
||||||
|
data[model]=getmetricllm_generaciontexto(model)
|
||||||
|
data=pd.DataFrame(data).T
|
||||||
|
data_files={}
|
||||||
|
for row in db().select(db.analitic_llm_generaciontexto.ALL):
|
||||||
|
data_files[row.id]=row.as_dict()
|
||||||
|
|
||||||
|
data_files=pd.DataFrame(data_files).T
|
||||||
|
|
||||||
|
#table = pd.pivot_table(data_files, values=['path', 'similarity','similaritypartial'], index=['path'],
|
||||||
|
#columns=['model'], aggfunc="sum")
|
||||||
|
|
||||||
|
|
||||||
|
html="""
|
||||||
|
<h1>Data general de los modelos</h1>
|
||||||
|
<taipy:table>{data_llm_generaciontexto}</taipy:table>
|
||||||
|
<h1>Data de cada muestra</h1>
|
||||||
|
<taipy:table filter=True >{data_files_llm_generaciontexto}</taipy:table>
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
#<taipy:chart mode="markers" x="x" y[1]="time" y[2]="similarity">{data_files_voice}</taipy:chart>
|
||||||
|
|
||||||
|
return html,data,data_files
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def getmetricllm_factura(model):
|
||||||
|
rows = db(db.analitic_llm_factura.model==model).select()
|
||||||
|
rows_list = rows.as_list()
|
||||||
|
data=pd.DataFrame(rows_list)
|
||||||
|
|
||||||
|
#durationL=list()
|
||||||
|
#for i in rows_list:
|
||||||
|
#durationL.append(db(db.trusted.path == i["path"] ).select().last().duration)
|
||||||
|
#duration=statistics.mean(durationL)
|
||||||
|
time=pd.pivot_table(data,values=['time'],index="model")['time'].values[0]
|
||||||
|
relevance=pd.pivot_table(data,values=["relevance"],index="model")['relevance'].values[0]
|
||||||
|
bias=pd.pivot_table(data,values=["bias"],index="model")['bias'].values[0]
|
||||||
|
toxic=pd.pivot_table(data,values=["toxic"],index="model")['toxic'].values[0]
|
||||||
|
|
||||||
|
correctness=pd.pivot_table(data,values=["correctness"],index="model")['correctness'].values[0]
|
||||||
|
#similarity=pd.pivot_table(data,values=['time','similarity', 'similaritypartial'],index="model")['similarity'].values[0]
|
||||||
|
#similaritypartial=pd.pivot_table(data,values=['time','similarity', 'similaritypartial'],index="model")['similaritypartial'].values[0]
|
||||||
|
#efectivetime=time/duration
|
||||||
|
return ({"model":model,"time":time,"relevance":relevance,"bias":bias,"toxic":toxic,"correctness":correctness})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def html_getmetricllm_factura():
|
||||||
|
models=list()
|
||||||
|
t=time.time()
|
||||||
|
for row in db().select(db.analitic_llm_factura.model, distinct=True):
|
||||||
|
models.append(row.model)
|
||||||
|
data={}
|
||||||
|
for model in models:
|
||||||
|
data[model]=getmetricllm_factura(model)
|
||||||
|
data=pd.DataFrame(data).T
|
||||||
|
data_files={}
|
||||||
|
for row in db().select(db.analitic_llm_factura.ALL):
|
||||||
|
data_files[row.id]=row.as_dict()
|
||||||
|
|
||||||
|
data_files=pd.DataFrame(data_files).T
|
||||||
|
|
||||||
|
#table = pd.pivot_table(data_files, values=['path', 'similarity','similaritypartial'], index=['path'],
|
||||||
|
#columns=['model'], aggfunc="sum")
|
||||||
|
|
||||||
|
|
||||||
|
html="""
|
||||||
|
<h1>Data general de los modelos</h1>
|
||||||
|
<taipy:table>{data_llm_factura}</taipy:table>
|
||||||
|
<h1>Data de cada muestra</h1>
|
||||||
|
<taipy:table filter=True >{data_files_llm_factura}</taipy:table>
|
||||||
|
|
||||||
|
|
||||||
|
"""
|
||||||
|
#<taipy:chart mode="markers" x="x" y[1]="time" y[2]="similarity">{data_files_voice}</taipy:chart>
|
||||||
|
|
||||||
|
return html,data,data_files
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def on_init(state):
|
||||||
|
state.html_page_getmetricsvoice,state.data_voice,state.data_files_voice=html_getmetricvoice()
|
||||||
|
state.html_page_getmetricsllm_compra,state.data_llm_compra,state.data_files_llm_compra=html_getmetricllm_compra()
|
||||||
|
state.html_page_getmetricsllm_generaciontexto,state.data_llm_generaciontexto,state.data_files_llm_generaciontexto=html_getmetricllm_generaciontexto()
|
||||||
|
state.html_page_getmetricsllm_factura,state.data_llm_factura,state.data_files_llm_factura=html_getmetricllm_factura()
|
||||||
|
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
html_page_getmetricsvoice,data_voice,data_files_voice=html_getmetricvoice()
|
||||||
|
|
||||||
|
html_page_getmetricsllm_compra,data_llm_compra,data_files_llm_compra=html_getmetricllm_compra()
|
||||||
|
|
||||||
|
html_page_getmetricsllm_generaciontexto,data_llm_generaciontexto,data_files_llm_generaciontexto=html_getmetricllm_generaciontexto()
|
||||||
|
|
||||||
|
html_page_getmetricsllm_factura,data_llm_factura,data_files_llm_factura=html_getmetricllm_factura()
|
||||||
|
# mode="voice"
|
||||||
|
# modetypedata="audio"
|
||||||
|
# file="id2"
|
||||||
|
# def changemenu(mode):
|
||||||
|
# if mode_list[mode]=="audio":
|
||||||
|
# pathori="example/audio"
|
||||||
|
# if mode_list[mode]=="factura":
|
||||||
|
# pathori="example/factura"
|
||||||
|
# if mode_list[mode]=="texto":
|
||||||
|
# pathori="example/texto"
|
||||||
|
# seltypedata=mode_list[mode]
|
||||||
|
# dir_list = os.listdir(pathori)
|
||||||
|
|
||||||
|
# return pathori,seltypedata,dir_list
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
data=pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]})
|
|
||||||
|
|
||||||
pages = {
|
pages = {
|
||||||
"/": html_page_index ,
|
|
||||||
"getmetricsvoice": Html(html_page_getmetricsvoice),
|
"getmetricsvoice": Html(html_page_getmetricsvoice),
|
||||||
"trustedall":html_page_trustedall
|
"getmetricsllm_compra": Html(html_page_getmetricsllm_compra),
|
||||||
|
"getmetricsllm_generaciontexto": Html(html_page_getmetricsllm_generaciontexto),
|
||||||
|
"getmetricsllm_factura": Html(html_page_getmetricsllm_factura)
|
||||||
}
|
}
|
||||||
|
|
||||||
app = Gui(pages=pages)
|
app = Gui(pages=pages)
|
||||||
|
app.on_init=on_init
|
||||||
if __name__=="__main__":
|
if __name__=="__main__":
|
||||||
app.run(use_reloader=True,port=7882, change_delay=1600)#state.imageActive2,
|
app.run(use_reloader=True,port=7882)#state.imageActive2,
|
||||||
|
|
111
main.py
111
main.py
|
@ -2,24 +2,37 @@ import requests
|
||||||
import evaluate
|
import evaluate
|
||||||
import deepdiff
|
import deepdiff
|
||||||
import json
|
import json
|
||||||
|
import os
|
||||||
|
|
||||||
from fuzzywuzzy import fuzz
|
from fuzzywuzzy import fuzz
|
||||||
from deepdiff import DeepDiff
|
from deepdiff import DeepDiff
|
||||||
from deepdiff import Delta
|
from deepdiff import Delta
|
||||||
import databases
|
import databases
|
||||||
|
import metrics
|
||||||
#print(evaluate.list_evaluation_modules())
|
#print(evaluate.list_evaluation_modules())
|
||||||
|
pwd = os.getcwd()
|
||||||
urlAud="http://127.0.0.1:7870/"
|
urlAud="http://127.0.0.1:7870/"
|
||||||
urlText="http://127.0.0.1:7869"
|
urlText="http://127.0.0.1:7869"
|
||||||
password="1223Aer*"
|
|
||||||
|
|
||||||
|
def extractConfig(nameModel="SystemData",relPath=os.path.join(pwd,"conf/experiment_config.json"),dataOut="keyantrophics"):
|
||||||
|
configPath=os.path.join(os.getcwd(),relPath)
|
||||||
|
with open(configPath, 'r', encoding='utf-8') as file:
|
||||||
|
config = json.load(file)[nameModel]
|
||||||
|
Output= config[dataOut]
|
||||||
|
return Output
|
||||||
|
mode_list=extractConfig(nameModel="SystemData",dataOut="mode_list")
|
||||||
|
keyanthropic=extractConfig(nameModel="SystemData",dataOut="keyantrophics")
|
||||||
|
password=extractConfig(nameModel="SystemData",dataOut="password")
|
||||||
|
|
||||||
|
|
||||||
def EvalVoice2Text(endpoint,datajson,Trusted):
|
def EvalVoice2Text(endpoint,datajson,Trusted):
|
||||||
"""Evaluate Voice 2 text
|
"""Evaluate Voice 2 text
|
||||||
"""
|
"""
|
||||||
apiUrl=urlAud+endpoint
|
apiUrl=urlAud+endpoint
|
||||||
response = requests.get(apiUrl, json=datajson)
|
response = requests.get(apiUrl, json=datajson)
|
||||||
print(datajson)
|
|
||||||
A=json.loads(response.content)
|
A=json.loads(response.content)
|
||||||
print(A)
|
|
||||||
time=A['time']
|
time=A['time']
|
||||||
|
|
||||||
similarity=fuzz.ratio( Trusted.strip().lower(),A['message'].strip().lower())
|
similarity=fuzz.ratio( Trusted.strip().lower(),A['message'].strip().lower())
|
||||||
similarityPartial=fuzz.partial_ratio( Trusted.strip().lower(),A['message'].strip().lower())
|
similarityPartial=fuzz.partial_ratio( Trusted.strip().lower(),A['message'].strip().lower())
|
||||||
path=datajson["local"]
|
path=datajson["local"]
|
||||||
|
@ -34,27 +47,105 @@ def EvalVoice2Text(endpoint,datajson,Trusted):
|
||||||
"path":path
|
"path":path
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
def EvalWhisper(path,Trusted=""):
|
def EvalWhisper(path,Trusted=""):
|
||||||
endpoint="/voice2txt"
|
endpoint="/voice2txt"
|
||||||
datajson={"url":"","password":password ,"model":"whisper","local":path}
|
datajson={"url":"","password":password ,"model":"whisper","local":path}
|
||||||
return EvalVoice2Text(endpoint,datajson,Trusted)
|
return EvalVoice2Text(endpoint,datajson,Trusted)
|
||||||
|
|
||||||
|
|
||||||
# EvalWhisper(path="example/AwACAgEAAxkBAAIBw2YX8o2vGGCNtZCXk7mY1Bm5w__lAAJmBAACxe7ARI1fUWAGcz_RNAQ.ogg",
|
|
||||||
# Trusted="Hoy compre dos medicinas Tereleji en Cruz Verde por un monto de 494 mil 400 pesos colombianos.",
|
|
||||||
# endpoint="/voice2txt")
|
|
||||||
|
|
||||||
def EvalVosk(path,Trusted=""):
|
def EvalVosk(path,Trusted=""):
|
||||||
endpoint="/voice2txtlocal"
|
endpoint="/voice2txtlocal"
|
||||||
datajson={"url":"","password":password ,"model":"models/vosk-model-small-es-0.42","local":path}
|
datajson={"url":"","password":password ,"model":"models/vosk-model-small-es-0.42","local":path}
|
||||||
return EvalVoice2Text(endpoint,datajson,Trusted)
|
return EvalVoice2Text(endpoint,datajson,Trusted)
|
||||||
|
|
||||||
|
|
||||||
|
def EvalLLMCompra(endpoint,datajson,Trusted):
|
||||||
|
"""Evaluate LLL compra
|
||||||
|
"""
|
||||||
|
apiUrl=urlText+endpoint
|
||||||
|
response = requests.get(apiUrl, json=datajson)
|
||||||
|
A=json.loads(response.content)
|
||||||
|
time=A['time']
|
||||||
|
relevance=metrics.RelevanceMetric(datajson["system"]+datajson["content"],response.content)
|
||||||
|
bias=metrics.BiasMetric22(datajson["system"]+datajson["content"],response.content)
|
||||||
|
toxic=metrics.ToxicMetric(datajson["system"]+datajson["content"],response.content)
|
||||||
|
correctness=metrics.correctnessMetric(datajson["system"]+datajson["content"],response.content,Trusted)
|
||||||
|
#jsonmetrics=metrics.jsonMetrics(response.content,Trusted)
|
||||||
|
#similarity=fuzz.ratio( Trusted.strip().lower(),A['content'].strip().lower())
|
||||||
|
#similarityPartial=fuzz.partial_ratio( Trusted.strip().lower(),A['content'].strip().lower())
|
||||||
|
#path=datajson["local"]
|
||||||
|
model=datajson["model"]
|
||||||
|
|
||||||
|
message=A['content']
|
||||||
|
return {"content":message,
|
||||||
|
"trusted":Trusted,
|
||||||
|
"model":model,
|
||||||
|
"time":time,
|
||||||
|
"relevance":relevance["score"],
|
||||||
|
"bias":bias["score"],
|
||||||
|
"toxic":toxic["score"],
|
||||||
|
"correctness":correctness["score"],
|
||||||
|
"relevance_r":relevance["reason"],
|
||||||
|
"bias_r":bias["reason"],
|
||||||
|
"toxic_r":toxic["reason"],
|
||||||
|
"correctness_r":correctness["reason"],
|
||||||
|
"path":message
|
||||||
|
}
|
||||||
|
|
||||||
|
def EvalModelLLMCompra(system,content,model,max_new_tokens,Trusted):
|
||||||
|
endpoint="/genTextCustom"
|
||||||
|
datajson={"system":system,"content":content,"password":password ,"model":model,"max_new_token":max_new_tokens}
|
||||||
|
return EvalLLMCompra(endpoint,datajson,Trusted)
|
||||||
|
|
||||||
|
def EvalLLMGeneracionTexto(endpoint,datajson,Trusted):
|
||||||
|
"""Evaluate LLL compra
|
||||||
|
"""
|
||||||
|
apiUrl=urlText+endpoint
|
||||||
|
response = requests.get(apiUrl, json=datajson)
|
||||||
|
A=json.loads(response.content)
|
||||||
|
time=A['time']
|
||||||
|
relevance=metrics.RelevanceMetric(datajson["system"]+datajson["content"],response.content)
|
||||||
|
bias=metrics.BiasMetric22(datajson["system"]+datajson["content"],response.content)
|
||||||
|
toxic=metrics.ToxicMetric(datajson["system"]+datajson["content"],response.content)
|
||||||
|
correctness=metrics.correctnessMetric(datajson["system"]+datajson["content"],response.content,Trusted)
|
||||||
|
#jsonmetrics=metrics.jsonMetrics(response.content,Trusted)
|
||||||
|
#similarity=fuzz.ratio( Trusted.strip().lower(),A['content'].strip().lower())
|
||||||
|
#similarityPartial=fuzz.partial_ratio( Trusted.strip().lower(),A['content'].strip().lower())
|
||||||
|
#path=datajson["local"]
|
||||||
|
model=datajson["model"]
|
||||||
|
|
||||||
|
message=A['content']
|
||||||
|
return {"content":message,
|
||||||
|
"trusted":Trusted,
|
||||||
|
"model":model,
|
||||||
|
"time":time,
|
||||||
|
"relevance":relevance["score"],
|
||||||
|
"bias":bias["score"],
|
||||||
|
"toxic":toxic["score"],
|
||||||
|
"correctness":correctness["score"],
|
||||||
|
"relevance_r":relevance["reason"],
|
||||||
|
"bias_r":bias["reason"],
|
||||||
|
"toxic_r":toxic["reason"],
|
||||||
|
"correctness_r":correctness["reason"],
|
||||||
|
"path":message
|
||||||
|
}
|
||||||
|
|
||||||
|
def EvalModelLLMGeneracionTexto(system,content,model,max_new_tokens,Trusted):
|
||||||
|
endpoint="/genTextCustom"
|
||||||
|
datajson={"system":system,"content":content,"password":password ,"model":model,"max_new_token":max_new_tokens}
|
||||||
|
return EvalLLMGeneracionTexto(endpoint,datajson,Trusted)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
# EvalVosk(path="example/AwACAgEAAxkBAAIBw2YX8o2vGGCNtZCXk7mY1Bm5w__lAAJmBAACxe7ARI1fUWAGcz_RNAQ.ogg",
|
# EvalVosk(path="example/AwACAgEAAxkBAAIBw2YX8o2vGGCNtZCXk7mY1Bm5w__lAAJmBAACxe7ARI1fUWAGcz_RNAQ.ogg",
|
||||||
# Trusted="Hoy compre dos medicinas Tereleji en Cruz Verde por un monto de 494 mil 400 pesos colombianos.",
|
# Trusted="Hoy compre dos medicinas Tereleji en Cruz Verde por un monto de 494 mil 400 pesos colombianos.",
|
||||||
# endpoint="/voice2txtlocal")
|
# endpoint="/voice2txtlocal")
|
||||||
|
# EvalWhisper(path="example/AwACAgEAAxkBAAIBw2YX8o2vGGCNtZCXk7mY1Bm5w__lAAJmBAACxe7ARI1fUWAGcz_RNAQ.ogg",
|
||||||
|
# Trusted="Hoy compre dos medicinas Tereleji en Cruz Verde por un monto de 494 mil 400 pesos colombianos.",
|
||||||
|
# endpoint="/voice2txt")
|
||||||
|
|
||||||
|
|
||||||
def ocrfacturas(path,task_prompt):
|
def ocrfacturas(path,task_prompt):
|
||||||
|
|
|
@ -0,0 +1,150 @@
|
||||||
|
from pydantic import BaseModel
|
||||||
|
from anthropic import Anthropic
|
||||||
|
import instructor
|
||||||
|
from deepeval.models import DeepEvalBaseLLM
|
||||||
|
from deepeval.metrics import AnswerRelevancyMetric
|
||||||
|
from deepeval.test_case import LLMTestCase
|
||||||
|
from deepeval.metrics import BiasMetric
|
||||||
|
from deepeval.metrics import ToxicityMetric
|
||||||
|
from deepeval.metrics import GEval
|
||||||
|
from deepeval.test_case import LLMTestCaseParams
|
||||||
|
from deepdiff import DeepDiff
|
||||||
|
import json
|
||||||
|
import os
|
||||||
|
pwd = os.getcwd()
|
||||||
|
def extractConfig(nameModel="SystemData",relPath=os.path.join(pwd,"conf/experiment_config.json"),dataOut="keyantrophics"):
|
||||||
|
configPath=os.path.join(os.getcwd(),relPath)
|
||||||
|
with open(configPath, 'r', encoding='utf-8') as file:
|
||||||
|
config = json.load(file)[nameModel]
|
||||||
|
Output= config[dataOut]
|
||||||
|
return Output
|
||||||
|
|
||||||
|
keyanthropic=extractConfig(nameModel="SystemData",dataOut="keyantrophics")
|
||||||
|
|
||||||
|
class CustomClaudeOpus(DeepEvalBaseLLM):
|
||||||
|
def __init__(self):
|
||||||
|
self.model = Anthropic(api_key=keyanthropic)
|
||||||
|
|
||||||
|
def load_model(self):
|
||||||
|
return self.model
|
||||||
|
|
||||||
|
def generate(self, prompt: str, schema: BaseModel) -> BaseModel:
|
||||||
|
client = self.load_model()
|
||||||
|
instructor_client = instructor.from_anthropic(client)
|
||||||
|
resp = instructor_client.messages.create(
|
||||||
|
model="claude-3-5-sonnet-20240620",
|
||||||
|
max_tokens=1024,
|
||||||
|
messages=[
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": prompt,
|
||||||
|
}
|
||||||
|
],
|
||||||
|
response_model=schema,
|
||||||
|
)
|
||||||
|
return resp
|
||||||
|
|
||||||
|
async def a_generate(self, prompt: str, schema: BaseModel) -> BaseModel:
|
||||||
|
return self.generate(prompt, schema)
|
||||||
|
|
||||||
|
def get_model_name(self):
|
||||||
|
return "Claude-3.5 sonnet"
|
||||||
|
customModel=CustomClaudeOpus()
|
||||||
|
|
||||||
|
def BiasMetric22(input,actual_output):
|
||||||
|
metric = BiasMetric(threshold=0.5,model=customModel)
|
||||||
|
|
||||||
|
test_case = LLMTestCase(
|
||||||
|
input=input,
|
||||||
|
actual_output=actual_output
|
||||||
|
)
|
||||||
|
metric.measure(test_case)
|
||||||
|
return {"score":metric.score,"reason":metric.reason}
|
||||||
|
|
||||||
|
def RelevanceMetric(input,actual_output):
|
||||||
|
# Replace this with the actual output from your LLM application
|
||||||
|
metric = AnswerRelevancyMetric(
|
||||||
|
threshold=0.7,
|
||||||
|
model=customModel,
|
||||||
|
include_reason=True
|
||||||
|
)
|
||||||
|
test_case = LLMTestCase(
|
||||||
|
input=input,
|
||||||
|
actual_output=actual_output
|
||||||
|
)
|
||||||
|
|
||||||
|
metric.measure(test_case)
|
||||||
|
return {"score":metric.score,"reason":metric.reason}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def ToxicMetric(input,actual_output):
|
||||||
|
metric = ToxicityMetric(threshold=0.5,model=customModel)
|
||||||
|
test_case = LLMTestCase(
|
||||||
|
input=input,
|
||||||
|
actual_output=actual_output
|
||||||
|
)
|
||||||
|
metric.measure(test_case)
|
||||||
|
print(metric.score,"toxic")
|
||||||
|
return {"score":metric.score,"reason":metric.reason}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
def correctnessMetric(input,actual_output,expected_output,criteria="Determine that the output is a json whose keys contain with compra and the data correspond to the input",evaluation_steps=["Check whether the facts in 'actual output' contradicts any facts in 'expected output'","You should also heavily penalize omission of detail","Vague language, or contradicting OPINIONS, are OK" ]):
|
||||||
|
correctness_metric = GEval(
|
||||||
|
name="Correctness",
|
||||||
|
model=customModel,
|
||||||
|
criteria=criteria,
|
||||||
|
# NOTE: you can only provide either criteria or evaluation_steps, and not both
|
||||||
|
#evaluation_steps=evaluation_steps,
|
||||||
|
evaluation_params=[LLMTestCaseParams.INPUT, LLMTestCaseParams.ACTUAL_OUTPUT]
|
||||||
|
)
|
||||||
|
test_case = LLMTestCase(
|
||||||
|
input=input,
|
||||||
|
actual_output=actual_output,
|
||||||
|
expected_output=expected_output
|
||||||
|
)
|
||||||
|
|
||||||
|
correctness_metric.measure(test_case)
|
||||||
|
return {"score":correctness_metric.score,"reason":correctness_metric.reason}
|
||||||
|
|
||||||
|
def jsonMetrics(text,Trusted):
|
||||||
|
false=False
|
||||||
|
print(type(text),type(Trusted))
|
||||||
|
try:
|
||||||
|
A=json.loads(text)
|
||||||
|
jsonOk=1
|
||||||
|
except:
|
||||||
|
jsonOk=0
|
||||||
|
print(jsonOk)
|
||||||
|
if jsonOk==1:
|
||||||
|
|
||||||
|
try:
|
||||||
|
Trus=json.loads(Trusted)
|
||||||
|
except:
|
||||||
|
Trus=Trusted
|
||||||
|
print(11111,3333,Trus)
|
||||||
|
# print(type(A),type(json.loads(Trus)))
|
||||||
|
# ddiff = DeepDiff(A, Trus)
|
||||||
|
# print(5555,ddiff)
|
||||||
|
# affectedkeys=ddiff.affected_root_keys/len(A.keys())
|
||||||
|
# keys=set(json.loads(Trusted).keys())
|
||||||
|
# jsonkeys=set(A.keys())
|
||||||
|
# TotKey=len(keys.intersection(jsonkeys))/len(keys)
|
||||||
|
# keyplus=jsonkeys.intersection(keys)
|
||||||
|
# else:
|
||||||
|
# TotKey=0
|
||||||
|
# keyplus=0
|
||||||
|
# affectedkeys=0
|
||||||
|
|
||||||
|
return {"jsonOk":jsonOk}#,"TotKey":TotKey,"keyplus":keyplus,"affectedkeys":affectedkeys}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,11 @@ aiohttp==3.9.5
|
||||||
aiosignal==1.3.1
|
aiosignal==1.3.1
|
||||||
aniso8601==9.0.1
|
aniso8601==9.0.1
|
||||||
annotated-types==0.7.0
|
annotated-types==0.7.0
|
||||||
|
anthropic==0.32.0
|
||||||
anyio==4.4.0
|
anyio==4.4.0
|
||||||
apispec==6.4.0
|
apispec==6.4.0
|
||||||
apispec-webframeworks==1.0.0
|
apispec-webframeworks==1.0.0
|
||||||
|
appdirs==1.4.4
|
||||||
arrow==1.3.0
|
arrow==1.3.0
|
||||||
attrs==23.2.0
|
attrs==23.2.0
|
||||||
audioread==3.0.1
|
audioread==3.0.1
|
||||||
|
@ -20,13 +22,20 @@ charset-normalizer==3.3.2
|
||||||
click==8.1.7
|
click==8.1.7
|
||||||
constantly==23.10.4
|
constantly==23.10.4
|
||||||
cookiecutter==2.5.0
|
cookiecutter==2.5.0
|
||||||
|
dataclasses-json==0.6.7
|
||||||
datasets==2.19.1
|
datasets==2.19.1
|
||||||
deepdiff==6.7.1
|
deepdiff==6.7.1
|
||||||
|
deepeval==0.21.74
|
||||||
|
Deprecated==1.2.14
|
||||||
dill==0.3.8
|
dill==0.3.8
|
||||||
|
distro==1.9.0
|
||||||
dnspython==2.6.1
|
dnspython==2.6.1
|
||||||
|
docstring_parser==0.16
|
||||||
|
docx2txt==0.8
|
||||||
email_validator==2.2.0
|
email_validator==2.2.0
|
||||||
et-xmlfile==1.1.0
|
et-xmlfile==1.1.0
|
||||||
evaluate==0.4.2
|
evaluate==0.4.2
|
||||||
|
execnet==2.1.1
|
||||||
fastapi==0.111.0
|
fastapi==0.111.0
|
||||||
fastapi-cli==0.0.4
|
fastapi-cli==0.0.4
|
||||||
filelock==3.14.0
|
filelock==3.14.0
|
||||||
|
@ -40,7 +49,9 @@ fuzzywuzzy==0.18.0
|
||||||
gevent==23.9.1
|
gevent==23.9.1
|
||||||
gevent-websocket==0.10.1
|
gevent-websocket==0.10.1
|
||||||
gitignore_parser==0.1.11
|
gitignore_parser==0.1.11
|
||||||
|
googleapis-common-protos==1.63.2
|
||||||
greenlet==3.0.3
|
greenlet==3.0.3
|
||||||
|
grpcio==1.63.0
|
||||||
h11==0.14.0
|
h11==0.14.0
|
||||||
httpcore==1.0.5
|
httpcore==1.0.5
|
||||||
httptools==0.6.1
|
httptools==0.6.1
|
||||||
|
@ -48,11 +59,23 @@ httpx==0.27.0
|
||||||
huggingface-hub==0.23.2
|
huggingface-hub==0.23.2
|
||||||
hyperlink==21.0.0
|
hyperlink==21.0.0
|
||||||
idna==3.7
|
idna==3.7
|
||||||
|
importlib-metadata==7.0.0
|
||||||
incremental==24.7.2
|
incremental==24.7.2
|
||||||
|
iniconfig==2.0.0
|
||||||
|
instructor==1.3.7
|
||||||
itsdangerous==2.2.0
|
itsdangerous==2.2.0
|
||||||
Jinja2==3.1.4
|
Jinja2==3.1.4
|
||||||
|
jiter==0.4.2
|
||||||
jmespath==1.0.1
|
jmespath==1.0.1
|
||||||
|
jsonpatch==1.33
|
||||||
|
jsonpointer==3.0.0
|
||||||
kthread==0.2.3
|
kthread==0.2.3
|
||||||
|
langchain==0.2.12
|
||||||
|
langchain-community==0.2.11
|
||||||
|
langchain-core==0.2.28
|
||||||
|
langchain-openai==0.1.20
|
||||||
|
langchain-text-splitters==0.2.2
|
||||||
|
langsmith==0.1.98
|
||||||
Levenshtein==0.25.1
|
Levenshtein==0.25.1
|
||||||
Markdown==3.5.2
|
Markdown==3.5.2
|
||||||
markdown-it-py==3.0.0
|
markdown-it-py==3.0.0
|
||||||
|
@ -62,14 +85,26 @@ mdurl==0.1.2
|
||||||
multidict==6.0.5
|
multidict==6.0.5
|
||||||
multiprocess==0.70.16
|
multiprocess==0.70.16
|
||||||
mutagen==1.47.0
|
mutagen==1.47.0
|
||||||
|
mypy-extensions==1.0.0
|
||||||
|
nest-asyncio==1.6.0
|
||||||
networkx==3.2.1
|
networkx==3.2.1
|
||||||
numpy==1.26.4
|
numpy==1.26.4
|
||||||
|
openai==1.39.0
|
||||||
openpyxl==3.1.2
|
openpyxl==3.1.2
|
||||||
|
opentelemetry-api==1.24.0
|
||||||
|
opentelemetry-exporter-otlp-proto-common==1.24.0
|
||||||
|
opentelemetry-exporter-otlp-proto-grpc==1.24.0
|
||||||
|
opentelemetry-proto==1.24.0
|
||||||
|
opentelemetry-sdk==1.24.0
|
||||||
|
opentelemetry-semantic-conventions==0.45b0
|
||||||
ordered-set==4.1.0
|
ordered-set==4.1.0
|
||||||
orjson==3.10.6
|
orjson==3.10.6
|
||||||
packaging==24.0
|
packaging==24.0
|
||||||
pandas==2.2.0
|
pandas==2.2.0
|
||||||
passlib==1.7.4
|
passlib==1.7.4
|
||||||
|
pluggy==1.5.0
|
||||||
|
portalocker==2.10.1
|
||||||
|
protobuf==4.25.1
|
||||||
pyarrow==15.0.0
|
pyarrow==15.0.0
|
||||||
pyarrow-hotfix==0.6
|
pyarrow-hotfix==0.6
|
||||||
pydal==20240713.1
|
pydal==20240713.1
|
||||||
|
@ -77,6 +112,10 @@ pydantic==2.8.2
|
||||||
pydantic_core==2.20.1
|
pydantic_core==2.20.1
|
||||||
Pygments==2.18.0
|
Pygments==2.18.0
|
||||||
pymongo==4.6.1
|
pymongo==4.6.1
|
||||||
|
pysbd==0.3.4
|
||||||
|
pytest==8.3.2
|
||||||
|
pytest-repeat==0.9.3
|
||||||
|
pytest-xdist==3.6.1
|
||||||
python-dateutil==2.9.0.post0
|
python-dateutil==2.9.0.post0
|
||||||
python-dotenv==1.0.1
|
python-dotenv==1.0.1
|
||||||
python-engineio==4.9.1
|
python-engineio==4.9.1
|
||||||
|
@ -86,28 +125,36 @@ python-slugify==8.0.4
|
||||||
python-socketio==5.11.3
|
python-socketio==5.11.3
|
||||||
pytz==2023.3.post1
|
pytz==2023.3.post1
|
||||||
PyYAML==6.0.1
|
PyYAML==6.0.1
|
||||||
|
ragas==0.1.13
|
||||||
rapidfuzz==3.9.4
|
rapidfuzz==3.9.4
|
||||||
|
regex==2024.7.24
|
||||||
requests==2.32.3
|
requests==2.32.3
|
||||||
rich==13.7.1
|
rich==13.7.1
|
||||||
s3transfer==0.10.2
|
s3transfer==0.10.2
|
||||||
|
sentry-sdk==2.12.0
|
||||||
shellingham==1.5.4
|
shellingham==1.5.4
|
||||||
simple-websocket==1.0.0
|
simple-websocket==1.0.0
|
||||||
six==1.16.0
|
six==1.16.0
|
||||||
sniffio==1.3.1
|
sniffio==1.3.1
|
||||||
SQLAlchemy==2.0.25
|
SQLAlchemy==2.0.25
|
||||||
starlette==0.37.2
|
starlette==0.37.2
|
||||||
|
tabulate==0.9.0
|
||||||
taipy==3.1.1
|
taipy==3.1.1
|
||||||
taipy-config==3.1.1
|
taipy-config==3.1.1
|
||||||
taipy-core==3.1.1
|
taipy-core==3.1.1
|
||||||
taipy-gui==3.1.4
|
taipy-gui==3.1.4
|
||||||
taipy-rest==3.1.1
|
taipy-rest==3.1.1
|
||||||
taipy-templates==3.1.1
|
taipy-templates==3.1.1
|
||||||
|
tenacity==8.4.2
|
||||||
text-unidecode==1.3
|
text-unidecode==1.3
|
||||||
|
tiktoken==0.7.0
|
||||||
|
tokenizers==0.19.1
|
||||||
toml==0.10.2
|
toml==0.10.2
|
||||||
tqdm==4.66.4
|
tqdm==4.66.4
|
||||||
Twisted==23.10.0
|
Twisted==23.10.0
|
||||||
typer==0.12.3
|
typer==0.12.3
|
||||||
types-python-dateutil==2.9.0.20240316
|
types-python-dateutil==2.9.0.20240316
|
||||||
|
typing-inspect==0.9.0
|
||||||
typing_extensions==4.12.0
|
typing_extensions==4.12.0
|
||||||
tzdata==2024.1
|
tzdata==2024.1
|
||||||
tzlocal==5.2
|
tzlocal==5.2
|
||||||
|
@ -118,8 +165,10 @@ uvloop==0.19.0
|
||||||
watchfiles==0.22.0
|
watchfiles==0.22.0
|
||||||
websockets==12.0
|
websockets==12.0
|
||||||
Werkzeug==3.0.3
|
Werkzeug==3.0.3
|
||||||
|
wrapt==1.16.0
|
||||||
wsproto==1.2.0
|
wsproto==1.2.0
|
||||||
xxhash==3.4.1
|
xxhash==3.4.1
|
||||||
yarl==1.9.4
|
yarl==1.9.4
|
||||||
|
zipp==3.19.2
|
||||||
zope.event==5.0
|
zope.event==5.0
|
||||||
zope.interface==6.4.post2
|
zope.interface==6.4.post2
|
||||||
|
|
Loading…
Reference in New Issue