File size: 4,078 Bytes
eabaa36
 
 
6301d89
 
 
eabaa36
 
 
6301d89
 
 
eabaa36
 
 
 
6301d89
 
eabaa36
deb9b2a
6301d89
1f9595d
eabaa36
c29e146
 
 
 
 
 
 
eabaa36
c29e146
 
 
eabaa36
6301d89
 
eabaa36
c0fb4c5
 
 
6301d89
 
 
 
 
 
 
76f7f9b
6301d89
 
 
 
 
 
 
 
 
 
 
 
 
 
 
eabaa36
1f9595d
 
 
eabaa36
6301d89
c29e146
 
 
6301d89
 
 
 
c29e146
1f9595d
6301d89
 
1f9595d
6301d89
c29e146
6301d89
 
 
aa7ae45
6301d89
c29e146
6301d89
 
 
 
 
 
c29e146
6301d89
e23fe59
6301d89
 
2c912b6
eabaa36
2c912b6
 
19851ab
9d0573a
eabaa36
 
1f9595d
94b87eb
04e8afe
 
 
5cec46a
fa5c2f5
6301d89
04e8afe
3e5e5a1
6301d89
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
import logging
import sys
from IPython.display import Markdown, display
from sqlalchemy import text
from llama_index.core import ServiceContext, PromptHelper
#from llama_index.core import LLMPredictor,OpenAIEmbedding
from llama_index.embeddings.openai import OpenAIEmbedding
from llama_index.llms.openai import OpenAI
from llama_index.core.indices.struct_store.sql_query import NLSQLTableQueryEngine
from sqlalchemy import (create_engine, MetaData, Table, Column, String, Integer)
import re
from llama_index.core import Document, VectorStoreIndex
from mistralai.client import MistralClient
from mistralai.models.chat_completion import ChatMessage
from langchain.callbacks.streaming_stdout import StreamingStdOutCallbackHandler
from langchain_community.llms import HuggingFaceTextGenInference
import re
import os
import gradio as gr
from dotenv import load_dotenv
import os
import openai

# Load environment variables from .env file
load_dotenv()
OPENAI_API_KEY = os.getenv('openai_key')
db_user = os.getenv('db_s_user')
db_password = os.getenv('db_s_pwd')
db_host = os.getenv('db_s_host')
db_name = os.getenv('db_s_name')

connection_string = f"postgresql+psycopg2://{db_user}:{db_password}@{db_host}/{db_name}"
engine = create_engine(connection_string)
metadata_obj = MetaData()

engine = create_engine(connection_string)

def query_fun(input_txt):
  query_similarity =f"""
  SELECT set_limit(0.2);
  SELECT 
    item,  
    suppleant, 
    signataire, 
	theme,
    GREATEST(similarity(item,'{input_txt}'), similarity(theme, '{input_txt}')) AS sml
FROM public.info_2
WHERE 
    item % '{input_txt}' OR theme % '{input_txt}' OR signataire % '{input_txt}'
ORDER BY 
    sml DESC, 
    item
LIMIT 5;

"""
  result_list=[]
  with engine.connect() as connection:
      result = connection.execute(text(query_similarity))
      for row in result:
          result_list.append(str(row[0]))
          result_list.append(str(row[1]))
          result_list.append(str(row[2]))
          result_list.append(str(row[3]))
  return result_list

def gradio_interface(input_text):
    result = process_text(input_text)
    return result
def process_text(input_text):
 
    texte_sans_apostrophes = re.sub(r"'", "", input_text)
    sml_input = query_fun(texte_sans_apostrophes)
    if not sml_input:
        result = "cette information n'existe pas dans votre base de données"
        print(result)
        return result
    # Découper la liste en sous-listes de trois éléments chacun
    split_list = [sml_input[i:i + 4] for i in range(0, len(sml_input), 4)]

# Créer les textes désirés pour chaque sous-liste
    texts = [f" * item: {sublist[0]} theme:{sublist[3]} premier signataire: {sublist[2]}, suppléant: {sublist[1]}" for sublist in split_list]

# Regrouper tous les textes en une seule variable, séparés par des sauts de ligne
    text = '\n'.join(texts)
    
    print(text)
    from openai import OpenAI
    client = OpenAI(api_key=OPENAI_API_KEY)

    response = client.chat.completions.create(
    model="gpt-4o",
    messages=[
    {"role": "system", "content": f"You are an expert in math.based on the folowing context answer direct response: {text}"},
    {"role": "user", "content": f"{input_text}"},
  ]
)
    print(text)
    return response.choices[0].message.content


examples=[
    "qui est habilité de signer au Devis et bons de commande égale à 14.000 €HT ?",
    "Qui peut renouveler l'adhésion à des associations professionnelles ?",
    "qui est habilité de signer au Devis et bons de commande égale à 4.000 €HT ?",
    "qui est habilité de signer au courriers liés aux demandes d'attestations fiscales et sociales et assurances",
    "qui signe décision de mobilité interne",
    "Est-ce qu'Anne-Marie Atlan signe les bons de commande à 80 000 ?",
]
iface = gr.Interface(
    fn=gradio_interface,
    inputs="text",
    outputs="text",
    title="Métropole Signature Expert",
    description="Provide a question related to signing authorities and get a response.",
    examples=examples,
    cache_examples=False,
    
)

iface.launch()