| /* |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| */ |
| |
| export const BASE_PATH = process.env.NEXT_PUBLIC_BASE_PATH || ""; |
| |
| export const GITHUB_REPO = "https://github.com/apache/burr"; |
| export const DOCS_URL = "/docs"; |
| export const DISCORD_URL = "https://discord.gg/6Zy2DwP4f3"; |
| export const TWITTER_URL = "https://x.com/burr_framework"; |
| |
| export const NAV_LINKS = [ |
| { label: "Features", href: "/#features" }, |
| { label: "Integrations", href: "/#integrations" }, |
| { label: "Community", href: "/#community" }, |
| { label: "Download", href: "/downloads" }, |
| { label: "Docs", href: DOCS_URL, external: true }, |
| ]; |
| |
| export const FEATURES = [ |
| { |
| icon: "Zap", |
| title: "Simple Python API", |
| description: |
| "Define your application as a set of actions and transitions. No DSL, no YAML — just Python functions and decorators.", |
| }, |
| { |
| icon: "Eye", |
| title: "Built-in Observability", |
| description: |
| "The Burr UI lets you monitor, debug, and trace every step of your application in real time. See state changes as they happen.", |
| }, |
| { |
| icon: "Database", |
| title: "Persistence & State Management", |
| description: |
| "Automatically persist state to disk, databases, or custom backends. Resume applications from where they left off.", |
| }, |
| { |
| icon: "UserCheck", |
| title: "Human-in-the-Loop", |
| description: |
| "Pause execution and wait for human input at any step. Perfect for approval workflows and interactive agents.", |
| }, |
| { |
| icon: "GitBranch", |
| title: "Branching & Parallelism", |
| description: |
| "Run actions in parallel, fan out / fan in, and build complex DAGs. Compose sub-applications for modular design.", |
| }, |
| { |
| icon: "FlaskConical", |
| title: "Testing & Replay", |
| description: |
| "Replay past runs, unit test individual actions, and validate state transitions. Build confidence in your AI systems.", |
| }, |
| ]; |
| |
| export const INTEGRATIONS = [ |
| { name: "OpenAI", category: "LLM" }, |
| { name: "Anthropic", category: "LLM" }, |
| { name: "LangChain", category: "Framework" }, |
| { name: "Hamilton", category: "Framework" }, |
| { name: "Streamlit", category: "UI" }, |
| { name: "FastAPI", category: "Serving" }, |
| { name: "Haystack", category: "Framework" }, |
| { name: "Instructor", category: "LLM" }, |
| { name: "Pydantic", category: "Validation" }, |
| { name: "PostgreSQL", category: "Storage" }, |
| ]; |
| |
| export const TESTIMONIALS = [ |
| { |
| name: "Ashish Ghosh", |
| title: "CTO", |
| company: "Peanut Robotics", |
| logo: "https://www.google.com/s2/favicons?domain=peanutrobotics.com&sz=64", |
| quote: |
| "After evaluating several other obfuscating LLM frameworks, their elegant yet comprehensive state management solution proved to be the powerful answer to rolling out robots driven by AI decision making.", |
| }, |
| { |
| name: "Ishita", |
| title: "Founder", |
| company: "Watto.ai", |
| logo: "https://www.google.com/s2/favicons?domain=watto.ai&sz=64", |
| quote: |
| "Using Burr is a no-brainer if you want to build a modular AI application. It is so easy to build with and I especially love their UI which makes debugging a piece of cake. And the always ready to help team is the cherry on top.", |
| }, |
| { |
| name: "Matthew Rideout", |
| title: "Staff Software Engineer", |
| company: "Paxton AI", |
| logo: "https://www.google.com/s2/favicons?domain=paxton.ai&sz=64", |
| quote: |
| "I just came across Burr and I'm like WOW, this seems like you guys predicted this exact need when building this. No weird esoteric concepts just because it's AI.", |
| }, |
| { |
| name: "Rinat Gareev", |
| title: "Senior Solutions Architect", |
| company: "Provectus", |
| logo: "https://www.google.com/s2/favicons?domain=provectus.com&sz=64", |
| quote: |
| "Burr's state management part is really helpful for creating state snapshots and build debugging, replaying and even building evaluation cases around that.", |
| }, |
| { |
| name: "Hadi Nayebi", |
| title: "Co-founder", |
| company: "CognitiveGraphs", |
| logo: null, |
| quote: |
| "I have been using Burr over the past few months, and compared to many agentic LLM platforms out there (e.g. LangChain, CrewAi, AutoGen, Agency Swarm, etc), Burr provides a more robust framework for designing complex behaviors.", |
| }, |
| { |
| name: "Aditya K.", |
| title: "DS Architect", |
| company: "TaskHuman", |
| logo: `${BASE_PATH}/logos/taskhuman.svg`, |
| quote: |
| "Moving from LangChain to Burr was a game-changer! It took me just a few hours to get started with Burr, compared to the days and weeks I spent trying to navigate LangChain. I pitched Burr to my teammates, and we pivoted our entire codebase to it.", |
| }, |
| { |
| name: "Reddit User", |
| title: "Developer", |
| company: "r/LocalLlama", |
| logo: null, |
| quote: |
| "Of course, you can use it [LangChain], but whether it's really production-ready and improves the time from code-to-prod, we've been doing LLM apps for two years, and the answer is no. Honestly, take a look at Burr. Thank me later.", |
| }, |
| ]; |
| |
| export const CODE_SNIPPETS: Record<"chatbot" | "agent" | "statemachine", string> = { |
| chatbot: `from burr.core import action, State, ApplicationBuilder |
| |
| @action(reads=["messages"], writes=["messages"]) |
| def chat(state: State, llm_client) -> State: |
| response = llm_client.chat(state["messages"]) |
| return state.update( |
| messages=[*state["messages"], response] |
| ) |
| |
| app = ( |
| ApplicationBuilder() |
| .with_actions(chat) |
| .with_transitions(("chat", "chat")) |
| .with_state(messages=[]) |
| .with_tracker("local") |
| .build() |
| ) |
| |
| app.run(halt_after=["chat"], inputs={"llm_client": client})`, |
| |
| agent: `from burr.core import action, State, ApplicationBuilder |
| |
| @action(reads=["query", "tools"], writes=["result"]) |
| def plan(state: State, llm) -> State: |
| plan = llm.plan(state["query"], state["tools"]) |
| return state.update(result=plan) |
| |
| @action(reads=["result"], writes=["output"]) |
| def execute(state: State) -> State: |
| output = run_tool(state["result"]) |
| return state.update(output=output) |
| |
| @action(reads=["output", "query"], writes=["response"]) |
| def synthesize(state: State, llm) -> State: |
| response = llm.summarize(state["output"], state["query"]) |
| return state.update(response=response) |
| |
| app = ( |
| ApplicationBuilder() |
| .with_actions(plan, execute, synthesize) |
| .with_transitions( |
| ("plan", "execute"), |
| ("execute", "synthesize"), |
| ) |
| .with_tracker("local") |
| .build() |
| )`, |
| |
| statemachine: `from burr.core import action, State, ApplicationBuilder |
| |
| @action(reads=["counter"], writes=["counter"]) |
| def increment(state: State) -> State: |
| return state.update(counter=state["counter"] + 1) |
| |
| @action(reads=["counter"], writes=["counter"]) |
| def decrement(state: State) -> State: |
| return state.update(counter=state["counter"] - 1) |
| |
| def should_increment(state: State) -> bool: |
| return state["counter"] < 10 |
| |
| def should_decrement(state: State) -> bool: |
| return state["counter"] >= 10 |
| |
| app = ( |
| ApplicationBuilder() |
| .with_actions(increment, decrement) |
| .with_transitions( |
| ("increment", "decrement", should_decrement), |
| ("increment", "increment", should_increment), |
| ("decrement", "increment"), |
| ) |
| .with_state(counter=0) |
| .with_tracker("local") |
| .build() |
| )`, |
| }; |