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()
|