Moved GPT4all to chat plugin more

This commit is contained in:
kvan7 2024-01-22 03:24:31 +00:00
parent 11a2d26393
commit 3f9f8940ec
3 changed files with 56 additions and 57 deletions

View file

@ -1,4 +1,6 @@
from searx.search import SearchWithPlugins
from pathlib import Path
from gpt4all import GPT4All
name = "Chat Plugin"
@ -11,5 +13,29 @@ def post_search(request, search: SearchWithPlugins) -> None:
search_request = search.search_query
container = search.result_container
# container.infoboxes.append(container.infoboxes[0])
container.chat_box = [{'chat_box': 'hello world'}]
container.chat_box[0]['content'] = 'some string that relates to your search query here' + f'\n{search_request.query}'
container.chat_box = {'chat_box': 'GPT4All'}
container.chat_box['content'] = 'Generating response to query: ' + f'\n{search_request.query}'
def generate_chat_content(query):
model = GPT4All(model_name='gpt4all-falcon-q4_0.gguf',
model_path=(Path.cwd() / 'searx' / 'plugins'),
allow_download=False)
system_template = """
### System Instructions:
1. Provide concise and directly relevant answers to the specific query in HTML format, emulating the style of an info box on a search engine.
2. Only use appropriate HTML tags (e.g., `<div>`, `<p>`, `<h1>`) to structure the response. Do not use markdown syntax or backticks(```) to format the response.
3. Directly address the query. For example, if the query is about a specific function or method in a programming language, focus on explaining and providing examples of that function or method.
4. Include practical examples or code snippets relevant to the query.
5. Keep definitions or explanations brief and specific, focusing only on aspects directly related to the query.
"""
prompt_template = """
### Query:
{0}
### Expected Information Box:
"""
with model.chat_session(system_template, prompt_template):
response = model.generate(query, max_tokens=500, repeat_penalty=1.3)
return str(response)

View file

@ -3,21 +3,24 @@
<p><bdi>{{ chat_box.content | safe }}</bdi></p>
</aside>
<script>
document.addEventListener("DOMContentLoaded", function () {
function updateChatBox() {
fetch('/get-chat-content')
.then(response => response.json())
.then(data => {
const chatBox = document.querySelector('.chat_box');
console.log('response from api', data);
chatBox.querySelector('bdi').textContent = data.chat_box;
chatBox.querySelector('p').textContent = data.content;
})
.catch(error => console.error('Error:', error));
}
window.onload = function () {
// Extract the 'q' parameter from the search URL in the sidebar
const searchUrl = document.querySelector('#search_url pre').textContent;
const url = new URL(searchUrl);
const query = url.searchParams.get('q');
// Call updateChatBox after search is completed
// This might be tied to an event, depending on how your search functionality is implemented
updateChatBox();
});
fetch('/generate-chat-content', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ query: query }),
})
.then(response => response.json())
.then(data => {
const chatBox = document.querySelector('.chat_box');
chatBox.querySelector('h2 bdi').style.display = 'none';
chatBox.querySelector('p bdi').innerHTML = data.content;
});
};
</script>

View file

@ -96,7 +96,7 @@ from searx.utils import (
from searx.version import VERSION_STRING, GIT_URL, GIT_BRANCH
from searx.query import RawTextQuery
from searx.plugins import Plugin, plugins, initialize as plugin_initialize
import searx.plugins.chat
import searx.plugins.chat as chat
from searx.plugins.oa_doi_rewrite import get_doi_resolver
from searx.preferences import (
Preferences,
@ -664,7 +664,7 @@ def search():
search_query, raw_text_query, _, _, selected_locale = get_search_query_from_webapp(
request.preferences, request.form
)
if searx.plugins.chat in request.user_plugins:
if chat in request.user_plugins:
extremely_bad_global_variable_search_query = raw_text_query.getQuery()
search = SearchWithPlugins(search_query, request.user_plugins, request) # pylint: disable=redefined-outer-name
result_container = search.search()
@ -1309,43 +1309,13 @@ def config():
}
)
@app.route('/get-chat-content')
def get_chat_content():
global extremely_bad_global_variable_search_query
# Retrieve chat content from wherever it's stored
# temp
chat_content = None
# retrieve from searx.plugins.chat
if extremely_bad_global_variable_search_query:
# do task
chat_content = {'chat_box': 'hello world', 'content': 'Not Generated Response Yet'}
model = GPT4All(model_name='gpt4all-falcon-q4_0.gguf',
model_path=(Path.cwd() / 'searx' / 'plugins'),
allow_download=False)
system_template = """
### System Instructions:
1. Provide concise, accurate, and directly relevant answers to queries.
2. Emulate the style of a Google Answer Box, which includes straightforward and authoritative responses.
3. Where appropriate, use bullet points or structured formatting to clearly present information.
4. Avoid unnecessary elaborations and focus on the key points of the query.
5. Ensure the information is up-to-date and factually correct.
"""
prompt_template = """
### Query:
{0}
### Expected Response:
"""
with model.chat_session(system_template, prompt_template):
response = model.generate(extremely_bad_global_variable_search_query)
chat_content['content'] = str(response)
extremely_bad_global_variable_search_query = None
return jsonify(chat_content)
@app.route('/generate-chat-content', methods=['POST'])
def generate_chat_content_endpoint():
if request.json is None:
return jsonify({'content': ''})
query = request.json.get('query')
chat_content = chat.generate_chat_content(query)
return jsonify({'chat_box': 'GPT4ALL', 'content': chat_content})
@app.errorhandler(404)