15
15
16
16
def format_tool_results (
17
17
results : Union [WebSearchResponse , WebFetchResponse ],
18
- * ,
19
- query : Optional [str ] = None ,
20
- url : Optional [str ] = None ,
18
+ user_search : str ,
21
19
):
22
20
if isinstance (results , WebSearchResponse ):
23
21
output = []
24
- if isinstance (results .results , dict ):
25
- for q , search_results in results .results .items ():
26
- output .append (f'Search results for "{ q } ":' )
27
- for i , result in enumerate (search_results , 1 ):
28
- title = getattr (result , 'title' , None )
29
- url_value = getattr (result , 'url' , None )
30
- output .append (f'{ i } . { title } ' if title else f'{ i } . { getattr (result , "content" , "" )} ' )
31
- if url_value :
32
- output .append (f' URL: { url_value } ' )
33
- output .append (f' Content: { getattr (result , "content" , "" )} ' )
34
- output .append ('' )
35
- else :
36
- if query :
37
- output .append (f'Search results for "{ query } ":' )
38
- for i , result in enumerate (results .results , 1 ):
39
- title = getattr (result , 'title' , None )
40
- url_value = getattr (result , 'url' , None )
41
- output .append (f'{ i } . { title } ' if title else f'{ i } . { getattr (result , "content" , "" )} ' )
42
- if url_value :
43
- output .append (f' URL: { url_value } ' )
44
- output .append (f' Content: { getattr (result , "content" , "" )} ' )
45
- output .append ('' )
46
-
22
+ output .append (f'Search results for "{ user_search } ":' )
23
+ print ()
24
+ for i , result in enumerate (results .results , 1 ):
25
+ title = getattr (result , 'title' , None )
26
+ url_value = getattr (result , 'url' , None )
27
+ output .append (f'{ i } . { title } ' if title else f'{ i } . { getattr (result , "content" , "" )} ' )
28
+ if url_value :
29
+ output .append (f' URL: { url_value } ' )
30
+ output .append (f' Content: { getattr (result , "content" , "" )} ' )
31
+ output .append ('' )
47
32
return '\n ' .join (output ).rstrip ()
48
33
49
34
elif isinstance (results , WebFetchResponse ):
50
35
output = []
51
- if url :
52
- output .append (f'Fetch results for "{ url } ":' )
53
- output .extend (
54
- [
55
- f'Title: { results .title } ' ,
56
- f'URL: { url } ' if url else '' ,
57
- f'Content: { results .content } ' ,
58
- ]
59
- )
36
+ output .append (f'Fetch results for "{ user_search } ":' )
37
+ output .extend ([
38
+ f'Title: { results .title } ' ,
39
+ f'URL: { user_search } ' if user_search else '' ,
40
+ f'Content: { results .content } ' ,
41
+ ])
60
42
if results .links :
61
43
output .append (f'Links: { ", " .join (results .links )} ' )
62
44
output .append ('' )
63
-
64
45
return '\n ' .join (output ).rstrip ()
65
46
66
-
67
47
client = Client (headers = {'Authorization' : (os .getenv ('OLLAMA_API_KEY' ))})
68
48
available_tools = {'web_search' : client .web_search , 'web_fetch' : client .web_fetch }
69
49
@@ -88,19 +68,24 @@ def format_tool_results(
88
68
if function_to_call :
89
69
args = tool_call .function .arguments
90
70
result : Union [WebSearchResponse , WebFetchResponse ] = function_to_call (** args )
91
- print ('Result from tool call name: ' , tool_call .function .name , 'with arguments: ' , args )
71
+ print ('Result from tool call name:' , tool_call .function .name , 'with arguments:' )
72
+ print (args )
73
+ print ()
92
74
75
+ user_search = args .get ('query' , '' ) or args .get ('url' , '' )
93
76
if tool_call .function .name == 'web_search' :
94
- formatted = format_tool_results (result , query = args . get ( 'query' ) )
77
+ formatted_tool_results = format_tool_results (result , user_search = user_search )
95
78
elif tool_call .function .name == 'web_fetch' :
96
- formatted = format_tool_results (result , url = args . get ( 'url' ) )
79
+ formatted_tool_results = format_tool_results (result , user_search = user_search )
97
80
else :
98
- formatted = format_tool_results (result )
81
+ formatted_tool_results = format_tool_results (result )
99
82
100
- print ('Result: ' , formatted [:200 ])
83
+ print ('Result:' )
84
+ print (formatted_tool_results [:200 ])
85
+ print ()
101
86
102
87
# caps the result at ~2000 tokens
103
- messages .append ({'role' : 'tool' , 'content' : formatted [: 2000 * 4 ], 'tool_name' : tool_call .function .name })
88
+ messages .append ({'role' : 'tool' , 'content' : formatted_tool_results [: 2000 * 4 ], 'tool_name' : tool_call .function .name })
104
89
else :
105
90
print (f'Tool { tool_call .function .name } not found' )
106
91
messages .append ({'role' : 'tool' , 'content' : f'Tool { tool_call .function .name } not found' , 'tool_name' : tool_call .function .name })
0 commit comments