-
-
Notifications
You must be signed in to change notification settings - Fork 81
Description
- Surfingkeys Version: 1.12
- Surfingkeys-conf Version (git hash):
mainHEAD - Operating System: Any
- Browser Version: Any
Details
First of all, thanks for the amazing work you've put in this repo! It served me as a solid base to customize my SurfingKeys experience to the next level.
There's a feature I miss quite a bit though, and that's the ability to make HTTP requests other than GET in search_engines.js.
I'm not sure if I missed some polymorphic logic on completions.<search-engine>.search and completions.<search-engine>.compl, but it seems to me that it only supports string parameters (i.e. it only supports GET requests to the URL provided as a template).
That probably works in >90% of the cases, but recently I've implemented on my fork the support for ChatGPT results, and their API only supports POST for the queries.
My workaround has been to spin up my own little service that proxies GET requests to POST requests to the ChatGPT API, and then use that URL for the completions, but this definitely isn't scalable.
I also see it as a problem if somebody wants to implement search results from (x)RPC or GraphQL APIs, since those are likely to take POST/PUT requests.
I may work on a PR for it if there's enough interest. I have two possible approaches in mind:
complandsearchcan be either strings or objects containing the static configuration of an HTTP request to be passed to e.g. axios. Example:
completions.cg = {
compl: {
method: 'POST',
url: 'https://api.openai.com/v1/completions',
data: {
prompt: '$QUERY$', // I'm open on how to define the user query placeholder
model: 'text-davinci-003',
max_tokens: 2048,
},
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${conf.priv.chatgptKey}`,
}
},
// ...
}complandsearchcan be callbacks. Example:
completions.cg = {
compl: async (query, conf) => {
return await axios.post(
'https://api.openai.com/v1/completions',
{
prompt: query,
model: 'text-davinci-003',
max_tokens: 2048,
},
{
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${conf.priv.chatgptKey}`,
}
}
}
// ...
}