Skip to content

Commit

Permalink
Merge branch 'main' of https://github.com/onyx-dot-app/onyx into bugf…
Browse files Browse the repository at this point in the history
…ix/indexing-query
  • Loading branch information
Richard Kuo (Danswer) committed Feb 20, 2025
2 parents 357d3d1 + 8b44136 commit 70e9b7f
Show file tree
Hide file tree
Showing 20 changed files with 183 additions and 53 deletions.
2 changes: 1 addition & 1 deletion backend/onyx/background/celery/apps/app_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,7 @@ def on_task_postrun(
f"{f'for tenant_id={tenant_id}' if tenant_id else ''}"
)

r = get_redis_client()
r = get_redis_client(tenant_id=tenant_id)

if task_id.startswith(RedisConnectorCredentialPair.PREFIX):
r.srem(RedisConnectorCredentialPair.get_taskset_key(), task_id)
Expand Down
3 changes: 2 additions & 1 deletion backend/onyx/chat/chat_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,8 @@ def create_chat_chain(
and previous_message.message_type == MessageType.ASSISTANT
and mainline_messages
):
mainline_messages[-1] = current_message
if current_message.refined_answer_improvement:
mainline_messages[-1] = current_message
else:
mainline_messages.append(current_message)

Expand Down
9 changes: 9 additions & 0 deletions backend/onyx/chat/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,15 @@ class MessageResponseIDInfo(BaseModel):
reserved_assistant_message_id: int


class AgentMessageIDInfo(BaseModel):
level: int
message_id: int


class AgenticMessageResponseIDInfo(BaseModel):
agentic_message_ids: list[AgentMessageIDInfo]


