jack4241 commited on
Commit
05dbb7e
·
1 Parent(s): 922de31

Claude Code

Browse files
Files changed (3) hide show
  1. app.py +316 -34
  2. readme_space.md +40 -0
  3. requirements_txt.txt +8 -0
app.py CHANGED
@@ -1,35 +1,317 @@
1
- # app.py
2
  import gradio as gr
3
- import sys
4
- from pathlib import Path
5
- sys.path.append(str(Path(__file__).parent / "src"))
6
- from src.IberleyAI.Tools.IberleyIAPrompt import IberleyIAPrompt
7
-
8
- # Función "wrapper" que llama al método de la tool
9
- def run_iberley(prompt: str) -> str:
10
- # Aquí usamos el método de la clase
11
- return IberleyIAPrompt.iberley_ia_prompt(prompt)
12
-
13
- # --------------------------
14
- # Interfaz Gradio
15
- # --------------------------
16
- with gr.Blocks() as demo:
17
- gr.Markdown("## IberleyAI Connector")
18
-
19
- # Entrada del usuario
20
- prompt_input = gr.Textbox(
21
- placeholder="Escribe algo...",
22
- lines=1,
23
- label="Tu prompt"
24
- )
25
- # Salida del modelo
26
- response_output = gr.Textbox(
27
- lines=10,
28
- label="Respuesta de IberleyAI"
29
- )
30
-
31
- # Conectar la entrada con la función
32
- prompt_input.submit(fn=run_iberley, inputs=prompt_input, outputs=response_output)
33
-
34
- # Lanzar la app con soporte MCP
35
- demo.launch(mcp_server=True)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  import gradio as gr
2
+ import json
3
+ import requests
4
+ from typing import Dict, Any, List
5
+ import datetime
6
+
7
+ class IberleyLegalAI:
8
+ """
9
+ Clase principal para el sistema de IA Legal de Iberley
10
+ """
11
+
12
+ def __init__(self):
13
+ self.name = "IberleyIA"
14
+ self.description = "Sistema de IA Legal para Iberley Informacion Legal SL"
15
+ self.version = "1.0.0"
16
+
17
+ def analyze_legal_document(self, document_text: str, analysis_type: str = "general") -> Dict[str, Any]:
18
+ """
19
+ Analiza documentos legales y devuelve un análisis estructurado
20
+ """
21
+ # Aquí iría vuestra lógica de análisis legal
22
+ result = {
23
+ "document_summary": f"Análisis {analysis_type} del documento",
24
+ "key_points": [
25
+ "Punto legal clave 1",
26
+ "Punto legal clave 2",
27
+ "Punto legal clave 3"
28
+ ],
29
+ "recommendations": [
30
+ "Recomendación 1",
31
+ "Recomendación 2"
32
+ ],
33
+ "risk_assessment": "Bajo/Medio/Alto",
34
+ "timestamp": datetime.datetime.now().isoformat(),
35
+ "processed_by": "IberleyIA"
36
+ }
37
+ return result
38
+
39
+ def search_legal_precedents(self, query: str, jurisdiction: str = "España") -> List[Dict]:
40
+ """
41
+ Busca precedentes legales relevantes
42
+ """
43
+ # Aquí iría vuestra lógica de búsqueda de precedentes
44
+ precedents = [
45
+ {
46
+ "case_name": "Caso relevante 1",
47
+ "court": "Tribunal Supremo",
48
+ "date": "2023-01-15",
49
+ "relevance_score": 0.95,
50
+ "summary": "Resumen del precedente relevante"
51
+ }
52
+ ]
53
+ return precedents
54
+
55
+ def generate_legal_draft(self, document_type: str, parameters: Dict[str, Any]) -> str:
56
+ """
57
+ Genera borradores de documentos legales
58
+ """
59
+ # Aquí iría vuestra lógica de generación de documentos
60
+ draft = f"""
61
+ BORRADOR DE {document_type.upper()}
62
+
63
+ Generado por IberleyIA
64
+ Fecha: {datetime.datetime.now().strftime('%d/%m/%Y')}
65
+
66
+ [Contenido del documento basado en los parámetros proporcionados]
67
+
68
+ NOTA: Este es un borrador generado por IA.
69
+ Requiere revisión legal profesional antes de su uso.
70
+ """
71
+ return draft.strip()
72
+
73
+ # Inicializar el sistema
74
+ iberley_ai = IberleyLegalAI()
75
+
76
+ def create_gradio_interface():
77
+ """
78
+ Crea la interfaz Gradio optimizada para uso con Claude
79
+ """
80
+
81
+ # Función wrapper para análisis de documentos
82
+ def analyze_document_wrapper(document_text, analysis_type):
83
+ if not document_text.strip():
84
+ return "❌ Error: Debe proporcionar un documento para analizar"
85
+
86
+ try:
87
+ result = iberley_ai.analyze_legal_document(document_text, analysis_type)
88
+ return f"""
89
+ # 📋 Análisis Completado
90
+
91
+ ## Resumen
92
+ {result['document_summary']}
93
+
94
+ ## Puntos Clave
95
+ {chr(10).join([f"• {point}" for point in result['key_points']])}
96
+
97
+ ## Recomendaciones
98
+ {chr(10).join([f"• {rec}" for rec in result['recommendations']])}
99
+
100
+ ## Evaluación de Riesgo
101
+ **{result['risk_assessment']}**
102
+
103
+ ---
104
+ *Procesado el {result['timestamp']} por {result['processed_by']}*
105
+ """
106
+ except Exception as e:
107
+ return f"❌ Error en el análisis: {str(e)}"
108
+
109
+ # Función wrapper para búsqueda de precedentes
110
+ def search_precedents_wrapper(query, jurisdiction):
111
+ if not query.strip():
112
+ return "❌ Error: Debe proporcionar una consulta de búsqueda"
113
+
114
+ try:
115
+ precedents = iberley_ai.search_legal_precedents(query, jurisdiction)
116
+ if not precedents:
117
+ return "ℹ️ No se encontraron precedentes relevantes para esta consulta"
118
+
119
+ result = "# 🔍 Precedentes Encontrados\n\n"
120
+ for prec in precedents:
121
+ result += f"""
122
+ ## {prec['case_name']}
123
+ - **Tribunal**: {prec['court']}
124
+ - **Fecha**: {prec['date']}
125
+ - **Relevancia**: {prec['relevance_score']:.0%}
126
+ - **Resumen**: {prec['summary']}
127
+
128
+ ---
129
+ """
130
+ return result
131
+ except Exception as e:
132
+ return f"❌ Error en la búsqueda: {str(e)}"
133
+
134
+ # Función wrapper para generación de documentos
135
+ def generate_draft_wrapper(document_type, client_name, subject, additional_params):
136
+ if not document_type or not client_name:
137
+ return "❌ Error: Debe especificar el tipo de documento y el nombre del cliente"
138
+
139
+ parameters = {
140
+ "client_name": client_name,
141
+ "subject": subject,
142
+ "additional_params": additional_params
143
+ }
144
+
145
+ try:
146
+ draft = iberley_ai.generate_legal_draft(document_type, parameters)
147
+ return draft
148
+ except Exception as e:
149
+ return f"❌ Error en la generación: {str(e)}"
150
+
151
+ # Crear la interfaz con múltiples pestañas
152
+ with gr.Blocks(
153
+ title="IberleyIA - Sistema de IA Legal",
154
+ theme=gr.themes.Soft(),
155
+ css="""
156
+ .gradio-container {
157
+ font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
158
+ }
159
+ .tab-nav {
160
+ background-color: #f8f9fa;
161
+ }
162
+ """
163
+ ) as demo:
164
+
165
+ # Cabecera principal
166
+ gr.Markdown("""
167
+ # 🏛️ IberleyIA - Sistema de IA Legal
168
+
169
+ **Iberley Informacion Legal SL** | Sistema inteligente de análisis legal
170
+
171
+ > 💡 **Para Claude**: Puedes usar esta interfaz para ayudar con análisis legales, búsqueda de precedentes y generación de documentos legales. Cada pestaña ofrece funcionalidades específicas.
172
+ """)
173
+
174
+ # Pestañas principales
175
+ with gr.Tabs():
176
+
177
+ # Pestaña 1: Análisis de Documentos
178
+ with gr.TabItem("📄 Análisis de Documentos", id="analyze"):
179
+ gr.Markdown("### Analiza documentos legales y obtén insights detallados")
180
+
181
+ with gr.Row():
182
+ with gr.Column(scale=2):
183
+ doc_input = gr.Textbox(
184
+ label="Documento a Analizar",
185
+ placeholder="Pega aquí el texto del documento legal que deseas analizar...",
186
+ lines=10,
187
+ max_lines=20
188
+ )
189
+ analysis_type = gr.Dropdown(
190
+ label="Tipo de Análisis",
191
+ choices=["general", "contractual", "penal", "laboral", "mercantil", "civil"],
192
+ value="general"
193
+ )
194
+ analyze_btn = gr.Button("🔍 Analizar Documento", variant="primary")
195
+
196
+ with gr.Column(scale=2):
197
+ analysis_output = gr.Markdown(
198
+ label="Resultado del Análisis",
199
+ value="*El análisis aparecerá aquí...*"
200
+ )
201
+
202
+ analyze_btn.click(
203
+ fn=analyze_document_wrapper,
204
+ inputs=[doc_input, analysis_type],
205
+ outputs=analysis_output
206
+ )
207
+
208
+ # Pestaña 2: Búsqueda de Precedentes
209
+ with gr.TabItem("🔎 Precedentes Legales", id="search"):
210
+ gr.Markdown("### Busca precedentes legales relevantes")
211
+
212
+ with gr.Row():
213
+ with gr.Column():
214
+ search_query = gr.Textbox(
215
+ label="Consulta de Búsqueda",
216
+ placeholder="Ej: responsabilidad civil por daños, contratos laborales temporales...",
217
+ lines=3
218
+ )
219
+ jurisdiction = gr.Dropdown(
220
+ label="Jurisdicción",
221
+ choices=["España", "Unión Europea", "Internacional"],
222
+ value="España"
223
+ )
224
+ search_btn = gr.Button("🔍 Buscar Precedentes", variant="primary")
225
+
226
+ with gr.Column():
227
+ precedents_output = gr.Markdown(
228
+ value="*Los precedentes encontrados aparecerán aquí...*"
229
+ )
230
+
231
+ search_btn.click(
232
+ fn=search_precedents_wrapper,
233
+ inputs=[search_query, jurisdiction],
234
+ outputs=precedents_output
235
+ )
236
+
237
+ # Pestaña 3: Generación de Documentos
238
+ with gr.TabItem("📝 Generador de Documentos", id="generate"):
239
+ gr.Markdown("### Genera borradores de documentos legales")
240
+
241
+ with gr.Row():
242
+ with gr.Column():
243
+ doc_type = gr.Dropdown(
244
+ label="Tipo de Documento",
245
+ choices=[
246
+ "Contrato de Arrendamiento",
247
+ "Contrato Laboral",
248
+ "Carta de Reclamación",
249
+ "Acuerdo de Confidencialidad",
250
+ "Poder Notarial",
251
+ "Demanda Civil",
252
+ "Recurso de Apelación"
253
+ ],
254
+ value="Contrato de Arrendamiento"
255
+ )
256
+ client_name = gr.Textbox(
257
+ label="Nombre del Cliente/Parte",
258
+ placeholder="Nombre completo o razón social"
259
+ )
260
+ subject = gr.Textbox(
261
+ label="Asunto/Objeto",
262
+ placeholder="Breve descripción del asunto",
263
+ lines=2
264
+ )
265
+ additional_params = gr.Textbox(
266
+ label="Parámetros Adicionales",
267
+ placeholder="Información adicional específica para el documento...",
268
+ lines=4
269
+ )
270
+ generate_btn = gr.Button("📝 Generar Borrador", variant="primary")
271
+
272
+ with gr.Column():
273
+ draft_output = gr.Textbox(
274
+ label="Borrador Generado",
275
+ lines=20,
276
+ max_lines=30,
277
+ show_copy_button=True
278
+ )
279
+
280
+ generate_btn.click(
281
+ fn=generate_draft_wrapper,
282
+ inputs=[doc_type, client_name, subject, additional_params],
283
+ outputs=draft_output
284
+ )
285
+
286
+ # Footer con información
287
+ gr.Markdown("""
288
+ ---
289
+
290
+ ### 🤖 Instrucciones para Claude:
291
+
292
+ 1. **Análisis de Documentos**: Usa esta función para analizar contratos, demandas, o cualquier documento legal
293
+ 2. **Búsqueda de Precedentes**: Encuentra casos similares y jurisprudencia relevante
294
+ 3. **Generación de Documentos**: Crea borradores iniciales de documentos legales
295
+
296
+ ### ⚖️ Aviso Legal:
297
+ Este sistema genera contenido de apoyo para profesionales legales. Todo output debe ser revisado por un abogado cualificado antes de su uso oficial.
298
+
299
+ **Iberley Informacion Legal SL** | [www.iberley.es](https://www.iberley.es)
300
+ """)
301
+
302
+ return demo
303
+
304
+ # Crear y configurar la aplicación
305
+ if __name__ == "__main__":
306
+ app = create_gradio_interface()
307
+
308
+ # Configuración para producción en Hugging Face Spaces
309
+ app.launch(
310
+ server_name="0.0.0.0",
311
+ server_port=7860,
312
+ share=False, # False para Spaces, True para desarrollo local
313
+ show_error=True,
314
+ show_tips=False,
315
+ enable_queue=True,
316
+ max_threads=40
317
+ )
readme_space.md ADDED
@@ -0,0 +1,40 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ title: IberleyIA
3
+ emoji: ⚖️
4
+ colorFrom: blue
5
+ colorTo: purple
6
+ sdk: gradio
7
+ sdk_version: 4.44.0
8
+ app_file: app.py
9
+ pinned: false
10
+ license: apache-2.0
11
+ short_description: Sistema de IA Legal para Iberley Informacion Legal SL
12
+ ---
13
+
14
+ # 🏛️ IberleyIA - Sistema de IA Legal
15
+
16
+ Sistema inteligente de análisis legal desarrollado por **Iberley Informacion Legal SL**.
17
+
18
+ ## 🚀 Características
19
+
20
+ - **Análisis de Documentos Legales**: Analiza contratos, demandas y documentos legales
21
+ - **Búsqueda de Precedentes**: Encuentra jurisprudencia y casos relevantes
22
+ - **Generación de Documentos**: Crea borradores de documentos legales
23
+
24
+ ## 🤖 Compatible con Claude
25
+
26
+ Esta aplicación está optimizada para trabajar con Claude AI. Puede ser usada directamente desde la interfaz web o mediante enlaces compartidos.
27
+
28
+ ## 🔧 Uso con Claude
29
+
30
+ 1. Comparte este enlace con Claude: `https://iberley-iberleyia.hf.space`
31
+ 2. Claude puede interactuar directamente con las diferentes funcionalidades
32
+ 3. Los resultados se muestran en formato estructurado y legible
33
+
34
+ ## ⚖️ Aviso Legal
35
+
36
+ Este sistema genera contenido de apoyo para profesionales legales. Todo output debe ser revisado por un abogado cualificado antes de su uso oficial.
37
+
38
+ ---
39
+
40
+ **Iberley Informacion Legal SL** | [www.iberley.es](https://www.iberley.es)
requirements_txt.txt ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
 
1
+ gradio>=4.0.0
2
+ requests>=2.31.0
3
+ python-dateutil>=2.8.2
4
+ pandas>=2.0.0
5
+ numpy>=1.24.0
6
+ transformers>=4.30.0
7
+ torch>=2.0.0
8
+ # Añadir aquí cualquier librería específica que uséis para vuestro análisis legal