Skip to content
Merged
Show file tree
Hide file tree
Changes from 6 commits
Commits
Show all changes
34 commits
Select commit Hold shift + click to select a range
e8a2e7c
feat(ai): add Google Gemini LLM provider support
rajnisk Feb 16, 2026
c1b57b9
fix(ai): address CodeRabbit suggestions for Google embedder
rajnisk Feb 16, 2026
75c422a
fix(ai): address CodeRabbit suggestions for Google embedder
rajnisk Feb 16, 2026
f146b16
fix(ai): address CodeRabbit/cubic-dev-ai review issues
rajnisk Feb 16, 2026
f20dfb8
fix(ai): fix RET503 and mypy return statement errors
rajnisk Feb 16, 2026
2c345f2
fix(ai): address CodeRabbit AI review issues
rajnisk Feb 16, 2026
8bbf1f4
fix(ai): address final CodeRabbit AI review issues
rajnisk Feb 16, 2026
1945a9e
fix(ai): remove unnecessary error raising for REST fallback
rajnisk Feb 16, 2026
e11e429
fix(ai): add warning to embed_documents for consistent exception hand…
rajnisk Feb 16, 2026
86b9c2f
refactor(ai): simplify Google embedder per review feedback
rajnisk Feb 20, 2026
78e8722
chore: update poetry.lock for google-genai extra
rajnisk Feb 20, 2026
8a46f1a
fix(ai): pass output_dimensionality via config parameter
rajnisk Feb 20, 2026
c92ff76
fix(ai): add defensive check for empty embeddings response
rajnisk Feb 20, 2026
a332a61
fix(ai): normalize 1536-dim embeddings for accurate cosine similarity
rajnisk Feb 20, 2026
4d84ef7
test: fix LLM config tests for CI/CD compatibility
rajnisk Feb 20, 2026
aef4129
refactor: address reviewer feedback for Google Gemini integration
rajnisk Feb 24, 2026
13b0fd3
Update code
rudransh-shrivastava Feb 26, 2026
5f28acc
fix chunk commands to use embedder factory instead of openai
rudransh-shrivastava Feb 26, 2026
e7dfc6e
fix tests
rudransh-shrivastava Feb 26, 2026
10beb47
Update code
rudransh-shrivastava Feb 26, 2026
5eccbdc
fix: address reviewer feedback for Google Gemini integration
rajnisk Feb 27, 2026
c111c44
refactor: use match statement and improve normalization
rajnisk Feb 28, 2026
89cecc3
Merge branch 'feature/nestbot-ai-assistant' into feature/nestbot-ai-g…
rajnisk Feb 28, 2026
3a71b16
Merge branch 'feature/nestbot-ai-assistant' into feature/nestbot-ai-g…
rajnisk Mar 2, 2026
729b3b4
refactor(ai): replace magic number with module-level constant for emb…
rajnisk Mar 2, 2026
4c3cb43
refactor(ai): replace magic number with module-level constant for emb…
rajnisk Mar 2, 2026
075c996
Merge branch 'feature/nestbot-ai-assistant' into feature/nestbot-ai-g…
rajnisk Mar 19, 2026
b79e318
Merge branch 'feature/nestbot-ai-assistant' into feature/nestbot-ai-g…
rajnisk Mar 29, 2026
0a20047
resolve deps, tests, and coverage for Gemini PR
rajnisk Apr 12, 2026
dc9fd10
chore: sort coverage run.omit for pyproject-fmt
rajnisk Apr 12, 2026
e5ffc61
correct pyproject dependency versions
rajnisk Apr 13, 2026
e03abbc
correct pyproject dependency versions
rajnisk Apr 13, 2026
33323ad
merge: nestbot-ai-assistant
rajnisk Apr 14, 2026
17468c9
fix: address review on dockerignore and chunk tests
rajnisk Apr 14, 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
2 changes: 2 additions & 0 deletions backend/.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ DJANGO_DB_PASSWORD=None
DJANGO_DB_PORT=None
DJANGO_DB_USER=None
DJANGO_ELEVENLABS_API_KEY=None
DJANGO_GOOGLE_API_KEY=None
DJANGO_LLM_PROVIDER=None
DJANGO_OPEN_AI_SECRET_KEY=None
DJANGO_PUBLIC_IP_ADDRESS="127.0.0.1"
DJANGO_REDIS_HOST=None
Expand Down
34 changes: 24 additions & 10 deletions backend/apps/ai/common/llm_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,32 +2,46 @@

from __future__ import annotations

import os
import logging

from crewai import LLM
from django.conf import settings

logger = logging.getLogger(__name__)


def get_llm() -> LLM:
"""Get configured LLM instance.

Returns:
LLM: Configured LLM instance with gpt-4.1-mini as default model.
LLM: Configured LLM instance based on settings.

"""
provider = os.getenv("LLM_PROVIDER", "openai")
provider = settings.LLM_PROVIDER
Comment thread
rajnisk marked this conversation as resolved.
Outdated

if provider == "openai":
return LLM(
model=os.getenv("OPENAI_MODEL_NAME", "gpt-4.1-mini"),
api_key=os.getenv("DJANGO_OPEN_AI_SECRET_KEY"),
model=settings.OPEN_AI_MODEL_NAME,
api_key=settings.OPEN_AI_SECRET_KEY,
temperature=0.1,
)
if provider == "anthropic":
if provider == "google":
return LLM(
model=os.getenv("ANTHROPIC_MODEL_NAME", "claude-3-5-sonnet-20241022"),
api_key=os.getenv("ANTHROPIC_API_KEY"),
model=settings.GOOGLE_MODEL_NAME,
base_url="https://generativelanguage.googleapis.com/v1beta/openai/",
Comment thread
rajnisk marked this conversation as resolved.
Outdated
api_key=settings.GOOGLE_API_KEY,
temperature=0.1,
)

error_msg = f"Unsupported LLM provider: {provider}"
raise ValueError(error_msg)
# Fallback to OpenAI if provider not recognized or not specified
Comment thread
cubic-dev-ai[bot] marked this conversation as resolved.
Outdated
if provider and provider not in ("openai", "google"):
logger.error(
"Unrecognized LLM_PROVIDER '%s'. Falling back to OpenAI. "
"Supported providers: 'openai', 'google'",
provider,
)
return LLM(
model=settings.OPEN_AI_MODEL_NAME,
api_key=settings.OPEN_AI_SECRET_KEY,
temperature=0.1,
)
10 changes: 8 additions & 2 deletions backend/apps/ai/embeddings/factory.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,24 @@
"""Factory function to get the configured embedder."""

from django.conf import settings

from apps.ai.embeddings.base import Embedder
from apps.ai.embeddings.google import GoogleEmbedder
from apps.ai.embeddings.openai import OpenAIEmbedder


def get_embedder() -> Embedder:
"""Get the configured embedder.

Currently returns OpenAI embedder, but can be extended to support
Currently returns OpenAI and Google embedder, but can be extended to support
other providers (e.g., Anthropic, Cohere, etc.).

Returns:
Embedder instance configured for the current provider.

"""
# Currently OpenAI, but can be extended to support other providers
# Currently OpenAI and Google, but can be extended to support other providers
if settings.LLM_PROVIDER == "google":
return GoogleEmbedder()

return OpenAIEmbedder()
Loading