From ee2e585a3cfb1fc6caa02dd13c2be3235514250b Mon Sep 17 00:00:00 2001 From: li00-lab Date: Thu, 17 Jul 2025 21:57:51 -0400 Subject: [PATCH 1/3] settings --- .gitignore | 1 + src/.env-template | 21 +++++++++------------ 2 files changed, 10 insertions(+), 12 deletions(-) diff --git a/.gitignore b/.gitignore index 97aa661..d6cbe94 100644 --- a/.gitignore +++ b/.gitignore @@ -5,3 +5,4 @@ data .env .vscode/ .DS_Store +google-cloud-sdk diff --git a/src/.env-template b/src/.env-template index 40ba71c..080438b 100644 --- a/src/.env-template +++ b/src/.env-template @@ -1,15 +1,12 @@ -AGENT_NAME="crm_data_agent" # Agent Name. [REQUIRED] -GOOGLE_GENAI_USE_VERTEXAI=1 # Only tested with Gemini in Vertex AI. [REQUIRED] +AGENT_NAME="crm_data_agent" +GOOGLE_GENAI_USE_VERTEXAI=1 -GOOGLE_CLOUD_PROJECT="" # Project Id for Vertex AI and Cloud Run. [REQUIRED] -GOOGLE_CLOUD_LOCATION="us-central1" # Cloud Region for Vertex AI and Cloud Run. [REQUIRED] -AI_STORAGE_BUCKET="" # Storage bucket for Artifacts Service and Vertex AI deployment operations. [REQUIRED] +GOOGLE_CLOUD_PROJECT="crm-data-agent" +GOOGLE_CLOUD_LOCATION="us-central1" +AI_STORAGE_BUCKET="my-crm-data-agent-bucket" -BQ_LOCATION="US" # BigQuery location [REQUIRED] -SFDC_BQ_DATASET="sfdc_data" # BigQuery Dataset with Salesforce data in SFDC_DATA_PROJECT_ID project. [REQUIRED] -# BQ_PROJECT_ID= # Project Id for executing BigQuery queries. (if empty, defaults to GOOGLE_CLOUD_PROJECT) -# SFDC_DATA_PROJECT_ID= # Project Id Salesforce Data in BigQuery. (if empty, defaults to BQ_PROJECT_ID/GOOGLE_CLOUD_PROJECT) +BQ_LOCATION="US" +SFDC_BQ_DATASET="sfdc_data" +FIRESTORE_SESSION_DATABASE="my-crm-data-agent-db" -FIRESTORE_SESSION_DATABASE="" # Firestore database name for storing session data [REQUIRED] - -SFDC_METADATA_FILE="sfdc_metadata.json" # Salesforce Metadata file path. Do not change it if not using custom metadata. +SFDC_METADATA_FILE="sfdc_metadata.json" \ No newline at end of file From 5de796ffde47481c872c3004650892af52c7fad5 Mon Sep 17 00:00:00 2001 From: li00-lab Date: Thu, 17 Jul 2025 22:51:12 -0400 Subject: [PATCH 2/3] testing using dockerfile --- docker-compose.yml | 26 +++++++++++++++++++++++++ firebase.json | 12 ++++++++++++ src/Dockerfile | 13 ++++++++++--- src/shared/firestore_session_service.py | 16 ++++++++++++--- 4 files changed, 61 insertions(+), 6 deletions(-) create mode 100644 docker-compose.yml create mode 100644 firebase.json diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..2319f13 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,26 @@ +services: + crm-agent: + build: + context: ./src + dockerfile: Dockerfile + container_name: crm-agent + ports: + - "8000:8000" + env_file: + - .env + volumes: + - ./src:/app + depends_on: + - firebase-emulator + firebase-emulator: + image: node:18-slim + container_name: firebase-emulator + working_dir: /home/firebase + volumes: + - ./firebase:/home/firebase + command: > + sh -c "npm install -g firebase-tools && + firebase emulators:start --only firestore --project fake-project --host 0.0.0.0" + ports: + - "4000:4000" # Emulator UI + - "8080:8080" # Firestore diff --git a/firebase.json b/firebase.json new file mode 100644 index 0000000..a9dc185 --- /dev/null +++ b/firebase.json @@ -0,0 +1,12 @@ +{ + "emulators": { + "firestore": { + "port": 8080, + "host": "0.0.0.0" + }, + "ui": { + "enabled": true, + "port": 4000 + } + } +} diff --git a/src/Dockerfile b/src/Dockerfile index e109cae..d43f465 100644 --- a/src/Dockerfile +++ b/src/Dockerfile @@ -1,10 +1,17 @@ FROM python:3.11-slim +# Set working directory WORKDIR /app + +# Copy source code into the container COPY . /app -RUN pip install --no-cache-dir -r requirements.txt +# Install dependencies +RUN pip install --upgrade pip && \ + pip install --no-cache-dir -r requirements.txt -EXPOSE 8080 +# Expose app port +EXPOSE 8000 -CMD uvicorn --app-dir web fast_api_runner:api_app --port 8000 --workers 16 & python3 web/main.py agents/data_agent local & wait +# Launch FastAPI + custom streamlit/app logic in parallel +CMD ["bash", "-c", "uvicorn --app-dir web fast_api_runner:api_app --port 8000 --workers 2 & python3 web/main.py agents/data_agent local & wait"] diff --git a/src/shared/firestore_session_service.py b/src/shared/firestore_session_service.py index 07cf8f1..fe5b4eb 100644 --- a/src/shared/firestore_session_service.py +++ b/src/shared/firestore_session_service.py @@ -36,13 +36,23 @@ class FirestoreSessionService(BaseSessionService): def __init__(self, - database: str, - sessions_collection: str = "/", - project_id: Optional[str] = None): + database: str, + sessions_collection: str = "/", + project_id: Optional[str] = None): + + # Support Firestore Emulator if running locally + emulator_host = os.environ.get("FIRESTORE_EMULATOR_HOST") + if emulator_host: + os.environ["GOOGLE_CLOUD_PROJECT"] = os.environ.get("GOOGLE_CLOUD_PROJECT", "fake-project") + os.environ["FIRESTORE_EMULATOR_HOST"] = emulator_host + logger.info(f"Using Firestore Emulator at {emulator_host}") + else: + logger.info("Using Google Firestore in production mode") self.client = Client(project_id, database=database) self.sessions_collection = sessions_collection + @staticmethod def _clean_app_name(name: str) -> str: return name.rsplit("/", 1)[-1] From d4475e27e38e7612d3218cc88f49f85edfba0bc7 Mon Sep 17 00:00:00 2001 From: li00-lab Date: Thu, 17 Jul 2025 22:56:51 -0400 Subject: [PATCH 3/3] add env template --- .env-template | 14 ++++++++++++++ 1 file changed, 14 insertions(+) create mode 100644 .env-template diff --git a/.env-template b/.env-template new file mode 100644 index 0000000..90e3a95 --- /dev/null +++ b/.env-template @@ -0,0 +1,14 @@ + +AGENT_NAME="crm_data_agent" +GOOGLE_GENAI_USE_VERTEXAI=1 + +GOOGLE_CLOUD_PROJECT="crm-data-agent" +GOOGLE_CLOUD_LOCATION="us-central1" +AI_STORAGE_BUCKET="my-crm-data-agent-bucket" + +BQ_LOCATION="US" +SFDC_BQ_DATASET="sfdc_data" +FIRESTORE_SESSION_DATABASE="my-crm-data-agent-db" + +SFDC_METADATA_FILE="sfdc_metadata.json" +FIRESTORE_EMULATOR_HOST=host.docker.internal:8080 \ No newline at end of file