diff --git a/.gitignore b/.gitignore index ef0cf6019..f20a0d565 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,5 @@ # wren-ai-service -wren-ai-service/.env wren-ai-service/.env.* -!wren-ai-service/.env.example !wren-ai-service/.env.*.example !wren-ai-service/src/eval/wren-engine/.env wren-ai-service/src/eval/wren-engine/**/config.properties diff --git a/wren-ai-service/.env.example b/wren-ai-service/.env.example deleted file mode 100644 index dd5514dda..000000000 --- a/wren-ai-service/.env.example +++ /dev/null @@ -1,2 +0,0 @@ -# if not specified, the default ENV is prod -ENV=dev \ No newline at end of file diff --git a/wren-ai-service/Makefile b/wren-ai-service/Makefile index 7d2decfcd..e05e6cfbf 100644 --- a/wren-ai-service/Makefile +++ b/wren-ai-service/Makefile @@ -42,9 +42,6 @@ prepare-wren-engine: mkdir -p tools/dev/etc/mdl echo "{\"catalog\": \"test_catalog\", \"schema\": \"test_schema\", \"models\": []}" \\ > tools/dev/etc/mdl/sample.json - -psql: - docker exec -it wren-engine-1 bash launch-cli.sh ## wren-engine related ## diff --git a/wren-ai-service/README.md b/wren-ai-service/README.md index d40691b58..8bddf8731 100644 --- a/wren-ai-service/README.md +++ b/wren-ai-service/README.md @@ -9,7 +9,7 @@ Please read the [documentation](https://docs.getwren.ai/concept/wren_ai_service) - Python 3.12.*, recommended to use [`pyenv`](https://github.com/pyenv/pyenv?tab=readme-ov-file#installation) to manage the Python versions - install `poetry` with version 1.8.3: `curl -sSL https://install.python-poetry.org | python3 - --version 1.8.3` - execute `poetry install` to install the dependencies -- copy `.env.example` file to `.env`, and `.env.dev.example` file to `.env.dev` and fill in the environment variables +- copy `.env.dev.example` file to `.env.dev` and fill in the environment variables - [for development] execute `poetry run pre-commit install` to install the pre-commit hooks and `poetry run pre-commit run --all-files` to run the pre-commit checks at the first time to check if everything is set up correctly - [for development] to run the tests, execute `make test` diff --git a/wren-ai-service/src/providers/document_store/qdrant.py b/wren-ai-service/src/providers/document_store/qdrant.py index 7a1a2af7b..e440e9b7d 100644 --- a/wren-ai-service/src/providers/document_store/qdrant.py +++ b/wren-ai-service/src/providers/document_store/qdrant.py @@ -1,3 +1,4 @@ +import logging import os from typing import Any, Dict, List, Optional @@ -19,6 +20,8 @@ from qdrant_client.http import models as rest from src.core.provider import DocumentStoreProvider from src.providers.loader import get_default_embedding_model_dim, provider +logger = logging.getLogger("wren-ai-service") + class AsyncQdrantDocumentStore(QdrantDocumentStore): def __init__( @@ -209,6 +212,10 @@ class QdrantProvider(DocumentStoreProvider): dataset_name: Optional[str] = None, recreate_index: bool = False, ): + logger.info( + f"Using Qdrant Document Store with Embedding Model Dimension: {embedding_model_dim}" + ) + return AsyncQdrantDocumentStore( location=self._location, embedding_dim=embedding_model_dim, diff --git a/wren-ai-service/src/providers/embedder/azure_openai.py b/wren-ai-service/src/providers/embedder/azure_openai.py index cb1ddb20f..ca0c7e7f4 100644 --- a/wren-ai-service/src/providers/embedder/azure_openai.py +++ b/wren-ai-service/src/providers/embedder/azure_openai.py @@ -119,6 +119,7 @@ class AsyncDocumentEmbedder(AzureOpenAIDocumentEmbedder): self.client = AsyncAzureOpenAI( azure_endpoint=api_base_url, + azure_deployment=model, api_version=api_version, api_key=api_key.resolve_value(), ) @@ -200,6 +201,8 @@ class AzureOpenAIEmbedderProvider(EmbedderProvider): or EMBEDDING_MODEL_DIMENSION, ): logger.info(f"Using Azure OpenAI Embedding Model: {embedding_model}") + logger.info(f"Using Azure OpenAI Embedding API Base: {embed_api_base}") + logger.info(f"Using Azure OpenAI Embedding API Version: {embed_api_version}") self._embedding_api_base = embed_api_base self._embedding_api_key = embed_api_key diff --git a/wren-ai-service/src/providers/embedder/ollama.py b/wren-ai-service/src/providers/embedder/ollama.py index 11b3f9e4a..38207a3ac 100644 --- a/wren-ai-service/src/providers/embedder/ollama.py +++ b/wren-ai-service/src/providers/embedder/ollama.py @@ -164,6 +164,8 @@ class OllamaEmbedderProvider(EmbedderProvider): embedding_model: str = os.getenv("EMBEDDING_MODEL") or EMBEDDING_MODEL, ): logger.info(f"Using Ollama Embedding Model: {embedding_model}") + logger.info(f"Using Ollama URL: {url}") + self._url = url self._embedding_model = embedding_model diff --git a/wren-ai-service/src/providers/llm/azure_openai.py b/wren-ai-service/src/providers/llm/azure_openai.py index fa68418d0..a0c3f3240 100644 --- a/wren-ai-service/src/providers/llm/azure_openai.py +++ b/wren-ai-service/src/providers/llm/azure_openai.py @@ -50,6 +50,7 @@ class AsyncGenerator(AzureOpenAIGenerator): self.client = AsyncAzureOpenAI( azure_endpoint=api_base, + azure_deployment=model, api_version=api_version, api_key=api_key.resolve_value(), ) @@ -121,7 +122,9 @@ class AzureOpenAILLMProvider(LLMProvider): chat_api_version: str = os.getenv("LLM_AZURE_OPENAI_VERSION"), generation_model: str = os.getenv("GENERATION_MODEL") or GENERATION_MODEL, ): - logger.info(f"Using Azure OpenAI LLM: {generation_model}") + logger.info(f"Using AzureOpenAI LLM: {generation_model}") + logger.info(f"Using AzureOpenAI LLM with API base: {chat_api_base}") + logger.info(f"Using AzureOpenAI LLM with API version: {chat_api_version}") self._generation_api_key = chat_api_key self._generation_api_base = chat_api_base @@ -130,10 +133,11 @@ class AzureOpenAILLMProvider(LLMProvider): def get_generator( self, - model_kwargs: Dict[str, Any] = orjson.loads( - os.getenv("GENERATION_MODEL_KWARGS", "{}") - ) - or GENERATION_MODEL_KWARGS, + model_kwargs: Dict[str, Any] = ( + orjson.loads(os.getenv("GENERATION_MODEL_KWARGS")) + if os.getenv("GENERATION_MODEL_KWARGS") + else GENERATION_MODEL_KWARGS + ), system_prompt: Optional[str] = None, ): logger.info( diff --git a/wren-ai-service/src/providers/llm/ollama.py b/wren-ai-service/src/providers/llm/ollama.py index bacaf5706..ab6a5ca11 100644 --- a/wren-ai-service/src/providers/llm/ollama.py +++ b/wren-ai-service/src/providers/llm/ollama.py @@ -127,15 +127,17 @@ class OllamaLLMProvider(LLMProvider): generation_model: str = os.getenv("GENERATION_MODEL") or GENERATION_MODEL, ): logger.info(f"Using Ollama LLM: {generation_model}") + logger.info(f"Using Ollama URL: {url}") self._url = url self._generation_model = generation_model def get_generator( self, - model_kwargs: Dict[str, Any] = orjson.loads( - os.getenv("GENERATION_MODEL_KWARGS", "{}") - ) - or GENERATION_MODEL_KWARGS, + model_kwargs: Dict[str, Any] = ( + orjson.loads(os.getenv("GENERATION_MODEL_KWARGS")) + if os.getenv("GENERATION_MODEL_KWARGS") + else GENERATION_MODEL_KWARGS + ), system_prompt: Optional[str] = None, ): logger.info(f"Creating Ollama generator with model kwargs: {model_kwargs}") diff --git a/wren-ai-service/src/providers/llm/openai.py b/wren-ai-service/src/providers/llm/openai.py index c63405936..0712277c4 100644 --- a/wren-ai-service/src/providers/llm/openai.py +++ b/wren-ai-service/src/providers/llm/openai.py @@ -127,7 +127,7 @@ class OpenAILLMProvider(LLMProvider): """ OpenAI(api_key=api_key, base_url=api_base).models.list() - logger.info(f"Initializing OpenAILLM provider with API base: {api_base}") + logger.info(f"Using OpenAILLM provider with API base: {api_base}") # TODO: currently only OpenAI api key can be verified if api_base == LLM_OPENAI_API_BASE: _verify_api_key(api_key.resolve_value(), api_base) @@ -140,10 +140,11 @@ class OpenAILLMProvider(LLMProvider): def get_generator( self, - model_kwargs: Dict[str, Any] = orjson.loads( - os.getenv("GENERATION_MODEL_KWARGS", "{}") - ) - or GENERATION_MODEL_KWARGS, + model_kwargs: Dict[str, Any] = ( + orjson.loads(os.getenv("GENERATION_MODEL_KWARGS")) + if os.getenv("GENERATION_MODEL_KWARGS") + else GENERATION_MODEL_KWARGS + ), system_prompt: Optional[str] = None, ): if self._api_base == LLM_OPENAI_API_BASE: diff --git a/wren-ai-service/src/utils.py b/wren-ai-service/src/utils.py index 0836088a2..7ba9a5f9d 100644 --- a/wren-ai-service/src/utils.py +++ b/wren-ai-service/src/utils.py @@ -3,6 +3,7 @@ import functools import logging import os import time +from pathlib import Path from typing import Tuple from dotenv import load_dotenv @@ -49,12 +50,11 @@ def setup_custom_logger(name, level=logging.INFO): def load_env_vars() -> str: - load_dotenv(override=True) - - if is_dev_env := os.getenv("ENV") and os.getenv("ENV").lower() == "dev": + if Path(".env.dev").exists(): load_dotenv(".env.dev", override=True) + return "dev" - return "dev" if is_dev_env else "prod" + return "prod" def init_providers() -> ( diff --git a/wren-ai-service/tools/dev/.env.example b/wren-ai-service/tools/dev/.env.example index 4604cb7b0..dac8fea55 100644 --- a/wren-ai-service/tools/dev/.env.example +++ b/wren-ai-service/tools/dev/.env.example @@ -11,11 +11,11 @@ IBIS_SERVER_PORT=8000 # version # CHANGE THIS TO THE LATEST VERSION WREN_PRODUCT_VERSION=development -WREN_ENGINE_VERSION=0.5.0 -WREN_AI_SERVICE_VERSION=0.5.6 -WREN_UI_VERSION=0.7.2 -IBIS_SERVER_VERSION=0.5.0 -WREN_BOOTSTRAP_VERSION=0.1.4 +WREN_ENGINE_VERSION=latest +WREN_AI_SERVICE_VERSION=latest +WREN_UI_VERSION=latest +IBIS_SERVER_VERSION=latest +WREN_BOOTSTRAP_VERSION=latest # SQL Protocol PG_USERNAME=wren-user-placeholder diff --git a/wren-ai-service/tools/dev/config.properties.example b/wren-ai-service/tools/dev/config.properties.example index b8655af06..3a41dc831 100644 --- a/wren-ai-service/tools/dev/config.properties.example +++ b/wren-ai-service/tools/dev/config.properties.example @@ -1,12 +1,6 @@ node.environment=production -pg-wire-protocol.auth.file= -pg-wire-protocol.enabled=true wren.directory=/usr/src/app/etc/mdl -wren.experimental-enable-dynamic-fields=false -wren.datasource.type=bigquery -bigquery.project-id=wrenai -bigquery.credentials-key= -bigquery.location=asia-east1 -bigquery.bucket-name= +wren.experimental-enable-dynamic-fields=true +wren.datasource.type=duckdb duckdb.storage.access-key= duckdb.storage.secret-key= \ No newline at end of file diff --git a/wren-ai-service/tools/dev/docker-compose-dev.yaml b/wren-ai-service/tools/dev/docker-compose-dev.yaml index eb7178a92..3a3f0273d 100644 --- a/wren-ai-service/tools/dev/docker-compose-dev.yaml +++ b/wren-ai-service/tools/dev/docker-compose-dev.yaml @@ -17,7 +17,6 @@ services: - ${WREN_ENGINE_PORT}:${WREN_ENGINE_PORT} volumes: - ./etc:/usr/src/app/etc - - ${LAUNCH_CLI_PATH}:/usr/src/app/launch-cli.sh networks: - wren diff --git a/wren-ai-service/tools/dev/launch-cli.sh b/wren-ai-service/tools/dev/launch-cli.sh deleted file mode 100644 index cdd35a7aa..000000000 --- a/wren-ai-service/tools/dev/launch-cli.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/bash -psql postgres://localhost:7432/wrenai?options=--search_path%3Dspider \ No newline at end of file