diff --git a/.gitignore b/.gitignore index b5c9ae5f..614e8014 100644 --- a/.gitignore +++ b/.gitignore @@ -11,3 +11,9 @@ __pycache__/ .DS_Store *.egg-info/ + +# Chainlit auto-generated files +.chainlit/ + +# Node.js lock files (generated, not source) +package-lock.json diff --git a/src/workspaces/cookiefactoryv3/assistant/app/bedrock.py b/src/workspaces/cookiefactoryv3/assistant/app/bedrock.py index f3aaa23b..586e6544 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/bedrock.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/bedrock.py @@ -1,5 +1,6 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2023 # SPDX-License-Identifier: Apache-2.0 +# Updated 2024: Migrated to Claude 3 / Messages API from __future__ import annotations @@ -11,10 +12,6 @@ logging.getLogger('botocore').setLevel(logging.DEBUG) -import langchain -langchain.debug = True -langchain.verbose = True - import chainlit as cl from chainlit.context import context @@ -58,7 +55,7 @@ async def start(): if event_id: actions = [ - cl.Action(name="initial_chat_actions", value="initial_diagnosis", label="Run Issue Diagnosis", description="Run Issue Diagnosis"), + cl.Action(name="initial_chat_actions", payload={"value": "initial_diagnosis"}, label="Run Issue Diagnosis", tooltip="Run Issue Diagnosis"), ] message = welcome_message_with_event.format(event_id=event_id) await cl.Message(content=message, actions=actions).send() @@ -68,11 +65,11 @@ async def start(): @cl.on_message -async def main(message, context): +async def main(message: cl.Message): llm_chain = cl.user_session.get("chain") res = await llm_chain.acall( - message, + message.content, callbacks=[cl.AsyncLangchainCallbackHandler()]) await cl.Message(content=res["text"]).send() @@ -97,7 +94,7 @@ async def on_action(action): }, callbacks=[cb]) actions = [ - cl.Action(name="agent_actions", value="3d", label="Show in 3D", description="Show in 3D") + cl.Action(name="agent_actions", payload={"value": "3d"}, label="Show in 3D", tooltip="Show in 3D") ] await cl.Message(content=res['output'], actions=actions).send() @@ -105,7 +102,7 @@ async def on_action(action): @cl.action_callback("agent_actions") async def on_action(action): event_entity_id = context.session.user_data.get('event_entity_id') - if action.value == "3d": + if action.payload.get("value") == "3d": await cl.Message(content=f"Navigating to the issue site.").send() await action.remove() # point camera to the entity id diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/context_memory.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/context_memory.py index ceb11532..7ee2ec85 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/context_memory.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/context_memory.py @@ -3,7 +3,7 @@ from typing import Any, Dict, List -from langchain.schema import BaseMemory +from langchain_classic.schema import BaseMemory from pydantic import BaseModel class EntityContextMemory(BaseMemory, BaseModel): diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/initial_diagnosis.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/initial_diagnosis.py index f7604ce0..63012741 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/initial_diagnosis.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/initial_diagnosis.py @@ -5,15 +5,15 @@ from typing import Any, Dict, List, Optional -from langchain import PromptTemplate -from langchain.chains import LLMChain +from langchain_classic import PromptTemplate +from langchain_classic.chains import LLMChain -from langchain.callbacks.manager import ( +from langchain_classic.callbacks.manager import ( AsyncCallbackManagerForChainRun, CallbackManagerForChainRun, ) -from langchain.chains.base import Chain -from langchain.schema.language_model import BaseLanguageModel +from langchain_classic.chains.base import Chain +from langchain_classic.schema.language_model import BaseLanguageModel from .llm import get_bedrock_text, get_processed_prompt_template diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/router.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/router.py index 32fef43f..4b1e4c9b 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/router.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/router.py @@ -5,17 +5,17 @@ from typing import Any, Dict, List, Mapping, NamedTuple, Optional -from langchain import PromptTemplate -from langchain.chains import LLMChain +from langchain_classic import PromptTemplate +from langchain_classic.chains import LLMChain -from langchain.callbacks.manager import ( +from langchain_classic.callbacks.manager import ( AsyncCallbackManagerForChainRun, CallbackManagerForChainRun, Callbacks, ) -from langchain.chains.base import Chain +from langchain_classic.chains.base import Chain -from langchain.schema.language_model import BaseLanguageModel +from langchain_classic.schema.language_model import BaseLanguageModel from .tools.view import ViewChain from .tools.qa import QAChain diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/general.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/general.py index 8e36fdd9..3640b3f9 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/general.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/general.py @@ -3,10 +3,10 @@ from typing import Any, Dict, List, Optional -from langchain import LLMChain, PromptTemplate -from langchain.agents import tool -from langchain.chains.base import Chain -from langchain.callbacks.manager import ( +from langchain_classic import LLMChain, PromptTemplate +from langchain_classic.agents import tool +from langchain_classic.chains.base import Chain +from langchain_classic.callbacks.manager import ( AsyncCallbackManagerForChainRun, CallbackManagerForChainRun, ) diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/graph.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/graph.py index 3ebe7f92..a097776c 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/graph.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/graph.py @@ -3,10 +3,10 @@ from typing import Any, Dict, List, Optional -from langchain.chains import SequentialChain -from langchain.chains.base import Chain -from langchain.agents import tool -from langchain.callbacks.manager import ( +from langchain_classic.chains import SequentialChain +from langchain_classic.chains.base import Chain +from langchain_classic.agents import tool +from langchain_classic.callbacks.manager import ( AsyncCallbackManagerForChainRun, CallbackManagerForChainRun, ) diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/domain_mapper.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/domain_mapper.py index e22a1bdf..f3984c98 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/domain_mapper.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/domain_mapper.py @@ -1,8 +1,8 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2023 # SPDX-License-Identifier: Apache-2.0 -from langchain import FewShotPromptTemplate, LLMChain, PromptTemplate -from langchain.agents import tool +from langchain_classic import FewShotPromptTemplate, LLMChain, PromptTemplate +from langchain_classic.agents import tool from ...llm import get_bedrock_text, get_prefix_prompt_template, get_postfix_prompt_template diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/partiql_generator.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/partiql_generator.py index ffdc65ab..a05cafa8 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/partiql_generator.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/partiql/partiql_generator.py @@ -1,8 +1,8 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. 2023 # SPDX-License-Identifier: Apache-2.0 -from langchain import FewShotPromptTemplate, LLMChain, PromptTemplate -from langchain.agents import tool +from langchain_classic import FewShotPromptTemplate, LLMChain, PromptTemplate +from langchain_classic.agents import tool from ...llm import get_bedrock_text, get_prefix_prompt_template, get_postfix_prompt_template diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/qa.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/qa.py index b5d6d87d..291e3204 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/qa.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/qa.py @@ -7,16 +7,16 @@ from typing import Any, Dict, List, Optional -from langchain import PromptTemplate -from langchain.agents import tool -from langchain.chains.base import Chain -from langchain.chains import RetrievalQAWithSourcesChain -from langchain.callbacks.manager import ( +from langchain_classic import PromptTemplate +from langchain_classic.agents import tool +from langchain_classic.chains.base import Chain +from langchain_classic.chains import RetrievalQAWithSourcesChain +from langchain_classic.callbacks.manager import ( AsyncCallbackManagerForChainRun, CallbackManagerForChainRun, ) -from langchain.text_splitter import RecursiveCharacterTextSplitter -from langchain.vectorstores import Chroma +from langchain_text_splitters import RecursiveCharacterTextSplitter +from langchain_community.vectorstores import Chroma import chainlit as cl diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py index 0c1c3e61..cc6bb120 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py @@ -3,17 +3,16 @@ from typing import Any, Dict, List, Optional -from langchain.agents import tool -from langchain.chains.base import Chain -from langchain.chains import LLMChain -from langchain import PromptTemplate -from langchain.callbacks.manager import ( +from langchain_classic.agents import tool +from langchain_classic.chains.base import Chain +from langchain_classic.chains import LLMChain +from langchain_classic import PromptTemplate +from langchain_classic.callbacks.manager import ( AsyncCallbackManagerForChainRun, CallbackManagerForChainRun, ) import chainlit as cl -from chainlit.context import context from chainlit import run_sync from tabulate import tabulate @@ -38,6 +37,7 @@ def run(input: str) -> str: return 'Found it!' def point_camera_to_entity(entityId): + from chainlit.context import context run_sync(context.session.emit('view', entityId)) ENTITY_EXTRACTION_PROMPT = """ diff --git a/src/workspaces/cookiefactoryv3/assistant/requirements.txt b/src/workspaces/cookiefactoryv3/assistant/requirements.txt index c5ecccc2..2e65e363 100644 --- a/src/workspaces/cookiefactoryv3/assistant/requirements.txt +++ b/src/workspaces/cookiefactoryv3/assistant/requirements.txt @@ -1,17 +1,23 @@ -chainlit/src/dist/chainlit-0.6.3-py3-none-any.whl +# Updated 2024: Migrated to langchain-aws for Claude 3 / Messages API support python-dotenv==1.0.0 -langchain==0.0.252 +langchain>=0.2.0 +langchain-aws>=0.2.0 +langchain-core>=0.2.0 +langchain-community>=0.2.0 +langchain-classic>=1.0.1 +chainlit>=2.0.0 +langchain-text-splitters>=0.0.1 google-search-results ipywidgets==7.0.0 opensearch-py==2.2.0 -sagemaker==2.179.0 -requests==2.31.0 +sagemaker>=2.200.0 +requests>=2.31.0 urllib3<2 requests-aws4auth==1.2.3 -fastapi==0.97.0 -pypdf==3.15.2 -PyPDF2==3.0.1 -chromadb==0.4.7 +fastapi>=0.110.0 +pypdf>=3.15.2 +PyPDF2>=3.0.1 +chromadb>=0.4.22 tabulate -boto3==1.28.74 -botocore==1.31.74 +boto3>=1.35.0 +botocore>=1.35.0