Compare commits
	
		
			No commits in common. "7a9a9f7de1334456064f24b6dcafe7b837e55c77" and "b5f235f5ae849474a4460d1d409643a683f13b37" have entirely different histories.
		
	
	
		
			7a9a9f7de1
			...
			b5f235f5ae
		
	
		
							
								
								
									
										788
									
								
								apis.py
								
								
								
								
							
							
						
						
									
										788
									
								
								apis.py
								
								
								
								
							|  | @ -45,14 +45,6 @@ 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") | ||||||
|  | @ -74,14 +66,7 @@ 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("", description="Style and sentiments of text") |     mode : str = Query("whisper", 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") | ||||||
|  | @ -114,11 +99,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": | ||||||
|         info=str({"path":path,"trusted":Trusted,"mode":mode}) |         hash1 = hashlib.sha256(path.encode()).hexdigest()+".txt" | ||||||
|         hash1 = hashlib.sha256(info.encode()).hexdigest() |         f = open("example/texto/"+hash1, "w") | ||||||
|         # with open("example/texto/"+hash1, 'w') as f: |         f.write(path) | ||||||
|         #     json.dump(info, f) |         f.close() | ||||||
|         # path=pwd+"/"+pathText+hash1 |         path=pwd+"/"+pathText+hash1 | ||||||
|         length=len(Trusted) |         length=len(Trusted) | ||||||
|         size=0 |         size=0 | ||||||
|         duration=0 |         duration=0 | ||||||
|  | @ -127,63 +112,22 @@ 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,hash=hash1 ) |         db.trusted.insert(path=path,trusted=Trusted,mode=mode,size=size,duration=duration,last_modified=last_modified,length=length ) | ||||||
|         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,hash=hash1) |         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.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") | ||||||
|  | @ -197,18 +141,17 @@ 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"]) & (db.analitic_voice.model == Sal["model"])).count()==0: |     if db(db.analitic_voice.path == Sal["path"] and 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: | ||||||
|         print(2,Sal) |         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"]) | ||||||
|         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 | ||||||
| 
 | 
 | ||||||
|  | @ -249,7 +192,7 @@ def EvalVoicehtml(): | ||||||
|     </style> |     </style> | ||||||
| </head> | </head> | ||||||
| <body> | <body> | ||||||
|     <h1>Petición Evaluar modelo de voz contra datos curados</h1> |     <h1>Petición POST a API</h1> | ||||||
| 
 | 
 | ||||||
|     <select id="texto1"> |     <select id="texto1"> | ||||||
|         %s |         %s | ||||||
|  | @ -294,495 +237,6 @@ 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): | ||||||
|  | @ -931,8 +385,33 @@ 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): | ||||||
|  | @ -950,7 +429,93 @@ 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> | ||||||
|  | @ -1086,3 +651,108 @@ 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,20 +9,8 @@ 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"), | ||||||
|  | @ -55,14 +43,8 @@ db.define_table( | ||||||
|     Field("model"), |     Field("model"), | ||||||
|     Field("time", type="double"), |     Field("time", type="double"), | ||||||
|     Field("path"), |     Field("path"), | ||||||
|     Field("relevance", type="double"), |     Field("similarity", type="double"), | ||||||
|     Field("bias", type="double"), |     Field("similaritypartial", 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')     | ||||||
| ) | ) | ||||||
| 
 | 
 | ||||||
