Skip to main content

LangChain integration with Desearch API for search and data-fetching tools.

Project description

LangChain Desearch Integration

This project integrates the Desearch API with LangChain tools to enable various search and data-fetching functionalities, such as web searches, Twitter data retrieval, and AI-powered searches.

Features

  • Grouped Tools:
    • Search Tools: General-purpose search tools for AI, web, and Twitter searches.
    • Twitter Tools: Tools specifically for Twitter-related operations.

Installation

Install the package using pip:

pip install langchain-desearch

Usage

Grouped Tools

Search Tools

The search_tools group contains tools for general-purpose searches:

  • DesearchTool: Perform AI searches, web link searches, and Twitter post searches.
  • BasicWebSearchTool: Conduct basic web searches.
  • BasicTwitterSearchTool: Perform advanced Twitter searches with filters.

Twitter Tools

The twitter_tools group contains tools specifically for Twitter-related operations:

  • BasicTwitterSearchTool: Perform a basic Twitter search using Desearch.
  • FetchTweetsByUrlsTool: Retrieve tweets from specific URLs.
  • FetchTweetsByIdTool: Fetch tweets using their unique IDs.
  • FetchLatestTweetsTool: Get the latest tweets from a specific user.
  • FetchTweetsAndRepliesByUserTool: Retrieve tweets and replies from a user.
  • FetchRepliesByPostTool: Fetch replies to a specific Twitter post.
  • FetchRetweetsByPostTool: Retrieve retweets of a specific post.
  • FetchTwitterUserTool: Get detailed information about a Twitter user.

Examples

Using Tools

from langchain_desearch.tools import DesearchTool, BasicWebSearchTool, BasicTwitterSearchTool

# Example 1: Using DesearchTool
tool = DesearchTool()
result = tool._run(
    prompt="Bittensor",
    tool="desearch_web",
    model="NOVA",
    date_filter="PAST_24_HOURS",
    streaming=False
)
print(result)

# Example 2: Using BasicWebSearchTool
tool = BasicWebSearchTool()
result = tool._run(
    query="Latest news on AI",
    num=5,
    start=1
)
print(result)

# Example 3: Using BasicTwitterSearchTool
tool = BasicTwitterSearchTool()
result = tool._run(
    query="AI trends",
    sort="Top",
    count=5
)
print(result)

Using RAG (Retrieval-Augmented Generation)

from langchain_core.prompts import PromptTemplate, ChatPromptTemplate
from langchain_core.runnables import RunnableLambda, RunnablePassthrough, RunnableParallel
from langchain_core.output_parsers import StrOutputParser
from langchain_desearch.tools import DesearchTool
from langchain_deepseek import ChatDeepSeek

# Setup Desearch Tool
desearch_tool = DesearchTool()

# Template to wrap Desearch output
document_prompt = PromptTemplate.from_template("""
<source>
    <result>{result}</result>
</source>
""")

# Retrieval chain using DesearchTool
def get_desearch_context(prompt: str) -> str:
    return desearch_tool._run(prompt=prompt, tool="desearch_web", model="NOVA")

retrieval_chain = RunnableLambda(lambda query: {
    "result": get_desearch_context(query)
}) | document_prompt | (lambda docs: docs.text)

# Prompt for RAG generation
generation_prompt = ChatPromptTemplate.from_messages([
    ("system", "You are an expert research assistant. You use xml-formatted context to research people's questions."),
    ("human", """
Please answer the following query based on the provided context. Please cite your sources at the end of your response.:

Query: {query}
---
<context>
{context}
</context>
""")
])

# Use DeepSeek for LLM
llm = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0.7,
    max_tokens=None,
    timeout=None,
    max_retries=2
)

output_parser = StrOutputParser()

# Final chain
chain = RunnableParallel({
    "query": RunnablePassthrough(),
    "context": retrieval_chain,
}) | generation_prompt | llm | output_parser

# Run it!
query = "Recent trends in AI safety research"
result = chain.invoke(query)
print(result)

Using the LangChain Agent

from langchain_desearch.agent import create_search_agent
from langchain_deepseek import ChatDeepSeek

# Create a DeepSeek LLM instance
llm = ChatDeepSeek(
    model="deepseek-chat",
    temperature=0.7,
    max_tokens=None,
    timeout=None,
    max_retries=2
)

# Initialize the search agent
search_agent = create_search_agent(llm=llm)

# Use the agent to perform a task
state = {
    "input_message": "What's the latest news on AI?",
}
response = search_agent.invoke(state)
print(f"Agent Response: {response['output']}")

Running Tests

Dummy Tests

Run the dummy tests to verify the tools' functionality with mocked data:

pytest tests/test_tools.py

Real API Tests

Run the real tests to verify the tools' functionality with the Desearch API:

pytest tests/test_tools_real.py

Note: Ensure you have a valid DESEARCH_API_KEY in your .env file before running real tests.

Project Structure

langchain_desearch/
├── langchain_desearch/
│   ├── __init__.py
│   ├── tools.py
│   ├── search_tools.py
│   ├── agent.py
├── examples/
│   ├── tools.py
│   ├── RAG.py
│   ├── agent.py
├── tests/
│   ├── test_tools.py
│   ├── test_tools_real.py
├── .env
├── README.md
├── setup.py
├── requirements.txt

Contributing

  1. Fork the repository.
  2. Create a new branch for your feature or bug fix:
    git checkout -b feature-name
    
  3. Commit your changes:
    git commit -m "Add feature-name"
    
  4. Push to your branch:
    git push origin feature-name
    
  5. Create a pull request.

License

This project is licensed under the MIT License. See the LICENSE file for details.

Contact

For questions or support, please contact [your-email@example.com].

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

langchain_desearch-1.0.4.tar.gz (11.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

langchain_desearch-1.0.4-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file langchain_desearch-1.0.4.tar.gz.

File metadata

  • Download URL: langchain_desearch-1.0.4.tar.gz
  • Upload date:
  • Size: 11.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.3

File hashes

Hashes for langchain_desearch-1.0.4.tar.gz
Algorithm Hash digest
SHA256 f136081ecfad443c1114c5ddbb9f09ee84f8bad53ea6eb4899e6cd5eb181688f
MD5 f5bd6b510bd66ce4f312b91d6678565e
BLAKE2b-256 7237d30d9b185e8aeba9dc5a4065825cb624d7ed4ab2513929d9f338c04c054c

See more details on using hashes here.

File details

Details for the file langchain_desearch-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for langchain_desearch-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 4e616b7f983797402a1a4fcd2c769804a6bada3528ead0f2e94030c6ba4e04eb
MD5 2b2abb097a1d2502a5e1a5961940e3d6
BLAKE2b-256 b21fd26bc1b1ebb9a743400738a282a07ecf6e728d750e53ab3d60b969f80a8e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page