forked from xtekky/gpt4free
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Add tool calls api support, add search tool support
- Loading branch information
Showing
14 changed files
with
450 additions
and
283 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,82 @@ | ||
from __future__ import annotations | ||
|
||
import json | ||
import unittest | ||
|
||
from g4f.client import AsyncClient | ||
from g4f.web_search import DuckDuckGoSearchException, has_requirements | ||
from .mocks import YieldProviderMock | ||
|
||
DEFAULT_MESSAGES = [{'role': 'user', 'content': 'Hello'}] | ||
|
||
class TestIterListProvider(unittest.IsolatedAsyncioTestCase): | ||
def setUp(self) -> None: | ||
if not has_requirements: | ||
self.skipTest('web search requirements not passed') | ||
|
||
async def test_search(self): | ||
client = AsyncClient(provider=YieldProviderMock) | ||
tool_calls = [ | ||
{ | ||
"function": { | ||
"arguments": { | ||
"query": "search query", # content of last message: messages[-1]["content"] | ||
"max_results": 5, # maximum number of search results | ||
"max_words": 500, # maximum number of used words from search results for generating the response | ||
"backend": "html", # or "lite", "api": change it to pypass rate limits | ||
"add_text": True, # do scraping websites | ||
"timeout": 5, # in seconds for scraping websites | ||
"region": "wt-wt", | ||
"instructions": "Using the provided web search results, to write a comprehensive reply to the user request.\n" | ||
"Make sure to add the sources of cites using [[Number]](Url) notation after the reference. Example: [[0]](http://google.com)", | ||
}, | ||
"name": "search_tool" | ||
}, | ||
"type": "function" | ||
} | ||
] | ||
try: | ||
response = await client.chat.completions.create([{"content": "", "role": "user"}], "", tool_calls=tool_calls) | ||
self.assertIn("Instruction: Using the provided web search results", response.choices[0].message.content) | ||
except DuckDuckGoSearchException as e: | ||
self.skipTest(f'DuckDuckGoSearchException: {e}') | ||
|
||
async def test_search2(self): | ||
client = AsyncClient(provider=YieldProviderMock) | ||
tool_calls = [ | ||
{ | ||
"function": { | ||
"arguments": { | ||
"query": "search query", | ||
}, | ||
"name": "search_tool" | ||
}, | ||
"type": "function" | ||
} | ||
] | ||
try: | ||
response = await client.chat.completions.create([{"content": "", "role": "user"}], "", tool_calls=tool_calls) | ||
self.assertIn("Instruction: Using the provided web search results", response.choices[0].message.content) | ||
except DuckDuckGoSearchException as e: | ||
self.skipTest(f'DuckDuckGoSearchException: {e}') | ||
|
||
async def test_search3(self): | ||
client = AsyncClient(provider=YieldProviderMock) | ||
tool_calls = [ | ||
{ | ||
"function": { | ||
"arguments": json.dumps({ | ||
"query": "search query", # content of last message: messages[-1]["content"] | ||
"max_results": 5, # maximum number of search results | ||
"max_words": 500, # maximum number of used words from search results for generating the response | ||
}), | ||
"name": "search_tool" | ||
}, | ||
"type": "function" | ||
} | ||
] | ||
try: | ||
response = await client.chat.completions.create([{"content": "", "role": "user"}], "", tool_calls=tool_calls) | ||
self.assertIn("Instruction: Using the provided web search results", response.choices[0].message.content) | ||
except DuckDuckGoSearchException as e: | ||
self.skipTest(f'DuckDuckGoSearchException: {e}') |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.