aixtools 0.2.11__py3-none-any.whl → 0.2.13__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 aixtools might be problematic. Click here for more details.
- aixtools/_version.py +2 -2
- aixtools/agents/agent.py +22 -12
- aixtools/auth/auth.py +9 -1
- aixtools/utils/config.py +3 -1
- {aixtools-0.2.11.dist-info → aixtools-0.2.13.dist-info}/METADATA +1 -1
- {aixtools-0.2.11.dist-info → aixtools-0.2.13.dist-info}/RECORD +9 -9
- {aixtools-0.2.11.dist-info → aixtools-0.2.13.dist-info}/WHEEL +0 -0
- {aixtools-0.2.11.dist-info → aixtools-0.2.13.dist-info}/entry_points.txt +0 -0
- {aixtools-0.2.11.dist-info → aixtools-0.2.13.dist-info}/top_level.txt +0 -0
aixtools/_version.py
CHANGED
|
@@ -28,7 +28,7 @@ version_tuple: VERSION_TUPLE
|
|
|
28
28
|
commit_id: COMMIT_ID
|
|
29
29
|
__commit_id__: COMMIT_ID
|
|
30
30
|
|
|
31
|
-
__version__ = version = '0.2.
|
|
32
|
-
__version_tuple__ = version_tuple = (0, 2,
|
|
31
|
+
__version__ = version = '0.2.13'
|
|
32
|
+
__version_tuple__ = version_tuple = (0, 2, 13)
|
|
33
33
|
|
|
34
34
|
__commit_id__ = commit_id = None
|
aixtools/agents/agent.py
CHANGED
|
@@ -51,17 +51,17 @@ def _get_model_bedrock(model_name=BEDROCK_MODEL_NAME, aws_region=AWS_REGION):
|
|
|
51
51
|
return BedrockConverseModel(model_name=model_name, provider=provider)
|
|
52
52
|
|
|
53
53
|
|
|
54
|
-
def _get_model_ollama(model_name=OLLAMA_MODEL_NAME, ollama_url=OLLAMA_URL):
|
|
54
|
+
def _get_model_ollama(model_name=OLLAMA_MODEL_NAME, ollama_url=OLLAMA_URL, http_client=None):
|
|
55
55
|
assert ollama_url, "OLLAMA_URL is not set"
|
|
56
56
|
assert model_name, "Model name is not set"
|
|
57
|
-
provider = OpenAIProvider(base_url=ollama_url)
|
|
57
|
+
provider = OpenAIProvider(base_url=ollama_url, http_client=http_client)
|
|
58
58
|
return OpenAIChatModel(model_name=model_name, provider=provider)
|
|
59
59
|
|
|
60
60
|
|
|
61
|
-
def _get_model_openai(model_name=OPENAI_MODEL_NAME, openai_api_key=OPENAI_API_KEY):
|
|
61
|
+
def _get_model_openai(model_name=OPENAI_MODEL_NAME, openai_api_key=OPENAI_API_KEY, http_client=None):
|
|
62
62
|
assert openai_api_key, "OPENAI_API_KEY is not set"
|
|
63
63
|
assert model_name, "Model name is not set"
|
|
64
|
-
provider = OpenAIProvider(api_key=openai_api_key)
|
|
64
|
+
provider = OpenAIProvider(api_key=openai_api_key, http_client=http_client)
|
|
65
65
|
return OpenAIChatModel(model_name=model_name, provider=provider)
|
|
66
66
|
|
|
67
67
|
|
|
@@ -76,22 +76,27 @@ def _get_model_openai_azure(
|
|
|
76
76
|
assert azure_openai_api_version, "AZURE_OPENAI_API_VERSION is not set"
|
|
77
77
|
assert model_name, "Model name is not set"
|
|
78
78
|
client = AsyncAzureOpenAI(
|
|
79
|
-
azure_endpoint=azure_openai_endpoint,
|
|
79
|
+
azure_endpoint=azure_openai_endpoint,
|
|
80
|
+
api_version=azure_openai_api_version,
|
|
81
|
+
api_key=azure_openai_api_key,
|
|
80
82
|
)
|
|
81
83
|
return OpenAIChatModel(model_name=model_name, provider=OpenAIProvider(openai_client=client))
|
|
82
84
|
|
|
83
85
|
|
|
84
86
|
def _get_model_open_router(
|
|
85
|
-
model_name=OPENROUTER_MODEL_NAME,
|
|
87
|
+
model_name=OPENROUTER_MODEL_NAME,
|
|
88
|
+
openrouter_api_url=OPENROUTER_API_URL,
|
|
89
|
+
openrouter_api_key=OPENROUTER_API_KEY,
|
|
90
|
+
http_client=None,
|
|
86
91
|
):
|
|
87
92
|
assert openrouter_api_url, "OPENROUTER_API_URL is not set"
|
|
88
93
|
assert openrouter_api_key, "OPENROUTER_API_KEY is not set"
|
|
89
94
|
assert model_name, "Model name is not set, missing 'OPENROUTER_MODEL_NAME' environment variable?"
|
|
90
|
-
provider = OpenAIProvider(base_url=openrouter_api_url, api_key=openrouter_api_key)
|
|
95
|
+
provider = OpenAIProvider(base_url=openrouter_api_url, api_key=openrouter_api_key, http_client=http_client)
|
|
91
96
|
return OpenAIChatModel(model_name, provider=provider)
|
|
92
97
|
|
|
93
98
|
|
|
94
|
-
def get_model(model_family=MODEL_FAMILY, model_name=None, **kwargs):
|
|
99
|
+
def get_model(model_family=MODEL_FAMILY, model_name=None, http_client=None, **kwargs):
|
|
95
100
|
"""Create and return appropriate model instance based on specified family and name."""
|
|
96
101
|
assert model_family is not None and model_family != "", f"Model family '{model_family}' is not set"
|
|
97
102
|
match model_family:
|
|
@@ -100,11 +105,13 @@ def get_model(model_family=MODEL_FAMILY, model_name=None, **kwargs):
|
|
|
100
105
|
case "bedrock":
|
|
101
106
|
return _get_model_bedrock(model_name=model_name or BEDROCK_MODEL_NAME, **kwargs)
|
|
102
107
|
case "ollama":
|
|
103
|
-
return _get_model_ollama(model_name=model_name or OLLAMA_MODEL_NAME, **kwargs)
|
|
108
|
+
return _get_model_ollama(model_name=model_name or OLLAMA_MODEL_NAME, http_client=http_client, **kwargs)
|
|
104
109
|
case "openai":
|
|
105
|
-
return _get_model_openai(model_name=model_name or OPENAI_MODEL_NAME, **kwargs)
|
|
110
|
+
return _get_model_openai(model_name=model_name or OPENAI_MODEL_NAME, http_client=http_client, **kwargs)
|
|
106
111
|
case "openrouter":
|
|
107
|
-
return _get_model_open_router(
|
|
112
|
+
return _get_model_open_router(
|
|
113
|
+
model_name=model_name or OPENROUTER_MODEL_NAME, http_client=http_client, **kwargs
|
|
114
|
+
)
|
|
108
115
|
case _:
|
|
109
116
|
raise ValueError(f"Model family '{model_family}' not supported")
|
|
110
117
|
|
|
@@ -119,12 +126,15 @@ def get_agent( # noqa: PLR0913, pylint: disable=too-many-arguments,too-many-pos
|
|
|
119
126
|
model_settings=None,
|
|
120
127
|
output_type: Any = str,
|
|
121
128
|
deps_type=NoneType,
|
|
129
|
+
http_client=None,
|
|
122
130
|
) -> Agent:
|
|
123
131
|
"""Get a PydanticAI agent"""
|
|
124
132
|
if model_settings is None:
|
|
125
133
|
model_settings = ModelSettings(timeout=MODEL_TIMEOUT)
|
|
126
134
|
if model is None:
|
|
127
|
-
model = get_model(
|
|
135
|
+
model = get_model(
|
|
136
|
+
http_client=http_client,
|
|
137
|
+
)
|
|
128
138
|
agent = Agent(
|
|
129
139
|
model=model,
|
|
130
140
|
output_type=output_type,
|
aixtools/auth/auth.py
CHANGED
|
@@ -16,6 +16,7 @@ from mcp.server.auth.provider import (
|
|
|
16
16
|
from aixtools.utils import config
|
|
17
17
|
|
|
18
18
|
logger = logging.getLogger(__name__)
|
|
19
|
+
TEST_CLIENT = "test-client"
|
|
19
20
|
|
|
20
21
|
|
|
21
22
|
class AuthTokenErrorCode(str, enum.Enum):
|
|
@@ -163,8 +164,15 @@ class AccessTokenAuthProvider(AuthProvider):
|
|
|
163
164
|
|
|
164
165
|
async def verify_token(self, token: str) -> AccessToken:
|
|
165
166
|
"""Verify the access token and return an AccessToken object."""
|
|
166
|
-
|
|
167
167
|
logger.info("Received verify token request")
|
|
168
|
+
test_token = config.AUTH_TEST_TOKEN
|
|
169
|
+
|
|
170
|
+
# check if the token is a test token
|
|
171
|
+
# this is used for integration test run
|
|
172
|
+
if test_token and token == test_token:
|
|
173
|
+
logger.info("Using test token:%s", test_token)
|
|
174
|
+
return AccessToken(token=token, client_id=TEST_CLIENT, scopes=[], expires_at=None)
|
|
175
|
+
|
|
168
176
|
claims = self.token_verifier.verify(token)
|
|
169
177
|
scopes = claims.get("scp", "")
|
|
170
178
|
self.token_verifier.authorize_claims(claims, self.app_scope)
|
aixtools/utils/config.py
CHANGED
|
@@ -124,7 +124,7 @@ GOOGLE_CLOUD_LOCATION = get_variable_env("GOOGLE_CLOUD_LOCATION", True)
|
|
|
124
124
|
# vault parameters.
|
|
125
125
|
VAULT_ADDRESS = get_variable_env("VAULT_ADDRESS", default="http://localhost:8200")
|
|
126
126
|
VAULT_TOKEN = get_variable_env("VAULT_TOKEN", allow_empty=True)
|
|
127
|
-
VAULT_ENV = get_variable_env("
|
|
127
|
+
VAULT_ENV = get_variable_env("VAULT_ENV", allow_empty=True)
|
|
128
128
|
VAULT_MOUNT_POINT = get_variable_env("VAULT_MOUNT_POINT", allow_empty=True)
|
|
129
129
|
VAULT_PATH_PREFIX = get_variable_env("VAULT_PATH_PREFIX", allow_empty=True)
|
|
130
130
|
|
|
@@ -142,3 +142,5 @@ APP_AUTHORIZED_GROUPS = get_variable_env("APP_AUTHORIZED_GROUPS", allow_empty=Tr
|
|
|
142
142
|
# used to skip authorization in local tests if required.
|
|
143
143
|
SKIP_MCP_AUTHORIZATION = str2bool(get_variable_env("SKIP_MCP_AUTHORIZATION", True, False))
|
|
144
144
|
APP_DEFAULT_SCOPE = get_variable_env("APP_DEFAULT_SCOPE", allow_empty=True)
|
|
145
|
+
|
|
146
|
+
AUTH_TEST_TOKEN = get_variable_env("AUTH_TEST_TOKEN", allow_empty=True)
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
aixtools/__init__.py,sha256=9NGHm7LjsQmsvjTZvw6QFJexSvAU4bCoN_KBk9SCa00,260
|
|
2
|
-
aixtools/_version.py,sha256=
|
|
2
|
+
aixtools/_version.py,sha256=Ne1JryemzOpPApsxRo0sW1JCbPxg8W1xrIqiCeYqiTA,706
|
|
3
3
|
aixtools/app.py,sha256=JzQ0nrv_bjDQokllIlGHOV0HEb-V8N6k_nGQH-TEsVU,5227
|
|
4
4
|
aixtools/chainlit.md,sha256=yC37Ly57vjKyiIvK4oUvf4DYxZCwH7iocTlx7bLeGLU,761
|
|
5
5
|
aixtools/context.py,sha256=I_MD40ZnvRm5WPKAKqBUAdXIf8YaurkYUUHSVVy-QvU,598
|
|
@@ -25,12 +25,12 @@ aixtools/a2a/google_sdk/utils.py,sha256=4VIPV2GtG5IRY-KSZN6iRMS3ntxG2uKgd_d5tQvn
|
|
|
25
25
|
aixtools/a2a/google_sdk/pydantic_ai_adapter/agent_executor.py,sha256=8VuU2WXeSHUK3_rRm_mjX6elqdC9NA2uz1aELzeC8BU,9784
|
|
26
26
|
aixtools/a2a/google_sdk/pydantic_ai_adapter/storage.py,sha256=nGoVL7MPoZJW7iVR71laqpUYP308yFKZIifJtvUgpiU,878
|
|
27
27
|
aixtools/agents/__init__.py,sha256=MAW196S2_G7uGqv-VNjvlOETRfuV44WlU1leO7SiR0A,282
|
|
28
|
-
aixtools/agents/agent.py,sha256=
|
|
28
|
+
aixtools/agents/agent.py,sha256=JRbWWo3lueXyNSd9UgnTztm4bZr7dPxeNOzCFNFG7RE,7620
|
|
29
29
|
aixtools/agents/agent_batch.py,sha256=0Zu9yNCRPAQZPjXQ-dIUAmP1uGTVbxVt7xvnMpoJMjU,2251
|
|
30
30
|
aixtools/agents/print_nodes.py,sha256=wVTngNfqM0As845WTRz6G3Rei_Gr3HuBlvu-G_eXuig,1665
|
|
31
31
|
aixtools/agents/prompt.py,sha256=p9OYnyJ4-MyGXwHPrQeJBhZ2a3RV2HqhtdUUCrTMsAQ,3361
|
|
32
32
|
aixtools/auth/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
33
|
-
aixtools/auth/auth.py,sha256=
|
|
33
|
+
aixtools/auth/auth.py,sha256=gooviMSsfvAn9BulJLD5My2B45qsAR4ZT6JgIS3uSLQ,7467
|
|
34
34
|
aixtools/compliance/__init__.py,sha256=vnw0zEdySIJWvDAJ8DCRRaWmY_agEOz1qlpAdhmtiuo,191
|
|
35
35
|
aixtools/compliance/private_data.py,sha256=OOM9mIp3_w0fNgj3VAEWBl7-jrPc19_Ls1pC5dfF5UY,5323
|
|
36
36
|
aixtools/db/__init__.py,sha256=b8vRhme3egV-aUZbAntnOaDkSXB8UT0Xy5oqQhU_z0Q,399
|
|
@@ -78,7 +78,7 @@ aixtools/tools/doctor/mcp_tool_doctor.py,sha256=sX2q5GfNkmUYxnXrqMpeGIwGfeL1LpYJ
|
|
|
78
78
|
aixtools/tools/doctor/tool_doctor.py,sha256=EY1pshjLGLD0j6cc1ZFtbc0G19I5IbOZwHFDqypE49Q,2661
|
|
79
79
|
aixtools/tools/doctor/tool_recommendation.py,sha256=LYyVOSXdAorWiY4P-ucSA1vLlV5BTEfX4GzBXNE_X0M,1569
|
|
80
80
|
aixtools/utils/__init__.py,sha256=xT6almZBQYMfj4h7Hq9QXDHyVXbOOTxqLsmJsxYYnSw,757
|
|
81
|
-
aixtools/utils/config.py,sha256=
|
|
81
|
+
aixtools/utils/config.py,sha256=e6gzGfo9c21V4ImuthLMP1RmF2-2FbBnsirMmve3ZWE,5491
|
|
82
82
|
aixtools/utils/config_util.py,sha256=3Ya4Qqhj1RJ1qtTTykQ6iayf5uxlpigPXgEJlTi1wn4,2229
|
|
83
83
|
aixtools/utils/enum_with_description.py,sha256=zjSzWxG74eR4x7dpmb74pLTYCWNSMvauHd7_9LpDYIw,1088
|
|
84
84
|
aixtools/utils/files.py,sha256=8JnxwHJRJcjWCdFpjzWmo0po2fRg8esj4H7sOxElYXU,517
|
|
@@ -88,8 +88,8 @@ aixtools/utils/chainlit/cl_agent_show.py,sha256=vaRuowp4BRvhxEr5hw0zHEJ7iaSF_5bo
|
|
|
88
88
|
aixtools/utils/chainlit/cl_utils.py,sha256=fxaxdkcZg6uHdM8uztxdPowg3a2f7VR7B26VPY4t-3c,5738
|
|
89
89
|
aixtools/vault/__init__.py,sha256=fsr_NuX3GZ9WZ7dGfe0gp_5-z3URxAfwVRXw7Xyc0dU,141
|
|
90
90
|
aixtools/vault/vault.py,sha256=9dZLWdZQk9qN_Q9Djkofw9LUKnJqnrX5H0fGusVLBhA,6037
|
|
91
|
-
aixtools-0.2.
|
|
92
|
-
aixtools-0.2.
|
|
93
|
-
aixtools-0.2.
|
|
94
|
-
aixtools-0.2.
|
|
95
|
-
aixtools-0.2.
|
|
91
|
+
aixtools-0.2.13.dist-info/METADATA,sha256=9MIU9MUcpdPA6NZlU9btnOeuN_utKGcVokMyb9Q_KBc,27230
|
|
92
|
+
aixtools-0.2.13.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
93
|
+
aixtools-0.2.13.dist-info/entry_points.txt,sha256=q8412TG4T0S8K0SKeWp2vkVPIDYQs0jNoHqcQ7qxOiA,155
|
|
94
|
+
aixtools-0.2.13.dist-info/top_level.txt,sha256=wBn-rw9bCtxrR4AYEYgjilNCUVmKY0LWby9Zan2PRJM,9
|
|
95
|
+
aixtools-0.2.13.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|