bstraehle commited on
Commit
cee079a
·
verified ·
1 Parent(s): 698e51d

Create utils.py

Browse files
Files changed (1) hide show
  1. utils.py +48 -0
utils.py ADDED
@@ -0,0 +1,48 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import inspect
2
+
3
+ def function_to_schema(func) -> dict:
4
+ type_map = {
5
+ str: "string",
6
+ int: "integer",
7
+ float: "number",
8
+ bool: "boolean",
9
+ list: "array",
10
+ dict: "object",
11
+ type(None): "null",
12
+ }
13
+
14
+ try:
15
+ signature = inspect.signature(func)
16
+ except ValueError as e:
17
+ raise ValueError(
18
+ f"Failed to get signature for function {func.__name__}: {str(e)}"
19
+ )
20
+
21
+ parameters = {}
22
+ for param in signature.parameters.values():
23
+ try:
24
+ param_type = type_map.get(param.annotation, "string")
25
+ except KeyError as e:
26
+ raise KeyError(
27
+ f"Unknown type annotation {param.annotation} for parameter {param.name}: {str(e)}"
28
+ )
29
+ parameters[param.name] = {"type": param_type}
30
+
31
+ required = [
32
+ param.name
33
+ for param in signature.parameters.values()
34
+ if param.default == inspect._empty
35
+ ]
36
+
37
+ return {
38
+ "type": "function",
39
+ "function": {
40
+ "name": func.__name__,
41
+ "description": func.__doc__ or "",
42
+ "parameters": {
43
+ "type": "object",
44
+ "properties": parameters,
45
+ "required": required,
46
+ },
47
+ },
48
+ }