hyperpocket-langgraph 0.0.1__tar.gz → 0.1.9__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,157 @@
1
+ .vs/
2
+ .vscode/
3
+ .idea/
4
+ # Byte-compiled / optimized / DLL files
5
+ __pycache__/
6
+ *.py[cod]
7
+ *$py.class
8
+
9
+ # C extensions
10
+ *.so
11
+
12
+ # Distribution / packaging
13
+ .Python
14
+ build/
15
+ develop-eggs/
16
+ dist/
17
+ downloads/
18
+ eggs/
19
+ .eggs/
20
+ lib/
21
+ lib64/
22
+ parts/
23
+ sdist/
24
+ var/
25
+ wheels/
26
+ pip-wheel-metadata/
27
+ share/python-wheels/
28
+ *.egg-info/
29
+ .installed.cfg
30
+ *.egg
31
+ MANIFEST
32
+
33
+ # Google GitHub Actions credentials files created by:
34
+ # https://github.com/google-github-actions/auth
35
+ #
36
+ # That action recommends adding this gitignore to prevent accidentally committing keys.
37
+ gha-creds-*.json
38
+
39
+ # PyInstaller
40
+ # Usually these files are written by a python script from a template
41
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
42
+ *.manifest
43
+ *.spec
44
+
45
+ # Unit test / coverage reports
46
+ htmlcov/
47
+ .tox/
48
+ .nox/
49
+ .coverage
50
+ .coverage.*
51
+ .cache
52
+ nosetests.xml
53
+ coverage.xml
54
+ *.cover
55
+ *.py,cover
56
+ .hypothesis/
57
+ .pytest_cache/
58
+
59
+ # Translations
60
+ *.mo
61
+ *.pot
62
+
63
+ # Django stuff:
64
+ *.log
65
+ local_settings.py
66
+ db.sqlite3
67
+ db.sqlite3-journal
68
+
69
+ # Flask stuff:
70
+ instance/
71
+ .webassets-cache
72
+
73
+ # Scrapy stuff:
74
+ .scrapy
75
+
76
+
77
+ # Jupyter Notebook
78
+ .ipynb_checkpoints
79
+ notebooks/
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ .python-version
87
+
88
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow
89
+ __pypackages__/
90
+
91
+ # Celery stuff
92
+ celerybeat-schedule
93
+ celerybeat.pid
94
+
95
+ # SageMath parsed files
96
+ *.sage.py
97
+
98
+ # Environments
99
+ .env
100
+ .envrc
101
+ .venv*
102
+ venv*
103
+ env/
104
+ ENV/
105
+ env.bak/
106
+
107
+ # Spyder project settings
108
+ .spyderproject
109
+ .spyproject
110
+
111
+ # Rope project settings
112
+ .ropeproject
113
+
114
+ # mkdocs documentation
115
+ /site
116
+
117
+ # mypy
118
+ .mypy_cache/
119
+ .mypy_cache_test/
120
+ .dmypy.json
121
+ dmypy.json
122
+
123
+ # Pyre type checker
124
+ .pyre/
125
+
126
+ # macOS display setting files
127
+ .DS_Store
128
+
129
+ # Wandb directory
130
+ wandb/
131
+
132
+ # asdf tool versions
133
+ .tool-versions
134
+ /.ruff_cache/
135
+
136
+ *.pkl
137
+ *.bin
138
+
139
+ # integration test artifacts
140
+ data_map*
141
+ \[('_type', 'fake'), ('stop', None)]
142
+
143
+ # Replit files
144
+ *replit*
145
+
146
+
147
+ prof
148
+ virtualenv/
149
+
150
+ # Ignore dynaconf secret files
151
+ **/.secrets.toml
152
+ *.xml
153
+ *.iml
154
+ pocket.lock
155
+ .log/
156
+ .pocket/
157
+ _build/
@@ -1,16 +1,10 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.4
2
2
  Name: hyperpocket-langgraph
