mirror of
https://github.com/MODSetter/SurfSense.git
synced 2026-05-08 23:32:40 +02:00
feat: add language support across configurations and prompts
This commit is contained in:
parent
402039f02f
commit
045537aa79
16 changed files with 242 additions and 18 deletions
|
|
@ -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,
|
||||
)
|
||||
)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue