mirror of
https://github.com/ONLYOFFICE/onlyoffice.github.io.git
synced 2026-04-07 14:04:30 +08:00
Worked version
This commit is contained in:
@ -22,10 +22,9 @@
|
||||
|
||||
<script type="text/javascript" src="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.js"></script>
|
||||
<script type="text/javascript" src="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins-ui.js"></script>
|
||||
<script type="text/javascript" src="scripts/engine/providers/base.js"></script>
|
||||
<script src="vendor/jQuery-2.2.2-min/jquery-v2.2.2-min.js"></script>
|
||||
<script src="vendor/select2-4.0.6-rc.1/dist/js/select2.js"></script>
|
||||
<script type="text/javascript" src="scripts/engine/storage.js"></script>
|
||||
<link rel="stylesheet" href="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.css">
|
||||
<script src="vendor/select2-4.0.6-rc.1/dist/js/select2.js"></script>
|
||||
<link rel="stylesheet" href="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.css">
|
||||
<link rel="stylesheet" href="vendor/select2-4.0.6-rc.1/dist/css/select2.css"/>
|
||||
<link rel="stylesheet" href="./resources/styles/common.css">
|
||||
|
||||
@ -22,8 +22,7 @@
|
||||
|
||||
<script type="text/javascript" src="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.js"></script>
|
||||
<script type="text/javascript" src="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins-ui.js"></script>
|
||||
<link rel="stylesheet" href="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.css">
|
||||
<link rel="stylesheet" href="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.css">
|
||||
<link rel="stylesheet" href="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.css">
|
||||
<link rel="stylesheet" href="./resources/styles/common.css">
|
||||
<link rel="stylesheet" href="./resources/styles/aiModelsList.css">
|
||||
</head>
|
||||
|
||||
@ -114,7 +114,7 @@
|
||||
AI._getHeaders = function(_provider) {
|
||||
let provider = _provider.createInstance ? _provider : AI.Storage.getProvider(_provider.name);
|
||||
if (!provider) provider = new AI.Provider();
|
||||
return provider.getRequestHeaderOptions(_provider.key);
|
||||
return provider.getRequestHeaderOptions();
|
||||
};
|
||||
|
||||
AI._extendBody = function(_provider, body) {
|
||||
@ -133,10 +133,13 @@
|
||||
return provider.isUseProxy();
|
||||
};
|
||||
|
||||
AI._getEndpointUrl = function(_provider, endpoint) {
|
||||
AI._getEndpointUrl = function(_provider, endpoint, model) {
|
||||
let provider = _provider.createInstance ? _provider : AI.Storage.getProvider(_provider.name);
|
||||
if (!provider) provider = new AI.Provider(_provider.name, _provider.url, _provider.key);
|
||||
|
||||
if (_provider.key && !provider.key)
|
||||
provider.key = _provider.key;
|
||||
|
||||
let url = provider.url;
|
||||
if (url.endsWith("/"))
|
||||
url = url.substring(0, url.length - 1);
|
||||
@ -148,10 +151,7 @@
|
||||
url += plus;
|
||||
}
|
||||
|
||||
let override = provider.overrideEndpointUrl(endpoint);
|
||||
if (undefined !== override)
|
||||
return override;
|
||||
return url + AI.Endpoints.getUrl(endpoint);
|
||||
return url + provider.getEndpointUrl(endpoint, model);
|
||||
};
|
||||
|
||||
AI.getModels = async function(provider)
|
||||
@ -171,16 +171,20 @@
|
||||
models : []
|
||||
});
|
||||
else {
|
||||
AI.TmpProviderForModels = AI.Provider.createInstance(provider.name, provider.url, provider.key);
|
||||
for (let i = 0, len = data.data.length; i < len; i++)
|
||||
AI.TmpProviderForModels = AI.createProviderInstance(provider.name, provider.url, provider.key);
|
||||
let models = data.data;
|
||||
if (data.data.models)
|
||||
models = data.data.models;
|
||||
for (let i = 0, len = models.length; i < len; i++)
|
||||
{
|
||||
let model = data.data[i];
|
||||
let model = models[i];
|
||||
AI.TmpProviderForModels.correctModelInfo(model);
|
||||
|
||||
if (!model.id)
|
||||
continue;
|
||||
|
||||
model.name = model.id;
|
||||
model.endpoints = [];
|
||||
model.options = {};
|
||||
model.options = {};
|
||||
|
||||
if (AI.TmpProviderForModels.checkExcludeModel(model))
|
||||
continue;
|
||||
@ -357,7 +361,7 @@
|
||||
|
||||
let endpointType = isUseCompletionsInsteadChat ? AI.Endpoints.Types.v1.Completions :
|
||||
AI.Endpoints.Types.v1.Chat_Completions;
|
||||
objRequest.url = AI._getEndpointUrl(provider, endpointType);
|
||||
objRequest.url = AI._getEndpointUrl(provider, endpointType, this.model);
|
||||
|
||||
objRequest.body = {
|
||||
model : this.modelUI.id
|
||||
|
||||
@ -78,11 +78,11 @@
|
||||
|
||||
for (let i in obj.providers) {
|
||||
let pr = obj.providers[i];
|
||||
AI.Providers[i] = AI.Provider.createInstance(pr.name, pr.url, pr.key);
|
||||
AI.Providers[i] = AI.createProviderInstance(pr.name, pr.url, pr.key);
|
||||
AI.Providers[i].models = pr.models || [];
|
||||
|
||||
if (fixVersion2) {
|
||||
if (!AI.Storage.isInternalProvider(pr.name))
|
||||
if (!AI.isInternalProvider(pr.name))
|
||||
AI.Providers[i].addon = "v1";
|
||||
}
|
||||
}
|
||||
@ -111,7 +111,7 @@
|
||||
AI.Providers[model.provider.name].key = model.provider.key;
|
||||
} else {
|
||||
AI.Providers[model.provider.name] =
|
||||
AI.Provider.createInstance(model.provider.name, model.provider.url, model.provider.key);
|
||||
AI.createProviderInstance(model.provider.name, model.provider.url, model.provider.key);
|
||||
}
|
||||
|
||||
if (AI.TmpProviderForModels &&
|
||||
|
||||
@ -119,7 +119,7 @@
|
||||
AI.createProviderInstance = function(name, url, key) {
|
||||
for (let i = 0, len = window.AI.InternalProviders.length; i < len; i++) {
|
||||
if (name === AI.InternalProviders[i].name)
|
||||
return AI.InternalProviders[i].createInstance(name, url, key);
|
||||
return AI.InternalProviders[i].createInstance(name, url, key, AI.InternalProviders[i].addon);
|
||||
}
|
||||
return new Provider(name, url, key);
|
||||
};
|
||||
|
||||
@ -26,20 +26,20 @@ class Provider extends AI.Provider {
|
||||
return AI.CapabilitiesUI.Chat | AI.CapabilitiesUI.Vision;
|
||||
}
|
||||
|
||||
getEndpointUrl(endpoint) {
|
||||
getEndpointUrl(endpoint, model) {
|
||||
if (AI.Endpoints.Types.v1.Chat_Completions === endpoint)
|
||||
return "/messages";
|
||||
return super.getEndpointUrl();
|
||||
}
|
||||
|
||||
getRequestHeaderOptions(key) {
|
||||
getRequestHeaderOptions() {
|
||||
let headers = {
|
||||
"Content-Type" : "application/json",
|
||||
"anthropic-version" : "2023-06-01",
|
||||
"anthropic-dangerous-direct-browser-access": "true"
|
||||
};
|
||||
if (key)
|
||||
headers["x-api-key"] = key;
|
||||
if (this.key)
|
||||
headers["x-api-key"] = this.key;
|
||||
return headers;
|
||||
}
|
||||
|
||||
|
||||
@ -3,7 +3,74 @@
|
||||
class Provider extends AI.Provider {
|
||||
|
||||
constructor() {
|
||||
super("Google-Gemini", "https://generativelanguage.googleapis.com/v1beta", "", "");
|
||||
super("Google-Gemini", "https://generativelanguage.googleapis.com", "", "v1beta");
|
||||
}
|
||||
|
||||
correctModelInfo(model) {
|
||||
model.id = model.name;
|
||||
let index = model.name.indexOf("models/");
|
||||
if (index === 0)
|
||||
model.name = model.name.substring(7);
|
||||
}
|
||||
|
||||
checkExcludeModel(model) {
|
||||
if (model.id === "models/chat-bison-001" ||
|
||||
model.id === "models/text-bison-001")
|
||||
return true;
|
||||
|
||||
if (-1 !== model.id.indexOf("gemini-1.0"))
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
checkModelCapability(model) {
|
||||
if (model.inputTokenLimit)
|
||||
model.options.max_input_tokens = model.inputTokenLimit;
|
||||
|
||||
if (Array.isArray(model.supportedGenerationMethods) &&
|
||||
model.supportedGenerationMethods.includes("generateContent"))
|
||||
{
|
||||
model.endpoints.push(AI.Endpoints.Types.v1.Chat_Completions);
|
||||
let caps = AI.CapabilitiesUI.Chat;
|
||||
if (-1 !== model.id.indexOf("vision"))
|
||||
caps |= AI.CapabilitiesUI.Vision;
|
||||
|
||||
return AI.CapabilitiesUI.Chat | AI.CapabilitiesUI.Vision;
|
||||
}
|
||||
|
||||
if (Array.isArray(model.supportedGenerationMethods) &&
|
||||
model.supportedGenerationMethods.includes("embedContent"))
|
||||
{
|
||||
model.endpoints.push(AI.Endpoints.Types.v1.Embeddings);
|
||||
return AI.CapabilitiesUI.Embeddings;
|
||||
}
|
||||
|
||||
return AI.CapabilitiesUI.All;
|
||||
}
|
||||
|
||||
getEndpointUrl(endpoint, model) {
|
||||
let Types = AI.Endpoints.Types;
|
||||
let url = "";
|
||||
switch (endpoint)
|
||||
{
|
||||
case Types.v1.Models:
|
||||
url = "/models";
|
||||
break;
|
||||
default:
|
||||
url = "/" + model.id + ":generateContent";
|
||||
break;
|
||||
}
|
||||
if (this.key)
|
||||
url += "?key=" + this.key;
|
||||
return url;
|
||||
}
|
||||
|
||||
getRequestHeaderOptions() {
|
||||
let headers = {
|
||||
"Content-Type" : "application/json"
|
||||
};
|
||||
return headers;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@ -6,4 +6,22 @@ class Provider extends AI.Provider {
|
||||
super("Ollama", "http://localhost:11434/api", "", "");
|
||||
}
|
||||
|
||||
getEndpointUrl(endpoint, model) {
|
||||
let Types = AI.Endpoints.Types;
|
||||
switch (endpoint)
|
||||
{
|
||||
case Types.v1.Models:
|
||||
return "/tags";
|
||||
|
||||
case Types.v1.Chat_Completions:
|
||||
return "/chat";
|
||||
case Types.v1.Completions:
|
||||
return "/generate";
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
return super.getEndpointUrl();
|
||||
}
|
||||
}
|
||||
|
||||
@ -19,6 +19,13 @@
|
||||
this.models = [];
|
||||
this.modelsUI = [];
|
||||
}
|
||||
|
||||
/**
|
||||
* Correct received (*models* endpoint) model object.
|
||||
*/
|
||||
correctModelInfo(model) {
|
||||
model.name = model.id;
|
||||
}
|
||||
|
||||
/**
|
||||
* Return *true* if you do not want to work with a specific model (model.id).
|
||||
@ -42,7 +49,7 @@
|
||||
* Url for a specific endpoint.
|
||||
* @returns {string}
|
||||
*/
|
||||
getEndpointUrl(endpoint) {
|
||||
getEndpointUrl(endpoint, model) {
|
||||
let Types = AI.Endpoints.Types;
|
||||
switch (endpoint)
|
||||
{
|
||||
@ -94,7 +101,7 @@
|
||||
* Don't override this method unless you know what you're doing.
|
||||
* @returns {Object}
|
||||
*/
|
||||
getRequestBodyOptions = function() {
|
||||
getRequestBodyOptions() {
|
||||
return {};
|
||||
}
|
||||
|
||||
@ -102,12 +109,12 @@
|
||||
* The returned object is an enumeration of all the headers for the requests.
|
||||
* @returns {Object}
|
||||
*/
|
||||
getRequestHeaderOptions = function(key) {
|
||||
getRequestHeaderOptions() {
|
||||
let headers = {
|
||||
"Content-Type" : "application/json"
|
||||
};
|
||||
if (key)
|
||||
headers["Authorization"] = "Bearer " + key;
|
||||
if (this.key)
|
||||
headers["Authorization"] = "Bearer " + this.key;
|
||||
return headers;
|
||||
}
|
||||
|
||||
@ -135,11 +142,12 @@
|
||||
* ========================================================================================
|
||||
*/
|
||||
createInstance(name, url, key, addon) {
|
||||
let inst = Object.create(Object.getPrototypeOf(this));
|
||||
//let inst = Object.create(Object.getPrototypeOf(this));
|
||||
let inst = new this.constructor();
|
||||
inst.name = name;
|
||||
inst.url = url;
|
||||
inst.key = key;
|
||||
inst.addon = addon;
|
||||
inst.addon = addon || "";
|
||||
return inst;
|
||||
}
|
||||
|
||||
|
||||
@ -24,7 +24,7 @@
|
||||
<script type="text/javascript" src="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins-ui.js"></script>
|
||||
<script src="vendor/jQuery-2.2.2-min/jquery-v2.2.2-min.js"></script>
|
||||
<script src="vendor/select2-4.0.6-rc.1/dist/js/select2.js"></script>
|
||||
<script type="text/javascript" src="scripts/engine/storage.js"></script>
|
||||
<script type="text/javascript" src="scripts/engine/providers/base.js"></script>
|
||||
<link rel="stylesheet" href="https://onlyoffice.github.io/sdkjs-plugins/v1/plugins.css">
|
||||
<link rel="stylesheet" href="vendor/select2-4.0.6-rc.1/dist/css/select2.css"/>
|
||||
<link rel="stylesheet" href="./resources/styles/common.css">
|
||||
|
||||
Reference in New Issue
Block a user