3
- Version: 0.0.1
4
- Summary:
5
- Author: moon
6
- Author-email: moon@vessl.ai
7
- Requires-Python: >=3.11,<4.0
8
- Classifier: Programming Language :: Python :: 3
9
- Classifier: Programming Language :: Python :: 3.11
10
- Classifier: Programming Language :: Python :: 3.12
11
- Classifier: Programming Language :: Python :: 3.13
12
- Requires-Dist: hyperpocket (==0.0.3)
13
- Requires-Dist: langgraph (>=0.2.59,<0.3.0)
3
+ Version: 0.1.9
4
+ Author-email: Hyperpocket Team <hyperpocket@vessl.ai>
5
+ Requires-Python: >=3.10
6
+ Requires-Dist: hyperpocket>=0.0.3
7
+ Requires-Dist: langgraph>=0.2.59
14
8
  Description-Content-Type: text/markdown
15
9
 
16
10
  # Langgraph extensions
@@ -23,12 +17,13 @@ Description-Content-Type: text/markdown
23
17
  ## Get Pocket Subgraph
24
18
 
25
19
  ```python
26
- import hyperpocket as pk
27
- from pocket_langgraph import PocketLanggraph
20
+ from hyperpocket.tool import from_git
21
+
22
+ from hyperpocket_langgraph import PocketLanggraph
28
23
 
29
24
  pocket = PocketLanggraph(tools=[
30
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
31
- *pk.curated_tools.LINEAR,
25
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
26
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
32
27
  "https://github.com/my-org/some-awesome-tool",
33
28
  ])
34
29
 
@@ -41,15 +36,14 @@ pocket_node = pocket.get_tool_node()
41
36
  ```python
42
37
  import os
43
38
 
39
+ from hyperpocket.tool import from_git
44
40
  from langchain_openai import ChatOpenAI
45
41
 
46
- import hyperpocket as pk
47
- from pocket_langgraph import PocketLanggraph
42
+ from hyperpocket_langgraph import PocketLanggraph
48
43
 
49
44
  pocket = PocketLanggraph(tools=[
50
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
51
- *pk.curated_tools.LINEAR,
52
- "https://github.com/my-org/some-awesome-tool",
45
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
46
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
53
47
  ])
54
48
 
55
49
  # get tools from pocket to bind llm
@@ -66,6 +60,7 @@ llm_with_tools = llm.bind_tools(tools)
66
60
  import os
67
61
  from typing import Annotated
68
62
 
63
+ from hyperpocket.tool import from_git
69
64
  from langchain_core.runnables import RunnableConfig
70
65
  from langchain_openai import ChatOpenAI
71
66
  from langgraph.checkpoint.memory import MemorySaver
@@ -74,14 +69,12 @@ from langgraph.graph.message import add_messages
74
69
  from langgraph.prebuilt import tools_condition
75
70
  from typing_extensions import TypedDict
76
71
 
77
- import hyperpocket as pk
78
- from pocket_langgraph import PocketLanggraph
72
+ from hyperpocket_langgraph import PocketLanggraph
79
73
 
80
74
  # Define pocket tools
81
75
  pocket = PocketLanggraph(tools=[
82
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
83
- *pk.curated_tools.LINEAR,
84
- "https://github.com/my-org/some-awesome-tool",
76
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
77
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
85
78
  ])
86
79
 
87
80
  # Get Pocket ToolNode
@@ -138,14 +131,14 @@ by setting the `should_interrupt` flag when calling `get_tool_node`
138
131
  Perform authentication in a multi-turn way
139
132
 
140
133
  ```python
141
- import hyperpocket as pk
142
- from pocket_langgraph import PocketLanggraph
134
+ from hyperpocket.tool import from_git
135
+
136
+ from hyperpocket_langgraph import PocketLanggraph
143
137
 
144
138
  # Define pocket tools
145
139
  pocket = PocketLanggraph(tools=[
146
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
147
- *pk.curated_tools.LINEAR,
148
- "https://github.com/my-org/some-awesome-tool",
140
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
141
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
149
142
  ])
150
143
 
151
144
  # Get Pocket ToolNode
@@ -155,14 +148,14 @@ pocket_node = pocket.get_tool_node(should_interrupt=False) # multi turn
155
148
  ### Human-in-the-loop Auth
156
149
 
157
150
  ```python
