Jacobo commited on
Commit
39a3b58
1 Parent(s): f3bfbe7

added the .py lmao

Browse files
Files changed (2) hide show
  1. app.py +131 -0
  2. requirements.txt +4 -0
app.py ADDED
@@ -0,0 +1,131 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from dotenv import load_dotenv
2
+ from together import Together
3
+ from sentence_transformers import SentenceTransformer
4
+ from sentence_transformers import SentenceTransformer
5
+ import vecs
6
+ import gradio as gr
7
+ import os
8
+
9
+ load_dotenv()
10
+
11
+ user = os.getenv("user")
12
+ password = os.getenv("password")
13
+ host = os.getenv("host")
14
+ port = os.getenv("port")
15
+ db_name = "postgres"
16
+ DB_CONNECTION = f"postgresql://{user}:{password}@{host}:{port}/{db_name}"
17
+ vx = vecs.create_client(DB_CONNECTION)
18
+ model = SentenceTransformer('Snowflake/snowflake-arctic-embed-xs')
19
+ client = Together(api_key=os.getenv('TOGETHER_API_KEY'))
20
+
21
+ def query_db(query, limit = 5, filters = {}, measure = "cosine_distance", include_value = False, include_metadata=False, table = "2023"):
22
+ query_embeds = vx.get_or_create_collection(name= table, dimension=384)
23
+ ans = query_embeds.query(
24
+ data=query,
25
+ limit=limit,
26
+ filters=filters,
27
+ measure=measure,
28
+ include_value=include_value,
29
+ include_metadata=include_metadata,
30
+ )
31
+ return ans
32
+
33
+ def construct_result(ans):
34
+ results = ""
35
+ for i in range(0, len(ans)):
36
+ a, b = ans[i][2].get("sentencia"), ans[i][2].get("fragmento")
37
+ results += (f"En la sentencia {a}, se dijo {b}\n")
38
+ return results
39
+
40
+ def sort_by_score(item):
41
+ return item[1]
42
+
43
+ def referencias(results):
44
+ references = 'Sentencias encontradas: \n'
45
+ enlistadas = []
46
+ for item in results:
47
+ if item[2].get('sentencia') in enlistadas:
48
+ pass
49
+ else:
50
+ references += item[2].get('sentencia')+ ' '
51
+ enlistadas.append(item[2].get('sentencia'))
52
+ return references
53
+
54
+ def live_inference(messages, max_new_tokens = 512):
55
+ response = client.chat.completions.create(
56
+ model="meta-llama/Meta-Llama-3.1-8B-Instruct-Turbo",
57
+ messages = messages,
58
+ max_tokens = max_new_tokens
59
+ )
60
+ return response.choices[0].message.content
61
+
62
+ def inference(hechos, investigacion, teoria):
63
+ encoded_prompt1 = model.encode(investigacion)
64
+ years = range(2019, 2025)
65
+ results = []
66
+ for year in years:
67
+ results.extend(query_db(encoded_prompt1, include_metadata = True, table = str(year), include_value=True, limit = 5))
68
+ results.sort(key=sort_by_score, reverse=True)
69
+ researchAI=[
70
+ {"role": "system", "content": f"""
71
+ Eres Ticio, un asistente de investigación jurídica. Tu deber es organizar el contenido de las sentencias de la jurisprudencia de acuerdo
72
+ a las necesidades del usuario. Debes responder solo en español. Debes responder solo en base a la información del contexto a continuación.
73
+ Siempre debes mencionar la fuente en tu escrito, debe tener un estilo formal y juridico.
74
+ Contexto:
75
+ {construct_result(results)}
76
+ """
77
+ },
78
+ {"role": "user", "content": investigacion},
79
+ ]
80
+ research = live_inference(researchAI, max_new_tokens=1024)
81
+ factsAI =[
82
+ {"role": "system", "content": f"""
83
+ Eres Ticio, un asistente de redacción jurídica. Debes ayudar a organizar el texto de los hechos.
84
+ el texto debe verse como una lista numerada de parrafos con la siguiente estructura:
85
+ numero. fecha. descripción del evento.
86
+ Debes usar lenguaje juridico y profesional para explicar el evento y explicarlos de la forma que mejor beneficie
87
+ la teoría del caso del usuario.
88
+ Teoría del caso:
89
+ {teoria}
90
+ """
91
+ },
92
+ {"role": "user", "content": hechos},
93
+ ]
94
+ facts = live_inference(factsAI, max_new_tokens=1024)
95
+ argsAI = [
96
+ {"role": "system", "content": f"""
97
+ Eres Ticio, un asistente de redacción jurídica. Tu tarea es redactar los fundamentos de derecho de la tutela del usuario.
98
+ Para redactar unos fundamentos de derecho debes escribir varios argumentos en uno o dos parrafos de la siguiente forma:
99
+ Fuente juridica (artiuclo de un decreto, ley o resolución).
100
+ Estandar jurídico (debes mencionar una sentencia judicial que interprete la fuente juridica y explique como se debe aplicar).
101
+ Aplicación al caso (debes explicar en varios parrafos el analisis detallados donde menciones las fuentes y estandares porque los hechos del caso se ajustan al estandar que mencionaste antes).
102
+
103
+ Redacta la aplicación del caso en parrafos continuos sin bullet points
104
+ Debes utilizar las fuentes y estandares juridicos que aparezcan en la investigación que te proporciona el usuario
105
+ El argumento debe ayudar a defender la postura de la teoría del caso
106
+ Teoría del caso:
107
+ {teoria}
108
+
109
+ Hechos:
110
+ {facts}
111
+
112
+ recuerda redactar de forma que expliques en lenguaje juridico y técnico el analisis de cada uno de los argumentos
113
+ """
114
+ },
115
+ {"role": "user", "content": research},
116
+ ]
117
+ args = live_inference(argsAI, max_new_tokens=1536)
118
+ return "**Hechos**: \n\n" + facts + "\n\n **Fundamentos**: \n\n" + args
119
+
120
+
121
+ with gr.Blocks() as demo:
122
+ hechos = gr.Textbox(label = "Hechos", lines = 15, show_label = True, show_copy_button= True)
123
+ tema = gr.Textbox(label = "Investigación", lines = 1, show_label = True, show_copy_button= True)
124
+ teoria = gr.Textbox(label = "Teoría del caso", lines = 5, show_label = True, show_copy_button= True)
125
+ btn = gr.Button("Generar")
126
+ output = gr.Markdown(label = "respuesta", show_label = True, show_copy_button= True)
127
+ btn.click(fn=inference, inputs=[hechos, tema, teoria], outputs=output, api_name=False)
128
+
129
+ if __name__ == "__main__":
130
+ demo.queue()
131
+ demo.launch(show_api=False, debug= True)
requirements.txt ADDED
@@ -0,0 +1,4 @@
 
 
 
 
 
1
+ vecs
2
+ together
3
+ gradio
4
+ sentence-transformers