griptape-ai / griptape-core

Python framework for LLM middleware tools. Build once, run anywhere: LangChain, ChatGPT Plugins, Fixie.ai, etc.
https://griptape.readthedocs.io
Apache License 2.0
9 stars 0 forks source link

Check for None type ENV variables in Griptape tools #2

Closed kyleroche closed 1 year ago

kyleroche commented 1 year ago

I'm finding inconsistency in checking for a None value in a method of a griptape tool. The following test script can be used to replicate. When invoking the tool function directly, the None value is checked properly. When passed to the LLM, auth error is received.

import json
from decouple import config
from griptape.core.executors import LocalExecutor
from griptape.tools import WebScraper, Calculator, EmailClient
from skatepark import utils
from skatepark.drivers import OpenAiPromptDriver
from skatepark.memory import PipelineMemory
from skatepark.steps import PromptStep, ToolkitStep
from skatepark.structures import Pipeline
from skatepark.utils import ToolLoader

scraper = WebScraper(
    openai_api_key=config("OPENAI_API_KEY")
)
calculator = Calculator()
email_client = EmailClient(
    smtp_host=config("SMTP_HOST"),
    smtp_port=config("SMTP_PORT"),
    smtp_password=config("SMTP_PASSWORD"),
    smtp_from_email=config("SMTP_FROM_EMAIL"),
    smtp_use_ssl=config("SMTP_USE_SSL", cast=bool),
    imap_url=config("IMAP_URL"),
    imap_user=config("IMAP_USER"),
    password=config("EMAIL_PASSWORD"),
    #imap_password=config("IMAP_PASSWORD"),
    email_max_retrieve_count=config("EMAIL_MAX_RETRIEVE_COUNT", cast=int)
)

pipeline = Pipeline(
    memory=PipelineMemory(),
    prompt_driver=OpenAiPromptDriver(
        model="gpt-4"
    ),
    tool_loader=ToolLoader(
        tools=[calculator, scraper, email_client]
    )
)

pipeline.add_steps(
    ToolkitStep(
        "get emails from my inbox with a subject containing the word test",
        tool_names=[email_client.name]
    )
)
# print(tool_executor.execute(calculator.calculate, b"3*5").decode())
email_test_input = {
    "label": "INBOX",
    "key": "SUBJECT",
    "search_criteria": "test",
    "retrieve_count": 10
}

print(email_client.retrieve(json.dumps(email_test_input).encode()))

pipeline.run()
print(pipeline.memory.runs.pop().output)
#print(utils.Conversation(pipeline.memory.runs.pop().output).to_string())
vasinov commented 1 year ago

The issue should be now resolved in v0.9.1.