158
- import hyperpocket as pk
159
- from pocket_langgraph import PocketLanggraph
151
+ from hyperpocket.tool import from_git
152
+
153
+ from hyperpocket_langgraph import PocketLanggraph
160
154
 
161
155
  # Define pocket tools
162
156
  pocket = PocketLanggraph(tools=[
163
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
164
- *pk.curated_tools.LINEAR,
165
- "https://github.com/my-org/some-awesome-tool",
157
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
158
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
166
159
  ])
167
160
 
168
161
  # Get Pocket ToolNode
@@ -198,4 +191,3 @@ flow, there is a risk of incorrect decisions being made.
198
191
  Conversely, the human-in-the-loop approach eliminates this risk by always continuing the previous flow as it is,
199
192
  offering more predictable and controlled behavior for managing the auth flow.
200
193
 
201
-
@@ -8,12 +8,13 @@
8
8
  ## Get Pocket Subgraph
9
9
 
10
10
  ```python
11
- import hyperpocket as pk
12
- from pocket_langgraph import PocketLanggraph
11
+ from hyperpocket.tool import from_git
12
+
13
+ from hyperpocket_langgraph import PocketLanggraph
13
14
 
14
15
  pocket = PocketLanggraph(tools=[
15
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
16
- *pk.curated_tools.LINEAR,
16
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
17
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
17
18
  "https://github.com/my-org/some-awesome-tool",
18
19
  ])
19
20
 
@@ -26,15 +27,14 @@ pocket_node = pocket.get_tool_node()
26
27
  ```python
27
28
  import os
28
29
 
30
+ from hyperpocket.tool import from_git
29
31
  from langchain_openai import ChatOpenAI
30
32
 
31
- import hyperpocket as pk
32
- from pocket_langgraph import PocketLanggraph
33
+ from hyperpocket_langgraph import PocketLanggraph
33
34
 
34
35
  pocket = PocketLanggraph(tools=[
35
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
36
- *pk.curated_tools.LINEAR,
37
- "https://github.com/my-org/some-awesome-tool",
36
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
37
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
38
38
  ])
39
39
 
40
40
  # get tools from pocket to bind llm
@@ -51,6 +51,7 @@ llm_with_tools = llm.bind_tools(tools)
51
51
  import os
52
52
  from typing import Annotated
53
53
 
54
+ from hyperpocket.tool import from_git
54
55
  from langchain_core.runnables import RunnableConfig
55
56
  from langchain_openai import ChatOpenAI
56
57
  from langgraph.checkpoint.memory import MemorySaver
@@ -59,14 +60,12 @@ from langgraph.graph.message import add_messages
59
60
  from langgraph.prebuilt import tools_condition
60
61
  from typing_extensions import TypedDict
61
62
 
62
- import hyperpocket as pk
63
- from pocket_langgraph import PocketLanggraph
63
+ from hyperpocket_langgraph import PocketLanggraph
64
64
 
65
65
  # Define pocket tools
66
66
  pocket = PocketLanggraph(tools=[
67
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
68
- *pk.curated_tools.LINEAR,
69
- "https://github.com/my-org/some-awesome-tool",
67
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
68
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
70
69
  ])
71
70
 
72
71
  # Get Pocket ToolNode
@@ -123,14 +122,14 @@ by setting the `should_interrupt` flag when calling `get_tool_node`
123
122
  Perform authentication in a multi-turn way
124
123
 
