Compare commits
1
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
bf8b3a4b40 |
@@ -1,10 +1,8 @@
|
|||||||
< 3.5.0.beta1-dev: bdef136080074a993e7c4f5ca562edc31a8ba756
|
|
||||||
< 3.4.0.beta4-dev: a53719ab8eb071459f215227421b3ea4987e5f87
|
|
||||||
< 3.4.0.beta4-dev: 20612fde52d3f740cad64823ef8aadb0748b567f
|
|
||||||
< 3.4.0.beta3-dev: decf1bb49d737ea15308400f22f89d1d1e71d13d
|
|
||||||
< 3.4.0.beta1-dev: 9d887ad4ace8e33c3fe7dbb39237e882c08b4f0b
|
|
||||||
< 3.3.0.beta5-dev: 4d8090002f6dcd8e34d41033606bf131fa221475
|
|
||||||
< 3.3.0.beta2-dev: 61890b667c06299841ae88946f84a112f00060e1
|
< 3.3.0.beta2-dev: 61890b667c06299841ae88946f84a112f00060e1
|
||||||
< 3.3.0.beta1-dev: d94234d89f50733678a5c62809445198a9fda74b
|
< 3.3.0.beta1-dev: a65c4076a63104b61d213534db7f89aa3c8acd9e
|
||||||
3.2.999: d94234d89f50733678a5c62809445198a9fda74b
|
< 3.2.0.beta5-dev: c70f43f130fb98e4a1adb1afd9b621aaa49088e3
|
||||||
|
< 3.2.0.beta4-dev: 493b48477a9288f2f1b6f021954088705a6673d6
|
||||||
|
< 3.2.0.beta2-dev: 3bced1c6f525553fe2b5b79d29bd66c1cf2a47d5
|
||||||
3.1.999: c0415bb7eb878b1b7abf112d65cba981030df8df
|
3.1.999: c0415bb7eb878b1b7abf112d65cba981030df8df
|
||||||
|
< 3.2.0.beta1-dev: 3e7c99de894b03e9161d9481da118fe893991a1d
|
||||||
|
3.1.0.beta3: 057fbe1ce6
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
module.exports = require("@discourse/lint-configs/eslint");
|
||||||
@@ -1,7 +1,3 @@
|
|||||||
node_modules
|
node_modules
|
||||||
/gems
|
/gems
|
||||||
/auto_generated
|
/auto_generated
|
||||||
.env
|
|
||||||
evals/log
|
|
||||||
evals/cases
|
|
||||||
config/eval-llms.local.yml
|
|
||||||
|
|||||||
@@ -2,6 +2,3 @@ inherit_gem:
|
|||||||
rubocop-discourse: stree-compat.yml
|
rubocop-discourse: stree-compat.yml
|
||||||
RSpec/NamedSubject:
|
RSpec/NamedSubject:
|
||||||
Enabled: false
|
Enabled: false
|
||||||
|
|
||||||
Style/GlobalVars:
|
|
||||||
AllowedVariables: [$prometheus_client]
|
|
||||||
|
|||||||
+4
-2
@@ -29,10 +29,11 @@ GEM
|
|||||||
racc
|
racc
|
||||||
prettier_print (1.2.1)
|
prettier_print (1.2.1)
|
||||||
racc (1.8.0)
|
racc (1.8.0)
|
||||||
rack (3.1.10)
|
rack (3.1.6)
|
||||||
rainbow (3.1.1)
|
rainbow (3.1.1)
|
||||||
regexp_parser (2.9.2)
|
regexp_parser (2.9.2)
|
||||||
rexml (3.3.9)
|
rexml (3.3.1)
|
||||||
|
strscan
|
||||||
rubocop (1.64.1)
|
rubocop (1.64.1)
|
||||||
json (~> 2.3)
|
json (~> 2.3)
|
||||||
language_server-protocol (>= 3.17.0)
|
language_server-protocol (>= 3.17.0)
|
||||||
@@ -69,6 +70,7 @@ GEM
|
|||||||
rubocop (~> 1.61)
|
rubocop (~> 1.61)
|
||||||
rubocop-rspec (~> 3, >= 3.0.1)
|
rubocop-rspec (~> 3, >= 3.0.1)
|
||||||
ruby-progressbar (1.13.0)
|
ruby-progressbar (1.13.0)
|
||||||
|
strscan (3.1.0)
|
||||||
syntax_tree (6.2.0)
|
syntax_tree (6.2.0)
|
||||||
prettier_print (>= 1.2.0)
|
prettier_print (>= 1.2.0)
|
||||||
tzinfo (2.0.6)
|
tzinfo (2.0.6)
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
The MIT License (MIT)
|
The MIT License (MIT)
|
||||||
|
|
||||||
Copyright (c) Civilized Discourse Construction Kit, Inc.
|
Copyright (c) 2021 Civilized Discourse Construction Kit
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
|
|||||||
@@ -3,27 +3,3 @@
|
|||||||
**Plugin Summary**
|
**Plugin Summary**
|
||||||
|
|
||||||
For more information, please see: https://meta.discourse.org/t/discourse-ai/259214?u=falco
|
For more information, please see: https://meta.discourse.org/t/discourse-ai/259214?u=falco
|
||||||
|
|
||||||
### Evals
|
|
||||||
|
|
||||||
The directory `evals` contains AI evals for the Discourse AI plugin.
|
|
||||||
You may create a local config by copying `config/eval-llms.yml` to `config/eval-llms.local.yml` and modifying the values.
|
|
||||||
|
|
||||||
To run them use:
|
|
||||||
|
|
||||||
cd evals
|
|
||||||
./run --help
|
|
||||||
|
|
||||||
```
|
|
||||||
Usage: evals/run [options]
|
|
||||||
-e, --eval NAME Name of the evaluation to run
|
|
||||||
--list-models List models
|
|
||||||
-m, --model NAME Model to evaluate (will eval all models if not specified)
|
|
||||||
-l, --list List evals
|
|
||||||
```
|
|
||||||
|
|
||||||
To run evals you will need to configure API keys in your environment:
|
|
||||||
|
|
||||||
OPENAI_API_KEY=your_openai_api_key
|
|
||||||
ANTHROPIC_API_KEY=your_anthropic_api_key
|
|
||||||
GEMINI_API_KEY=your_gemini_api_key
|
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
{
|
|
||||||
"tests": {
|
|
||||||
"requiredPlugins": [
|
|
||||||
"https://github.com/discourse/discourse-prometheus"
|
|
||||||
]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-21
@@ -1,21 +0,0 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiEmbeddingsEdit extends DiscourseRoute {
|
|
||||||
async model(params) {
|
|
||||||
const allEmbeddings = this.modelFor(
|
|
||||||
"adminPlugins.show.discourse-ai-embeddings"
|
|
||||||
);
|
|
||||||
const id = parseInt(params.id, 10);
|
|
||||||
const record = allEmbeddings.findBy("id", id);
|
|
||||||
record.provider_params = record.provider_params || {};
|
|
||||||
return record;
|
|
||||||
}
|
|
||||||
|
|
||||||
setupController(controller, model) {
|
|
||||||
super.setupController(controller, model);
|
|
||||||
controller.set(
|
|
||||||
"allEmbeddings",
|
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-embeddings")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-17
@@ -1,17 +0,0 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiEmbeddingsNew extends DiscourseRoute {
|
|
||||||
async model() {
|
|
||||||
const record = this.store.createRecord("ai-embedding");
|
|
||||||
record.provider_params = {};
|
|
||||||
return record;
|
|
||||||
}
|
|
||||||
|
|
||||||
setupController(controller, model) {
|
|
||||||
super.setupController(controller, model);
|
|
||||||
controller.set(
|
|
||||||
"allEmbeddings",
|
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-embeddings")
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-7
@@ -1,7 +0,0 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
|
||||||
|
|
||||||
export default class DiscourseAiAiEmbeddingsRoute extends DiscourseRoute {
|
|
||||||
model() {
|
|
||||||
return this.store.findAll("ai-embedding");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
+5
-14
@@ -1,25 +1,16 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiLlmsNew extends DiscourseRoute {
|
export default DiscourseRoute.extend({
|
||||||
queryParams = {
|
|
||||||
llmTemplate: { refreshModel: true },
|
|
||||||
};
|
|
||||||
|
|
||||||
async model() {
|
async model() {
|
||||||
const record = this.store.createRecord("ai-llm");
|
const record = this.store.createRecord("ai-llm");
|
||||||
record.provider_params = {};
|
|
||||||
return record;
|
return record;
|
||||||
}
|
},
|
||||||
|
|
||||||
setupController(controller, model) {
|
setupController(controller, model) {
|
||||||
super.setupController(controller, model);
|
this._super(controller, model);
|
||||||
controller.set(
|
controller.set(
|
||||||
"allLlms",
|
"allLlms",
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-llms")
|
this.modelFor("adminPlugins.show.discourse-ai-llms")
|
||||||
);
|
);
|
||||||
controller.set(
|
},
|
||||||
"llmTemplate",
|
});
|
||||||
this.paramsFor(this.routeName).llmTemplate || null
|
|
||||||
);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|||||||
+6
-8
@@ -1,19 +1,17 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiLlmsEdit extends DiscourseRoute {
|
export default DiscourseRoute.extend({
|
||||||
async model(params) {
|
async model(params) {
|
||||||
const allLlms = this.modelFor("adminPlugins.show.discourse-ai-llms");
|
const allLlms = this.modelFor("adminPlugins.show.discourse-ai-llms");
|
||||||
const id = parseInt(params.id, 10);
|
const id = parseInt(params.id, 10);
|
||||||
const record = allLlms.findBy("id", id);
|
return allLlms.findBy("id", id);
|
||||||
record.provider_params = record.provider_params || {};
|
},
|
||||||
return record;
|
|
||||||
}
|
|
||||||
|
|
||||||
setupController(controller, model) {
|
setupController(controller, model) {
|
||||||
super.setupController(controller, model);
|
this._super(controller, model);
|
||||||
controller.set(
|
controller.set(
|
||||||
"allLlms",
|
"allLlms",
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-llms")
|
this.modelFor("adminPlugins.show.discourse-ai-llms")
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
}
|
});
|
||||||
+5
-7
@@ -1,7 +1,7 @@
|
|||||||
import { AUTO_GROUPS } from "discourse/lib/constants";
|
import { AUTO_GROUPS } from "discourse/lib/constants";
|
||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiPersonasNew extends DiscourseRoute {
|
export default DiscourseRoute.extend({
|
||||||
async model() {
|
async model() {
|
||||||
const record = this.store.createRecord("ai-persona");
|
const record = this.store.createRecord("ai-persona");
|
||||||
record.set("allowed_group_ids", [AUTO_GROUPS.trust_level_0.id]);
|
record.set("allowed_group_ids", [AUTO_GROUPS.trust_level_0.id]);
|
||||||
@@ -10,16 +10,14 @@ export default class AdminPluginsShowDiscourseAiPersonasNew extends DiscourseRou
|
|||||||
record.set("rag_chunk_tokens", 374);
|
record.set("rag_chunk_tokens", 374);
|
||||||
record.set("rag_chunk_overlap_tokens", 10);
|
record.set("rag_chunk_overlap_tokens", 10);
|
||||||
record.set("rag_conversation_chunks", 10);
|
record.set("rag_conversation_chunks", 10);
|
||||||
record.set("allow_personal_messages", true);
|
|
||||||
record.set("tool_details", false);
|
|
||||||
return record;
|
return record;
|
||||||
}
|
},
|
||||||
|
|
||||||
setupController(controller, model) {
|
setupController(controller, model) {
|
||||||
super.setupController(controller, model);
|
this._super(controller, model);
|
||||||
controller.set(
|
controller.set(
|
||||||
"allPersonas",
|
"allPersonas",
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-personas")
|
this.modelFor("adminPlugins.show.discourse-ai-personas")
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
}
|
});
|
||||||
|
|||||||
+5
-5
@@ -1,19 +1,19 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default class AdminPluginsShowDiscourseAiPersonasEdit extends DiscourseRoute {
|
export default DiscourseRoute.extend({
|
||||||
async model(params) {
|
async model(params) {
|
||||||
const allPersonas = this.modelFor(
|
const allPersonas = this.modelFor(
|
||||||
"adminPlugins.show.discourse-ai-personas"
|
"adminPlugins.show.discourse-ai-personas"
|
||||||
);
|
);
|
||||||
const id = parseInt(params.id, 10);
|
const id = parseInt(params.id, 10);
|
||||||
return allPersonas.findBy("id", id);
|
return allPersonas.findBy("id", id);
|
||||||
}
|
},
|
||||||
|
|
||||||
setupController(controller, model) {
|
setupController(controller, model) {
|
||||||
super.setupController(controller, model);
|
this._super(controller, model);
|
||||||
controller.set(
|
controller.set(
|
||||||
"allPersonas",
|
"allPersonas",
|
||||||
this.modelFor("adminPlugins.show.discourse-ai-personas")
|
this.modelFor("adminPlugins.show.discourse-ai-personas")
|
||||||
);
|
);
|
||||||
}
|
},
|
||||||
}
|
});
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
import { service } from "@ember/service";
|
|
||||||
import { ajax } from "discourse/lib/ajax";
|
|
||||||
import DiscourseRoute from "discourse/routes/discourse";
|
|
||||||
|
|
||||||
export default class DiscourseAiSpamRoute extends DiscourseRoute {
|
|
||||||
@service store;
|
|
||||||
|
|
||||||
model() {
|
|
||||||
return ajax("/admin/plugins/discourse-ai/ai-spam.json");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -11,7 +11,5 @@ export default class DiscourseAiToolsNewRoute extends DiscourseRoute {
|
|||||||
|
|
||||||
controller.set("allTools", toolsModel);
|
controller.set("allTools", toolsModel);
|
||||||
controller.set("presets", toolsModel.resultSetMeta.presets);
|
controller.set("presets", toolsModel.resultSetMeta.presets);
|
||||||
controller.set("llms", toolsModel.resultSetMeta.llms);
|
|
||||||
controller.set("settings", toolsModel.resultSetMeta.settings);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+1
-3
@@ -1,6 +1,6 @@
|
|||||||
import DiscourseRoute from "discourse/routes/discourse";
|
import DiscourseRoute from "discourse/routes/discourse";
|
||||||
|
|
||||||
export default class DiscourseAiToolsEditRoute extends DiscourseRoute {
|
export default class DiscourseAiToolsShowRoute extends DiscourseRoute {
|
||||||
async model(params) {
|
async model(params) {
|
||||||
const allTools = this.modelFor("adminPlugins.show.discourse-ai-tools");
|
const allTools = this.modelFor("adminPlugins.show.discourse-ai-tools");
|
||||||
const id = parseInt(params.id, 10);
|
const id = parseInt(params.id, 10);
|
||||||
@@ -14,7 +14,5 @@ export default class DiscourseAiToolsEditRoute extends DiscourseRoute {
|
|||||||
|
|
||||||
controller.set("allTools", toolsModel);
|
controller.set("allTools", toolsModel);
|
||||||
controller.set("presets", toolsModel.resultSetMeta.presets);
|
controller.set("presets", toolsModel.resultSetMeta.presets);
|
||||||
controller.set("llms", toolsModel.resultSetMeta.llms);
|
|
||||||
controller.set("settings", toolsModel.resultSetMeta.settings);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -1,11 +0,0 @@
|
|||||||
import { service } from "@ember/service";
|
|
||||||
import { ajax } from "discourse/lib/ajax";
|
|
||||||
import DiscourseRoute from "discourse/routes/discourse";
|
|
||||||
|
|
||||||
export default class DiscourseAiUsageRoute extends DiscourseRoute {
|
|
||||||
@service store;
|
|
||||||
|
|
||||||
model() {
|
|
||||||
return ajax("/admin/plugins/discourse-ai/ai-usage.json");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
<AiEmbeddingsListEditor
|
|
||||||
@embeddings={{this.allEmbeddings}}
|
|
||||||
@currentEmbedding={{this.model}}
|
|
||||||
/>
|
|
||||||
-1
@@ -1 +0,0 @@
|
|||||||
<AiEmbeddingsListEditor @embeddings={{this.model}} />
|
|
||||||
-4
@@ -1,4 +0,0 @@
|
|||||||
<AiEmbeddingsListEditor
|
|
||||||
@embeddings={{this.allEmbeddings}}
|
|
||||||
@currentEmbedding={{this.model}}
|
|
||||||
/>
|
|
||||||
+1
-5
@@ -1,5 +1 @@
|
|||||||
<AiLlmsListEditor
|
<AiLlmsListEditor @llms={{this.allLlms}} @currentLlm={{this.model}} />
|
||||||
@llms={{this.allLlms}}
|
|
||||||
@currentLlm={{this.model}}
|
|
||||||
@llmTemplate={{this.llmTemplate}}
|
|
||||||
/>
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
<AiSpam @model={{this.model}} />
|
|
||||||
-9
@@ -1,9 +0,0 @@
|
|||||||
<section class="ai-persona-tool-editor__current admin-detail pull-left">
|
|
||||||
<AiToolEditor
|
|
||||||
@tools={{this.allTools}}
|
|
||||||
@model={{this.model}}
|
|
||||||
@presets={{this.presets}}
|
|
||||||
@llms={{this.llms}}
|
|
||||||
@settings={{this.settings}}
|
|
||||||
/>
|
|
||||||
</section>
|
|
||||||
+5
-9
@@ -1,9 +1,5 @@
|
|||||||
<section class="ai-persona-tool-editor__current admin-detail pull-left">
|
<AiToolEditor
|
||||||
<AiToolEditor
|
@tools={{this.allTools}}
|
||||||
@tools={{this.allTools}}
|
@model={{this.model}}
|
||||||
@model={{this.model}}
|
@presets={{this.presets}}
|
||||||
@presets={{this.presets}}
|
/>
|
||||||
@llms={{this.llms}}
|
|
||||||
@settings={{this.settings}}
|
|
||||||
/>
|
|
||||||
</section>
|
|
||||||
+5
@@ -0,0 +1,5 @@
|
|||||||
|
<AiToolEditor
|
||||||
|
@tools={{this.allTools}}
|
||||||
|
@model={{this.model}}
|
||||||
|
@presets={{this.presets}}
|
||||||
|
/>
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user