optimizely-opal.opal-tools-sdk 0.1.5.dev0__py3-none-any.whl → 0.1.6.dev0__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.
opal_tools_sdk/service.py CHANGED
@@ -1,15 +1,16 @@
1
- from typing import Dict, List, Any, Callable, Type, Optional, get_type_hints
1
+ from typing import Dict, List, Any, Callable, Optional, get_type_hints
2
2
  import inspect
3
3
  import logging
4
- from fastapi import FastAPI, APIRouter, Depends, Header, HTTPException, Request
4
+ from fastapi import FastAPI, APIRouter, HTTPException, Request
5
5
  from fastapi.routing import APIRoute
6
- from pydantic import BaseModel, create_model
6
+ from pydantic import BaseModel, ValidationError
7
7
 
8
- from .models import Function, Parameter, ParameterType, AuthRequirement
8
+ from .models import Function, Parameter, AuthRequirement
9
9
  from . import _registry
10
10
 
11
11
  logger = logging.getLogger(__name__)
12
12
 
13
+
13
14
  class ToolsService:
14
15
  """Main class for managing Opal tools."""
15
16
 
@@ -33,15 +34,12 @@ class ToolsService:
33
34
  routes = []
34
35
  for route in app.routes:
35
36
  if isinstance(route, APIRoute):
36
- routes.append({
37
- "path": route.path,
38
- "name": route.name,
39
- "methods": route.methods
40
- })
37
+ routes.append({"path": route.path, "name": route.name, "methods": route.methods})
41
38
  return {"routes": routes}
42
39
 
43
40
  def _init_routes(self) -> None:
44
41
  """Initialize the discovery endpoint."""
42
+
45
43
  @self.router.get("/discovery")
46
44
  async def discovery() -> Dict[str, Any]:
47
45
  """Return the discovery information for this tools service."""
@@ -66,21 +64,23 @@ class ToolsService:
66
64
  # Auth requirements should always be a list
67
65
  if isinstance(handler.__auth_requirements__, list):
68
66
  for req in handler.__auth_requirements__:
69
- auth_requirements.append(AuthRequirement(
70
- provider=req.get("provider", ""),
71
- scope_bundle=req.get("scope_bundle", ""),
72
- required=req.get("required", True)
73
- ))
67
+ auth_requirements.append(
68
+ AuthRequirement(
69
+ provider=req.get("provider", ""), scope_bundle=req.get("scope_bundle", ""), required=req.get("required", True)
70
+ )
71
+ )
74
72
 
75
73
  return auth_requirements
76
74
 
77
- def register_tool(self,
78
- name: str,
79
- description: str,
80
- handler: Callable,
81
- parameters: List[Parameter],
82
- endpoint: str,
83
- auth_requirements: Optional[List[AuthRequirement]] = None) -> None:
75
+ def register_tool(
76
+ self,
77
+ name: str,
78
+ description: str,
79
+ handler: Callable,
80
+ parameters: List[Parameter],
81
+ endpoint: str,
82
+ auth_requirements: Optional[List[AuthRequirement]] = None,
83
+ ) -> None:
84
84
  """Register a tool function.
85
85
 
86
86
  Args:
@@ -101,11 +101,7 @@ class ToolsService:
101
101
  final_auth_requirements = auth_requirements if auth_requirements else handler_auth_requirements
102
102
 
103
103
  function = Function(
104
- name=name,
105
- description=description,
106
- parameters=parameters,
107
- endpoint=endpoint,
108
- auth_requirements=final_auth_requirements
104
+ name=name, description=description, parameters=parameters, endpoint=endpoint, auth_requirements=final_auth_requirements
109
105
  )
110
106
 
111
107
  self.functions.append(function)
@@ -144,7 +140,6 @@ class ToolsService:
144
140
  param_name = list(sig.parameters.keys())[0]
145
141
  param_type = get_type_hints(handler).get(param_name)
146
142
 
147
-
148
143
  args = []
149
144
  kwargs = {}
150
145
  if param_type:
@@ -168,8 +163,12 @@ class ToolsService:
168
163
 
169
164
  logger.info(f"Tool {name} returned: {result}")
170
165
  return result
166
+ except ValidationError as e:
167
+ logger.warning(f"Invalid parameters predicted by LLM for tool {name}: {str(e)}")
168
+ raise HTTPException(status_code=400, detail=str(e))
171
169
  except Exception as e:
172
170
  import traceback
171
+
173
172
  logger.error(f"Error in tool {name}: {str(e)}")
174
173
  logger.error(traceback.format_exc())
175
174
  raise HTTPException(status_code=500, detail=str(e))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: optimizely-opal.opal-tools-sdk
3
- Version: 0.1.5.dev0
3
+ Version: 0.1.6.dev0
4
4
  Summary: SDK for creating Opal-compatible tools services
5
5
  Home-page: https://github.com/optimizely/opal-tools-sdk
6
6
  Author: Optimizely
@@ -4,8 +4,8 @@ opal_tools_sdk/auth.py,sha256=9aMiZv6n6_iu7hQA0sKg4hgNr5DzYFFuP0SWUoZf_Vw,1520
4
4
  opal_tools_sdk/decorators.py,sha256=iHal7RElOSCWjqKHIK-Hc4GKOsjuGyUg0_lsQKVQShg,5315
5
5
  opal_tools_sdk/logging.py,sha256=krvkhdql2GWh0aCWj5gfqyn5plsyLJ773WzIirK7tkU,1325
6
6
  opal_tools_sdk/models.py,sha256=YESFXdIPIFoVqP6OXtswXzHQ1tYMFVSnb8rFVe9cFj4,3403
7
- opal_tools_sdk/service.py,sha256=wVYe40zEZc1ynIkvowD9APU8BFHQ5fdy3j8qlsdZB1U,6965
8
- optimizely_opal_opal_tools_sdk-0.1.5.dev0.dist-info/METADATA,sha256=KS830xd4wFliLcbfJBuWSxj49pIH_AfajJJOrm_UG0Q,8085
9
- optimizely_opal_opal_tools_sdk-0.1.5.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
- optimizely_opal_opal_tools_sdk-0.1.5.dev0.dist-info/top_level.txt,sha256=nCJ5PxF0rgoV6yNJvvuUaZPx4D3EWkl7gpu-6xafH1E,15
11
- optimizely_opal_opal_tools_sdk-0.1.5.dev0.dist-info/RECORD,,
7
+ opal_tools_sdk/service.py,sha256=a5ZC-J1GF5y1-FdWCXdilCy7p5hG63MTTn6frBBCo4Y,6939
8
+ optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/METADATA,sha256=dY_LreIH84jGIXPLzpdL3MSUnzn3L5b4fRRTfKd5jvM,8085
9
+ optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
10
+ optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/top_level.txt,sha256=nCJ5PxF0rgoV6yNJvvuUaZPx4D3EWkl7gpu-6xafH1E,15
11
+ optimizely_opal_opal_tools_sdk-0.1.6.dev0.dist-info/RECORD,,