Package: galaxybrain
GalaxyBrainTurn LLMs into mighty shape rotators!GalaxyBrain is a Python framework for creating AI workflows augmented with tools for external APIs such as searches, calculators, email, and many others . Initially, we focus on supporting large language models (LLMs) starting with OpenAI's GPT. With GalaxyBrain, developers can define workflow steps, tools, LLM rules, result validators, and more. The framework also enhances LLM workflows by providing memory capabilities, enabling easy handling of state between steps.Please note that GalaxyBrain is an experimental project in early development. Its APIs and documentation are subject to change. For usage examples, check out theexamples repository.Getting StartedFirst, install the library:pip install galaxybrainCurrently, GalaxyBrain only supports OpenAI APIs, so you'll need toget an API keyand keep it on your path asOPENAI_API_KEYor pass it to the driver object manually. For example:importosfromdotenvimportload_dotenvfromgalaxybrain.driversimportOpenAiPromptDriverload_dotenv()driver=OpenAiPromptDriver(os.environ.get('OPENAI_KEY'))Working with GalaxyBrainSo...what can you do with GalaxyBrain?📋 Define and Validate Prompt RulesYou can define rules that will be passed to the language model in the prompt stack:chat_rules=[rules.json.return_valid_json(),rules.json.put_answer_in_field("Names"),rules.meta.be_truthful(),rules.meta.your_name_is("GalaxyGPT"),Rule("only use information from fantasy novels")]driver=OpenAiPromptDriver(temperature=0.5,user="demo")workflow=Workflow(rules=chat_rules,prompt_driver=driver)workflow.add_step(PromptStep("Give me ideas for two names from the same setting"))workflow.start()# {#     "Names": ["Frodo Baggins", "Gandalf the Grey"]# }workflow.add_step(PromptStep("Give me 3 more from another setting"))workflow.resume()# {#     "Names": ["Dumbledore", "Luna Lovegood", "Harry Potter"]# }You can dynamically pass arguments to the prompt by using Jinja templates:PromptStep("tell me about {{ topic }}",context={"topic":"the hobbit novel"})By default, the context object contains the following fields:worklofw,input,parent, andchild.Some rules have explicit validators (e.g., checking for valid JSON). You can use the built-in validator to run them:validator=Validator(workflow.last_step().output,chat_rules)ifvalidator.validate():print("Rule validations passed")else:print("Rule validations failed")print(validator.failed_rules())⚙️ Use ToolsUseToolStepto pass external tools to the LLM:tools={Wiki(),DataScientist(),Calculator(),Email(host="localhost",port=1025,from_email="my@email.com",password="",use_ssl=False)}workflow.add_steps(ToolStep("generate a random 4x4 matrix"),ToolStep("Research world events in 2023 and send an executive summary to me@email.com"))GalaxyBrain uses theReActtechnique to implement reasoning and acting in LLMs.💾 Memorize and Summarize WorkflowsGalaxyBrainWorkflowuses unbounded memory by default, but you can passBufferMemoryorSummaryMemoryto it explicitly:workflow=Workflow(prompt_driver=OpenAiPromptDriver(),memory=BufferMemory(buffer_size=1))BufferMemorywill keep a sliding window of steps that are used to construct a prompt. This works great for shorter conversations but falls short if the whole workflow context needs to be present. UseSummaryMemoryto address that:driver=OpenAiPromptDriver()workflow=Workflow(prompt_driver=driver,memory=SummaryMemory(summarizer=CompletionDriverSummarizer(driver=driver),offset=3))This will progressively summarize the whole conversation except for the latest three steps.ContributingContributions in the form of bug reports, feature ideas, or pull requests are super welcome! Take a look at the current issues and if you'd like to help please submit a pull request with some tests.LicenseGalaxyBrain is available under the Apache 2.0 License.