Spaces:
Sleeping
Sleeping
from langchain.prompts import StringPromptTemplate | |
import re | |
import langchain | |
from qa_txt import conversation_chain | |
from key_extract import chain | |
from bs4 import BeautifulSoup | |
import requests | |
from data_process import * | |
from langchain.tools.base import StructuredTool | |
from langchain.agents import initialize_agent | |
from qa_txt import llm | |
import gradio as gr | |
from langchain.agents import ( | |
create_react_agent, | |
AgentExecutor, | |
tool, | |
) | |
from langchain import hub | |
prompt = hub.pull("hwchase17/react") | |
def faq(query: str) -> str: | |
reponse = conversation_chain.invoke({"question": query, "chat_history": []}) | |
return reponse['answer'] | |
qa_faq = StructuredTool.from_function( | |
func = faq , | |
description=""" | |
Respond to general and FAQ questions about the website . | |
Parameters : | |
- query (string) : the same input as the user input no more no less and dont translate it even if it is in another language. | |
Returns : | |
- string : the output as returned from the function in french. | |
""" | |
) | |
def request_data(query: str) -> str: | |
request = chain.invoke({"input": query})['text'] | |
mot_cle = nettoyer_string(request) | |
mots = mot_cle.split() | |
ui = mots[0] | |
rg = chercher_data(ui) | |
if len(rg[0]): | |
reponse_final = format_reponse(rg) | |
return reponse_final | |
else: | |
return "Désolé, il semble que nous n'ayons pas de données correspondant à votre demande pour le moment. Avez-vous une autre question ou avez-vous besoin d'aide sur quelque chose d'autre?" | |
fetch_data = StructuredTool.from_function( | |
func=request_data, | |
description=""" | |
Request and fetch data using a search keyword. | |
Parameters : | |
- query (string) : the same input as the user input no more no less and always must translate it in french if it isn't already. For example : "give me data about economy" the input is economy but need to be translated first in french and the inputed same for other languages. | |
Returns : | |
- string : the output as returned from the function in french. | |
""", | |
) | |
tools_add = [ | |
qa_faq, | |
fetch_data, | |
] | |
agent = create_react_agent(llm=llm, tools=tools_add, prompt=prompt) | |
agent_executor = AgentExecutor( | |
agent=agent, | |
tools=tools_add, | |
verbose=True, | |
) | |
def data_gov_ma(message, history): | |
try: | |
response = agent_executor.invoke({"input": message}) | |
return response['output'] | |
except ValueError as e: | |
return "Je suis désolé, je n'ai pas compris votre question.Pourriez-vous la reformuler s'il vous plaît ?" | |
gr.ChatInterface(data_gov_ma).launch() |