|  | @ -85,15 +67,9 @@ db.define_table( | ||||||
|     Field("model"), |     Field("model"), | ||||||
|     Field("time", type="double"), |     Field("time", type="double"), | ||||||
|     Field("path"), |     Field("path"), | ||||||
|     Field("relevance", type="double"), |     Field("similarity", type="double"), | ||||||
|     Field("bias", type="double"), |     Field("similaritypartial", type="double"), | ||||||
|     Field("toxic", type="double"), |     Field('last_modified', 'datetime')     | ||||||
|     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( | ||||||
|  |  | ||||||
							
								
								
									
										264
									
								
								gui.py
								
								
								
								
							
							
						
						
									
										264
									
								
								gui.py
								
								
								
								
							|  | @ -7,9 +7,12 @@ 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: | ||||||
|  | @ -17,8 +20,6 @@ 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() | ||||||
|  | @ -35,247 +36,70 @@ 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 | ||||||
|     data_files={} |     datafiles={} | ||||||
|     for row in db().select(db.analitic_voice.ALL): |     for row in db().select(db.analitic_voice.ALL): | ||||||
|         data_files[row.id]=row.as_dict() |         datafiles[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> | ||||||
|      |  | ||||||
| 
 |  | ||||||
|     """ |     """ | ||||||
|     #<taipy:chart mode="markers" x="x" y[1]="time" y[2]="similarity">{data_files_voice}</taipy:chart> |  | ||||||
| 
 | 
 | ||||||
|     return html,data,data_files |     return html,data,datafiles | ||||||
|  | html_page_getmetricsvoice,data_voice,data_files_voices=html_getmetricvoice() | ||||||
| 
 | 
 | ||||||
| 
 | mode="voice" | ||||||
| 
 | modetypedata="audio" | ||||||
| 
 | file="id2" | ||||||
| 
 | def changemenu(mode): | ||||||
| def getmetricllm_compra(model): |     if mode_list[mode]=="audio": | ||||||
|     rows = db(db.analitic_llm_compra.model==model).select() |         pathori="example/audio" | ||||||
|     rows_list = rows.as_list() |     if mode_list[mode]=="factura": | ||||||
|     data=pd.DataFrame(rows_list) |         pathori="example/factura" | ||||||
| 
 |     if mode_list[mode]=="texto": | ||||||
|     #durationL=list() |         pathori="example/texto" | ||||||
|     #for i in rows_list: |     seltypedata=mode_list[mode]   | ||||||
|         #durationL.append(db(db.trusted.path == i["path"] ).select().last().duration) |     dir_list = os.listdir(pathori) | ||||||
|     #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> |  | ||||||
|      |      | ||||||
| 
 |     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 getmetricllm_generaciontexto(model): | def trustedallhtml(mode): | ||||||
|     rows = db(db.analitic_llm_generaciontexto.model==model).select() |     pathori,seltypedata,dir_list=changemenu(mode) | ||||||
|     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 |  | ||||||
| 
 |  | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |     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)) | ||||||
|  | #print(sel,sel2,seltypedata) | ||||||
|  | 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) | ||||||
| 
 | 
 | ||||||
|  | data=pd.DataFrame({'col1': [1, 2], 'col2': [3, 4]}) | ||||||
| 
 | 
 | ||||||
| pages = { | pages = { | ||||||
|  |   "/": html_page_index , | ||||||
|   "getmetricsvoice": Html(html_page_getmetricsvoice), |   "getmetricsvoice": Html(html_page_getmetricsvoice), | ||||||
|   "getmetricsllm_compra": Html(html_page_getmetricsllm_compra), |   "trustedall":html_page_trustedall | ||||||
|   "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)#state.imageActive2, |     app.run(use_reloader=True,port=7882, change_delay=1600)#state.imageActive2, | ||||||
|  |  | ||||||
							
								
								
									
										111
									
								
								main.py
								
								
								
								
							
							
						
						
									
										111
									
								
								main.py
								
								
								
								
							|  | @ -2,37 +2,24 @@ 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"] | ||||||
|  | @ -47,105 +34,27 @@ 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): | ||||||
|  |  | ||||||
							
								
								
									
										150
									
								
								metrics.py
								
								
								
								
							
							
						
						
									
										150
									
								
								metrics.py
								
								
								
								
							|  | @ -1,150 +0,0 @@ | ||||||
| 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,11 +2,9 @@ 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 | ||||||
|  | @ -22,20 +20,13 @@ 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 | ||||||
|  | @ -49,9 +40,7 @@ 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 | ||||||
|  | @ -59,23 +48,11 @@ 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 | ||||||
|  | @ -85,26 +62,14 @@ 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 | ||||||
|  | @ -112,10 +77,6 @@ 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 | ||||||
|  | @ -125,36 +86,28 @@ 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 | ||||||
|  | @ -165,10 +118,8 @@ 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