Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Agent Search #3661

Closed
wants to merge 171 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
171 commits
Select commit Hold shift + click to select a range
c15a828
add chrome extension
pablonyx Jan 7, 2025
169f3fd
v2
pablonyx Jan 6, 2025
6b0a2e1
k
pablonyx Jan 7, 2025
b5dd5df
quick nit
pablonyx Jan 7, 2025
9adbfc1
organize components
pablonyx Jan 7, 2025
bf6b634
quick addition
pablonyx Jan 7, 2025
c85900e
nit
pablonyx Jan 7, 2025
35f379b
validate
pablonyx Jan 8, 2025
e5c4301
quick nits
pablonyx Jan 8, 2025
e22918e
v3
pablonyx Jan 8, 2025
acb9cca
quick nits
pablonyx Jan 8, 2025
5b0a1cc
minor nit
pablonyx Jan 8, 2025
f61864c
nit
pablonyx Jan 8, 2025
cafa0aa
push minor changes
pablonyx Jan 8, 2025
5d034e0
nit
pablonyx Jan 8, 2025
078ae4b
add new ux
pablonyx Jan 10, 2025
b06f561
quick nit
pablonyx Jan 10, 2025
79d847f
nit
pablonyx Jan 10, 2025
be84cf9
fix the hydra
pablonyx Jan 10, 2025
1932347
nit
pablonyx Jan 11, 2025
7f2610e
looking good
pablonyx Jan 11, 2025
a915e4d
k
pablonyx Jan 11, 2025
0d9441d
draggables
pablonyx Jan 12, 2025
3acf235
quick nit
pablonyx Jan 12, 2025
167b5ba
additioanl nits
pablonyx Jan 12, 2025
9d0272f
minor nit
pablonyx Jan 12, 2025
da27c8b
k
pablonyx Jan 12, 2025
7254cb6
fully updated - groups
pablonyx Jan 12, 2025
19204b4
final updates
pablonyx Jan 12, 2025
7ba00f8
quick nit
pablonyx Jan 12, 2025
3e8e544
Yuhong
yuhongsun96 Jan 12, 2025
b730781
quick nits
pablonyx Jan 13, 2025
b11641c
most new fixes
pablonyx Jan 13, 2025
ad19e9a
k
pablonyx Jan 13, 2025
9ad10d1
Yuhong
yuhongsun96 Jan 13, 2025
565bfa4
address all but modal within modal
pablonyx Jan 13, 2025
55d3b0f
Merge branch 'new_ux_branch' of github.com:onyx-dot-app/onyx into new…
pablonyx Jan 13, 2025
4e5bc7a
quick nit
pablonyx Jan 13, 2025
ec7a606
popover within a popover > modal within a modal
pablonyx Jan 13, 2025
9e3b1d2
nit
pablonyx Jan 13, 2025
6c68a53
nit
pablonyx Jan 13, 2025
7b67546
k
pablonyx Jan 13, 2025
4ed9f0f
editor changes
pablonyx Jan 13, 2025
70de470
Yuhong
yuhongsun96 Jan 13, 2025
e4bf04f
update chat banner
pablonyx Jan 13, 2025
8aa7fb5
Merge branch 'new_ux_branch' of github.com:onyx-dot-app/onyx into new…
pablonyx Jan 13, 2025
650fee6
quick updates
pablonyx Jan 13, 2025
570ba9f
Yuhong
yuhongsun96 Jan 13, 2025
a2dfbb5
update assistant editor
pablonyx Jan 13, 2025
b641cfc
Merge branch 'new_ux_branch' of github.com:onyx-dot-app/onyx into new…
pablonyx Jan 13, 2025
5790f37
quick nit
pablonyx Jan 13, 2025
b924852
sidebar
pablonyx Jan 13, 2025
f9be71f
l
pablonyx Jan 13, 2025
ba2d5fc
add input prompts
pablonyx Jan 13, 2025
25e2dfa
k
pablonyx Jan 13, 2025
4506770
Yuhong
yuhongsun96 Jan 14, 2025
bf3da9f
k
yuhongsun96 Jan 14, 2025
2c894aa
quick nit
pablonyx Jan 14, 2025
5c4451c
:wMerge branch 'new_ux_branch' of github.com:onyx-dot-app/onyx into n…
pablonyx Jan 14, 2025
71eab9c
push
pablonyx Jan 14, 2025
7e32d21
push quick changes from diff
pablonyx Jan 14, 2025
fd89d1e
quick nit
pablonyx Jan 14, 2025
a365ab0
remove some whitespace
pablonyx Jan 14, 2025
8cca29e
fix width + editors
pablonyx Jan 14, 2025
ac15d00
k
pablonyx Jan 14, 2025
26c5c57
quick v1 labels
pablonyx Jan 14, 2025
8c67288
Proper anonymous user restricting (#3645)
pablonyx Jan 10, 2025
233bbfa
Pro search clean commmit. See evan_answer_rework branch for prior his…
evan-danswer Jan 10, 2025
9b55643
fix heads issue
evan-danswer Jan 10, 2025
ca1c12f
add back old citation processing temporarily
evan-danswer Jan 10, 2025
25bb598
fixed issues with standard flow
evan-danswer Jan 10, 2025
1193360
fix run_graph testing script
evan-danswer Jan 10, 2025
b15e296
fix citation processing in basic search
evan-danswer Jan 11, 2025
b49c5af
save agent answers
evan-danswer Jan 11, 2025
b60002c
better answer persistence
evan-danswer Jan 11, 2025
29c479f
fixed issue when tool call unnecessary
evan-danswer Jan 11, 2025
5761557
tentative fix for not persisting search docs
evan-danswer Jan 11, 2025
dfe1ed4
added subquestion info to streamed docs, removed extra deduping
evan-danswer Jan 12, 2025
5a83262
attach persisted agent search info to assistant message
evan-danswer Jan 12, 2025
086d70a
Pro_search B + fix for no docs retrieved
joachim-danswer Jan 13, 2025
fddc188
improved no-subquestion-gen handling
evan-danswer Jan 13, 2025
931a119
cleanup run_graph and added stream stopping for sub_answers
evan-danswer Jan 13, 2025
561e44e
verified docs for persisted info
evan-danswer Jan 13, 2025
4ea0ca5
tool call kickoffs for starting agentic, starting refined
evan-danswer Jan 13, 2025
6803702
use correct doc id
evan-danswer Jan 13, 2025
99d7c09
alembic migration
pablonyx Jan 13, 2025
e0654c2
stream stop info consistency
evan-danswer Jan 13, 2025
3610a51
un-break refinement flow and stream answer
evan-danswer Jan 13, 2025
8f428cf
subquestion numbers start at 1
evan-danswer Jan 13, 2025
7350dd7
fix local variable access issue
evan-danswer Jan 14, 2025
07c2336
stream refined answer
evan-danswer Jan 14, 2025
9592f0a
refined prompt fix
joachim-danswer Jan 14, 2025
a259f92
alembic migration
pablonyx Jan 14, 2025
478eb51
add shortcuts, reorganize various pages,update seeding, starter messa…
pablonyx Jan 14, 2025
694925d
k
pablonyx Jan 14, 2025
862a624
various improvements
pablonyx Jan 14, 2025
289be0a
user settings etc.
pablonyx Jan 14, 2025
086bba6
fully cleaned assistant editor
pablonyx Jan 14, 2025
72d1928
label editing / deletion
pablonyx Jan 14, 2025
cd9279f
additional label filtering
pablonyx Jan 14, 2025
a570d39
validated
pablonyx Jan 14, 2025
5081d24
Proper anonymous user restricting (#3645)
pablonyx Jan 10, 2025
f79d44b
Pro search clean commmit. See evan_answer_rework branch for prior his…
evan-danswer Jan 10, 2025
05a4792
fix heads issue
evan-danswer Jan 10, 2025
22e209a
add back old citation processing temporarily
evan-danswer Jan 10, 2025
9887be3
fixed issues with standard flow
evan-danswer Jan 10, 2025
87101c8
fix run_graph testing script
evan-danswer Jan 10, 2025
6c2f4e4
fix citation processing in basic search
evan-danswer Jan 11, 2025
91a37ef
save agent answers
evan-danswer Jan 11, 2025
3e27b79
better answer persistence
evan-danswer Jan 11, 2025
f0e7461
fixed issue when tool call unnecessary
evan-danswer Jan 11, 2025
249dd96
tentative fix for not persisting search docs
evan-danswer Jan 11, 2025
6bea880
added subquestion info to streamed docs, removed extra deduping
evan-danswer Jan 12, 2025
70509fb
attach persisted agent search info to assistant message
evan-danswer Jan 12, 2025
4c75b73
Pro_search B + fix for no docs retrieved
joachim-danswer Jan 13, 2025
ee304c9
improved no-subquestion-gen handling
evan-danswer Jan 13, 2025
d38b9bd
cleanup run_graph and added stream stopping for sub_answers
evan-danswer Jan 13, 2025
1b9f128
verified docs for persisted info
evan-danswer Jan 13, 2025
dfcf879
tool call kickoffs for starting agentic, starting refined
evan-danswer Jan 13, 2025
413a4e5
use correct doc id
evan-danswer Jan 13, 2025
1851c83
alembic migration
pablonyx Jan 13, 2025
113767a
stream stop info consistency
evan-danswer Jan 13, 2025
78df113
un-break refinement flow and stream answer
evan-danswer Jan 13, 2025
4a7c6a6
subquestion numbers start at 1
evan-danswer Jan 13, 2025
27b044c
fix local variable access issue
evan-danswer Jan 14, 2025
e1175e1
stream refined answer
evan-danswer Jan 14, 2025
48a4e2c
refined prompt fix
joachim-danswer Jan 14, 2025
60db37f
alembic migration
pablonyx Jan 14, 2025
1669a5d
alembic migration
pablonyx Jan 14, 2025
5c31171
Merge branch 'pro-search' of github.com:onyx-dot-app/onyx into pro-se…
pablonyx Jan 14, 2025
0ff212a
alembic migration
pablonyx Jan 14, 2025
ab70b7c
persistence of refined agent answer and top-level handling of fine gr…
evan-danswer Jan 15, 2025
7cca660
handle prompts that exceed context window
evan-danswer Jan 15, 2025
2c0ef2e
better separated dispatch
evan-danswer Jan 15, 2025
09d0820
Question numbering fix (logging temp to info)
joachim-danswer Jan 15, 2025
43e4882
context length fix
evan-danswer Jan 15, 2025
8ea987e
remove empty expanded subquestions
evan-danswer Jan 15, 2025
2bc948f
dispatch initial question as dummy subquestion
evan-danswer Jan 15, 2025
c9b34ed
Updated citation handling on backend + citations for refined answer
joachim-danswer Jan 15, 2025
ac9ce7c
added back saved docs for agentic search
evan-danswer Jan 15, 2025
b220819
fixed streaming and persistence of answer docs
evan-danswer Jan 15, 2025
5635136
fixed no good subquestions error
evan-danswer Jan 15, 2025
ff24f82
unbound local error
evan-danswer Jan 15, 2025
7987a3a
mypy error on unbound locals
evan-danswer Jan 15, 2025
fabc9f7
attempted fix for early exit from langgraph event loop
evan-danswer Jan 16, 2025
3991eac
new citation format
joachim-danswer Jan 16, 2025
4225724
finished checks for llm context window before invoking or streaming
evan-danswer Jan 16, 2025
755b757
sub_question number handling
joachim-danswer Jan 16, 2025
4dad841
new refined prompt
joachim-danswer Jan 16, 2025
b6da896
removal of citations from previous answers
joachim-danswer Jan 16, 2025
7282447
clean run_graph
evan-danswer Jan 17, 2025
38fd061
cleanup hardcoded idks
evan-danswer Jan 17, 2025
9d7c337
skip answer verification for idk answers
evan-danswer Jan 17, 2025
e8fd57a
WIP
evan-danswer Jan 18, 2025
fb3bc2f
working version with cleanup
evan-danswer Jan 18, 2025
0df0b71
name cleanup and WIP unifying input types
evan-danswer Jan 18, 2025
7ef9287
optional search to inform decomposition
joachim-danswer Jan 18, 2025
5d5a8b2
Changed "I don't know" to a more appropriate response
joachim-danswer Jan 18, 2025
91ee90b
added 'Agent Search' decision
joachim-danswer Jan 18, 2025
afeb7f2
prompt update to suggest doc citations vs question citations
joachim-danswer Jan 18, 2025
a0517a8
finish pro->agentic rename
evan-danswer Jan 18, 2025
640f64d
fixed pro search flag and unnecessary/incorrect streaming
evan-danswer Jan 18, 2025
6fe4ce1
fix non updated key issue
evan-danswer Jan 19, 2025
a48611e
Updated initial search flags for UI flows
joachim-danswer Jan 19, 2025
e955279
fixed pro search config creation
evan-danswer Jan 19, 2025
a35ef19
Stream pre-verify results if no verified docs
joachim-danswer Jan 19, 2025
0de3a6f
stream finished events
evan-danswer Jan 19, 2025
2a88985
new directory structure
joachim-danswer Jan 19, 2025
79f7ca2
merge with Evan changes & ProSearchConfig -> AgentSearchConfig
joachim-danswer Jan 19, 2025
dffda7d
added logging to log_messages
joachim-danswer Jan 20, 2025
a4b780e
streaming + saving of search docs of no verified ones available
joachim-danswer Jan 20, 2025
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
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,6 @@
.vscode/
*.sw?
/backend/tests/regression/answer_quality/search_test_config.yaml
/web/test-results/
/web/test-results/
backend/onyx/agent_search/main/test_data.json
backend/tests/regression/answer_quality/test_data.json
6 changes: 6 additions & 0 deletions .vscode/env_template.txt
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,9 @@ BING_API_KEY=<REPLACE THIS>
# Enable the full set of Danswer Enterprise Edition features
# NOTE: DO NOT ENABLE THIS UNLESS YOU HAVE A PAID ENTERPRISE LICENSE (or if you are using this for local testing/development)
ENABLE_PAID_ENTERPRISE_EDITION_FEATURES=False

# Agent Search configs # TODO: Remove give proper namings
AGENT_RETRIEVAL_STATS=False # Note: This setting will incur substantial re-ranking effort
yuhongsun96 marked this conversation as resolved.
Show resolved Hide resolved
AGENT_RERANKING_STATS=True
AGENT_MAX_QUERY_RETRIEVAL_RESULTS=20
AGENT_RERANKING_MAX_QUERY_RETRIEVAL_RESULTS=20
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""add shortcut option for users

Revision ID: 027381bce97c
Revises: 6fc7886d665d
Create Date: 2025-01-14 12:14:00.814390

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = "027381bce97c"
down_revision = "6fc7886d665d"
branch_labels = None
depends_on = None


def upgrade() -> None:
op.add_column(
"user",
sa.Column(
"shortcut_enabled", sa.Boolean(), nullable=False, server_default="true"
),
)


def downgrade() -> None:
op.drop_column("user", "shortcut_enabled")
29 changes: 29 additions & 0 deletions backend/alembic/versions/1adf5ea20d2b_agent_doc_result_col.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
"""agent_doc_result_col
yuhongsun96 marked this conversation as resolved.
Show resolved Hide resolved

Revision ID: 1adf5ea20d2b
Revises: e9cf2bd7baed
Create Date: 2025-01-05 13:14:58.344316

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision = "1adf5ea20d2b"
down_revision = "e9cf2bd7baed"
branch_labels = None
depends_on = None


def upgrade() -> None:
# Add the new column with JSONB type
op.add_column(
"sub_question",
sa.Column("sub_question_doc_results", postgresql.JSONB(), nullable=True),
)


def downgrade() -> None:
# Drop the column
op.drop_column("sub_question", "sub_question_doc_results")
58 changes: 58 additions & 0 deletions backend/alembic/versions/3c6531f32351_add_back_input_prompts.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,58 @@
"""add back input prompts

Revision ID: 3c6531f32351
Revises: aeda5f2df4f6
Create Date: 2025-01-13 12:49:51.705235

"""
from alembic import op
import sqlalchemy as sa
import fastapi_users_db_sqlalchemy

# revision identifiers, used by Alembic.
revision = "3c6531f32351"
down_revision = "aeda5f2df4f6"
branch_labels = None
depends_on = None


def upgrade() -> None:
op.create_table(
"inputprompt",
sa.Column("id", sa.Integer(), autoincrement=True, nullable=False),
sa.Column("prompt", sa.String(), nullable=False),
sa.Column("content", sa.String(), nullable=False),
sa.Column("active", sa.Boolean(), nullable=False),
sa.Column("is_public", sa.Boolean(), nullable=False),
sa.Column(
"user_id",
fastapi_users_db_sqlalchemy.generics.GUID(),
nullable=True,
),
sa.ForeignKeyConstraint(
["user_id"],
["user.id"],
),
sa.PrimaryKeyConstraint("id"),
)
op.create_table(
"inputprompt__user",
sa.Column("input_prompt_id", sa.Integer(), nullable=False),
sa.Column(
"user_id", fastapi_users_db_sqlalchemy.generics.GUID(), nullable=False
),
sa.ForeignKeyConstraint(
["input_prompt_id"],
["inputprompt.id"],
),
sa.ForeignKeyConstraint(
["user_id"],
["user.id"],
),
sa.PrimaryKeyConstraint("input_prompt_id", "user_id"),
)


def downgrade() -> None:
op.drop_table("inputprompt__user")
op.drop_table("inputprompt")
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
"""make categories labels and many to many

Revision ID: 6fc7886d665d
Revises: 3c6531f32351
Create Date: 2025-01-13 18:12:18.029112

"""
from alembic import op
import sqlalchemy as sa


# revision identifiers, used by Alembic.
revision = "6fc7886d665d"
down_revision = "3c6531f32351"
branch_labels = None
depends_on = None


def upgrade() -> None:
# Rename persona_category table to persona_label
op.rename_table("persona_category", "persona_label")

# Create the new association table
op.create_table(
"persona__persona_label",
sa.Column("persona_id", sa.Integer(), nullable=False),
sa.Column("persona_label_id", sa.Integer(), nullable=False),
sa.ForeignKeyConstraint(
["persona_id"],
["persona.id"],
),
sa.ForeignKeyConstraint(
["persona_label_id"],
["persona_label.id"],
),
sa.PrimaryKeyConstraint("persona_id", "persona_label_id"),
)

# Copy existing relationships to the new table
op.execute(
"""
INSERT INTO persona__persona_label (persona_id, persona_label_id)
SELECT id, category_id FROM persona WHERE category_id IS NOT NULL
"""
)

# Remove the old category_id column from persona table
op.drop_column("persona", "category_id")


def downgrade() -> None:
# Rename persona_label table back to persona_category
op.rename_table("persona_label", "persona_category")

# Add back the category_id column to persona table
op.add_column("persona", sa.Column("category_id", sa.Integer(), nullable=True))
op.create_foreign_key(
"persona_category_id_fkey",
"persona",
"persona_category",
["category_id"],
["id"],
)

# Copy the first label relationship back to the persona table
op.execute(
"""
UPDATE persona
SET category_id = (
SELECT persona_label_id
FROM persona__persona_label
WHERE persona__persona_label.persona_id = persona.id
LIMIT 1
)
"""
)

# Drop the association table
op.drop_table("persona__persona_label")
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
"""agent_metric_col_rename__s

Revision ID: 925b58bd75b6
Revises: 9787be927e58
Create Date: 2025-01-06 11:20:26.752441

"""
from alembic import op


# revision identifiers, used by Alembic.
revision = "925b58bd75b6"
down_revision = "9787be927e58"
branch_labels = None
depends_on = None


def upgrade() -> None:
# Rename columns using PostgreSQL syntax
op.alter_column(
"agent__search_metrics", "base_duration_s", new_column_name="base_duration__s"
)
op.alter_column(
"agent__search_metrics", "full_duration_s", new_column_name="full_duration__s"
)


def downgrade() -> None:
# Revert the column renames
op.alter_column(
"agent__search_metrics", "base_duration__s", new_column_name="base_duration_s"
)
op.alter_column(
"agent__search_metrics", "full_duration__s", new_column_name="full_duration_s"
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
"""agent_metric_table_renames__agent__

Revision ID: 9787be927e58
Revises: bceb76d618ec
Create Date: 2025-01-06 11:01:44.210160

"""
from alembic import op


# revision identifiers, used by Alembic.
revision = "9787be927e58"
down_revision = "bceb76d618ec"
branch_labels = None
depends_on = None


def upgrade() -> None:
# Rename table from agent_search_metrics to agent__search_metrics
op.rename_table("agent_search_metrics", "agent__search_metrics")


def downgrade() -> None:
# Rename table back from agent__search_metrics to agent_search_metrics
op.rename_table("agent__search_metrics", "agent_search_metrics")
42 changes: 42 additions & 0 deletions backend/alembic/versions/98a5008d8711_agent_tracking.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
"""agent_tracking

Revision ID: 98a5008d8711
Revises: 027381bce97c
Create Date: 2025-01-04 14:41:52.732238

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision = "98a5008d8711"
down_revision = "027381bce97c"
branch_labels = None
depends_on = None


def upgrade() -> None:
op.create_table(
"agent_search_metrics",
sa.Column("id", sa.Integer(), nullable=False),
sa.Column("user_id", postgresql.UUID(as_uuid=True), nullable=True),
sa.Column("persona_id", sa.Integer(), nullable=True),
sa.Column("agent_type", sa.String(), nullable=False),
sa.Column("start_time", sa.DateTime(timezone=True), nullable=False),
sa.Column("base_duration_s", sa.Float(), nullable=False),
sa.Column("full_duration_s", sa.Float(), nullable=False),
sa.Column("base_metrics", postgresql.JSONB(), nullable=True),
sa.Column("refined_metrics", postgresql.JSONB(), nullable=True),
sa.Column("all_metrics", postgresql.JSONB(), nullable=True),
sa.ForeignKeyConstraint(
["persona_id"],
["persona.id"],
),
sa.ForeignKeyConstraint(["user_id"], ["user.id"], ondelete="CASCADE"),
sa.PrimaryKeyConstraint("id"),
)


def downgrade() -> None:
op.drop_table("agent_search_metrics")
27 changes: 27 additions & 0 deletions backend/alembic/versions/aeda5f2df4f6_add_pinned_assistants.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
"""add pinned assistants

Revision ID: aeda5f2df4f6
Revises: 369644546676
Create Date: 2025-01-09 16:04:10.770636

"""
from alembic import op
import sqlalchemy as sa
from sqlalchemy.dialects import postgresql

# revision identifiers, used by Alembic.
revision = "aeda5f2df4f6"
down_revision = "369644546676"
branch_labels = None
depends_on = None


def upgrade() -> None:
op.add_column(
"user", sa.Column("pinned_assistants", postgresql.JSONB(), nullable=True)
)
op.execute('UPDATE "user" SET pinned_assistants = chosen_assistants')


def downgrade() -> None:
op.drop_column("user", "pinned_assistants")
Loading
Loading