mirror of
https://github.com/Canner/WrenAI.git
synced 2026-08-29 00:03:22 +08:00
Rename wren ai (#441)
* rename from WrenAI to Wren AI * rename from WrenAI to Wren AI
This commit is contained in:
@@ -36,7 +36,7 @@ docker logs wrenai-ibis-server-1 >& wrenai-ibis-server-1.log
|
||||
- OS: [e.g. iOS]
|
||||
- Browser [e.g. chrome, safari]
|
||||
|
||||
**WrenAI Information**
|
||||
**Wren AI Information**
|
||||
- Version: [e.g, 0.1.0]
|
||||
|
||||
**Additional context**
|
||||
|
||||
@@ -629,7 +629,7 @@ to attach them to the start of each source file to most effectively
|
||||
state the exclusion of warranty; and each file should have at least
|
||||
the "copyright" line and a pointer to where the full notice is found.
|
||||
|
||||
WrenAI is a Text-to-SQL solution for data teams to get results
|
||||
Wren AI is a Text-to-SQL solution for data teams to get results
|
||||
and insights faster by asking business questions without writing SQL.
|
||||
Copyright (C) 2024 Canner, Inc.
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
<source media="(prefers-color-scheme: light)" srcset="./misc/wrenai_logo.png">
|
||||
<img src="./misc/wrenai_logo.png">
|
||||
</picture>
|
||||
<h1 align="center">WrenAI</h1>
|
||||
<h1 align="center">Wren AI</h1>
|
||||
</a>
|
||||
</p>
|
||||
|
||||
@@ -29,13 +29,13 @@
|
||||
</p>
|
||||
|
||||
|
||||
> WrenAI is a **text-to-SQL solution** for data teams to get results and insights faster by asking business questions without writing SQL.
|
||||
> Wren AI is a **text-to-SQL solution** for data teams to get results and insights faster by asking business questions without writing SQL.
|
||||
|
||||

|
||||
|
||||
## 🕶 Try It Live!
|
||||
|
||||
[Play around with WrenAI yourself!](https://demo.getwren.ai/)
|
||||
[Play around with Wren AI yourself!](https://demo.getwren.ai/)
|
||||
|
||||
|
||||
## 🎯 Our Vision & Mission
|
||||
@@ -50,15 +50,15 @@ WrenAI’s mission is to democratize data by bringing text-to-SQL ability to any
|
||||
|
||||
### 1. Indexing With Semantics
|
||||
|
||||
> WrenAI has implemented a [semantic engine architecture](https://blog.getwren.ai/how-we-design-our-semantic-engine-for-llms-84a00e6e3baa) to provide the LLM context of your business; you can easily establish a logical presentation layer on your data schema that helps LLM learn more about your business context.
|
||||
> Wren AI has implemented a [semantic engine architecture](https://blog.getwren.ai/how-we-design-our-semantic-engine-for-llms-84a00e6e3baa) to provide the LLM context of your business; you can easily establish a logical presentation layer on your data schema that helps LLM learn more about your business context.
|
||||
|
||||
### 2. Augment LLM Prompts
|
||||
|
||||
> With WrenAI, you can process metadata, schema, terminology, data relationships, and the logic behind calculations and aggregations with [“Modeling Definition Language” (MDL)](https://docs.getwren.ai/engine/concept/what_is_mdl), reducing duplicate coding and simplifying data joins.
|
||||
> With Wren AI, you can process metadata, schema, terminology, data relationships, and the logic behind calculations and aggregations with [“Modeling Definition Language” (MDL)](https://docs.getwren.ai/engine/concept/what_is_mdl), reducing duplicate coding and simplifying data joins.
|
||||
|
||||
### 3. Generate Insights
|
||||
|
||||
> When starting a new conversation in WrenAI, your question is used to find the most relevant tables. From these, LLM generates three relevant questions for the user to choose from. You can also ask follow-up questions to get deeper insights.
|
||||
> When starting a new conversation in Wren AI, your question is used to find the most relevant tables. From these, LLM generates three relevant questions for the user to choose from. You can also ask follow-up questions to get deeper insights.
|
||||
|
||||
### 4. Self-Learning Feedback Loop (Coming Soon)
|
||||
|
||||
@@ -74,13 +74,13 @@ WrenAI’s mission is to democratize data by bringing text-to-SQL ability to any
|
||||
|
||||

|
||||
|
||||
## 🤔 Why WrenAI?
|
||||
## 🤔 Why Wren AI?
|
||||
|
||||
We focus on providing an open, secure, and reliable text-to-SQL solution for everyone.
|
||||
|
||||
### 1. Turnkey Solution
|
||||
|
||||
> WrenAI makes it easy to onboard your data. Discover and analyze your data with our user interface. Effortlessly generate results without needing to code.
|
||||
> Wren AI makes it easy to onboard your data. Discover and analyze your data with our user interface. Effortlessly generate results without needing to code.
|
||||
|
||||
### 2. Secure By Design
|
||||
|
||||
@@ -88,13 +88,13 @@ We focus on providing an open, secure, and reliable text-to-SQL solution for eve
|
||||
|
||||
### 3. Open-Source
|
||||
|
||||
> Deploy WrenAI anywhere you like on your own data, LLM APIs, and environment, it's free.
|
||||
> Deploy Wren AI anywhere you like on your own data, LLM APIs, and environment, it's free.
|
||||
|
||||
## 🤖 WrenAI's Architecture
|
||||
## 🤖 Wren AI's Architecture
|
||||
|
||||
WrenAI consists of three core services:
|
||||
Wren AI consists of three core services:
|
||||
|
||||
- ***[Wren UI](https://github.com/Canner/WrenAI/tree/main/wren-ui):*** An intuitive user interface for asking questions, defining data relationships, and integrating data sources within WrenAI's framework.
|
||||
- ***[Wren UI](https://github.com/Canner/WrenAI/tree/main/wren-ui):*** An intuitive user interface for asking questions, defining data relationships, and integrating data sources within Wren AI's framework.
|
||||
|
||||
- ***[Wren AI Service](https://github.com/Canner/WrenAI/tree/main/wren-ai-service):*** Processes queries using a vector database for context retrieval, guiding LLMs to produce precise SQL outputs.
|
||||
|
||||
@@ -115,22 +115,22 @@ WrenAI consists of three core services:
|
||||
|
||||
## 🚧 Project Status
|
||||
|
||||
WrenAI is currently in ***alpha version***. The project team is actively working on progress and aiming to release new versions at least biweekly.
|
||||
Wren AI is currently in ***alpha version***. The project team is actively working on progress and aiming to release new versions at least biweekly.
|
||||
|
||||
## 🚀 Getting Started
|
||||
|
||||
Using WrenAI is super simple, you can setup within 3 minutes, and start to interact with your own data!
|
||||
Using Wren AI is super simple, you can setup within 3 minutes, and start to interact with your own data!
|
||||
|
||||
- Visit our [Installation Guide of WrenAI](http://docs.getwren.ai/installation).
|
||||
- Visit the [Usage Guides](http://docs.getwren.ai/guide/connect/overview) to learn more about how to use WrenAI.
|
||||
- Visit our [Installation Guide of Wren AI](http://docs.getwren.ai/installation).
|
||||
- Visit the [Usage Guides](http://docs.getwren.ai/guide/connect/overview) to learn more about how to use Wren AI.
|
||||
|
||||
## 📚 Documentation
|
||||
|
||||
Visit [WrenAI documentation](https://docs.getwren.ai) to view the full documentation.
|
||||
Visit [Wren AI documentation](https://docs.getwren.ai) to view the full documentation.
|
||||
|
||||
## ⭐️ Community
|
||||
|
||||
- Welcome to our [Discord server](https://discord.gg/5DvshJqG8Z) to give us feedback!
|
||||
- If there is any issues, please visit [GitHub Issues](https://github.com/Canner/WrenAI/issues).
|
||||
|
||||
Do note that our [Code of Conduct](./CODE_OF_CONDUCT.md) applies to all WrenAI community channels. Users are **highly encouraged** to read and adhere to them to avoid repercussions.
|
||||
Do note that our [Code of Conduct](./CODE_OF_CONDUCT.md) applies to all Wren AI community channels. Users are **highly encouraged** to read and adhere to them to avoid repercussions.
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
# Deployment of WrenAI to Kubernetes with Kustomization
|
||||
1. Ensure you satisfy the dependencies required to deploy WrenAI.
|
||||
# Deployment of Wren AI to Kubernetes with Kustomization
|
||||
1. Ensure you satisfy the dependencies required to deploy Wren AI.
|
||||
2. Adjust the values and manifests accordingly to fit your Kubernetes environment.
|
||||
3. Deploy Secrets separately.
|
||||
4. Deploy the inflated kustomized app.
|
||||
@@ -42,8 +42,8 @@ kubectl get pods -n wren
|
||||
```
|
||||
|
||||
### Notes on kustomization:
|
||||
- `deployment/kustomizations/kustomization.yaml` is the main file responsible for versions of other apps such as Qdrant and PostgreSQL, version of your WrenAI app. It also combines resourses from the manifest such as ConfigMaps, Deployments, and Services. And example Ingress, Certificates and Secrets.
|
||||
- `deployment/kustomizations/base` is the base folder that contains the core WrenAI manifests, its less likely you need to modify them, but check just in case
|
||||
- `deployment/kustomizations/kustomization.yaml` is the main file responsible for versions of other apps such as Qdrant and PostgreSQL, version of your Wren AI app. It also combines resourses from the manifest such as ConfigMaps, Deployments, and Services. And example Ingress, Certificates and Secrets.
|
||||
- `deployment/kustomizations/base` is the base folder that contains the core Wren AI manifests, its less likely you need to modify them, but check just in case
|
||||
- `deployment/kustomizations/examples` is a place with examples of manifests must take a look and adjust to your k8s environment and your needs.
|
||||
- `deployment/kustomizations/examples/secret-wren_example.yaml` is the file you would not normally include in the kustomization file as its not a best practice and especially not a good idea to include in your GitOps repo as it contains cleartext passwords. We recommend to deploy it separately. Thant's why its commented in the `kustomization.yaml` file.
|
||||
- `deployment/kustomizations/examples/wrenai-ingress-example.yaml` is an example of how to deploy Ingress. You can use this as a template for your own Ingress. It contains dependancy of extarnal-dns to add your dns name to your DNS records automatically, otherwise you'll need to add it manually. Also it assumes you are using nginx.ingress, it increases timeouts, disables the owasp and modsecurity that might be enabled globaly and prevent your UI from working properly. Comment the TLS section if you do not wish to use `https` encryption. Note: without authentication, enyone can acess your app, see your data and modify your settings!
|
||||
@@ -64,7 +64,7 @@ Example: `PG_URL: "postgres://postgres:postgres@wrenai-postgresql:5432/admin_ui"
|
||||
- `/admin_ui` This is the name of the database you’re connecting to. In this case, the database name is `admin_ui`. It can be found in the helm values file in the auth.database parameter `deployment/kustomizations/helm-values_postgresql_14.yaml`
|
||||
|
||||
# Minikube
|
||||
Prepare your k8s environment. Then use the `Steps to deploy` section to deploy WrenAI app into your k8s.
|
||||
Prepare your k8s environment. Then use the `Steps to deploy` section to deploy Wren AI app into your k8s.
|
||||
```shell
|
||||
minikube start
|
||||
minikube addons enable ingress
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
# AI Service of WrenAI
|
||||
# AI Service of Wren AI
|
||||
|
||||
## Concepts
|
||||
|
||||
|
||||
@@ -21,7 +21,7 @@ from utils import (
|
||||
)
|
||||
|
||||
st.set_page_config(layout="wide")
|
||||
st.title("WrenAI AI Service Demo")
|
||||
st.title("Wren AI AI Service Demo")
|
||||
|
||||
if "deployment_id" not in st.session_state:
|
||||
st.session_state["deployment_id"] = str(uuid.uuid4())
|
||||
|
||||
@@ -35,10 +35,10 @@ func evaluateTelemetryPreferences() (bool, error) {
|
||||
// let users know we're asking for telemetry consent
|
||||
disableTelemetry := config.IsTelemetryDisabled()
|
||||
if disableTelemetry {
|
||||
fmt.Println("You have disabled telemetry, WrenAI will not collect any data.")
|
||||
fmt.Println("You have disabled telemetry, Wren AI will not collect any data.")
|
||||
return false, nil
|
||||
}
|
||||
fmt.Println("WrenAI relies on anonymous usage statistics to continuously improve.")
|
||||
fmt.Println("Wren AI relies on anonymous usage statistics to continuously improve.")
|
||||
fmt.Println("You can opt out of sharing these statistics by manually adding flag `--disable-telemetry` as described at https://docs.getwren.ai/overview/telemetry")
|
||||
return true, nil
|
||||
}
|
||||
@@ -102,7 +102,7 @@ func Launch() {
|
||||
}
|
||||
}()
|
||||
|
||||
// print WrenAI header
|
||||
// print Wren AI header
|
||||
fmt.Println(strings.Repeat("=", 55))
|
||||
myFigure := figure.NewFigure("WrenAI", "", true)
|
||||
myFigure.Print()
|
||||
@@ -146,7 +146,7 @@ func Launch() {
|
||||
pterm.Info.Println("Preparing project directory")
|
||||
projectDir := prepareProjectDir()
|
||||
|
||||
// download docker-compose file and env file template for WrenAI
|
||||
// download docker-compose file and env file template for Wren AI
|
||||
pterm.Info.Println("Downloading docker-compose file and env file")
|
||||
// find an available port
|
||||
uiPort := utils.FindAvailablePort(3000)
|
||||
@@ -157,8 +157,8 @@ func Launch() {
|
||||
panic(err)
|
||||
}
|
||||
|
||||
// launch WrenAI
|
||||
pterm.Info.Println("Launching WrenAI")
|
||||
// launch Wren AI
|
||||
pterm.Info.Println("Launching Wren AI")
|
||||
const projectName string = "wrenai"
|
||||
err = utils.RunDockerCompose(projectName, projectDir)
|
||||
if err != nil {
|
||||
@@ -166,7 +166,7 @@ func Launch() {
|
||||
}
|
||||
|
||||
// wait for 10 seconds
|
||||
pterm.Info.Println("WrenAI is starting, please wait for a moment...")
|
||||
pterm.Info.Println("Wren AI is starting, please wait for a moment...")
|
||||
url := fmt.Sprintf("http://localhost:%d", uiPort)
|
||||
// wait until checking if CheckWrenAIStarted return without error
|
||||
// if timeout 2 minutes, panic
|
||||
|
||||
@@ -319,7 +319,7 @@ func CheckUIServiceStarted(url string) error {
|
||||
defer resp.Body.Close()
|
||||
|
||||
if resp.StatusCode != 200 {
|
||||
return fmt.Errorf("WrenAI is not started yet")
|
||||
return fmt.Errorf("Wren AI is not started yet")
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
## How to run e2e test locally
|
||||
|
||||
1. Make sure you have start all WrenAI services. ([How to start](https://github.com/Canner/WrenAI/blob/3234dc218b105caba04e1cdab7b1cb7140fc9b90/docker/README.md#how-to-start))
|
||||
1. Make sure you have start all Wren AI services. ([How to start](https://github.com/Canner/WrenAI/blob/3234dc218b105caba04e1cdab7b1cb7140fc9b90/docker/README.md#how-to-start))
|
||||
|
||||
2. Create a `e2e.config.json` file under `wren-ui/e2e` folder and replace all data sources needed values in `./config.ts`.
|
||||
|
||||
|
||||
@@ -232,16 +232,16 @@ export class WrenAIAdaptor implements IWrenAIAdaptor {
|
||||
);
|
||||
const deployId = res.data.id;
|
||||
logger.debug(
|
||||
`WrenAI: Deploying wren AI, hash: ${hash}, deployId: ${deployId}`,
|
||||
`Wren AI: Deploying wren AI, hash: ${hash}, deployId: ${deployId}`,
|
||||
);
|
||||
const deploySuccess = await this.waitDeployFinished(deployId);
|
||||
if (deploySuccess) {
|
||||
logger.debug(`WrenAI: Deploy wren AI success, hash: ${hash}`);
|
||||
logger.debug(`Wren AI: Deploy wren AI success, hash: ${hash}`);
|
||||
return { status: WrenAIDeployStatusEnum.SUCCESS };
|
||||
} else {
|
||||
return {
|
||||
status: WrenAIDeployStatusEnum.FAILED,
|
||||
error: `WrenAI: Deploy wren AI failed or timeout, hash: ${hash}`,
|
||||
error: `Wren AI: Deploy wren AI failed or timeout, hash: ${hash}`,
|
||||
};
|
||||
}
|
||||
} catch (err: any) {
|
||||
@@ -250,7 +250,7 @@ export class WrenAIAdaptor implements IWrenAIAdaptor {
|
||||
);
|
||||
return {
|
||||
status: WrenAIDeployStatusEnum.FAILED,
|
||||
error: `WrenAI Error: deployment hash:${hash}, ${err.message}`,
|
||||
error: `Wren AI Error: deployment hash:${hash}, ${err.message}`,
|
||||
};
|
||||
}
|
||||
}
|
||||
@@ -261,7 +261,7 @@ export class WrenAIAdaptor implements IWrenAIAdaptor {
|
||||
for (let waitTime = 1; waitTime <= 7; waitTime++) {
|
||||
try {
|
||||
const status = await this.getDeployStatus(deployId);
|
||||
logger.debug(`WrenAI: Deploy status: ${status}`);
|
||||
logger.debug(`Wren AI: Deploy status: ${status}`);
|
||||
if (status === WrenAISystemStatus.FINISHED) {
|
||||
deploySuccess = true;
|
||||
break;
|
||||
@@ -270,7 +270,7 @@ export class WrenAIAdaptor implements IWrenAIAdaptor {
|
||||
} else if (status === WrenAISystemStatus.INDEXING) {
|
||||
// do nothing
|
||||
} else {
|
||||
logger.debug(`WrenAI: Unknown WrenAI deploy status: ${status}`);
|
||||
logger.debug(`Wren AI: Unknown Wren AI deploy status: ${status}`);
|
||||
return;
|
||||
}
|
||||
} catch (err: any) {
|
||||
|
||||
@@ -4,7 +4,7 @@ export default function LogoBar() {
|
||||
return (
|
||||
<Image
|
||||
src="/images/logo-white-with-text.svg"
|
||||
alt="WrenAI"
|
||||
alt="Wren AI"
|
||||
width={125}
|
||||
height={30}
|
||||
/>
|
||||
|
||||
@@ -139,7 +139,7 @@ export default function Settings(props: Props) {
|
||||
{!!productVersion && (
|
||||
<div className="gray-7 d-flex align-center p-3 px-5">
|
||||
<InfoCircleOutlined className="mr-2 text-sm" />
|
||||
WrenAI version: {productVersion}
|
||||
Wren AI version: {productVersion}
|
||||
</div>
|
||||
)}
|
||||
</StyledSider>
|
||||
|
||||
@@ -60,7 +60,7 @@ function App({ Component, pageProps }: AppProps) {
|
||||
return (
|
||||
<>
|
||||
<Head>
|
||||
<title>WrenAI</title>
|
||||
<title>Wren AI</title>
|
||||
<link rel="icon" href="/favicon.ico" />
|
||||
</Head>
|
||||
<ApolloProvider client={apolloClient}>
|
||||
|
||||
Reference in New Issue
Block a user