feat: add language support across configurations and prompts

This commit is contained in:
Tarun 2025-10-12 13:13:42 +05:30
parent 402039f02f
commit 045537aa79
16 changed files with 242 additions and 18 deletions

View file

@ -4,8 +4,10 @@ from langchain.schema import AIMessage, HumanMessage
from sqlalchemy.exc import IntegrityError, OperationalError
from sqlalchemy.ext.asyncio import AsyncSession
from sqlalchemy.future import select
from sqlalchemy.orm import selectinload
from app.db import Chat, SearchSpace, User, get_async_session
from app.db import Chat, SearchSpace, User, UserSearchSpacePreference, get_async_session
from app.schemas import (
AISDKChatRequest,
ChatCreate,
@ -53,21 +55,60 @@ async def handle_chat_data(
request_data.get("document_ids_to_add_in_context")
)
search_mode_str = validate_search_mode(request_data.get("search_mode"))
# print("RESQUEST DATA:", request_data)
# print("SELECTED CONNECTORS:", selected_connectors)
# Check if the search space belongs to the current user
try:
await check_ownership(session, SearchSpace, search_space_id, user)
language_result = await session.execute(
select(UserSearchSpacePreference)
.options(
selectinload(UserSearchSpacePreference.search_space).selectinload(SearchSpace.llm_configs),
selectinload(UserSearchSpacePreference.long_context_llm),
selectinload(UserSearchSpacePreference.fast_llm),
selectinload(UserSearchSpacePreference.strategic_llm)
)
.filter(
UserSearchSpacePreference.search_space_id == search_space_id,
UserSearchSpacePreference.user_id == user.id
)
)
user_preference = language_result.scalars().first()
print("UserSearchSpacePreference:", user_preference)
language = None
if user_preference and user_preference.search_space and user_preference.search_space.llm_configs:
llm_configs = user_preference.search_space.llm_configs
# print(f"Found {len(llm_configs)} LLM Configs")
# for i, config in enumerate(llm_configs):
# print(f" Config {i+1}: name={config.name}, provider={config.provider}, language={getattr(config, 'language', None)}")
for preferred_llm in [user_preference.fast_llm, user_preference.long_context_llm, user_preference.strategic_llm]:
if preferred_llm and getattr(preferred_llm, 'language', None):
language = preferred_llm.language
# print(f"Using language from preferred LLM: {preferred_llm.name} -> {language}")
break
# no preferred llM has language use first available LLM config
if not language:
first_llm_config = llm_configs[0]
language = getattr(first_llm_config, 'language', None)
# print(f"Using language from first LLM config: {first_llm_config.name} -> {language}")
except HTTPException:
raise HTTPException(
status_code=403, detail="You don't have access to this search space"
) from None
# print("Language selected:", language)
langchain_chat_history = []
for message in messages[:-1]:
if message["role"] == "user":
langchain_chat_history.append(HumanMessage(content=message["content"]))
elif message["role"] == "assistant":
langchain_chat_history.append(AIMessage(content=message["content"]))
response = StreamingResponse(
stream_connector_search_results(
@ -80,6 +121,7 @@ async def handle_chat_data(
langchain_chat_history,
search_mode_str,
document_ids_to_add_in_context,
language,
)
)