125
124
  ```python
126
- import hyperpocket as pk
127
- from pocket_langgraph import PocketLanggraph
125
+ from hyperpocket.tool import from_git
126
+
127
+ from hyperpocket_langgraph import PocketLanggraph
128
128
 
129
129
  # Define pocket tools
130
130
  pocket = PocketLanggraph(tools=[
131
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
132
- *pk.curated_tools.LINEAR,
133
- "https://github.com/my-org/some-awesome-tool",
131
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
132
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
134
133
  ])
135
134
 
136
135
  # Get Pocket ToolNode
@@ -140,14 +139,14 @@ pocket_node = pocket.get_tool_node(should_interrupt=False) # multi turn
140
139
  ### Human-in-the-loop Auth
141
140
 
142
141
  ```python
143
- import hyperpocket as pk
144
- from pocket_langgraph import PocketLanggraph
142
+ from hyperpocket.tool import from_git
143
+
144
+ from hyperpocket_langgraph import PocketLanggraph
145
145
 
146
146
  # Define pocket tools
147
147
  pocket = PocketLanggraph(tools=[
148
- *pk.curated_tools.SLACK, # SLACK = [slack_get_message, slack_post_message, ..]
149
- *pk.curated_tools.LINEAR,
150
- "https://github.com/my-org/some-awesome-tool",
148
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/get-message"),
149
+ from_git("https://github.com/vessl-ai/hyperawesometools", "main", "managed-tools/slack/post-message"),
151
150
  ])
152
151
 
153
152
  # Get Pocket ToolNode
File without changes
@@ -1,17 +1,14 @@
1
1
  import copy
2
- from typing import List, Any
2
+ from typing import Optional
3
3
 
4
4
  from langchain_core.runnables import RunnableConfig
5
5
  from langgraph.errors import NodeInterrupt
6
6
  from pydantic import BaseModel
7
7
 
8
8
  from hyperpocket.config import pocket_logger
9
- from hyperpocket.pocket_main import ToolLike
10
- from hyperpocket.prompts import pocket_extended_tool_description
11
- from hyperpocket.server.server import PocketServerOperations
12
9
 
13
10
  try:
14
- from langchain_core.messages import AnyMessage, ToolMessage, AIMessage, RemoveMessage, SystemMessage
11
+ from langchain_core.messages import ToolMessage
15
12
  from langchain_core.tools import BaseTool, StructuredTool
16
13
  except ImportError:
17
14
  raise ImportError(
@@ -19,15 +16,13 @@ except ImportError:
19
16
  )
20
17
 
21
18
  try:
22
- from langgraph.constants import START, END
23
- from langgraph.graph import add_messages, StateGraph, MessagesState
24
- from langgraph.graph.state import CompiledStateGraph
19
+ from langgraph.graph import MessagesState
25
20
  except ImportError:
26
21
  raise ImportError(
27
22
  "You need to install langgraph to use pocket langgraph"
28
23
  )
29
24
 
30
- from hyperpocket import Pocket, PocketAuth
25
+ from hyperpocket import Pocket
31
26
  from hyperpocket.tool import Tool as PocketTool
32
27
 
33
28
 
@@ -36,20 +31,16 @@ class PocketLanggraphBaseState(MessagesState):
36
31
 
37
32
 
38
33
  class PocketLanggraph(Pocket):
39
- langgraph_tools: dict[str, BaseTool]
34
+ def get_tools(self, use_profile: Optional[bool] = None):
35
+ if use_profile is not None:
36
+ self.use_profile = use_profile
37
+ return [self._get_langgraph_tool(tool_impl) for tool_impl in
38
+ self.core.tools.values()]
40
39
 
41
- def __init__(self,
42
- tools: List[ToolLike],
43
- auth: PocketAuth = None):
44
- super().__init__(tools, auth)
45
- self.langgraph_tools = {}
46
- for tool_name, tool_impl in self.tools.items():
47
- self.langgraph_tools[tool_name] = self._get_langgraph_tool(tool_impl)
40
+ def get_tool_node(self, should_interrupt: bool = False, use_profile: Optional[bool] = None):
41
+ if use_profile is not None:
42
+ self.use_profile = use_profile
48
43
 
