From f73fe3ba5e70d1ff09d5076e938f1bce8e02c5b4 Mon Sep 17 00:00:00 2001 From: m4minidesk-sys Date: Wed, 4 Mar 2026 09:48:00 +0000 Subject: [PATCH 1/4] chore: add .chainlit/ and package-lock.json to .gitignore --- .gitignore | 6 ++++++ 1 file changed, 6 insertions(+) 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 From a27fd4bba01e911872dbec504b4d5348ff4d626a Mon Sep 17 00:00:00 2001 From: m4minidesk-sys Date: Wed, 4 Mar 2026 09:48:19 +0000 Subject: [PATCH 2/4] fix: migrate chainlit 1.x/langchain 1.x to chainlit 2.x/langchain 2.x MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - chainlit Action API: value/description → payload/tooltip (bedrock.py) - langchain imports: langchain.* → langchain_classic.* / langchain_text_splitters / langchain_community.vectorstores - requirements.txt: add chainlit>=2.0.0, langchain-classic, langchain-text-splitters Tested: chainlit run app/bedrock.py starts successfully with Python 3.12 + chainlit 2.9.6 + langchain-aws 1.3.1 --- .../cookiefactoryv3/assistant/app/bedrock.py | 15 +++++------- .../assistant/app/lib/context_memory.py | 2 +- .../assistant/app/lib/initial_diagnosis.py | 10 ++++---- .../assistant/app/lib/router.py | 10 ++++---- .../assistant/app/lib/tools/general.py | 8 +++---- .../assistant/app/lib/tools/graph.py | 8 +++---- .../app/lib/tools/partiql/domain_mapper.py | 4 ++-- .../lib/tools/partiql/partiql_generator.py | 4 ++-- .../assistant/app/lib/tools/qa.py | 14 +++++------ .../assistant/app/lib/tools/view.py | 10 ++++---- .../assistant/requirements.txt | 23 +++++++++++-------- 11 files changed, 54 insertions(+), 54 deletions(-) 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..03d188b5 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py @@ -3,11 +3,11 @@ 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, ) diff --git a/src/workspaces/cookiefactoryv3/assistant/requirements.txt b/src/workspaces/cookiefactoryv3/assistant/requirements.txt index c5ecccc2..18f033e9 100644 --- a/src/workspaces/cookiefactoryv3/assistant/requirements.txt +++ b/src/workspaces/cookiefactoryv3/assistant/requirements.txt @@ -1,17 +1,20 @@ -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 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 From 83a7d768086d440d56245e4eb751c822531c73df Mon Sep 17 00:00:00 2001 From: m4minidesk-sys Date: Wed, 4 Mar 2026 09:49:31 +0000 Subject: [PATCH 3/4] fix: add langchain-classic, chainlit, langchain-text-splitters to requirements.txt These packages are required for the langchain 2.x migration but were missing from requirements.txt. langchain-classic is a PyPI package (v1.0.1) that provides backward-compatible LLMChain, PromptTemplate, etc. --- src/workspaces/cookiefactoryv3/assistant/requirements.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/workspaces/cookiefactoryv3/assistant/requirements.txt b/src/workspaces/cookiefactoryv3/assistant/requirements.txt index 18f033e9..2e65e363 100644 --- a/src/workspaces/cookiefactoryv3/assistant/requirements.txt +++ b/src/workspaces/cookiefactoryv3/assistant/requirements.txt @@ -4,6 +4,9 @@ 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 From 625ef284e567695ec011b97f65b9af2d0f879882 Mon Sep 17 00:00:00 2001 From: m4minidesk-sys Date: Wed, 4 Mar 2026 09:56:42 +0000 Subject: [PATCH 4/4] fix: defer chainlit.context import to avoid lazify/pydantic conflict lazify 0.4.0 + chainlit 2.x causes ChainlitContextException when pydantic builds Chain subclasses at module load time. Moving the chainlit.context import inside the point_camera_to_entity() function prevents the eager evaluation and resolves the import-time error. Closes: ChainlitContextException on module import --- src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py index 03d188b5..cc6bb120 100644 --- a/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py +++ b/src/workspaces/cookiefactoryv3/assistant/app/lib/tools/view.py @@ -13,7 +13,6 @@ ) 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 = """