Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
chenpangpang
open-webui
Commits
fbdfb7e4
Commit
fbdfb7e4
authored
Jun 01, 2024
by
Timothy J. Baek
Browse files
refac: web search
parent
999d2bc2
Changes
7
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
36 additions
and
20 deletions
+36
-20
backend/apps/rag/main.py
backend/apps/rag/main.py
+17
-3
backend/apps/rag/search/brave.py
backend/apps/rag/search/brave.py
+4
-4
backend/apps/rag/search/google_pse.py
backend/apps/rag/search/google_pse.py
+3
-3
backend/apps/rag/search/searxng.py
backend/apps/rag/search/searxng.py
+3
-3
backend/apps/rag/search/serper.py
backend/apps/rag/search/serper.py
+3
-3
backend/apps/rag/search/serpstack.py
backend/apps/rag/search/serpstack.py
+3
-3
src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte
...nts/chat/Messages/ResponseMessage/WebSearchResults.svelte
+3
-1
No files found.
backend/apps/rag/main.py
View file @
fbdfb7e4
...
@@ -739,7 +739,11 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
...
@@ -739,7 +739,11 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
# TODO: add playwright to search the web
# TODO: add playwright to search the web
if
engine
==
"searxng"
:
if
engine
==
"searxng"
:
if
app
.
state
.
config
.
SEARXNG_QUERY_URL
:
if
app
.
state
.
config
.
SEARXNG_QUERY_URL
:
return
search_searxng
(
app
.
state
.
config
.
SEARXNG_QUERY_URL
,
query
)
return
search_searxng
(
app
.
state
.
config
.
SEARXNG_QUERY_URL
,
query
,
app
.
state
.
config
.
RAG_WEB_SEARCH_RESULT_COUNT
,
)
else
:
else
:
raise
Exception
(
"No SEARXNG_QUERY_URL found in environment variables"
)
raise
Exception
(
"No SEARXNG_QUERY_URL found in environment variables"
)
elif
engine
==
"google_pse"
:
elif
engine
==
"google_pse"
:
...
@@ -751,6 +755,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
...
@@ -751,6 +755,7 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
app
.
state
.
config
.
GOOGLE_PSE_API_KEY
,
app
.
state
.
config
.
GOOGLE_PSE_API_KEY
,
app
.
state
.
config
.
GOOGLE_PSE_ENGINE_ID
,
app
.
state
.
config
.
GOOGLE_PSE_ENGINE_ID
,
query
,
query
,
app
.
state
.
config
.
RAG_WEB_SEARCH_RESULT_COUNT
,
)
)
else
:
else
:
raise
Exception
(
raise
Exception
(
...
@@ -758,7 +763,11 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
...
@@ -758,7 +763,11 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
)
)
elif
engine
==
"brave"
:
elif
engine
==
"brave"
:
if
app
.
state
.
config
.
BRAVE_SEARCH_API_KEY
:
if
app
.
state
.
config
.
BRAVE_SEARCH_API_KEY
:
return
search_brave
(
app
.
state
.
config
.
BRAVE_SEARCH_API_KEY
,
query
)
return
search_brave
(
app
.
state
.
config
.
BRAVE_SEARCH_API_KEY
,
query
,
app
.
state
.
config
.
RAG_WEB_SEARCH_RESULT_COUNT
,
)
else
:
else
:
raise
Exception
(
"No BRAVE_SEARCH_API_KEY found in environment variables"
)
raise
Exception
(
"No BRAVE_SEARCH_API_KEY found in environment variables"
)
elif
engine
==
"serpstack"
:
elif
engine
==
"serpstack"
:
...
@@ -766,13 +775,18 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
...
@@ -766,13 +775,18 @@ def search_web(engine: str, query: str) -> list[SearchResult]:
return
search_serpstack
(
return
search_serpstack
(
app
.
state
.
config
.
SERPSTACK_API_KEY
,
app
.
state
.
config
.
SERPSTACK_API_KEY
,
query
,
query
,
app
.
state
.
config
.
RAG_WEB_SEARCH_RESULT_COUNT
,
https_enabled
=
app
.
state
.
config
.
SERPSTACK_HTTPS
,
https_enabled
=
app
.
state
.
config
.
SERPSTACK_HTTPS
,
)
)
else
:
else
:
raise
Exception
(
"No SERPSTACK_API_KEY found in environment variables"
)
raise
Exception
(
"No SERPSTACK_API_KEY found in environment variables"
)
elif
engine
==
"serper"
:
elif
engine
==
"serper"
:
if
app
.
state
.
config
.
SERPER_API_KEY
:
if
app
.
state
.
config
.
SERPER_API_KEY
:
return
search_serper
(
app
.
state
.
config
.
SERPER_API_KEY
,
query
)
return
search_serper
(
app
.
state
.
config
.
SERPER_API_KEY
,
query
,
app
.
state
.
config
.
RAG_WEB_SEARCH_RESULT_COUNT
,
)
else
:
else
:
raise
Exception
(
"No SERPER_API_KEY found in environment variables"
)
raise
Exception
(
"No SERPER_API_KEY found in environment variables"
)
else
:
else
:
...
...
backend/apps/rag/search/brave.py
View file @
fbdfb7e4
...
@@ -3,13 +3,13 @@ import logging
...
@@ -3,13 +3,13 @@ import logging
import
requests
import
requests
from
apps.rag.search.main
import
SearchResult
from
apps.rag.search.main
import
SearchResult
from
config
import
SRC_LOG_LEVELS
,
RAG_WEB_SEARCH_RESULT_COUNT
from
config
import
SRC_LOG_LEVELS
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
def
search_brave
(
api_key
:
str
,
query
:
str
)
->
list
[
SearchResult
]:
def
search_brave
(
api_key
:
str
,
query
:
str
,
count
:
int
)
->
list
[
SearchResult
]:
"""Search using Brave's Search API and return the results as a list of SearchResult objects.
"""Search using Brave's Search API and return the results as a list of SearchResult objects.
Args:
Args:
...
@@ -22,7 +22,7 @@ def search_brave(api_key: str, query: str) -> list[SearchResult]:
...
@@ -22,7 +22,7 @@ def search_brave(api_key: str, query: str) -> list[SearchResult]:
"Accept-Encoding"
:
"gzip"
,
"Accept-Encoding"
:
"gzip"
,
"X-Subscription-Token"
:
api_key
,
"X-Subscription-Token"
:
api_key
,
}
}
params
=
{
"q"
:
query
,
"count"
:
RAG_WEB_SEARCH_RESULT_COUNT
}
params
=
{
"q"
:
query
,
"count"
:
count
}
response
=
requests
.
get
(
url
,
headers
=
headers
,
params
=
params
)
response
=
requests
.
get
(
url
,
headers
=
headers
,
params
=
params
)
response
.
raise_for_status
()
response
.
raise_for_status
()
...
@@ -33,5 +33,5 @@ def search_brave(api_key: str, query: str) -> list[SearchResult]:
...
@@ -33,5 +33,5 @@ def search_brave(api_key: str, query: str) -> list[SearchResult]:
SearchResult
(
SearchResult
(
link
=
result
[
"url"
],
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"snippet"
)
link
=
result
[
"url"
],
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"snippet"
)
)
)
for
result
in
results
[:
RAG_WEB_SEARCH_RESULT_COUNT
]
for
result
in
results
[:
count
]
]
]
backend/apps/rag/search/google_pse.py
View file @
fbdfb7e4
...
@@ -4,14 +4,14 @@ import logging
...
@@ -4,14 +4,14 @@ import logging
import
requests
import
requests
from
apps.rag.search.main
import
SearchResult
from
apps.rag.search.main
import
SearchResult
from
config
import
SRC_LOG_LEVELS
,
RAG_WEB_SEARCH_RESULT_COUNT
from
config
import
SRC_LOG_LEVELS
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
def
search_google_pse
(
def
search_google_pse
(
api_key
:
str
,
search_engine_id
:
str
,
query
:
str
api_key
:
str
,
search_engine_id
:
str
,
query
:
str
,
count
:
int
)
->
list
[
SearchResult
]:
)
->
list
[
SearchResult
]:
"""Search using Google's Programmable Search Engine API and return the results as a list of SearchResult objects.
"""Search using Google's Programmable Search Engine API and return the results as a list of SearchResult objects.
...
@@ -27,7 +27,7 @@ def search_google_pse(
...
@@ -27,7 +27,7 @@ def search_google_pse(
"cx"
:
search_engine_id
,
"cx"
:
search_engine_id
,
"q"
:
query
,
"q"
:
query
,
"key"
:
api_key
,
"key"
:
api_key
,
"num"
:
RAG_WEB_SEARCH_RESULT_COUNT
,
"num"
:
count
,
}
}
response
=
requests
.
request
(
"GET"
,
url
,
headers
=
headers
,
params
=
params
)
response
=
requests
.
request
(
"GET"
,
url
,
headers
=
headers
,
params
=
params
)
...
...
backend/apps/rag/search/searxng.py
View file @
fbdfb7e4
...
@@ -3,13 +3,13 @@ import logging
...
@@ -3,13 +3,13 @@ import logging
import
requests
import
requests
from
apps.rag.search.main
import
SearchResult
from
apps.rag.search.main
import
SearchResult
from
config
import
SRC_LOG_LEVELS
,
RAG_WEB_SEARCH_RESULT_COUNT
from
config
import
SRC_LOG_LEVELS
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
def
search_searxng
(
query_url
:
str
,
query
:
str
)
->
list
[
SearchResult
]:
def
search_searxng
(
query_url
:
str
,
query
:
str
,
count
:
int
)
->
list
[
SearchResult
]:
"""Search a SearXNG instance for a query and return the results as a list of SearchResult objects.
"""Search a SearXNG instance for a query and return the results as a list of SearchResult objects.
Args:
Args:
...
@@ -40,5 +40,5 @@ def search_searxng(query_url: str, query: str) -> list[SearchResult]:
...
@@ -40,5 +40,5 @@ def search_searxng(query_url: str, query: str) -> list[SearchResult]:
SearchResult
(
SearchResult
(
link
=
result
[
"url"
],
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"content"
)
link
=
result
[
"url"
],
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"content"
)
)
)
for
result
in
sorted_results
[:
RAG_WEB_SEARCH_RESULT_COUNT
]
for
result
in
sorted_results
[:
count
]
]
]
backend/apps/rag/search/serper.py
View file @
fbdfb7e4
...
@@ -4,13 +4,13 @@ import logging
...
@@ -4,13 +4,13 @@ import logging
import
requests
import
requests
from
apps.rag.search.main
import
SearchResult
from
apps.rag.search.main
import
SearchResult
from
config
import
SRC_LOG_LEVELS
,
RAG_WEB_SEARCH_RESULT_COUNT
from
config
import
SRC_LOG_LEVELS
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
def
search_serper
(
api_key
:
str
,
query
:
str
)
->
list
[
SearchResult
]:
def
search_serper
(
api_key
:
str
,
query
:
str
,
count
:
int
)
->
list
[
SearchResult
]:
"""Search using serper.dev's API and return the results as a list of SearchResult objects.
"""Search using serper.dev's API and return the results as a list of SearchResult objects.
Args:
Args:
...
@@ -35,5 +35,5 @@ def search_serper(api_key: str, query: str) -> list[SearchResult]:
...
@@ -35,5 +35,5 @@ def search_serper(api_key: str, query: str) -> list[SearchResult]:
title
=
result
.
get
(
"title"
),
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"description"
),
snippet
=
result
.
get
(
"description"
),
)
)
for
result
in
results
[:
RAG_WEB_SEARCH_RESULT_COUNT
]
for
result
in
results
[:
count
]
]
]
backend/apps/rag/search/serpstack.py
View file @
fbdfb7e4
...
@@ -4,14 +4,14 @@ import logging
...
@@ -4,14 +4,14 @@ import logging
import
requests
import
requests
from
apps.rag.search.main
import
SearchResult
from
apps.rag.search.main
import
SearchResult
from
config
import
SRC_LOG_LEVELS
,
RAG_WEB_SEARCH_RESULT_COUNT
from
config
import
SRC_LOG_LEVELS
log
=
logging
.
getLogger
(
__name__
)
log
=
logging
.
getLogger
(
__name__
)
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
log
.
setLevel
(
SRC_LOG_LEVELS
[
"RAG"
])
def
search_serpstack
(
def
search_serpstack
(
api_key
:
str
,
query
:
str
,
https_enabled
:
bool
=
True
api_key
:
str
,
query
:
str
,
count
:
int
,
https_enabled
:
bool
=
True
)
->
list
[
SearchResult
]:
)
->
list
[
SearchResult
]:
"""Search using serpstack.com's and return the results as a list of SearchResult objects.
"""Search using serpstack.com's and return the results as a list of SearchResult objects.
...
@@ -39,5 +39,5 @@ def search_serpstack(
...
@@ -39,5 +39,5 @@ def search_serpstack(
SearchResult
(
SearchResult
(
link
=
result
[
"url"
],
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"snippet"
)
link
=
result
[
"url"
],
title
=
result
.
get
(
"title"
),
snippet
=
result
.
get
(
"snippet"
)
)
)
for
result
in
results
[:
RAG_WEB_SEARCH_RESULT_COUNT
]
for
result
in
results
[:
count
]
]
]
src/lib/components/chat/Messages/ResponseMessage/WebSearchResults.svelte
View file @
fbdfb7e4
...
@@ -35,7 +35,9 @@
...
@@ -35,7 +35,9 @@
? ''
? ''
: 'border-b border-gray-300/30 dark:border-gray-700/50'} group/item justify-between font-normal text-gray-800 dark:text-gray-300"
: 'border-b border-gray-300/30 dark:border-gray-700/50'} group/item justify-between font-normal text-gray-800 dark:text-gray-300"
>
>
{url}
<div class=" line-clamp-1">
{url}
</div>
<div
<div
class=" ml-1 text-white dark:text-gray-900 group-hover/item:text-gray-600 dark:group-hover/item:text-white transition"
class=" ml-1 text-white dark:text-gray-900 group-hover/item:text-gray-600 dark:group-hover/item:text-white transition"
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment