parent
9a5ee78af1
commit
cca66e6b00
@ -0,0 +1,74 @@
|
||||
# 🪄 This is your project's Sourcery configuration file.
|
||||
|
||||
# You can use it to get Sourcery working in the way you want, such as
|
||||
# ignoring specific refactorings, skipping directories in your project,
|
||||
# or writing custom rules.
|
||||
|
||||
# 📚 For a complete reference to this file, see the documentation at
|
||||
# https://docs.sourcery.ai/Configuration/Project-Settings/
|
||||
|
||||
# This file was auto-generated by Sourcery on 2023-10-06 at 17:14.
|
||||
|
||||
version: '1' # The schema version of this config file
|
||||
|
||||
ignore: # A list of paths or files which Sourcery will ignore.
|
||||
- .git
|
||||
- venv
|
||||
- .venv
|
||||
- env
|
||||
- .env
|
||||
- .tox
|
||||
- node_modules
|
||||
- vendor
|
||||
|
||||
rule_settings:
|
||||
enable:
|
||||
- default
|
||||
disable: [] # A list of rule IDs Sourcery will never suggest.
|
||||
rule_types:
|
||||
- refactoring
|
||||
- suggestion
|
||||
- comment
|
||||
python_version: '3.9' # A string specifying the lowest Python version your project supports. Sourcery will not suggest refactorings requiring a higher Python version.
|
||||
|
||||
# rules: # A list of custom rules Sourcery will include in its analysis.
|
||||
# - id: no-print-statements
|
||||
# description: Do not use print statements in the test directory.
|
||||
# pattern: print(...)
|
||||
# language: python
|
||||
# replacement:
|
||||
# condition:
|
||||
# explanation:
|
||||
# paths:
|
||||
# include:
|
||||
# - test
|
||||
# exclude:
|
||||
# - conftest.py
|
||||
# tests: []
|
||||
# tags: []
|
||||
|
||||
# rule_tags: {} # Additional rule tags.
|
||||
|
||||
# metrics:
|
||||
# quality_threshold: 25.0
|
||||
|
||||
# github:
|
||||
# labels: []
|
||||
# ignore_labels:
|
||||
# - sourcery-ignore
|
||||
# request_review: author
|
||||
# sourcery_branch: sourcery/{base_branch}
|
||||
|
||||
# clone_detection:
|
||||
# min_lines: 3
|
||||
# min_duplicates: 2
|
||||
# identical_clones_only: false
|
||||
|
||||
# proxy:
|
||||
# url:
|
||||
# ssl_certs_file:
|
||||
# no_ssl_verify: false
|
||||
|
||||
# coding_assistant:
|
||||
# project_description: ''
|
||||
# enabled:
|
@ -0,0 +1,112 @@
|
||||
import discord
|
||||
from discord.ext import commands
|
||||
|
||||
import os
|
||||
import openai
|
||||
import requests
|
||||
|
||||
from swarms.agents import Agent
|
||||
from swarms.agents.memory import VectorStoreRetriever
|
||||
from swarms.tools.base import BaseTool
|
||||
|
||||
"""
|
||||
Custom tools for web search and memory retrieval.
|
||||
|
||||
This code snippet defines two custom tools, `WebSearchTool` and `MemoryTool`, which are subclasses of the `BaseTool` class. The `WebSearchTool` makes a request to a search engine API and extracts the text from the top result. The `MemoryTool` retrieves relevant documents from a vector store and extracts the text from the document.
|
||||
|
||||
Example Usage:
|
||||
```python
|
||||
web_search = WebSearchTool()
|
||||
result = web_search.run("python programming")
|
||||
print(result)
|
||||
# Output: The text from the top search result for "python programming"
|
||||
|
||||
memory_tool = MemoryTool(retriever)
|
||||
result = memory_tool.run("python programming")
|
||||
print(result)
|
||||
# Output: The text from the relevant document retrieved from the vector store for "python programming"
|
||||
```
|
||||
|
||||
Inputs:
|
||||
- `query` (str): The search query or document retrieval query.
|
||||
|
||||
Flow:
|
||||
1. The `WebSearchTool` makes a request to the Bing search engine API with the provided query.
|
||||
2. The API response is stored in the `response` variable.
|
||||
3. The text from the top search result is extracted from the API response and stored in the `text` variable.
|
||||
4. The `MemoryTool` retrieves relevant documents from the vector store using the provided query.
|
||||
5. The relevant document is stored in the `relevant_doc` variable.
|
||||
6. The text from the relevant document is extracted and stored in the `text` variable.
|
||||
|
||||
Outputs:
|
||||
- `text` (str): The extracted text from the top search result or relevant document.
|
||||
"""
|
||||
|
||||
# Custom tools
|
||||
class WebSearchTool(BaseTool):
|
||||
|
||||
def run(self, query: str) -> str:
|
||||
|
||||
# Make request to search engine API
|
||||
response = requests.get(
|
||||
"https://api.bing.com/v7.0/search",
|
||||
params={
|
||||
"q": query,
|
||||
"count": 1
|
||||
},
|
||||
headers={
|
||||
"Ocp-Apim-Subscription-Key": "YOUR_API_KEY"
|
||||
}
|
||||
)
|
||||
|
||||
# Extract text from top result
|
||||
top_result = response.json()["webPages"]["value"][0]
|
||||
return top_result["snippet"]
|
||||
|
||||
|
||||
class MemoryTool(BaseTool):
|
||||
|
||||
def __init__(self, retriever):
|
||||
self.retriever = retriever
|
||||
|
||||
def run(self, query: str) -> str:
|
||||
|
||||
# Retrieve relevant document from vectorstore
|
||||
docs = self.retriever.retrieve(query)
|
||||
relevant_doc = docs[0]
|
||||
|
||||
# Extract text from document
|
||||
text = relevant_doc.text
|
||||
|
||||
return text
|
||||
|
||||
# Discord bot setup
|
||||
intents = discord.Intents.default()
|
||||
bot = commands.Bot(command_prefix='!', intents=intents)
|
||||
|
||||
# OpenAI API setup
|
||||
openai.api_key = os.getenv("OPENAI_API_KEY")
|
||||
|
||||
# Memory setup
|
||||
vectorstore_client = VectorStoreClient()
|
||||
retriever = VectorStoreRetriever(vectorstore_client)
|
||||
|
||||
# Tools setup
|
||||
web_search = WebSearchTool()
|
||||
memory = MemoryTool(retriever)
|
||||
tools = [web_search, memory]
|
||||
|
||||
# Create the agent
|
||||
agent = Agent(
|
||||
name="DiscordAssistant",
|
||||
llm=openai,
|
||||
memory=retriever,
|
||||
tools=tools
|
||||
)
|
||||
|
||||
@bot.command()
|
||||
async def query(ctx, *, input):
|
||||
response = agent.run(input)
|
||||
await ctx.send(response)
|
||||
|
||||
bot.run(os.getenv("DISCORD_BOT_TOKEN"))
|
Loading…
Reference in new issue