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 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.11'
32
- __version_tuple__ = version_tuple = (0, 2, 11)
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, api_version=azure_openai_api_version, api_key=azure_openai_api_key
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, openrouter_api_url=OPENROUTER_API_URL, openrouter_api_key=OPENROUTER_API_KEY
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(model_name=model_name or OPENROUTER_MODEL_NAME, **kwargs)
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("ENV", allow_empty=True)
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,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: aixtools
3
- Version: 0.2.11
3
+ Version: 0.2.13
4
4
  Summary: Tools for AI exploration and debugging
5
5
  Requires-Python: >=3.11.2
6
6
  Description-Content-Type: text/markdown
@@ -1,5 +1,5 @@
1
1
  aixtools/__init__.py,sha256=9NGHm7LjsQmsvjTZvw6QFJexSvAU4bCoN_KBk9SCa00,260
2
- aixtools/_version.py,sha256=ctqLY7UIopjEtEtkMewUbTAH-exVquX9ojG1BE5gJ1s,706
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=tceQByn-RGBIhW8BOjKoP0yhNzZLwAa6CxwhPhRe3PU,7270
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=aCcFTHjTO-ieA5Xo7913-9OCDowRAoCYG_b_gmtsXsU,7100
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=fd7BWDqxzMnHke2M4tjKvkhrxwdkUsuZXDTOShiID24,5412
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.11.dist-info/METADATA,sha256=E5GS2Ov0M2EdWvwzzxHduZJvSMepJo_0P5j_uEn95-g,27230
92
- aixtools-0.2.11.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
93
- aixtools-0.2.11.dist-info/entry_points.txt,sha256=q8412TG4T0S8K0SKeWp2vkVPIDYQs0jNoHqcQ7qxOiA,155
94
- aixtools-0.2.11.dist-info/top_level.txt,sha256=wBn-rw9bCtxrR4AYEYgjilNCUVmKY0LWby9Zan2PRJM,9
95
- aixtools-0.2.11.dist-info/RECORD,,
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,,