Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
26 commits
Select commit Hold shift + click to select a range
4bd5413
fix: refactor CI
veetimar Mar 9, 2026
5ff3681
Improve gemini live tool calling
HorttanainenSami Mar 10, 2026
7878fd9
use agent to evaluate the vector db response
HorttanainenSami Mar 10, 2026
210469c
new mock audio and transcript for testing
HorttanainenSami Mar 10, 2026
1eba4ca
fix appending vector database results to gemini ai context
HorttanainenSami Mar 11, 2026
f9c12d3
Improve prompt and restrict to 2 concurred memory evaluator workers
HorttanainenSami Mar 14, 2026
17a96b1
Fetch from vector database in nonblocking way and include timestamp o…
HorttanainenSami Mar 14, 2026
9135c07
change tools system prompt
HorttanainenSami Mar 16, 2026
147e0fb
use vertexai
HorttanainenSami Mar 16, 2026
d03fb76
Functionality to extract and store useful information from transcript
HorttanainenSami Mar 16, 2026
7be96d8
push earlier queries to gemini live and tool model context
HorttanainenSami Mar 16, 2026
39d2a79
feat: create database tables automatically on startup
negentropy-en Mar 16, 2026
b89541a
feat: generate and persist session summaries after transcription
negentropy-en Mar 16, 2026
a26e28e
fix: add tzdata for Windows timezone support
negentropy-en Mar 16, 2026
f879bdf
fix: handle selected category and calendar context in websocket
negentropy-en Mar 17, 2026
05a0c8a
fix: backend test compatibility and embedding stub
negentropy-en Mar 17, 2026
6c26962
fix: added session summaries and websocket session context handling
negentropy-en Mar 17, 2026
7523bc1
fix: backend pylint final newline and handler lint
negentropy-en Mar 17, 2026
6aa2835
fix: Lazy-load Gemini clients for test compatibility
negentropy-en Mar 17, 2026
b7953ca
fix: Lazy-load summary service Gemini client for CI
negentropy-en Mar 17, 2026
e13b791
fix: Silence duplicate-code lint in summary service
negentropy-en Mar 17, 2026
a6be489
Merge pull request #37 from AI-Smarties/feature/session-summary-gener…
HorttanainenSami Mar 17, 2026
7ab650f
feat: Add audio amplifier to gemini live
HorttanainenSami Mar 17, 2026
c4a51b2
fix: enhance prompt, change model and fix bug
HorttanainenSami Mar 17, 2026
0a0050b
decrease gain to 35
HorttanainenSami Mar 18, 2026
bf39e1a
Merge pull request #38 from AI-Smarties/feature/audio-gain
veetimar Mar 18, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 10 additions & 5 deletions .github/workflows/main.yml
Original file line number Diff line number Diff line change
@@ -1,57 +1,62 @@
name: Backend CI


on:
push:
branches: ["main", "dev"]
branches: [main, dev]
pull_request:
branches: ["main", "dev"]

branches: [main, dev]

jobs:
tests:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Set up Python
uses: actions/setup-python@v6
with:
python-version: "3.12"

- name: Install dependencies
run: |
pip install --upgrade pip
pip install --no-cache-dir -r requirements.txt

- name: Lint with Pylint
run: |
pylint **/*.py

- name: Unittests + coverage
run: |
coverage run --branch -m pytest
coverage xml

- name: Upload results to Codecov
if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'pull_request' && github.base_ref == 'main') }}
uses: codecov/codecov-action@v5
with:
token: ${{ secrets.CODECOV_TOKEN }}
slug: AI-Smarties/back


docker:
if: ${{ (github.event_name == 'push' && github.ref == 'refs/heads/main') || (github.event_name == 'pull_request' && github.base_ref == 'main') }}
runs-on: ubuntu-latest
needs: tests
steps:
- name: Checkout
uses: actions/checkout@v6

- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v3

- name: Login to Docker Hub
if: ${{ github.event_name == 'push' && github.ref == 'refs/heads/main' }}
uses: docker/login-action@v3
with:
username: ${{ vars.DOCKERHUB_USERNAME }}
password: ${{ secrets.DOCKERHUB_TOKEN }}

- name: Build image (and push)
uses: docker/build-push-action@v6
with:
Expand Down
1 change: 1 addition & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
Expand Up @@ -12,3 +12,4 @@ pgvector

vertexai
google-genai
tzdata
Binary file added scripts/corridor_talk.raw
Binary file not shown.
21 changes: 21 additions & 0 deletions scripts/corridor_talk_transcript.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
Hey Tom, got a sec? I wanted to catch up before the standup.

Sure, just grabbing coffee. Want some?

No thanks, I'm already on my third cup today. So, um, I was thinking about the Jenkins pipeline issue — it's been flaky again this week.

Yeah I saw that. Probably just the test timeouts, nothing serious. I'll look at it Thursday.

Cool. Oh — also, I talked to the client this morning. Big news actually: they're moving the launch from Q3 to May 15th.

Wait, seriously? That's six weeks earlier.

Yeah. And they want the analytics dashboard included in the initial release now, not post-launch.

Okay... that changes everything. We're going to need another backend dev at minimum. I can't promise the dashboard by May 15th with the current team.

Agreed. I'll escalate to Lisa today and request the hire. We're officially committing to May 15th with the expanded scope though — that's confirmed with the client.

Got it. I'll reshuffle the sprint after standup. Oh — did you see the parking memo? They're changing the visitor spots again.

Ha, no I didn't. Okay, see you in standup.
12 changes: 10 additions & 2 deletions src/db_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
from vertexai.language_models import TextEmbeddingModel
import google
from sqlalchemy import select
from sqlalchemy.orm import joinedload
from db import sessionlocal
from models import Conversation, Vector, Category, EMBEDDING_DIMENSIONS

Expand Down Expand Up @@ -47,16 +48,23 @@ def get_vectors():
with sessionlocal() as session:
return session.scalars(select(Vector)).all()

def search_vectors(text, limit=1):
def search_vectors(text, limit=1, max_distance=0.5):
if not EMBEDDING_MODEL:
load_embedding_model()
embedding = EMBEDDING_MODEL.get_embeddings(
[text],
output_dimensionality=EMBEDDING_DIMENSIONS,
)[0].values
with sessionlocal() as session:
# how "relevant" the query response should be on scale of 0-2 (float)
# 0 = identical, 1 = unrelated, 2 = opposite
distance = Vector.embedding.cosine_distance(embedding)
return session.scalars(
select(Vector).order_by(Vector.embedding.cosine_distance(embedding)).limit(limit)
select(Vector)
.options(joinedload(Vector.conversation))
.where(distance < max_distance)
.order_by(distance)
.limit(limit)
).all()

def create_conversation(name, summary=None, cat_id=None, timestamp=None):
Expand Down
Loading
Loading