49
- def get_tools(self):
50
- return [v for v in self.langgraph_tools.values()]
51
-
52
- def get_tool_node(self, should_interrupt: bool = False):
53
44
  async def _tool_node(state: PocketLanggraphBaseState, config: RunnableConfig) -> dict:
54
45
  thread_id = config.get("configurable", {}).get("thread_id", "default")
55
46
  last_message = state['messages'][-1]
@@ -66,12 +57,19 @@ class PocketLanggraph(Pocket):
66
57
  tool_call_id = _tool_call['id']
67
58
  tool_name = _tool_call['name']
68
59
  tool_args = _tool_call['args']
69
- body = tool_args.pop('body')
60
+
61
+ if self.use_profile:
62
+ body = tool_args.pop("body")
63
+ profile = tool_args.pop("profile", "default")
64
+ else:
65
+ body = tool_args
66
+ profile = "default"
67
+
70
68
  if isinstance(body, BaseModel):
71
69
  body = body.model_dump()
72
70
 
73
71
  prepare = await self.prepare_in_subprocess(tool_name, body=body, thread_id=thread_id,
74
- profile=tool_args.get("profile", "default"))
72
+ profile=profile)
75
73
  need_prepare |= True if prepare else False
76
74
 
77
75
  if prepare is None:
@@ -101,13 +99,19 @@ class PocketLanggraph(Pocket):
101
99
  tool_call_id = _tool_call['id']
102
100
  tool_name = _tool_call['name']
103
101
  tool_args = _tool_call['args']
104
- body = tool_args.pop('body')
102
+ if self.use_profile:
103
+ body = tool_args.pop("body")
104
+ profile = tool_args.pop("profile", "default")
105
+ else:
106
+ body = tool_args
107
+ profile = "default"
108
+
105
109
  if isinstance(body, BaseModel):
106
110
  body = body.model_dump()
107
111
 
108
112
  try:
109
113
  auth = await self.authenticate_in_subprocess(
110
- tool_name, body=body, thread_id=thread_id, profile=tool_args.get("profile", "default"))
114
+ tool_name, body=body, thread_id=thread_id, profile=profile)
111
115
  except Exception as e:
112
116
  pocket_logger.error(f"occur exception during authenticate. error : {e}")
