hyperpocket 0.2.1__py3-none-any.whl → 0.3.0__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,326 +0,0 @@
1
- Metadata-Version: 2.4
2
- Name: hyperpocket
3
- Version: 0.2.1
4
- Summary: Building AI agent with hyperpocket tool in a flash
5
- Project-URL: Homepage, https://vessl-ai.github.io/hyperpocket
6
- Project-URL: Repository, https://github.com/vessl-ai/hyperpocket
7
- Author-email: Hyperpocket Team <hyperpocket@vessl.ai>
8
- Requires-Python: >=3.10
9
- Requires-Dist: click>=8.1.7
10
- Requires-Dist: dynaconf>=3.2.6
11
- Requires-Dist: fastapi>=0.115.5
12
- Requires-Dist: gitpython>=3.1.43
13
- Requires-Dist: httpx==0.27
14
- Requires-Dist: jinja2>=3.1.4
15
- Requires-Dist: multiprocess>=0.70.17
16
- Requires-Dist: playwright>=1.49.0
17
- Requires-Dist: pydantic>=2.10.2
18
- Requires-Dist: pygithub>=2.5.0
19
- Requires-Dist: python-multipart>=0.0.19
20
- Requires-Dist: redis>=5.2.1
21
- Requires-Dist: requests>=2.32.3
22
- Requires-Dist: toml>=0.10.2
23
- Requires-Dist: uvicorn>=0.32.1
24
- Description-Content-Type: text/markdown
25
-
26
- <p align="center">
27
- <img src="../../logo.png" alt="hyperpocket" width="570"/>
28
- </p>
29
-
30
- # Hyperpocket 👛
31
-
32
- Hyperpocket is where tools belong. Power your agent up with a pocket of tools. 👛
33
-
34
-
35
- ## Introduction
36
-
37
- Hyperpocket is a tool that allows you to easily use tool and auth for agents on your machine.
38
-
39
- **_Start fast._** Just install Hyperpocket and use it. We know you don't have time to authenticate to our server.
40
-
41
- **_Go securely._** Not like others, you are the only one who knows your secret tokens. We do NOT. All of your secret
42
- tokens belong to your infrastructure, not ours.
43
-
44
- **_Power up with public tools._** Without worries for tool integration, use others' tools just with copy-and-paste the
45
- link to the tool. Your tool will run on isolated environment based on WebAssembly technology, and you don't have to deal
46
- with the dependency spaghetti.
47
-
48
- **_Battery Included_** You can use popular tools and authentication providers out-of-the-box.
49
-
50
- ## Installation
51
-
52
- 1. install hyperpocket
53
-
54
- ```bash
55
- pip install hyperpocket
56
- ```
57
-
58
- 2. install playwright
59
-
60
- ```bash
61
- playwright install
62
- ```
63
-
64
- ## Usage
65
-
66
- Supported agent frameworks
67
-
68
- - [x] Langgraph [link](https://www.langchain.com/langgraph)
69
- - [x] Langchain [link](https://www.langchain.com/)
70
- - [x] Llamaindex [link](https://www.llamaindex.ai/)
71
-
72
- Or just use LLM API Clients out of the box.
73
-
74
- - [x] OpenAI [link](https://openai.com/)
75
- - [x] Anthropic [link](https://www.anthropic.com/)
76
-
77
- ### Using out-of-the-box tools
78
-
79
- ```python
80
-
81
- from langchain_openai import ChatOpenAI
82
-
83
- from hyperpocket_langchain import PocketLangchain
84
-
85
- pklc = PocketLangchain(
86
- tools=[
87
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/slack/get-message",
88
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/slack/post-message",
89
- ]
90
- )
91
- tools = pklc.get_tools()
92
-
93
- llm = ChatOpenAI()
94
- llm_tool_binding = llm.bind_tools(tools)
95
- llm_tool_binding.invoke(...)
96
- ```
97
-
98
- ### Using out-of-the-box auth for various tools
99
-
100
- There are two kinds of auth process, one is using system auth(developer api key) and the other is using end user auth.
101
-
102
- Hyperpocket provides way to use end user auth easily.
103
- (Of course, you can also just set your STRIPE_API_KEY when using Stripe API related tools)
104
-
105
- - Supported methods
106
-
107
- - [x] OAuth
108
- - [x] Token
109
- - [ ] Basic Auth (Username, Password)
110
-
111
- - Supported OAuth Providers
112
- - [x] Google
113
- - [x] GitHub
114
- - [x] Slack
115
- - [x] Linear
116
- - [ ] Facebook
117
- - [ ] X (Previously Twitter)
118
- - [ ] LinkedIn
119
- - [ ] Discord
120
- - [ ] Zoom
121
- - [ ] Microsoft
122
- - [ ] Spotify
123
- - [ ] Twitch
124
-
125
- You can manage your auths in request-wise level. (e.g. you can use different auths for different requests)
126
-
127
- ```python
128
-
129
- from langchain_openai import ChatOpenAI
130
- from langgraph.graph import StateGraph, START, MessagesState
131
- from langgraph.prebuilt import tools_condition
132
-
133
- from hyperpocket_langgraph import PocketLanggraph
134
-
135
- pklg = PocketLanggraph(
136
- tools=[
137
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/slack/get-message",
138
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/slack/post-message",
139
- ],
140
- )
141
- llm = ChatOpenAI()
142
-
143
- # Langgraph
144
- pk_tool_node = pklg.get_tool_node()
145
- llm_tool_binding = llm.bind_tools(pklg.get_tools())
146
-
147
- # ...
148
-
149
- graph_builder = StateGraph(MessagesState)
150
-
151
- graph_builder.add_node('llm', llm)
152
- graph_builder.add_node('tools', pk_tool_node)
153
- graph_builder.add_edge(START, llm)
154
- graph_builder.add_conditional_edges("llm", tools_condition)
155
- graph_builder.add_edge(pk_tool_node, llm)
156
-
157
- # ...
158
-
159
- graph_builder.compile()
160
-
161
- ```
162
-
163
- ```python
164
- import os
165
-
166
- from llama_index.core.agent import FunctionCallingAgent
167
- from llama_index.llms.openai import OpenAI
168
-
169
- from hyperpocket.config import secret
170
- from hyperpocket_llamaindex import PocketLlamaindex
171
-
172
- llm = OpenAI(api_key=os.getenv("OPENAI_API_KEY"))
173
- pocket = PocketLlamaindex(
174
- tools=[
175
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/slack/get-message",
176
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/slack/post-message",
177
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/linear/get-issues",
178
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/google/get-calendar-events",
179
- "https://github.com/vessl-ai/hyperpocket/tree/main/tools/google/get-calendar-list",
180
- ]
181
- )
182
- tools = pocket.get_tools()
183
-
184
- agent = FunctionCallingAgent.from_tools(tools=tools, llm=llm)
185
- ```
186
-
187
- ### Specifying auth methods for tool type
188
-
189
- Some resources support multiple auth methods. Your end user should be able to select between those methods.
190
-
191
- ```text
192
- Human: List my slack messages in 'general' channel
193
-
194
- Assistance: To access your slack messages, you need authentication. Slack api provides 1) bot token auth 2) OAuth auth. Which do you want to proceed?
195
-
196
- Human: I'll go with OAuth
197
-
198
- Assistance: You need chat:read, channel:history scopes to list messages. Do you confirm?
199
-
200
- Human: OK.
201
-
202
- Assistance: Please proceed to the following url and finish authentication. After that, let me know.
203
- > https://slack.com/authorize?clientId=xxx&scope=chat:read,channel:history&redirect_url=xxx
204
-
205
- Human: I'm done. (if necessary)
206
-
207
- Assistance: I've checked you finished your auth. Let me search messages in slack channel 'general'.
208
-
209
- Assistance: Here are the recent 10 messages.
210
- (...)
211
-
212
-
213
- ```
214
-
215
- ### Config
216
-
217
- The `settings.toml` looks as follows.
218
-
219
- ```toml
220
- log_level = "debug"
221
- internal_server_port = "8000" # optional, default is 8000
222
- public_hostname = "localhost" # optional, default is localhost
223
- public_server_protocol = "https" # optional, default is https
224
- public_server_port = "8001" # optional, default is 8001
225
- enable_local_callback_proxy = "true" # optional, default is true, can be turned off when running in production behind TLS termination
226
- callback_url_rewrite_prefix = "proxy" # optional, default is proxy, auth callback url prefix
227
-
228
- [session]
229
- session_type = "redis" # optional, default is in-memory
230
- [session.redis]
231
- host = "localhost"
232
- port = 6379
233
- db = 0
234
-
235
- [git]
236
- [git.github]
237
- github_token = "<Your github PAT>" # optional, your github personal access token
238
- app_id = "<Your github app id>" # optional, your github app id
239
- app_installation_id = "<Your github app installation id>" # optional, your github app installation id
240
- app_private_key = "<Your github app private key>" # optional, your github app private key
241
-
242
- [auth]
243
- [auth.slack] # add your slack app's client id and secret for slack auth
244
- client_id = "" # your slack client id
245
- client_secret = "" # your slack client secret
246
-
247
- [auth.github] # add your github app's client id and secret for github auth
248
- client_id = "" # your github client id
249
- client_secret = "" # your github client secret
250
- ```
251
-
252
- #### How to integrate github OAuth app
253
-
254
- 1. Follow the github documentation to create a new OAuth
255
- app. https://docs.github.com/en/apps/oauth-apps/building-oauth-apps/creating-an-oauth-app
256
-
257
- - While creating your github OAuth app, configuring your app's `Authorization callback URL` is different for your
258
- development environment and production environment.
259
- - For development environment, you can use `http://localhost:8000/auth/github/callback`
260
- - **Note**: Default port for hyperpocket dev server is `8000`. If you are using a different port, make sure to
261
- replace `8000` with your actual port number.
262
- - For production environment, you can use `https://yourdomain.com/auth/github/callback`
263
- - **Note**: Make sure to replace `yourdomain.com` with your actual domain name that this app will be hosted on.
264
-
265
- #### How to integrate SLACK OAuth app
266
-
267
- 1. Follow the slack documentation to create a new Oauth APP. https://api.slack.com/quickstart
268
-
269
- 2. Setting Redirect URLs, Scopes at OAuth & Permissions tap in slack APP page
270
-
271
- - Redirect URLs :
272
- `{public_server_protocol}://{public_hostname}:[{public_server_port}]/{callback_url_rewrite_prefix}/auth/slack/oauth2/callback`
273
- - Scopes : What you want to request to user.
274
- - Recommended scopes :
275
- - channels:history,
276
- - channels:read,
277
- - chat:write,
278
- - groups:history,
279
- - groups:read,
280
- - im:history,
281
- - mpim:history,
282
- - reactions:read,
283
- - reactions:write,
284
-
285
- 3. Set your Slack APP Client ID / Client Secret in `$HOME/.pocket/settings.toml`
286
-
287
- #### How to start adding a new token auth
288
-
289
- 1. Generate boilerplate codes for token-based auth services ?
290
-
291
- ```
292
- # service_name should be lowercase including underscore
293
- poetry run hyperpocket devtool create-token-auth-template {service_name}
294
- ```
295
-
296
- It will generate boilerplate code lines for a new token-based auth service
297
-
298
- 2. Extend AuthProvider enum to add your new auth provider.
299
-
300
- ```python
301
- class AuthProvider(Enum):
302
- SERVICE = 'service'
303
- ```
304
-
305
- 3. Specify auth provider for tools
306
-
307
- 1) github repo or local
308
-
309
- ```toml
310
- [auth]
311
- auth_provider = "{service_name}"
312
- auth_handler = "{service_name}-token"
313
- scopes = []
314
- ```
315
-
316
- 2. function_tool
317
-
318
- ```python
319
- @function_tool(
320
- auth_provider=AuthProvider.SERVICE
321
- )
322
- def my_function(**kwargs):
323
- ```
324
-
325
- ## Special thanks
326
- - [tott](https://x.com/tott____) for drawing the cute possum in a pocket.