diff --git a/python-langgraph/chains/binary_questions.py b/python-langgraph/chains/binary_questions.py index 5b7136251a..bf1fe2c830 100644 --- a/python-langgraph/chains/binary_questions.py +++ b/python-langgraph/chains/binary_questions.py @@ -1,5 +1,5 @@ -from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate +from langchain_openai import ChatOpenAI from pydantic import BaseModel, Field diff --git a/python-langgraph/chains/escalation_check.py b/python-langgraph/chains/escalation_check.py index 84fa9741e4..739b0cb5a1 100644 --- a/python-langgraph/chains/escalation_check.py +++ b/python-langgraph/chains/escalation_check.py @@ -1,5 +1,5 @@ -from langchain_openai import ChatOpenAI from langchain_core.prompts import ChatPromptTemplate +from langchain_openai import ChatOpenAI from pydantic import BaseModel, Field diff --git a/python-langgraph/chains/notice_extraction.py b/python-langgraph/chains/notice_extraction.py index 170b6d3006..d3f648edba 100644 --- a/python-langgraph/chains/notice_extraction.py +++ b/python-langgraph/chains/notice_extraction.py @@ -1,7 +1,8 @@ -from langchain_openai import ChatOpenAI +from datetime import date + from langchain_core.prompts import ChatPromptTemplate +from langchain_openai import ChatOpenAI from pydantic import BaseModel, EmailStr, Field -from datetime import date class NoticeEmailExtract(BaseModel): diff --git a/python-langgraph/graphs/email_agent.py b/python-langgraph/graphs/email_agent.py index aaed05b8a2..bdf8e01c48 100644 --- a/python-langgraph/graphs/email_agent.py +++ b/python-langgraph/graphs/email_agent.py @@ -1,12 +1,13 @@ -import time import logging +import time + +from chains.notice_extraction import NoticeEmailExtract +from graphs.notice_extraction import NOTICE_EXTRACTION_GRAPH from langchain_core.messages import AIMessage from langchain_core.tools import tool -from langgraph.prebuilt import ToolNode from langchain_openai import ChatOpenAI -from langgraph.graph import StateGraph, MessagesState, START, END -from chains.notice_extraction import NoticeEmailExtract -from graphs.notice_extraction import NOTICE_EXTRACTION_GRAPH +from langgraph.graph import END, START, MessagesState, StateGraph +from langgraph.prebuilt import ToolNode logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" diff --git a/python-langgraph/graphs/notice_extraction.py b/python-langgraph/graphs/notice_extraction.py index 7574890171..ebacf62a3f 100644 --- a/python-langgraph/graphs/notice_extraction.py +++ b/python-langgraph/graphs/notice_extraction.py @@ -1,11 +1,12 @@ import logging from typing import TypedDict -from langgraph.graph import StateGraph, START, END -from pydantic import EmailStr -from chains.notice_extraction import NoticeEmailExtract, NOTICE_PARSER_CHAIN -from chains.escalation_check import ESCALATION_CHECK_CHAIN + from chains.binary_questions import BINARY_QUESTION_CHAIN -from utils.graph_utils import send_escalation_email, create_legal_ticket +from chains.escalation_check import ESCALATION_CHECK_CHAIN +from chains.notice_extraction import NOTICE_PARSER_CHAIN, NoticeEmailExtract +from langgraph.graph import END, START, StateGraph +from pydantic import EmailStr +from utils.graph_utils import create_legal_ticket, send_escalation_email logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" diff --git a/python-langgraph/pyproject.toml b/python-langgraph/pyproject.toml index 9aaa483aad..65c10a3e9e 100644 --- a/python-langgraph/pyproject.toml +++ b/python-langgraph/pyproject.toml @@ -10,4 +10,5 @@ dependencies = [ "langchain-openai>=0.3.2", "langgraph>=0.2.67", "pydantic[email]>=2.10.6", + "ruff>=0.9.3", ] diff --git a/python-langgraph/utils/graph_utils.py b/python-langgraph/utils/graph_utils.py index d948049ab5..ed16abfbbc 100644 --- a/python-langgraph/utils/graph_utils.py +++ b/python-langgraph/utils/graph_utils.py @@ -1,8 +1,9 @@ -import time -import random import logging -from pydantic import EmailStr +import random +import time + from chains.notice_extraction import NoticeEmailExtract +from pydantic import EmailStr logging.basicConfig( level=logging.INFO, format="%(asctime)s - %(levelname)s - %(message)s" diff --git a/python-langgraph/uv.lock b/python-langgraph/uv.lock index 1b74c4cefa..640f6b4111 100644 --- a/python-langgraph/uv.lock +++ b/python-langgraph/uv.lock @@ -609,6 +609,7 @@ dependencies = [ { name = "langchain-openai" }, { name = "langgraph" }, { name = "pydantic", extra = ["email"] }, + { name = "ruff" }, ] [package.metadata] @@ -618,6 +619,7 @@ requires-dist = [ { name = "langchain-openai", specifier = ">=0.3.2" }, { name = "langgraph", specifier = ">=0.2.67" }, { name = "pydantic", extras = ["email"], specifier = ">=2.10.6" }, + { name = "ruff", specifier = ">=0.9.3" }, ] [[package]] @@ -711,6 +713,31 @@ wheels = [ { url = "https://files.pythonhosted.org/packages/3f/51/d4db610ef29373b879047326cbf6fa98b6c1969d6f6dc423279de2b1be2c/requests_toolbelt-1.0.0-py2.py3-none-any.whl", hash = "sha256:cccfdd665f0a24fcf4726e690f65639d272bb0637b9b92dfd91a5568ccf6bd06", size = 54481 }, ] +[[package]] +name = "ruff" +version = "0.9.3" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/1e/7f/60fda2eec81f23f8aa7cbbfdf6ec2ca11eb11c273827933fb2541c2ce9d8/ruff-0.9.3.tar.gz", hash = "sha256:8293f89985a090ebc3ed1064df31f3b4b56320cdfcec8b60d3295bddb955c22a", size = 3586740 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/f9/77/4fb790596d5d52c87fd55b7160c557c400e90f6116a56d82d76e95d9374a/ruff-0.9.3-py3-none-linux_armv6l.whl", hash = "sha256:7f39b879064c7d9670197d91124a75d118d00b0990586549949aae80cdc16624", size = 11656815 }, + { url = "https://files.pythonhosted.org/packages/a2/a8/3338ecb97573eafe74505f28431df3842c1933c5f8eae615427c1de32858/ruff-0.9.3-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:a187171e7c09efa4b4cc30ee5d0d55a8d6c5311b3e1b74ac5cb96cc89bafc43c", size = 11594821 }, + { url = "https://files.pythonhosted.org/packages/8e/89/320223c3421962762531a6b2dd58579b858ca9916fb2674874df5e97d628/ruff-0.9.3-py3-none-macosx_11_0_arm64.whl", hash = "sha256:c59ab92f8e92d6725b7ded9d4a31be3ef42688a115c6d3da9457a5bda140e2b4", size = 11040475 }, + { url = "https://files.pythonhosted.org/packages/b2/bd/1d775eac5e51409535804a3a888a9623e87a8f4b53e2491580858a083692/ruff-0.9.3-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2dc153c25e715be41bb228bc651c1e9b1a88d5c6e5ed0194fa0dfea02b026439", size = 11856207 }, + { url = "https://files.pythonhosted.org/packages/7f/c6/3e14e09be29587393d188454064a4aa85174910d16644051a80444e4fd88/ruff-0.9.3-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:646909a1e25e0dc28fbc529eab8eb7bb583079628e8cbe738192853dbbe43af5", size = 11420460 }, + { url = "https://files.pythonhosted.org/packages/ef/42/b7ca38ffd568ae9b128a2fa76353e9a9a3c80ef19746408d4ce99217ecc1/ruff-0.9.3-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a5a46e09355695fbdbb30ed9889d6cf1c61b77b700a9fafc21b41f097bfbba4", size = 12605472 }, + { url = "https://files.pythonhosted.org/packages/a6/a1/3167023f23e3530fde899497ccfe239e4523854cb874458ac082992d206c/ruff-0.9.3-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:c4bb09d2bbb394e3730d0918c00276e79b2de70ec2a5231cd4ebb51a57df9ba1", size = 13243123 }, + { url = "https://files.pythonhosted.org/packages/d0/b4/3c600758e320f5bf7de16858502e849f4216cb0151f819fa0d1154874802/ruff-0.9.3-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96a87ec31dc1044d8c2da2ebbed1c456d9b561e7d087734336518181b26b3aa5", size = 12744650 }, + { url = "https://files.pythonhosted.org/packages/be/38/266fbcbb3d0088862c9bafa8b1b99486691d2945a90b9a7316336a0d9a1b/ruff-0.9.3-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9bb7554aca6f842645022fe2d301c264e6925baa708b392867b7a62645304df4", size = 14458585 }, + { url = "https://files.pythonhosted.org/packages/63/a6/47fd0e96990ee9b7a4abda62de26d291bd3f7647218d05b7d6d38af47c30/ruff-0.9.3-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cabc332b7075a914ecea912cd1f3d4370489c8018f2c945a30bcc934e3bc06a6", size = 12419624 }, + { url = "https://files.pythonhosted.org/packages/84/5d/de0b7652e09f7dda49e1a3825a164a65f4998175b6486603c7601279baad/ruff-0.9.3-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:33866c3cc2a575cbd546f2cd02bdd466fed65118e4365ee538a3deffd6fcb730", size = 11843238 }, + { url = "https://files.pythonhosted.org/packages/9e/be/3f341ceb1c62b565ec1fb6fd2139cc40b60ae6eff4b6fb8f94b1bb37c7a9/ruff-0.9.3-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:006e5de2621304c8810bcd2ee101587712fa93b4f955ed0985907a36c427e0c2", size = 11484012 }, + { url = "https://files.pythonhosted.org/packages/a3/c8/ff8acbd33addc7e797e702cf00bfde352ab469723720c5607b964491d5cf/ruff-0.9.3-py3-none-musllinux_1_2_i686.whl", hash = "sha256:ba6eea4459dbd6b1be4e6bfc766079fb9b8dd2e5a35aff6baee4d9b1514ea519", size = 12038494 }, + { url = "https://files.pythonhosted.org/packages/73/b1/8d9a2c0efbbabe848b55f877bc10c5001a37ab10aca13c711431673414e5/ruff-0.9.3-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:90230a6b8055ad47d3325e9ee8f8a9ae7e273078a66401ac66df68943ced029b", size = 12473639 }, + { url = "https://files.pythonhosted.org/packages/cb/44/a673647105b1ba6da9824a928634fe23186ab19f9d526d7bdf278cd27bc3/ruff-0.9.3-py3-none-win32.whl", hash = "sha256:eabe5eb2c19a42f4808c03b82bd313fc84d4e395133fb3fc1b1516170a31213c", size = 9834353 }, + { url = "https://files.pythonhosted.org/packages/c3/01/65cadb59bf8d4fbe33d1a750103e6883d9ef302f60c28b73b773092fbde5/ruff-0.9.3-py3-none-win_amd64.whl", hash = "sha256:040ceb7f20791dfa0e78b4230ee9dce23da3b64dd5848e40e3bf3ab76468dcf4", size = 10821444 }, + { url = "https://files.pythonhosted.org/packages/69/cb/b3fe58a136a27d981911cba2f18e4b29f15010623b79f0f2510fd0d31fd3/ruff-0.9.3-py3-none-win_arm64.whl", hash = "sha256:800d773f6d4d33b0a3c60e2c6ae8f4c202ea2de056365acfa519aa48acf28e0b", size = 10038168 }, +] + [[package]] name = "sniffio" version = "1.3.1"