Skip to content

duck_duck_go

__all__ = ['DuckDuckGoWebSearchDriver'] module-attribute

DuckDuckGoWebSearchDriver

Bases: BaseWebSearchDriver

Source code in griptape/drivers/web_search/duck_duck_go_web_search_driver.py
@define
class DuckDuckGoWebSearchDriver(BaseWebSearchDriver):
    language: str = field(default="en", kw_only=True)
    country: str = field(default="us", kw_only=True)
    _client: DDGS = field(default=None, kw_only=True, alias="client", metadata={"serializable": False})

    @lazy_property()
    def client(self) -> DDGS:
        return import_optional_dependency("duckduckgo_search").DDGS()

    def search(self, query: str, **kwargs) -> ListArtifact:
        try:
            results = self.client.text(
                query, region=f"{self.language}-{self.country}", max_results=self.results_count, **kwargs
            )
            return ListArtifact(
                [
                    TextArtifact(
                        json.dumps({"title": result["title"], "url": result["href"], "description": result["body"]}),
                    )
                    for result in results
                ],
            )
        except Exception as e:
            raise Exception(f"Error searching '{query}' with DuckDuckGo: {e}") from e

country: str = field(default='us', kw_only=True) class-attribute instance-attribute

language: str = field(default='en', kw_only=True) class-attribute instance-attribute

client()

Source code in griptape/drivers/web_search/duck_duck_go_web_search_driver.py
@lazy_property()
def client(self) -> DDGS:
    return import_optional_dependency("duckduckgo_search").DDGS()

search(query, **kwargs)

Source code in griptape/drivers/web_search/duck_duck_go_web_search_driver.py
def search(self, query: str, **kwargs) -> ListArtifact:
    try:
        results = self.client.text(
            query, region=f"{self.language}-{self.country}", max_results=self.results_count, **kwargs
        )
        return ListArtifact(
            [
                TextArtifact(
                    json.dumps({"title": result["title"], "url": result["href"], "description": result["body"]}),
                )
                for result in results
            ],
        )
    except Exception as e:
        raise Exception(f"Error searching '{query}' with DuckDuckGo: {e}") from e