From ebd95895503f9d44c5f45da29016e0a03f82d7b6 Mon Sep 17 00:00:00 2001 From: Valentin Yanakiev Date: Mon, 13 May 2024 13:59:24 +0300 Subject: [PATCH] Pipeline + naming (#9) --- .env.default | 4 +- .github/ISSUE_TEMPLATE/bug_report.md | 27 ++++++++ .github/ISSUE_TEMPLATE/epic.md | 36 ++++++++++ .github/ISSUE_TEMPLATE/feature_request.md | 19 ++++++ .github/ISSUE_TEMPLATE/user_story.md | 20 ++++++ .github/config.yml | 21 ++++++ .github/stale.yml | 18 +++++ .../workflows/build-deploy-k8s-dev-azure.yml | 61 +++++++++++++++++ .../build-deploy-k8s-sandbox-azure.yml | 59 ++++++++++++++++ .../workflows/build-deploy-k8s-test-azure.yml | 60 ++++++++++++++++ .../workflows/build-release-docker-hub.yml | 68 +++++++++++++++++++ Dockerfile | 2 +- README.md | 2 +- docker-compose.yaml | 42 ++++++------ ...ntributor-engine-expert-deployment-dev.yml | 47 +++++++++++++ pyproject.toml | 2 +- ...py => virtual_contributor_engine_expert.py | 15 ++-- 17 files changed, 472 insertions(+), 31 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/epic.md create mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .github/ISSUE_TEMPLATE/user_story.md create mode 100644 .github/config.yml create mode 100644 .github/stale.yml create mode 100644 .github/workflows/build-deploy-k8s-dev-azure.yml create mode 100644 .github/workflows/build-deploy-k8s-sandbox-azure.yml create mode 100644 .github/workflows/build-deploy-k8s-test-azure.yml create mode 100644 .github/workflows/build-release-docker-hub.yml create mode 100644 manifests/25-virtual-contributor-engine-expert-deployment-dev.yml rename virtual_contributor.py => virtual_contributor_engine_expert.py (93%) diff --git a/.env.default b/.env.default index 24fe078..876042b 100644 --- a/.env.default +++ b/.env.default @@ -9,11 +9,11 @@ RABBITMQ_HOST=rabbitmq RABBITMQ_USER=alkemio-admin RABBITMQ_PASSWORD=alkemio! RABBITMQ_QUEUE="virtual-persona-engine-community-manager" -RABBITMQ_QUEUE="virtual-persona-engine-alkemio-digileefomgeving" +RABBITMQ_QUEUE="virtual-contributor-engine-expert" AI_MODEL_TEMPERATURE=0.3 LANGCHAIN_TRACING_V2=true LANGCHAIN_ENDPOINT="https://api.smith.langchain.com" LANGCHAIN_API_KEY= -LANGCHAIN_PROJECT="virtual-contributor" VECTOR_DB_HOST=localhost VECTOR_DB_PORT=8000 +LANGCHAIN_PROJECT="virtual-contributor-engine-expert" diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md new file mode 100644 index 0000000..90436f4 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -0,0 +1,27 @@ +--- +name: Bug report +about: Create a report to help us improve +title: "BUG: " +labels: "bug, ai, genai, chatbot, virtual contributor, virtual contributor engine expert" +assignees: "" +--- + +**Describe the bug** +A clear and concise description of what the bug is. + +**To Reproduce** +Steps to reproduce the behavior: + +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error + +**Expected behavior** +A clear and concise description of what you expected to happen. + +**Screenshots** +If applicable, add screenshots to help explain your problem. + +**Additional context** +Add any other context about the problem here. diff --git a/.github/ISSUE_TEMPLATE/epic.md b/.github/ISSUE_TEMPLATE/epic.md new file mode 100644 index 0000000..74f2b3f --- /dev/null +++ b/.github/ISSUE_TEMPLATE/epic.md @@ -0,0 +1,36 @@ +--- +name: Epic +about: A theme of work that contain sub-tasks required to complete the larger goal / larger user-story +title: "" +labels: "epic, ai, genai, chatbot, virtual contributor, virtual contributor engine expert" +assignees: "" +--- + +## Description + +Brief summary of what this Epic is, whether it's a larger project, goal, or user story. Describe the job to be done, which persona this Epic is mainly for, or if more multiple, break it down by user and job story. + +## Initiative / goal + +Describe how this Epic impacts an initiative the business is working on. + +### Hypothesis + +What is your hypothesis on the success of this Epic? Describe how success will be measured and what leading indicators the team will have to know if success has been hit. + +## Acceptance criteria and must have scope + +Define what is a must-have for launch and in-scope. Keep this section fluid and dynamic until you lock-in priority during planning. + +## Stakeholders + +Describe who needs to be kept up-to-date about this Epic, included in discussions, or updated along the way. Stakeholders can be both in Product/Engineering, as well as other teams like Customer Success who might want to keep customers updated on the Epic project. + +## Timeline + +What's the timeline for this Epic, what resources are needed, and what might potentially block this from hitting the projected end date. + +## Design + +Figma file: +_Comments are highly appreciated. When commenting in Figma, please also leave a note in the comments box below this issue to notify us_ diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md new file mode 100644 index 0000000..fcae749 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -0,0 +1,19 @@ +--- +name: Feature request +about: Suggest an idea for this project +title: "" +labels: "enhancement, ai, genai, chatbot, virtual contributor, virtual contributor engine expert" +assignees: "" +--- + +**Is your feature request related to a problem? Please describe.** +A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] + +**Describe the solution you'd like** +A clear and concise description of what you want to happen. + +**Describe alternatives you've considered** +A clear and concise description of any alternative solutions or features you've considered. + +**Additional context** +Add any other context or screenshots about the feature request here. diff --git a/.github/ISSUE_TEMPLATE/user_story.md b/.github/ISSUE_TEMPLATE/user_story.md new file mode 100644 index 0000000..1742f9c --- /dev/null +++ b/.github/ISSUE_TEMPLATE/user_story.md @@ -0,0 +1,20 @@ +--- +name: User Story +about: A valuable increment of functionality, testable by the users +title: "" +labels: "user story, ai, genai, chatbot, virtual contributor, virtual contributor engine expert" +assignees: "" +--- + +## Description + +As a +I want +So that + +## Acceptance criteria + +- [ ] Should ‹testable condition that should be satisfied› +- [ ] … + +## Additional Context diff --git a/.github/config.yml b/.github/config.yml new file mode 100644 index 0000000..bd12f31 --- /dev/null +++ b/.github/config.yml @@ -0,0 +1,21 @@ +# Configuration for welcome - https://github.com/behaviorbot/welcome + +# Configuration for new-issue-welcome - https://github.com/behaviorbot/new-issue-welcome + +# Comment to be posted to on first time issues +newIssueWelcomeComment: > + Thanks for opening your first issue here! Be sure to follow the issue template! + +# Configuration for new-pr-welcome - https://github.com/behaviorbot/new-pr-welcome + +# Comment to be posted to on PRs from first time contributors in your repository +newPRWelcomeComment: > + Thanks for opening this pull request! Please check out our contributing guidelines. + +# Configuration for first-pr-merge - https://github.com/behaviorbot/first-pr-merge + +# Comment to be posted to on pull requests merged by a first time user +firstPRMergeComment: > + Congrats on merging your first pull request! We at Alkemio thank you for your contribution! + +# It is recommended to include as many gifs and emojis as possible! diff --git a/.github/stale.yml b/.github/stale.yml new file mode 100644 index 0000000..499b25a --- /dev/null +++ b/.github/stale.yml @@ -0,0 +1,18 @@ +# Number of days of inactivity before an issue becomes stale +daysUntilStale: 60 +# Number of days of inactivity before a stale issue is closed +daysUntilClose: 7 +# Issues with these labels will never be considered stale +exemptLabels: + - pinned + - security + - Epic +# Label to use when marking an issue as stale +staleLabel: wontfix +# Comment to post when marking an issue as stale. Set to `false` to disable +markComment: > + This issue has been automatically marked as stale because it has not had + recent activity. It will be closed if no further activity occurs. Thank you + for your contributions. +# Comment to post when closing a stale issue. Set to `false` to disable +closeComment: false diff --git a/.github/workflows/build-deploy-k8s-dev-azure.yml b/.github/workflows/build-deploy-k8s-dev-azure.yml new file mode 100644 index 0000000..cff5f65 --- /dev/null +++ b/.github/workflows/build-deploy-k8s-dev-azure.yml @@ -0,0 +1,61 @@ +name: Build, Migrate & Deploy to Dev + +on: + push: + branches: [develop] + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3.0.2 + + - name: "Login into ACR" + uses: azure/docker-login@v1.0.1 + with: + login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + + - name: "Build & Push image" + run: | + docker build -f Dockerfile . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:latest + docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} + + deploy: + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3.0.2 + + - name: "Login via Azure CLI" + uses: azure/login@v1.4.7 + with: + creds: ${{ secrets.AZURE_CRED_K8S_NEW }} + + - uses: Azure/aks-set-context@v3.2 + with: + cluster-name: ${{ secrets.CLUSTER_NAME }} + resource-group: ${{ secrets.RESOURCE_GROUP_K8S }} + + - uses: Azure/k8s-create-secret@v4.0 + with: + container-registry-url: ${{ secrets.REGISTRY_LOGIN_SERVER }} + container-registry-username: ${{ secrets.REGISTRY_USERNAME }} + container-registry-password: ${{ secrets.REGISTRY_PASSWORD }} + secret-name: alkemio-virtual-contributor-engine-expert-secret + + - uses: azure/setup-kubectl@v3.2 + with: + version: "v1.22.0" # default is latest stable, fixing it to a compatible version + id: install + + - uses: Azure/k8s-deploy@v4.10 + with: + manifests: | + manifests/25-virtual-contributor-engine-expert-deployment-dev.yml + images: | + ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} + imagepullsecrets: | + alkemio-virtual-contributor-engine-expert-secret diff --git a/.github/workflows/build-deploy-k8s-sandbox-azure.yml b/.github/workflows/build-deploy-k8s-sandbox-azure.yml new file mode 100644 index 0000000..7583b94 --- /dev/null +++ b/.github/workflows/build-deploy-k8s-sandbox-azure.yml @@ -0,0 +1,59 @@ +name: Build, Migrate & Deploy to Sandbox on Azure + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3.0.2 + + - name: "Login into ACR" + uses: azure/docker-login@v1.0.1 + with: + login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + + - name: "Build & Push image" + run: | + docker build -f Dockerfile . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:latest + docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} + deploy: + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3.0.2 + + - name: "Login via Azure CLI" + uses: azure/login@v1.4.7 + with: + creds: ${{ secrets.AZURE_CRED_K8S_NEW }} + + - uses: Azure/aks-set-context@v3.2 + with: + cluster-name: k8s-sandbox + resource-group: res-grp-k8s-sandbox + + - uses: Azure/k8s-create-secret@v4.0 + with: + container-registry-url: ${{ secrets.REGISTRY_LOGIN_SERVER }} + container-registry-username: ${{ secrets.REGISTRY_USERNAME }} + container-registry-password: ${{ secrets.REGISTRY_PASSWORD }} + secret-name: alkemio-virtual-contributor-engine-expert-secret + + - uses: azure/setup-kubectl@v3.2 + with: + version: "v1.22.0" # default is latest stable, fixing it to a compatible version + id: install + + - uses: Azure/k8s-deploy@v4.10 + with: + manifests: | + manifests/25-genai-deployment-dev.yaml + images: | + ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} + imagepullsecrets: | + alkemio-virtual-contributor-engine-expert-secret diff --git a/.github/workflows/build-deploy-k8s-test-azure.yml b/.github/workflows/build-deploy-k8s-test-azure.yml new file mode 100644 index 0000000..96166f0 --- /dev/null +++ b/.github/workflows/build-deploy-k8s-test-azure.yml @@ -0,0 +1,60 @@ +name: Build, Migrate & Deploy to Test on Azure + +on: + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3.0.2 + + - name: "Login into ACR" + uses: azure/docker-login@v1.0.1 + with: + login-server: ${{ secrets.REGISTRY_LOGIN_SERVER }} + username: ${{ secrets.REGISTRY_USERNAME }} + password: ${{ secrets.REGISTRY_PASSWORD }} + + - name: "Build & Push image" + run: | + docker build -f Dockerfile . -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} -t ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:latest + docker push ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} + + deploy: + runs-on: ubuntu-latest + steps: + - name: "Checkout GitHub Action" + uses: actions/checkout@v3.0.2 + + - name: "Login via Azure CLI" + uses: azure/login@v1.4.7 + with: + creds: ${{ secrets.AZURE_CRED_K8S_NEW }} + + - uses: Azure/aks-set-context@v3.2 + with: + cluster-name: k8s-test + resource-group: res-grp-k8s-test + + - uses: Azure/k8s-create-secret@v4.0 + with: + container-registry-url: ${{ secrets.REGISTRY_LOGIN_SERVER }} + container-registry-username: ${{ secrets.REGISTRY_USERNAME }} + container-registry-password: ${{ secrets.REGISTRY_PASSWORD }} + secret-name: alkemio-virtual-contributor-engine-expert-secret + + - uses: azure/setup-kubectl@v3.2 + with: + version: "v1.22.0" # default is latest stable, fixing it to a compatible version + id: install + + - uses: Azure/k8s-deploy@v4.10 + with: + manifests: | + manifests/25-genai-deployment-dev.yaml + images: | + ${{ secrets.REGISTRY_LOGIN_SERVER }}/alkemio-virtual-contributor-engine-expert:${{ github.sha }} + imagepullsecrets: | + alkemio-virtual-contributor-engine-expert-secret diff --git a/.github/workflows/build-release-docker-hub.yml b/.github/workflows/build-release-docker-hub.yml new file mode 100644 index 0000000..6ca5f9d --- /dev/null +++ b/.github/workflows/build-release-docker-hub.yml @@ -0,0 +1,68 @@ +name: Deploy to DockerHub + +on: + release: + types: [published] + +jobs: + docker: + runs-on: ubuntu-latest + steps: + - name: Checkout + uses: actions/checkout@v3.0.2 + - name: Prepare + id: prep + run: | + DOCKER_IMAGE=alkemio/virtual-contributor-engine-expert + VERSION=noop + if [ "${{ github.event_name }}" = "schedule" ]; then + VERSION=nightly + elif [[ $GITHUB_REF == refs/tags/* ]]; then + VERSION=${GITHUB_REF#refs/tags/} + elif [[ $GITHUB_REF == refs/heads/* ]]; then + VERSION=$(echo ${GITHUB_REF#refs/heads/} | sed -r 's#/+#-#g') + if [ "${{ github.event.repository.default_branch }}" = "$VERSION" ]; then + VERSION=edge + fi + elif [[ $GITHUB_REF == refs/pull/* ]]; then + VERSION=pr-${{ github.event.number }} + fi + TAGS="${DOCKER_IMAGE}:${VERSION}" + if [[ $VERSION =~ ^v[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then + MINOR=${VERSION%.*} + MAJOR=${MINOR%.*} + TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR},${DOCKER_IMAGE}:latest" + elif [ "${{ github.event_name }}" = "push" ]; then + TAGS="$TAGS,${DOCKER_IMAGE}:sha-${GITHUB_SHA::8}" + fi + echo "version=${VERSION}" >> $GITHUB_OUTPUT + echo "tags=${TAGS}" >> $GITHUB_OUTPUT + echo "created={$(date -u +'%Y-%m-%dT%H:%M:%SZ')}" >> $GITHUB_OUTPUT + - name: Set up QEMU + uses: docker/setup-qemu-action@v3.0.0 + - name: Set up Docker Buildx + uses: docker/setup-buildx-action@v3.0.0 + - name: Login to DockerHub + if: github.event_name != 'pull_request' + uses: docker/login-action@v1 + with: + username: ${{ secrets.DOCKERHUB_USERNAME }} + password: ${{ secrets.DOCKERHUB_TOKEN }} + - name: Build and push + id: docker_build + uses: docker/build-push-action@v5.0.0 + with: + context: . + file: ./Dockerfile + platforms: linux/amd64 + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.prep.outputs.tags }} + labels: | + org.opencontainers.image.title=${{ github.event.repository.name }} + org.opencontainers.image.description=${{ github.event.repository.description }} + org.opencontainers.image.url=${{ github.event.repository.html_url }} + org.opencontainers.image.source=${{ github.event.repository.clone_url }} + org.opencontainers.image.version=${{ steps.prep.outputs.version }} + org.opencontainers.image.created=${{ steps.prep.outputs.created }} + org.opencontainers.image.revision=${{ github.sha }} + org.opencontainers.image.licenses=${{ github.event.repository.license.spdx_id }} diff --git a/Dockerfile b/Dockerfile index 091ac8b..245b006 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,4 +15,4 @@ COPY . /app RUN poetry config virtualenvs.create true && poetry install --no-interaction --no-ansi # Run guidance_engine.py when the container launches -CMD ["poetry", "run", "python", "virtual_contributor.py"] +CMD ["poetry", "run", "python", "virtual_contributor_engine_expert.py"] diff --git a/README.md b/README.md index 4710f2c..f7b4310 100644 --- a/README.md +++ b/README.md @@ -1 +1 @@ -# virtual-contributor-service +# virtual-contributor-engine-expert diff --git a/docker-compose.yaml b/docker-compose.yaml index c120b0c..06edb7e 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -1,35 +1,35 @@ -version: '3' +version: "3" networks: alkemio: services: - virtual-contributor: - container_name: virtual-contributor - extra_hosts: - - 'host.docker.internal:host-gateway' - volumes: - - '/dev/shm:/dev/shm' - - '~/alkemio/data:/home/alkemio/data' - env_file: - - .env - build: - dockerfile: ./Dockerfile - # image: alkemio/guidance-engine:v0.5.1 - platform: linux/x86_64 - # depends_on: - # rabbitmq: - # condition: "service_healthy" - networks: - - alkemio + virtual-contributor-engine-expert: + container_name: virtual-contributor-engine-expert + extra_hosts: + - "host.docker.internal:host-gateway" + volumes: + - "/dev/shm:/dev/shm" + - "~/alkemio/data:/home/alkemio/data" + env_file: + - .env + build: + dockerfile: ./Dockerfile + # image: alkemio/guidance-engine:v0.5.1 + platform: linux/x86_64 + # depends_on: + # rabbitmq: + # condition: "service_healthy" + networks: + - alkemio rabbitmq: image: rabbitmq:3-management-alpine extra_hosts: - - 'host.docker.internal:host-gateway' + - "host.docker.internal:host-gateway" platform: linux/x86_64 - container_name: 'rabbitmq' + container_name: "rabbitmq" healthcheck: test: rabbitmq-diagnostics check_port_connectivity interval: 30s diff --git a/manifests/25-virtual-contributor-engine-expert-deployment-dev.yml b/manifests/25-virtual-contributor-engine-expert-deployment-dev.yml new file mode 100644 index 0000000..b903f86 --- /dev/null +++ b/manifests/25-virtual-contributor-engine-expert-deployment-dev.yml @@ -0,0 +1,47 @@ +kind: Deployment +apiVersion: apps/v1 +metadata: + namespace: default + name: alkemio-virtual-contributor-engine-expert-deployment + labels: + app: alkemio-virtual-contributor-engine-expert + +spec: + replicas: 1 + selector: + matchLabels: + app: alkemio-virtual-contributor-engine-expert + template: + metadata: + labels: + app: alkemio-virtual-contributor-engine-expert + spec: + containers: + - name: alkemio-virtual-contributor-engine-expert + image: alkemio.azurecr.io/alkemio-virtual-contributor-engine-expert:latest + env: + - name: RABBITMQ_HOST + valueFrom: + secretKeyRef: + name: alkemio-rabbitmq-cluster-default-user + key: host + - name: RABBITMQ_PORT + valueFrom: + secretKeyRef: + name: alkemio-rabbitmq-cluster-default-user + key: port + - name: RABBITMQ_USER + valueFrom: + secretKeyRef: + name: alkemio-rabbitmq-cluster-default-user + key: username + - name: RABBITMQ_PASSWORD + valueFrom: + secretKeyRef: + name: alkemio-rabbitmq-cluster-default-user + key: password + envFrom: + - secretRef: + name: alkemio-secrets + - configMapRef: + name: alkemio-config diff --git a/pyproject.toml b/pyproject.toml index b25db19..10a6913 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "virtual-persona-engine" +name = "virtual-contributor-engine-expert" version = "0.2.0" description = "Alkemio Generative AI Virtul Persona" authors = ["Alkemio BV "] diff --git a/virtual_contributor.py b/virtual_contributor_engine_expert.py similarity index 93% rename from virtual_contributor.py rename to virtual_contributor_engine_expert.py index d38bf5d..8d8b667 100644 --- a/virtual_contributor.py +++ b/virtual_contributor_engine_expert.py @@ -61,7 +61,8 @@ async def query(user_id, message_body, language_code): r"\[@.*\d\d\)", "", message_body["question"] ).strip() - logger.info(f"\nQuery from user {user_id}: {message_body['question']}\n") + logger.info( + f"\nQuery from user {user_id}: {message_body['question']}\n") if user_id not in user_data: user_data[user_id] = {} @@ -107,7 +108,8 @@ async def query(user_id, message_body, language_code): user_data[user_id]["chat_history"].save_context( {"question": message_body["question"]}, {"answer": answer.content} ) - logger.debug(f"new chat history {user_data[user_id]['chat_history']}\n") + logger.debug( + f"new chat history {user_data[user_id]['chat_history']}\n") response = json.dumps( { "question": message_body["question"], @@ -149,7 +151,8 @@ async def on_request(message: aio_pika.abc.AbstractIncomingMessage): f"existing task running for user id: {user_id}, waiting for it to finish first\n\n" ) else: - logger.info(f"no task running for user id: {user_id}, let's move!\n\n") + logger.info( + f"no task running for user id: {user_id}, let's move!\n\n") # Acquire the lock for this user async with user_locks[user_id]: @@ -199,7 +202,8 @@ async def process_message(message: aio_pika.abc.AbstractIncomingMessage): ), routing_key=message.reply_to or "", ) - logger.info(f"Response sent for correlation_id: {message.correlation_id}") + logger.info( + f"Response sent for correlation_id: {message.correlation_id}") logger.info(f"Response sent to: {message.reply_to}") logger.debug(f"response: {response}") except ( @@ -207,7 +211,8 @@ async def process_message(message: aio_pika.abc.AbstractIncomingMessage): asyncio.exceptions.CancelledError, aiormq.exceptions.ChannelInvalidStateError, ) as e: - logger.error(f"Failed to publish message due to a RabbitMQ error: {e}") + logger.error( + f"Failed to publish message due to a RabbitMQ error: {e}") async def main():