113
117
  tool_messages.append(
@@ -133,79 +137,39 @@ class PocketLanggraph(Pocket):
133
137
 
134
138
  return _tool_node
135
139
 
136
- async def prepare_in_subprocess(self,
137
- tool_name: str,
138
- body: Any,
139
- thread_id: str = 'default',
140
- profile: str = 'default',
141
- *args, **kwargs):
142
- prepare = await self.server.call_in_subprocess(
143
- PocketServerOperations.PREPARE_AUTH,
144
- args,
145
- {
146
- 'tool_name': tool_name,
147
- 'body': body,
148
- 'thread_id': thread_id,
149
- 'profile': profile,
150
- **kwargs,
151
- },
152
- )
153
-
154
- return prepare
155
-
156
- async def authenticate_in_subprocess(self,
157
- tool_name: str,
158
- body: Any,
159
- thread_id: str = 'default',
160
- profile: str = 'default',
161
- *args, **kwargs):
162
- credentials = await self.server.call_in_subprocess(
163
- PocketServerOperations.AUTHENTICATE,
164
- args,
165
- {
166
- 'tool_name': tool_name,
167
- 'body': body,
168
- 'thread_id': thread_id,
169
- 'profile': profile,
170
- **kwargs,
171
- },
172
- )
173
-
174
- return credentials
175
-
176
- async def tool_call_in_subprocess(self,
177
- tool_name: str,
178
- body: Any,
179
- thread_id: str = 'default',
180
- profile: str = 'default',
181
- *args, **kwargs):
182
- result = await self.server.call_in_subprocess(
183
- PocketServerOperations.TOOL_CALL,
184
- args,
185
- {
186
- 'tool_name': tool_name,
187
- 'body': body,
188
- 'thread_id': thread_id,
189
- 'profile': profile,
190
- **kwargs,
191
- },
192
- )
193
-
194
- return result
195
-
196
140
  def _get_langgraph_tool(self, pocket_tool: PocketTool) -> BaseTool:
197
- def _invoke(body: Any, thread_id: str = 'default', profile: str = 'default', **kwargs) -> str:
141
+ def _invoke(**kwargs) -> str:
142
+ if self.use_profile:
143
+ body = kwargs["body"]
144
+ thread_id = kwargs.pop("thread_id", "default")
145
+ profile = kwargs.pop("profile", "default")
146
+ else:
147
+ body = kwargs
148
+ thread_id = "default"
149
+ profile = "default"
150
+
198
151
  if isinstance(body, BaseModel):
199
152
  body = body.model_dump()
153
+
200
154
  result, interrupted = self.invoke_with_state(pocket_tool.name, body, thread_id, profile, **kwargs)
201
155
  say = result
202
156
  if interrupted:
203
157
  say = f'{say}\n\nThe tool execution interrupted. Please talk to me to resume.'
204
158
  return say
205
159
 
206
- async def _ainvoke(body: Any, thread_id: str = 'default', profile: str = 'default', **kwargs) -> str:
160
+ async def _ainvoke(**kwargs) -> str:
161
+ if self.use_profile:
162
+ body = kwargs["body"]
163
+ thread_id = kwargs.pop("thread_id", "default")
164
+ profile = kwargs.pop("profile", "default")
165
+ else:
166
+ body = kwargs
167
+ thread_id = "default"
168
+ profile = "default"
169
+
207
170
  if isinstance(body, BaseModel):
208
171
  body = body.model_dump()
172
+
209
173
  result, interrupted = await self.ainvoke_with_state(pocket_tool.name, body, thread_id, profile, **kwargs)
210
174
  say = result
211
175
  if interrupted:
@@ -216,6 +180,6 @@ class PocketLanggraph(Pocket):
216
180
  func=_invoke,
217
181
  coroutine=_ainvoke,
218
182
  name=pocket_tool.name,
219
- description=pocket_extended_tool_description(pocket_tool.description),
220
- args_schema=pocket_tool.schema_model(),
183
+ description=pocket_tool.get_description(use_profile=self.use_profile),
184
+ args_schema=pocket_tool.schema_model(use_profile=self.use_profile),
221
185
  )
@@ -0,0 +1,42 @@
1
+
2
+ [project]
3
+ name = "hyperpocket-langgraph"
4
+ version = "0.1.9"
5
+ description = ""
6
+ authors = [{ name = "Hyperpocket Team", email = "hyperpocket@vessl.ai" }]
7
+ requires-python = ">=3.10"
8
+ readme = "README.md"
9
+ dependencies = ["langgraph>=0.2.59", "hyperpocket>=0.0.3"]
10
+
11
+ [tool.uv.sources]
12
+ hyperpocket = { path = "../../hyperpocket", editable = true }
13
+
14
+ [dependency-groups]
15
+ dev = [
16
+ "pytest>=8.3.4",
17
+ "ruff>=0.8.6",
18
+ ]
19
+ test = [
20
+ "langchain-openai>=0.3.1",
21
+ ]
22
+
23
+ [build-system]
24
+ requires = ["hatchling"]
25
+ build-backend = "hatchling.build"
26
+
27
+ [tool.ruff.lint]
28
+ select = [
29
+ "E", # pycodestyle errors,
30
+ "F", # pyflakes errors,
31
+ "I", # isort errors,
32
+ ]
33
+ ignore = [
34
+ "E501", # line too long, handled by formatting
35
+ ]
36
+
37
+ [tool.ruff]
38
+ line-length = 88
39
+ target-version = "py310"
40
+
41
+ [tool.ruff.lint.per-file-ignores]
42
+ "__init__.py" = ["F401"]
File without changes