pierreguillou commited on
Commit
d6eda58
1 Parent(s): 3b47eef

Create gemini_functions.py

Browse files
Files changed (1) hide show
  1. helpers/gemini_functions.py +81 -0
helpers/gemini_functions.py ADDED
@@ -0,0 +1,81 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Gemini Functions
2
+
3
+ import gradio as gr
4
+ import os
5
+ import google.generativeai as genai
6
+ import json
7
+
8
+ def initialize_gemini():
9
+ try:
10
+ genai.configure(api_key=os.getenv("GEMINI_API_KEY"))
11
+ generation_config = {
12
+ "temperature": 1,
13
+ "top_p": 0.95,
14
+ "top_k": 40,
15
+ "max_output_tokens": 8192,
16
+ "response_mime_type": "text/plain",
17
+ }
18
+ model = genai.GenerativeModel(
19
+ model_name="gemini-1.5-pro",
20
+ generation_config=generation_config,
21
+ )
22
+ return model
23
+ except Exception as e:
24
+ raise gr.Error(f"Error initializing Gemini: {str(e)}")
25
+
26
+ def create_prompt(extracted_text: str, path_to_data_to_extract: str) -> str:
27
+
28
+ # load data to extract
29
+ with open(path_to_data_to_extract, 'r', encoding='utf-8') as file:
30
+ data_to_extract = json.load(file)
31
+
32
+ prompt = f"""Tu es un assistant juridique expert en analyse de documents judiciaires français.
33
+ Je vais te fournir le contenu d'un document judiciaire extrait d'un PDF.
34
+ Ta tâche est d'analyser ce texte et d'en extraire les informations suivantes de manière précise :
35
+
36
+ {json.dumps(data_to_extract, indent=2, ensure_ascii=False)}
37
+
38
+ Voici quelques règles à suivre :
39
+ - Si une information n'est pas présente dans le texte, indique "Non spécifié" pour cette catégorie.
40
+ - Pour les noms des parties (demandeurs et défendeurs, et leurs avocats), liste tous ceux que tu trouves
41
+ - Assure-toi de différencier correctement les demandeurs des défendeurs.
42
+ - Si tu n'es pas sûr d'une information, indique-le clairement.
43
+
44
+ Présente tes résultats sous forme de JSON, en utilisant les catégories mentionnées ci-dessus.
45
+
46
+ Voici le contenu du document :
47
+
48
+ {extracted_text.strip()}
49
+
50
+ Analyse ce texte et fournis-moi les informations demandées au format JSON uniquement.""".strip()
51
+
52
+ return prompt
53
+
54
+ def extract_data_with_gemini(text_file_path: str, path_to_data_to_extract: str) -> dict:
55
+ try:
56
+ # Initialize Gemini
57
+ model = initialize_gemini()
58
+
59
+ # Read the extracted text
60
+ with open(text_file_path, 'r', encoding='utf-8') as f:
61
+ extracted_text = f.read()
62
+
63
+ # Create prompt and get response
64
+ prompt = create_prompt(extracted_text, path_to_data_to_extract)
65
+ response = model.generate_content(prompt)
66
+
67
+ # Parse the JSON response
68
+ try:
69
+ # Extract JSON from the response text
70
+ json_str = response.text
71
+ if "json" in json_str.lower():
72
+ json_str = json_str.split("json")[1].split("```")[0]
73
+ elif "```" in json_str:
74
+ json_str = json_str.split("```")[1]
75
+ result = json.loads(json_str)
76
+ except:
77
+ result = {"error": "Failed to parse JSON response", "raw_response": response.text}
78
+
79
+ return result
80
+ except Exception as e:
81
+ raise gr.Error(f"Error in Gemini processing: {str(e)}")