class StreamingError(BaseModel):
error: str
stack_trace: str | None = None
Expand Down
13 changes: 9 additions & 4 deletions backend/onyx/chat/process_message.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@
from onyx.chat.answer import Answer
from onyx.chat.chat_utils import create_chat_chain
from onyx.chat.chat_utils import create_temporary_persona
from onyx.chat.models import AgenticMessageResponseIDInfo
from onyx.chat.models import AgentMessageIDInfo
from onyx.chat.models import AgentSearchPacket
from onyx.chat.models import AllCitations
from onyx.chat.models import AnswerPostInfo
Expand Down Expand Up @@ -308,6 +310,7 @@ def _get_force_search_settings(
| CustomToolResponse
| MessageSpecificCitations
| MessageResponseIDInfo
| AgenticMessageResponseIDInfo
| StreamStopInfo
| AgentSearchPacket
)
Expand Down Expand Up @@ -1035,6 +1038,7 @@ def stream_chat_message_objects(
next_level = 1
prev_message = gen_ai_response_message
agent_answers = answer.llm_answer_by_level()
agentic_message_ids = []
while next_level in agent_answers:
next_answer = agent_answers[next_level]
info = info_by_subq[
Expand All @@ -1059,17 +1063,18 @@ def stream_chat_message_objects(
refined_answer_improvement=refined_answer_improvement,
is_agentic=True,
)
agentic_message_ids.append(
AgentMessageIDInfo(level=next_level, message_id=next_answer_message.id)
)
next_level += 1
prev_message = next_answer_message

logger.debug("Committing messages")
db_session.commit() # actually save user / assistant message

msg_detail_response = translate_db_message_to_chat_message_detail(
gen_ai_response_message
)
yield AgenticMessageResponseIDInfo(agentic_message_ids=agentic_message_ids)

yield msg_detail_response
yield translate_db_message_to_chat_message_detail(gen_ai_response_message)
except Exception as e:
error_msg = str(e)
logger.exception(error_msg)
Expand Down
9 changes: 7 additions & 2 deletions backend/onyx/connectors/factory.py
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,16 @@ def validate_ccpair_for_user(
db_session,
get_editable=False,
)
if not credential:
raise ValueError("Credential not found")

if not connector:
raise ValueError("Connector not found")

if connector.source == DocumentSource.INGESTION_API:
return

if not credential:
raise ValueError("Credential not found")

try:
runnable_connector = instantiate_connector(
db_session=db_session,
Expand Down
2 changes: 2 additions & 0 deletions backend/onyx/llm/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ class PreviousMessage(BaseModel):
message_type: MessageType
files: list[InMemoryChatFile]
tool_call: ToolCallFinalResult | None
refined_answer_improvement: bool | None

@classmethod
def from_chat_message(
Expand All @@ -47,6 +48,7 @@ def from_chat_message(
)
if chat_message.tool_call
else None,
refined_answer_improvement=chat_message.refined_answer_improvement,
)

def to_langchain_msg(self) -> BaseMessage:
Expand Down
2 changes: 1 addition & 1 deletion backend/onyx/server/settings/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,7 @@ class Settings(BaseModel):
gpu_enabled: bool | None = None
application_status: ApplicationStatus = ApplicationStatus.ACTIVE
anonymous_user_enabled: bool | None = None
pro_search_disabled: bool | None = None
pro_search_enabled: bool | None = None

temperature_override_enabled: bool = False
auto_scroll: bool = False
Expand Down
1 change: 1 addition & 0 deletions backend/requirements/ee.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
cohere==5.6.1
posthog==3.7.4
python3-saml==1.15.0
xmlsec==1.3.14
46 changes: 38 additions & 8 deletions deployment/data/nginx/app.conf.template
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,24 @@ log_format custom_main '$remote_addr - $remote_user [$time_local] "$request" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time';

# Map X-Forwarded-Proto or fallback to $scheme
map $http_x_forwarded_proto $forwarded_proto {
default $http_x_forwarded_proto;
"" $scheme;
}

# Map X-Forwarded-Host or fallback to $host
map $http_x_forwarded_host $forwarded_host {
default $http_x_forwarded_host;
"" $host;
}

# Map X-Forwarded-Port or fallback to server port
map $http_x_forwarded_port $forwarded_port {
default $http_x_forwarded_port;
"" $server_port;
}

upstream api_server {
# fail_timeout=0 means we always retry an upstream even if it failed
# to return a good HTTP response
Expand All @@ -21,8 +39,7 @@ upstream web_server {
}

server {
listen 80;
server_name ${DOMAIN};
listen 80 default_server;

client_max_body_size 5G; # Maximum upload size

Expand All @@ -36,8 +53,9 @@ server {
# misc headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $forwarded_proto;
proxy_set_header X-Forwarded-Host $forwarded_host;
proxy_set_header X-Forwarded-Port $forwarded_port;
proxy_set_header Host $host;

# need to use 1.1 to support chunked transfers
Expand All @@ -54,8 +72,9 @@ server {
# misc headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $forwarded_proto;
proxy_set_header X-Forwarded-Host $forwarded_host;
proxy_set_header X-Forwarded-Port $forwarded_port;
proxy_set_header Host $host;

proxy_http_version 1.1;
Expand All @@ -72,14 +91,25 @@ server {
}

server {
listen 443 ssl;
server_name ${DOMAIN};
listen 443 ssl default_server;

client_max_body_size 5G; # Maximum upload size

location / {
# misc headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# don't use forwarded schema, host, or port here - this is the entry point
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Host $host;

proxy_http_version 1.1;
proxy_buffering off;
# we don't want nginx trying to do something clever with
# redirects, we set the Host: header above already.
proxy_redirect off;
proxy_pass http://localhost:80;
}

Expand Down
9 changes: 5 additions & 4 deletions deployment/data/nginx/app.conf.template.dev
Original file line number Diff line number Diff line change
Expand Up @@ -21,8 +21,7 @@ upstream web_server {
}

server {
listen 80;
server_name ${DOMAIN};
listen 80 default_server;

client_max_body_size 5G; # Maximum upload size

Expand All @@ -37,7 +36,8 @@ server {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Host $host;

# need to use 1.1 to support chunked transfers
Expand All @@ -55,7 +55,8 @@ server {
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Host $host;

proxy_http_version 1.1;
Expand Down
46 changes: 38 additions & 8 deletions deployment/data/nginx/app.conf.template.no-letsencrypt
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,24 @@ log_format custom_main '$remote_addr - $remote_user [$time_local] "$request" '
'"$http_user_agent" "$http_x_forwarded_for" '
'rt=$request_time';

# Map X-Forwarded-Proto or fallback to $scheme
map $http_x_forwarded_proto $forwarded_proto {
default $http_x_forwarded_proto;
"" $scheme;
}

# Map X-Forwarded-Host or fallback to $host
map $http_x_forwarded_host $forwarded_host {
default $http_x_forwarded_host;
"" $host;
}

# Map X-Forwarded-Port or fallback to server port
map $http_x_forwarded_port $forwarded_port {
default $http_x_forwarded_port;
"" $server_port;
}

upstream api_server {
# fail_timeout=0 means we always retry an upstream even if it failed
# to return a good HTTP response
Expand All @@ -21,8 +39,7 @@ upstream web_server {
}

server {
listen 80;
server_name ${DOMAIN};
listen 80 default_server;

client_max_body_size 5G; # Maximum upload size

Expand All @@ -36,8 +53,9 @@ server {
# misc headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $forwarded_proto;
proxy_set_header X-Forwarded-Host $forwarded_host;
proxy_set_header X-Forwarded-Port $forwarded_port;
proxy_set_header Host $host;

# need to use 1.1 to support chunked transfers
Expand All @@ -54,8 +72,9 @@ server {
# misc headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto $forwarded_proto;
proxy_set_header X-Forwarded-Host $forwarded_host;
proxy_set_header X-Forwarded-Port $forwarded_port;
proxy_set_header Host $host;

proxy_http_version 1.1;
Expand All @@ -68,14 +87,25 @@ server {
}

server {
listen 443 ssl;
server_name ${DOMAIN};
listen 443 ssl default_server;

client_max_body_size 5G; # Maximum upload size

location / {
# misc headers
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
# don't use forwarded schema, host, or port here - this is the entry point
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Port $server_port;
proxy_set_header Host $host;

proxy_http_version 1.1;
proxy_buffering off;
# we don't want nginx trying to do something clever with
# redirects, we set the Host: header above already.
proxy_redirect off;
proxy_pass http://localhost:80;
}

Expand Down
2 changes: 1 addition & 1 deletion deployment/data/nginx/run-nginx.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
# fill in the template
envsubst '$DOMAIN $SSL_CERT_FILE_NAME $SSL_CERT_KEY_FILE_NAME' < "/etc/nginx/conf.d/$1" > /etc/nginx/conf.d/app.conf
envsubst '$SSL_CERT_FILE_NAME $SSL_CERT_KEY_FILE_NAME' < "/etc/nginx/conf.d/$1" > /etc/nginx/conf.d/app.conf

# wait for the api_server to be ready
echo "Waiting for API server to boot up; this may take a minute or two..."
Expand Down
8 changes: 4 additions & 4 deletions web/src/app/admin/settings/SettingsForm.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -240,11 +240,11 @@ export function SettingsForm() {
/>

<Checkbox
label="Pro Search Disabled"
sublabel="If set, users will not be able to use Pro Search."
checked={settings.pro_search_disabled ?? false}
label="Agent Search"
sublabel="If set, users will be able to use Agent Search."
checked={settings.pro_search_enabled ?? true}
onChange={(e) =>
handleToggleSettingsField("pro_search_disabled", e.target.checked)
handleToggleSettingsField("pro_search_enabled", e.target.checked)
}
/>

Expand Down
2 changes: 1 addition & 1 deletion web/src/app/admin/settings/interfaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ export interface Settings {
notifications: Notification[];
needs_reindexing: boolean;
gpu_enabled: boolean;
pro_search_disabled: boolean | null;
pro_search_enabled: boolean | null;
application_status: ApplicationStatus;
auto_scroll: boolean;
temperature_override_enabled: boolean;
Expand Down
Loading

0 comments on commit 70e9b7f

Please sign in to comment.