From 77f0f1ee3ecb5a2bb47911728ab9e9e85aa3710a Mon Sep 17 00:00:00 2001 From: Joyce-Tchamdjou Date: Wed, 27 Mar 2024 23:48:28 +0000 Subject: [PATCH 1/4] fix: update prompt --- etl/experiments/ui.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/etl/experiments/ui.py b/etl/experiments/ui.py index 5437ee4..7e71f60 100644 --- a/etl/experiments/ui.py +++ b/etl/experiments/ui.py @@ -25,7 +25,11 @@ system_template = """Vous êtes un assistant IA qui fournit des informations sur les associations camerounaises en France. Vous recevez une question et fournissez une réponse claire et structurée. Lorsque cela est pertinent, utilisez des points et des listes pour structurer vos réponses. -Utilisez les éléments de contexte suivants pour répondre à la question de l'utilisateur. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. +Utilisez uniquement les éléments de contexte suivants pour répondre à la question de l'utilisateur. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. + +Si la question posée est dans une langue parlée en Afrique ou au Cameroun ou demande une traduction dans une de ces langues, répondez que vous ne savez pas et demandez à l'utilisateur de reformuler sa question. + +Si vous connaissez la réponse à la question mais que cette réponse ne provient pas du contexte ou n'est pas relatif aux associations, répondez que vous ne savez pas et demandez à l'utilisateur de reformuler sa question. Si vous souhaitez connaître le nombre d'associations, je vous recommande de visiter le site web "tchoung-te.mongulu.cm" pour obtenir des informations actualisées à ce sujet. ---------------- From 8c7149223746017ea24c79240617a27c955dd2a7 Mon Sep 17 00:00:00 2001 From: Joyce-Tchamdjou Date: Mon, 24 Jun 2024 20:37:42 +0000 Subject: [PATCH 2/4] fix : update_prompt --- etl/experiments/backtesting_prompt.py | 74 +++++++++++++++++++++++++++ etl/requirements.txt | 4 +- 2 files changed, 76 insertions(+), 2 deletions(-) create mode 100644 etl/experiments/backtesting_prompt.py diff --git a/etl/experiments/backtesting_prompt.py b/etl/experiments/backtesting_prompt.py new file mode 100644 index 0000000..3e3109e --- /dev/null +++ b/etl/experiments/backtesting_prompt.py @@ -0,0 +1,74 @@ +import os +from langchain.chains import ConversationalRetrievalChain +from langchain.chains.conversation.memory import ConversationBufferMemory +from langchain.chat_models import ChatOpenAI +from langchain.document_loaders.csv_loader import CSVLoader +from langchain.embeddings import OpenAIEmbeddings +from langchain.prompts.chat import ( + ChatPromptTemplate, + HumanMessagePromptTemplate, + SystemMessagePromptTemplate, +) +from langsmith.evaluation import evaluate, LangChainStringEvaluator +from langchain.vectorstores import FAISS + + +system_template = """Vous êtes un assistant IA qui fournit des informations sur les associations camerounaises en France. Vous recevez une question et fournissez une réponse claire et structurée. Lorsque cela est pertinent, utilisez des points et des listes pour structurer vos réponses. + +Utilisez les éléments de contexte suivants pour répondre à la question de l'utilisateur. Si vous ne connaissez pas la réponse, dites simplement que vous ne savez pas, n'essayez pas d'inventer une réponse. + +Si la question posée est dans une langue parlée en Afrique ou au Cameroun ou demande une traduction dans une de ces langues, répondez que vous ne savez pas et que vous n'êtes en mesure de répondre qu'aux questions relatives aux associations puis demandez à l'utilisateur de reformuler sa question. + +Si vous connaissez la réponse à la question mais que cette réponse ne provient pas du contexte ou n'est pas relatif aux associations, répondez que vous ne savez pas et que vous n'êtes en mesure de répondre qu'aux questions relatives aux associations puis demandez à l'utilisateur de reformuler sa question. + +Si vous souhaitez connaître le nombre d'associations, je vous recommande de visiter le site web "tchoung-te.mongulu.cm" pour obtenir des informations actualisées à ce sujet. +---------------- +{context}""" +messages = [ + SystemMessagePromptTemplate.from_template(system_template), + HumanMessagePromptTemplate.from_template("{question}"), +] +CHAT_PROMPT = ChatPromptTemplate.from_messages(messages) + +embedding_pth = "embeddings" +embeddings = OpenAIEmbeddings() +if os.path.exists(embedding_pth): + vectors = FAISS.load_local(embedding_pth, embeddings) +else: + loader = CSVLoader( + file_path="../ref-rna-real-mars-2022-enriched-qualified.csv", encoding="utf-8" + ) + data = loader.load() + vectors = FAISS.from_documents(data, embeddings) + vectors.save_local(embedding_pth) + +llm = ChatOpenAI(max_tokens=500, temperature=0, model_name="gpt-3.5-turbo",streaming=True) +chain_type_kwargs = {"prompt": CHAT_PROMPT} + +memory = ConversationBufferMemory(memory_key="chat_history", return_messages=True) +chain = ConversationalRetrievalChain.from_llm( + llm=llm, + retriever=vectors.as_retriever(search_kwargs={"k": 3}), + combine_docs_chain_kwargs=chain_type_kwargs, + chain_type="stuff", + memory=memory, +) + +dataset = "dataset_test_new_prompt" + +# A string to prefix the experiment name with. +# If not provided, a random string will be generated. +experiment_prefix = "tchoung-te-backtesting_v2" + +# List of evaluators to score the outputs of target task +evaluators = [ + LangChainStringEvaluator("cot_qa") +] + +# Evaluate the target task +results = evaluate( + chain.invoke, + data=dataset, + evaluators=evaluators, + experiment_prefix=experiment_prefix, +) diff --git a/etl/requirements.txt b/etl/requirements.txt index 6100c48..54dc3a5 100644 --- a/etl/requirements.txt +++ b/etl/requirements.txt @@ -20,9 +20,9 @@ lambdaprompt==0.4.2 openai==0.27.8 boto3==1.26.82 diskcache==5.4.0 -numpy==1.24.3 +numpy==1.26.4 langchain==0.1.11 -faiss-cpu==1.7.4 +faiss-cpu==1.8.0 tiktoken==0.4.0 chainlit==0.5.1 tornado>=6.3.3 # not directly required, pinned by Snyk to avoid a vulnerability From d5be00615e293e06f808727d41ab171c23a51952 Mon Sep 17 00:00:00 2001 From: Bill Metangmo <25366207+billmetangmo@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:33:16 +0000 Subject: [PATCH 3/4] fix(reqs): cleaning and update langchain --- etl/requirements-dev.txt | 1 + etl/requirements.txt | 7 ++----- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/etl/requirements-dev.txt b/etl/requirements-dev.txt index 086f10c..e575614 100644 --- a/etl/requirements-dev.txt +++ b/etl/requirements-dev.txt @@ -9,3 +9,4 @@ numpy>=1.22.2 # not directly required, pinned by Snyk to avoid a vulnerability setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability jupyter-server>=2.11.2 # not directly required, pinned by Snyk to avoid a vulnerability tornado>=6.3.3 # not directly required, pinned by Snyk to avoid a vulnerability +pipdeptree==2.2.1 diff --git a/etl/requirements.txt b/etl/requirements.txt index 54dc3a5..5022eff 100644 --- a/etl/requirements.txt +++ b/etl/requirements.txt @@ -2,17 +2,13 @@ colorama==0.4.4 findspark==2.0.1 geocoder==1.38.1 geopy==2.2.0 -#jupyter==1.0.0 -#jupyter-utils==1.2.6 pandarallel==1.6.1 pipdeptree==2.2.1 requests-cache==0.9.4 tqdm==4.64.0 wheel==0.38.1 abbreviations==0.2.5 -ftfy==6.1.1 rich==12.4.4 -#jupyterlab==3.6.7 cryptography>=3.2 # not directly required, pinned by Snyk to avoid a vulnerability ipython>=8.10.0 # not directly required, pinned by Snyk to avoid a vulnerability setuptools>=65.5.1 # not directly required, pinned by Snyk to avoid a vulnerability @@ -21,7 +17,8 @@ openai==0.27.8 boto3==1.26.82 diskcache==5.4.0 numpy==1.26.4 -langchain==0.1.11 +langchain-community==0.2.6 +langchain-openai==0.1.14 faiss-cpu==1.8.0 tiktoken==0.4.0 chainlit==0.5.1 From 2fc1e6b435abf3f35e6fbd983a6cb5f8eb606bd7 Mon Sep 17 00:00:00 2001 From: Bill Metangmo <25366207+billmetangmo@users.noreply.github.com> Date: Wed, 3 Jul 2024 16:33:52 +0000 Subject: [PATCH 4/4] fix: add prepare_data to avoid evaluation issue --- etl/experiments/backtesting_prompt.py | 23 ++++++++++++++++------- 1 file changed, 16 insertions(+), 7 deletions(-) diff --git a/etl/experiments/backtesting_prompt.py b/etl/experiments/backtesting_prompt.py index 3e3109e..c302749 100644 --- a/etl/experiments/backtesting_prompt.py +++ b/etl/experiments/backtesting_prompt.py @@ -1,17 +1,23 @@ import os from langchain.chains import ConversationalRetrievalChain from langchain.chains.conversation.memory import ConversationBufferMemory -from langchain.chat_models import ChatOpenAI -from langchain.document_loaders.csv_loader import CSVLoader -from langchain.embeddings import OpenAIEmbeddings +from langchain_openai import ChatOpenAI +from langchain_community.document_loaders import CSVLoader +from langchain_openai import OpenAIEmbeddings from langchain.prompts.chat import ( ChatPromptTemplate, HumanMessagePromptTemplate, SystemMessagePromptTemplate, ) from langsmith.evaluation import evaluate, LangChainStringEvaluator -from langchain.vectorstores import FAISS +from langchain_community.vectorstores import FAISS +def prepare_data(run, example): + return { + "prediction": run.outputs['answer'], + "reference": example.outputs['answer'], + "input": example.inputs['question'], + } system_template = """Vous êtes un assistant IA qui fournit des informations sur les associations camerounaises en France. Vous recevez une question et fournissez une réponse claire et structurée. Lorsque cela est pertinent, utilisez des points et des listes pour structurer vos réponses. @@ -62,7 +68,10 @@ # List of evaluators to score the outputs of target task evaluators = [ - LangChainStringEvaluator("cot_qa") + LangChainStringEvaluator( + "context_qa", + prepare_data=prepare_data + ) ] # Evaluate the target task @@ -70,5 +79,5 @@ chain.invoke, data=dataset, evaluators=evaluators, - experiment_prefix=experiment_prefix, -) + experiment_prefix=experiment_prefix +) \ No newline at end of file