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