auth0-ai-langchain 1.0.0b3__py3-none-any.whl → 1.0.0b4__py3-none-any.whl
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.
Potentially problematic release.
This version of auth0-ai-langchain might be problematic. Click here for more details.
- auth0_ai_langchain/async_authorization/__init__.py +3 -0
- auth0_ai_langchain/{ciba/ciba_authorizer.py → async_authorization/async_authorizer.py} +3 -3
- auth0_ai_langchain/{ciba → async_authorization}/graph_resumer.py +4 -4
- auth0_ai_langchain/auth0_ai.py +20 -19
- auth0_ai_langchain/token_vault/__init__.py +10 -0
- auth0_ai_langchain/{federated_connections/federated_connection_authorizer.py → token_vault/token_vault_authorizer.py} +15 -10
- {auth0_ai_langchain-1.0.0b3.dist-info → auth0_ai_langchain-1.0.0b4.dist-info}/METADATA +19 -15
- auth0_ai_langchain-1.0.0b4.dist-info/RECORD +15 -0
- {auth0_ai_langchain-1.0.0b3.dist-info → auth0_ai_langchain-1.0.0b4.dist-info}/WHEEL +1 -1
- auth0_ai_langchain/ciba/__init__.py +0 -3
- auth0_ai_langchain/federated_connections/__init__.py +0 -10
- auth0_ai_langchain-1.0.0b3.dist-info/RECORD +0 -15
- {auth0_ai_langchain-1.0.0b3.dist-info → auth0_ai_langchain-1.0.0b4.dist-info}/LICENSE +0 -0
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
from auth0_ai.authorizers.async_authorization.async_authorizer_base import get_async_authorization_credentials as get_async_authorization_credentials
|
|
2
|
+
from auth0_ai_langchain.async_authorization.async_authorizer import AsyncAuthorizer as AsyncAuthorizer
|
|
3
|
+
from auth0_ai_langchain.async_authorization.graph_resumer import GraphResumer as GraphResumer
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
from abc import ABC
|
|
2
2
|
from typing import Union
|
|
3
|
-
from auth0_ai.authorizers.
|
|
4
|
-
from auth0_ai.interrupts.
|
|
3
|
+
from auth0_ai.authorizers.async_authorization import AsyncAuthorizerBase
|
|
4
|
+
from auth0_ai.interrupts.async_authorization_interrupts import AuthorizationPendingInterrupt, AuthorizationPollingInterrupt
|
|
5
5
|
from auth0_ai_langchain.utils.interrupt import to_graph_interrupt
|
|
6
6
|
from auth0_ai_langchain.utils.tool_wrapper import tool_wrapper
|
|
7
7
|
from langchain_core.tools import BaseTool
|
|
8
8
|
|
|
9
|
-
class
|
|
9
|
+
class AsyncAuthorizer(AsyncAuthorizerBase, ABC):
|
|
10
10
|
def _handle_authorization_interrupts(self, err: Union[AuthorizationPendingInterrupt, AuthorizationPollingInterrupt]) -> None:
|
|
11
11
|
raise to_graph_interrupt(err)
|
|
12
12
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import asyncio
|
|
2
2
|
from threading import Event
|
|
3
3
|
from typing import Callable, Optional, Dict, Any, List, TypedDict
|
|
4
|
-
from auth0_ai.authorizers.
|
|
5
|
-
from auth0_ai.interrupts.
|
|
4
|
+
from auth0_ai.authorizers.async_authorization import AsyncAuthorizationRequest
|
|
5
|
+
from auth0_ai.interrupts.async_authorization_interrupts import AsyncAuthorizationInterrupt, AuthorizationPendingInterrupt, AuthorizationPollingInterrupt
|
|
6
6
|
from auth0_ai_langchain.utils.interrupt import get_auth0_interrupts
|
|
7
7
|
from langgraph_sdk.client import LangGraphClient
|
|
8
8
|
from langgraph_sdk.schema import Thread, Interrupt
|
|
@@ -11,7 +11,7 @@ class WatchedThread(TypedDict):
|
|
|
11
11
|
thread_id: str
|
|
12
12
|
assistant_id: str
|
|
13
13
|
interruption_id: str
|
|
14
|
-
auth_request:
|
|
14
|
+
auth_request: AsyncAuthorizationRequest
|
|
15
15
|
config: Dict[str, Any]
|
|
16
16
|
last_run: float
|
|
17
17
|
|
|
@@ -64,7 +64,7 @@ class GraphResumer:
|
|
|
64
64
|
|
|
65
65
|
for t in page:
|
|
66
66
|
interrupt = self._get_first_interrupt(t)
|
|
67
|
-
if interrupt and
|
|
67
|
+
if interrupt and AsyncAuthorizationInterrupt.is_interrupt(interrupt["value"]) and AsyncAuthorizationInterrupt.has_request_data(interrupt["value"]):
|
|
68
68
|
interrupted_threads.append(t)
|
|
69
69
|
|
|
70
70
|
offset += len(page)
|
auth0_ai_langchain/auth0_ai.py
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
from typing import Callable, Optional
|
|
2
2
|
from langchain_core.tools import BaseTool
|
|
3
|
-
from auth0_ai.authorizers.
|
|
4
|
-
from auth0_ai.authorizers.
|
|
3
|
+
from auth0_ai.authorizers.async_authorization import AsyncAuthorizerParams
|
|
4
|
+
from auth0_ai.authorizers.token_vault_authorizer import TokenVaultAuthorizerParams
|
|
5
5
|
from auth0_ai.authorizers.types import Auth0ClientParams
|
|
6
|
-
from auth0_ai_langchain.
|
|
7
|
-
from auth0_ai_langchain.
|
|
6
|
+
from auth0_ai_langchain.async_authorization.async_authorizer import AsyncAuthorizer
|
|
7
|
+
from auth0_ai_langchain.token_vault.token_vault_authorizer import TokenVaultAuthorizer
|
|
8
8
|
|
|
9
9
|
|
|
10
10
|
class Auth0AI:
|
|
@@ -21,14 +21,14 @@ class Auth0AI:
|
|
|
21
21
|
"""
|
|
22
22
|
self.auth0 = auth0
|
|
23
23
|
|
|
24
|
-
def
|
|
24
|
+
def with_async_authorization(self, **params: AsyncAuthorizerParams) -> Callable[[BaseTool], BaseTool]:
|
|
25
25
|
"""Protects a tool with the CIBA (Client-Initiated Backchannel Authentication) flow.
|
|
26
26
|
|
|
27
27
|
Requires user confirmation via a second device (e.g., phone)
|
|
28
28
|
before allowing the tool to execute.
|
|
29
29
|
|
|
30
30
|
Args:
|
|
31
|
-
**params: Parameters defined in `
|
|
31
|
+
**params: Parameters defined in `AsyncAuthorizerParams`.
|
|
32
32
|
|
|
33
33
|
Returns:
|
|
34
34
|
Callable[[BaseTool], BaseTool]: A decorator to wrap a LangChain tool.
|
|
@@ -37,28 +37,29 @@ class Auth0AI:
|
|
|
37
37
|
```python
|
|
38
38
|
import os
|
|
39
39
|
from auth0_ai_langchain.auth0_ai import Auth0AI
|
|
40
|
-
from auth0_ai_langchain.
|
|
40
|
+
from auth0_ai_langchain.async_authorization import get_async_authorization_credentials
|
|
41
41
|
from langchain_core.runnables import ensure_config
|
|
42
42
|
from langchain_core.tools import StructuredTool
|
|
43
43
|
|
|
44
44
|
auth0_ai = Auth0AI()
|
|
45
45
|
|
|
46
|
-
|
|
46
|
+
with_async_authorization = auth0_ai.with_async_authorization(
|
|
47
47
|
scopes=["stock:trade"],
|
|
48
48
|
audience=os.getenv("AUDIENCE"),
|
|
49
|
+
requested_expiry=os.getenv("REQUESTED_EXPIRY"),
|
|
49
50
|
binding_message=lambda ticker, qty: f"Authorize the purchase of {qty} {ticker}",
|
|
50
51
|
user_id=lambda *_, **__: ensure_config().get("configurable", {}).get("user_id")
|
|
51
52
|
)
|
|
52
53
|
|
|
53
54
|
def tool_function(ticker: str, qty: int) -> str:
|
|
54
|
-
credentials =
|
|
55
|
+
credentials = get_async_authorization_credentials()
|
|
55
56
|
headers = {
|
|
56
57
|
"Authorization": f"{credentials['token_type']} {credentials['access_token']}",
|
|
57
58
|
# ...
|
|
58
59
|
}
|
|
59
60
|
# Call API
|
|
60
61
|
|
|
61
|
-
trade_tool =
|
|
62
|
+
trade_tool = with_async_authorization(
|
|
62
63
|
StructuredTool(
|
|
63
64
|
name="trade_tool",
|
|
64
65
|
description="Use this function to trade a stock",
|
|
@@ -67,16 +68,16 @@ class Auth0AI:
|
|
|
67
68
|
)
|
|
68
69
|
```
|
|
69
70
|
"""
|
|
70
|
-
authorizer =
|
|
71
|
+
authorizer = AsyncAuthorizer(AsyncAuthorizerParams(**params), self.auth0)
|
|
71
72
|
return authorizer.authorizer()
|
|
72
73
|
|
|
73
|
-
def
|
|
74
|
-
"""Enables a tool to obtain an access token from a
|
|
74
|
+
def with_token_vault(self, **params: TokenVaultAuthorizerParams) -> Callable[[BaseTool], BaseTool]:
|
|
75
|
+
"""Enables a tool to obtain an access token from a Token Vault identity provider (e.g., Google, Azure AD).
|
|
75
76
|
|
|
76
77
|
The token can then be used within the tool to call third-party APIs on behalf of the user.
|
|
77
78
|
|
|
78
79
|
Args:
|
|
79
|
-
**params: Parameters defined in `
|
|
80
|
+
**params: Parameters defined in `TokenVaultAuthorizerParams`.
|
|
80
81
|
|
|
81
82
|
Returns:
|
|
82
83
|
Callable[[BaseTool], BaseTool]: A decorator to wrap a LangChain tool.
|
|
@@ -84,19 +85,19 @@ class Auth0AI:
|
|
|
84
85
|
Example:
|
|
85
86
|
```python
|
|
86
87
|
from auth0_ai_langchain.auth0_ai import Auth0AI
|
|
87
|
-
from auth0_ai_langchain.
|
|
88
|
+
from auth0_ai_langchain.token_vault import get_credentials_from_token_vault
|
|
88
89
|
from langchain_core.tools import StructuredTool
|
|
89
90
|
from datetime import datetime
|
|
90
91
|
|
|
91
92
|
auth0_ai = Auth0AI()
|
|
92
93
|
|
|
93
|
-
with_google_calendar_access = auth0_ai.
|
|
94
|
+
with_google_calendar_access = auth0_ai.with_token_vault(
|
|
94
95
|
connection="google-oauth2",
|
|
95
96
|
scopes=["https://www.googleapis.com/auth/calendar.freebusy"]
|
|
96
97
|
)
|
|
97
98
|
|
|
98
99
|
def tool_function(date: datetime):
|
|
99
|
-
credentials =
|
|
100
|
+
credentials = get_credentials_from_token_vault()
|
|
100
101
|
# Call Google API using credentials["access_token"]
|
|
101
102
|
|
|
102
103
|
check_calendar_tool = with_google_calendar_access(
|
|
@@ -108,6 +109,6 @@ class Auth0AI:
|
|
|
108
109
|
)
|
|
109
110
|
```
|
|
110
111
|
"""
|
|
111
|
-
authorizer =
|
|
112
|
-
|
|
112
|
+
authorizer = TokenVaultAuthorizer(
|
|
113
|
+
TokenVaultAuthorizerParams(**params), self.auth0)
|
|
113
114
|
return authorizer.authorizer()
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
from auth0_ai.interrupts.token_vault_interrupt import (
|
|
2
|
+
TokenVaultError as TokenVaultError,
|
|
3
|
+
TokenVaultInterrupt as TokenVaultInterrupt
|
|
4
|
+
)
|
|
5
|
+
|
|
6
|
+
from auth0_ai.authorizers.token_vault_authorizer import (
|
|
7
|
+
get_credentials_from_token_vault as get_credentials_from_token_vault,
|
|
8
|
+
get_access_token_from_token_vault as get_access_token_from_token_vault
|
|
9
|
+
)
|
|
10
|
+
from .token_vault_authorizer import TokenVaultAuthorizer as TokenVaultAuthorizer
|
|
@@ -1,33 +1,38 @@
|
|
|
1
1
|
import copy
|
|
2
2
|
from abc import ABC
|
|
3
|
-
from auth0_ai.authorizers.
|
|
3
|
+
from auth0_ai.authorizers.token_vault_authorizer import TokenVaultAuthorizerBase, \
|
|
4
|
+
TokenVaultAuthorizerParams
|
|
4
5
|
from auth0_ai.authorizers.types import Auth0ClientParams
|
|
5
|
-
from auth0_ai.interrupts.
|
|
6
|
+
from auth0_ai.interrupts.token_vault_interrupt import TokenVaultInterrupt
|
|
6
7
|
from auth0_ai_langchain.utils.interrupt import to_graph_interrupt
|
|
7
8
|
from auth0_ai_langchain.utils.tool_wrapper import tool_wrapper
|
|
8
9
|
from langchain_core.tools import BaseTool
|
|
9
10
|
from langchain_core.runnables import ensure_config
|
|
10
11
|
|
|
12
|
+
|
|
11
13
|
async def default_get_refresh_token(*_, **__) -> str | None:
|
|
12
14
|
return ensure_config().get("configurable", {}).get("_credentials", {}).get("refresh_token")
|
|
13
15
|
|
|
14
|
-
class
|
|
16
|
+
class TokenVaultAuthorizer(TokenVaultAuthorizerBase, ABC):
|
|
15
17
|
def __init__(
|
|
16
|
-
self,
|
|
17
|
-
params:
|
|
18
|
+
self,
|
|
19
|
+
params: TokenVaultAuthorizerParams,
|
|
18
20
|
auth0: Auth0ClientParams = None,
|
|
19
21
|
):
|
|
20
|
-
|
|
22
|
+
missing_refresh = params.refresh_token.value is None
|
|
23
|
+
missing_access_token = params.access_token.value is None
|
|
24
|
+
|
|
25
|
+
if missing_refresh and missing_access_token and callable(default_get_refresh_token):
|
|
21
26
|
params = copy.copy(params)
|
|
22
27
|
params.refresh_token.value = default_get_refresh_token
|
|
23
28
|
|
|
24
29
|
super().__init__(params, auth0)
|
|
25
|
-
|
|
26
|
-
def _handle_authorization_interrupts(self, err:
|
|
30
|
+
|
|
31
|
+
def _handle_authorization_interrupts(self, err: TokenVaultInterrupt) -> None:
|
|
27
32
|
raise to_graph_interrupt(err)
|
|
28
|
-
|
|
33
|
+
|
|
29
34
|
def authorizer(self):
|
|
30
35
|
def wrap_tool(tool: BaseTool) -> BaseTool:
|
|
31
36
|
return tool_wrapper(tool, self.protect)
|
|
32
|
-
|
|
37
|
+
|
|
33
38
|
return wrap_tool
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.3
|
|
2
2
|
Name: auth0-ai-langchain
|
|
3
|
-
Version: 1.0.
|
|
3
|
+
Version: 1.0.0b4
|
|
4
4
|
Summary: This package is an SDK for building secure AI-powered applications using Auth0, Okta FGA and LangChain.
|
|
5
5
|
License: Apache-2.0
|
|
6
6
|
Author: Auth0
|
|
@@ -11,7 +11,7 @@ Classifier: Programming Language :: Python :: 3
|
|
|
11
11
|
Classifier: Programming Language :: Python :: 3.11
|
|
12
12
|
Classifier: Programming Language :: Python :: 3.12
|
|
13
13
|
Classifier: Programming Language :: Python :: 3.13
|
|
14
|
-
Requires-Dist: auth0-ai (>=1.0.
|
|
14
|
+
Requires-Dist: auth0-ai (>=1.0.0b4,<2.0.0)
|
|
15
15
|
Requires-Dist: langchain (>=0.3.26,<0.4.0)
|
|
16
16
|
Requires-Dist: langchain-core (>=0.3.69,<0.4.0)
|
|
17
17
|
Requires-Dist: langgraph (>=0.5.3,<0.6.0)
|
|
@@ -34,26 +34,27 @@ Description-Content-Type: text/markdown
|
|
|
34
34
|
pip install auth0-ai-langchain
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
## Async
|
|
37
|
+
## Async Authorization
|
|
38
38
|
|
|
39
39
|
`Auth0AI` uses CIBA (Client-Initiated Backchannel Authentication) to handle user confirmation asynchronously. This is useful when you need to confirm a user action before proceeding with a tool execution.
|
|
40
40
|
|
|
41
|
-
Full Example of [Async
|
|
41
|
+
Full Example of [Async Authorization](https://github.com/auth0-lab/auth0-ai-python/tree/main/examples/async-authorization/langchain-examples).
|
|
42
42
|
|
|
43
43
|
1. Define a tool with the proper authorizer specifying a function to resolve the user id:
|
|
44
44
|
|
|
45
45
|
```python
|
|
46
46
|
from auth0_ai_langchain.auth0_ai import Auth0AI
|
|
47
|
-
from auth0_ai_langchain.
|
|
47
|
+
from auth0_ai_langchain.async_authorization import get_async_authorization_credentials
|
|
48
48
|
from langchain_core.runnables import ensure_config
|
|
49
49
|
from langchain_core.tools import StructuredTool
|
|
50
50
|
|
|
51
51
|
# If not provided, Auth0 settings will be read from env variables: `AUTH0_DOMAIN`, `AUTH0_CLIENT_ID`, and `AUTH0_CLIENT_SECRET`
|
|
52
52
|
auth0_ai = Auth0AI()
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
with_async_authorization = auth0_ai.with_async_authorization(
|
|
55
55
|
scopes=["stock:trade"],
|
|
56
56
|
audience=os.getenv("AUDIENCE"),
|
|
57
|
+
requested_expiry=os.getenv("REQUESTED_EXPIRY"),
|
|
57
58
|
binding_message=lambda ticker, qty: f"Authorize the purchase of {qty} {ticker}",
|
|
58
59
|
user_id=lambda *_, **__: ensure_config().get("configurable", {}).get("user_id"),
|
|
59
60
|
# Optional:
|
|
@@ -61,14 +62,14 @@ with_async_user_confirmation = auth0_ai.with_async_user_confirmation(
|
|
|
61
62
|
)
|
|
62
63
|
|
|
63
64
|
def tool_function(ticker: str, qty: int) -> str:
|
|
64
|
-
credentials =
|
|
65
|
+
credentials = get_async_authorization_credentials()
|
|
65
66
|
headers = {
|
|
66
67
|
"Authorization": f"{credentials["token_type"]} {credentials["access_token"]}",
|
|
67
68
|
# ...
|
|
68
69
|
}
|
|
69
70
|
# Call API
|
|
70
71
|
|
|
71
|
-
trade_tool =
|
|
72
|
+
trade_tool = with_async_authorization(
|
|
72
73
|
StructuredTool(
|
|
73
74
|
name="trade_tool",
|
|
74
75
|
description="Use this function to trade a stock",
|
|
@@ -80,15 +81,17 @@ trade_tool = with_async_user_confirmation(
|
|
|
80
81
|
|
|
81
82
|
2. Handle interruptions properly. For example, if user is not enrolled to MFA, it will throw an interruption. See [Handling Interrupts](#handling-interrupts) section.
|
|
82
83
|
|
|
83
|
-
###
|
|
84
|
+
### Async Authorization with RAR (Rich Authorization Requests)
|
|
85
|
+
|
|
84
86
|
`Auth0AI` supports RAR (Rich Authorization Requests) for CIBA. This allows you to provide additional authorization parameters to be displayed during the user confirmation request.
|
|
85
87
|
|
|
86
88
|
When defining the tool authorizer, you can specify the `authorization_details` parameter to include detailed information about the authorization being requested:
|
|
87
89
|
|
|
88
90
|
```python
|
|
89
|
-
|
|
91
|
+
with_async_authorization = auth0_ai.with_async_authorization(
|
|
90
92
|
scopes=["stock:trade"],
|
|
91
93
|
audience=os.getenv("AUDIENCE"),
|
|
94
|
+
requested_expiry=os.getenv("REQUESTED_EXPIRY"),
|
|
92
95
|
binding_message=lambda ticker, qty: f"Authorize the purchase of {qty} {ticker}",
|
|
93
96
|
authorization_details=lambda ticker, qty: [
|
|
94
97
|
{
|
|
@@ -107,6 +110,7 @@ with_async_user_confirmation = auth0_ai.with_async_user_confirmation(
|
|
|
107
110
|
To use RAR with CIBA, you need to [set up authorization details](https://auth0.com/docs/get-started/apis/configure-rich-authorization-requests) in your Auth0 tenant. This includes defining the authorization request parameters and their types. Additionally, the [Guardian SDK](https://auth0.com/docs/secure/multi-factor-authentication/auth0-guardian) is required to handle these authorization details in your authorizer app.
|
|
108
111
|
|
|
109
112
|
For more information on setting up RAR with CIBA, refer to:
|
|
113
|
+
|
|
110
114
|
- [Configure Rich Authorization Requests (RAR)](https://auth0.com/docs/get-started/apis/configure-rich-authorization-requests)
|
|
111
115
|
- [User Authorization with CIBA](https://auth0.com/docs/get-started/authentication-and-authorization-flow/client-initiated-backchannel-authentication-flow/user-authorization-with-ciba)
|
|
112
116
|
|
|
@@ -171,7 +175,7 @@ buy_tool = StructuredTool(
|
|
|
171
175
|
|
|
172
176
|
## Calling APIs On User's Behalf
|
|
173
177
|
|
|
174
|
-
The `Auth0AI.
|
|
178
|
+
The `Auth0AI.with_token_vault` function exchanges user's refresh token taken, by default, from the runnable configuration (`config.configurable._credentials.refresh_token`) for a Token Vault access token that is valid to call a third-party API.
|
|
175
179
|
|
|
176
180
|
Full Example of [Calling APIs On User's Behalf](https://github.com/auth0-lab/auth0-ai-python/tree/main/examples/calling-apis/langchain-examples).
|
|
177
181
|
|
|
@@ -179,13 +183,13 @@ Full Example of [Calling APIs On User's Behalf](https://github.com/auth0-lab/aut
|
|
|
179
183
|
|
|
180
184
|
```python
|
|
181
185
|
from auth0_ai_langchain.auth0_ai import Auth0AI
|
|
182
|
-
from auth0_ai_langchain.
|
|
186
|
+
from auth0_ai_langchain.token_vault import get_credentials_from_token_vault
|
|
183
187
|
from langchain_core.tools import StructuredTool
|
|
184
188
|
|
|
185
189
|
# If not provided, Auth0 settings will be read from env variables: `AUTH0_DOMAIN`, `AUTH0_CLIENT_ID`, and `AUTH0_CLIENT_SECRET`
|
|
186
190
|
auth0_ai = Auth0AI()
|
|
187
191
|
|
|
188
|
-
with_google_calendar_access = auth0_ai.
|
|
192
|
+
with_google_calendar_access = auth0_ai.with_token_vault(
|
|
189
193
|
connection="google-oauth2",
|
|
190
194
|
scopes=["https://www.googleapis.com/auth/calendar.freebusy"],
|
|
191
195
|
# Optional:
|
|
@@ -194,7 +198,7 @@ with_google_calendar_access = auth0_ai.with_federated_connection(
|
|
|
194
198
|
)
|
|
195
199
|
|
|
196
200
|
def tool_function(date: datetime):
|
|
197
|
-
credentials =
|
|
201
|
+
credentials = get_credentials_from_token_vault()
|
|
198
202
|
# Call Google API using credentials["access_token"]
|
|
199
203
|
|
|
200
204
|
check_calendar_tool = with_google_calendar_access(
|
|
@@ -321,7 +325,7 @@ For the specific case of **CIBA (Client-Initiated Backchannel Authorization)** y
|
|
|
321
325
|
|
|
322
326
|
```python
|
|
323
327
|
import os
|
|
324
|
-
from auth0_ai_langchain.
|
|
328
|
+
from auth0_ai_langchain.async_authorization import GraphResumer
|
|
325
329
|
from langgraph_sdk import get_client
|
|
326
330
|
|
|
327
331
|
resumer = GraphResumer(
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
auth0_ai_langchain/FGARetriever.py,sha256=SQwxo2aDtQhwQtYmszoKw3BH-U5QVnvPAgVw9EDzKVM,6002
|
|
2
|
+
auth0_ai_langchain/__init__.py,sha256=I331Kz-q97ZU7TfXaOR5UBbJamGEJ15twbf2HP1iCHs,67
|
|
3
|
+
auth0_ai_langchain/async_authorization/__init__.py,sha256=ZZW3HLnRRuCr9rfcJCdqSSLdAs710gtX5TVnq2LcnT8,346
|
|
4
|
+
auth0_ai_langchain/async_authorization/async_authorizer.py,sha256=fS3q2hqefN4ewxyVw-VhuC2DAFeVYcNdIbEjhT0bFs8,799
|
|
5
|
+
auth0_ai_langchain/async_authorization/graph_resumer.py,sha256=mTCcsKiTcxB9QKaS8S4MKJUtXJqY6Y2DLcHrfFKQ7y0,5548
|
|
6
|
+
auth0_ai_langchain/auth0_ai.py,sha256=C5tQKHnoQaiWWB9YRAO1uD-P6HYkYJ1ZMXKMEITiovE,4774
|
|
7
|
+
auth0_ai_langchain/fga/__init__.py,sha256=rgqTD4Gvz28jNdqhxTG5udbgyeUMsyvRj83fHBJdt4s,137
|
|
8
|
+
auth0_ai_langchain/token_vault/__init__.py,sha256=Wr4QAAPUcaSDP3wOj46vWsPTSt0SNaHyP5w60wUy5eI,436
|
|
9
|
+
auth0_ai_langchain/token_vault/token_vault_authorizer.py,sha256=KrgXdLFbNtGqELemeT7vjxhH2xj6KuETZzwZ-EkWBFM,1487
|
|
10
|
+
auth0_ai_langchain/utils/interrupt.py,sha256=DZ1b9OAkg3SQru9mSaQGBC6UY0ODz7QSskS9RlVyEGw,860
|
|
11
|
+
auth0_ai_langchain/utils/tool_wrapper.py,sha256=dHjcqykT2aohdFOm0mLZ9U6bXB6NHjfABb3aXef5174,1210
|
|
12
|
+
auth0_ai_langchain-1.0.0b4.dist-info/LICENSE,sha256=Lu_2YH0oK8b_VVisAhNQ2WIdtwY8pSU2PLbll-y6Cj8,9792
|
|
13
|
+
auth0_ai_langchain-1.0.0b4.dist-info/METADATA,sha256=qviUjQBh5NjCLnuvE0ms5l_MBBrVhxjUxUaQUiFW1P0,13707
|
|
14
|
+
auth0_ai_langchain-1.0.0b4.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
|
|
15
|
+
auth0_ai_langchain-1.0.0b4.dist-info/RECORD,,
|
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
from auth0_ai.interrupts.federated_connection_interrupt import (
|
|
2
|
-
FederatedConnectionError as FederatedConnectionError,
|
|
3
|
-
FederatedConnectionInterrupt as FederatedConnectionInterrupt
|
|
4
|
-
)
|
|
5
|
-
|
|
6
|
-
from auth0_ai.authorizers.federated_connection_authorizer import (
|
|
7
|
-
get_credentials_for_connection as get_credentials_for_connection,
|
|
8
|
-
get_access_token_for_connection as get_access_token_for_connection
|
|
9
|
-
)
|
|
10
|
-
from .federated_connection_authorizer import FederatedConnectionAuthorizer as FederatedConnectionAuthorizer
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
auth0_ai_langchain/FGARetriever.py,sha256=SQwxo2aDtQhwQtYmszoKw3BH-U5QVnvPAgVw9EDzKVM,6002
|
|
2
|
-
auth0_ai_langchain/__init__.py,sha256=I331Kz-q97ZU7TfXaOR5UBbJamGEJ15twbf2HP1iCHs,67
|
|
3
|
-
auth0_ai_langchain/auth0_ai.py,sha256=rAHvGBBvPgMXhnmEySmNMp6cbrXrZk3c3cn9r0psfZc,4748
|
|
4
|
-
auth0_ai_langchain/ciba/__init__.py,sha256=X62HZB20XdhsgcaKld6rLm2BOSuiO5uU5v7ePQz27Mk,268
|
|
5
|
-
auth0_ai_langchain/ciba/ciba_authorizer.py,sha256=GRAB3NBnmoxAECrRjPNdA9N9uQ4pCEzP6dF8RUwlysM,766
|
|
6
|
-
auth0_ai_langchain/ciba/graph_resumer.py,sha256=EpdzzB_NccdggKA3x__Q3Yziejo7AJjR4aJ57TZmYPA,5474
|
|
7
|
-
auth0_ai_langchain/federated_connections/__init__.py,sha256=kHsfxMbbuYtcnubslUTVLZX2FybLlKRcoPCgYQCMIK4,509
|
|
8
|
-
auth0_ai_langchain/federated_connections/federated_connection_authorizer.py,sha256=o25oRGiTo9y5mpjDNEWWaFVAIFbhwaxC0pcRId-4oYE,1405
|
|
9
|
-
auth0_ai_langchain/fga/__init__.py,sha256=rgqTD4Gvz28jNdqhxTG5udbgyeUMsyvRj83fHBJdt4s,137
|
|
10
|
-
auth0_ai_langchain/utils/interrupt.py,sha256=DZ1b9OAkg3SQru9mSaQGBC6UY0ODz7QSskS9RlVyEGw,860
|
|
11
|
-
auth0_ai_langchain/utils/tool_wrapper.py,sha256=dHjcqykT2aohdFOm0mLZ9U6bXB6NHjfABb3aXef5174,1210
|
|
12
|
-
auth0_ai_langchain-1.0.0b3.dist-info/LICENSE,sha256=Lu_2YH0oK8b_VVisAhNQ2WIdtwY8pSU2PLbll-y6Cj8,9792
|
|
13
|
-
auth0_ai_langchain-1.0.0b3.dist-info/METADATA,sha256=BAGQElZsPwaapELQicSEAUruKoXGakmBjWHQWcVoOPY,13548
|
|
14
|
-
auth0_ai_langchain-1.0.0b3.dist-info/WHEEL,sha256=fGIA9gx4Qxk2KDKeNJCbOEwSrmLtjWCwzBz351GyrPQ,88
|
|
15
|
-
auth0_ai_langchain-1.0.0b3.dist-info/RECORD,,
|
|
File without changes
|