Skip to content

Commit 271044d

Browse files
authored
Aiinfo diffcache (#100)
* add changelog to output * add clearCache utility * update cache * add writeChangelog util * ignore package.json in biome lint * @instructure.ai/[email protected] * fix lint issues * @instructure.ai/[email protected]
1 parent 69dedd4 commit 271044d

File tree

13 files changed

+1118
-82
lines changed

13 files changed

+1118
-82
lines changed

packages/aiinfo/Changelog.md

Lines changed: 808 additions & 0 deletions
Large diffs are not rendered by default.

packages/aiinfo/biome.jsonc

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,8 @@
1111
"enabled": true
1212
},
1313
"files": {
14-
"ignoreUnknown": true
14+
"ignoreUnknown": true,
15+
"includes": ["**", "!package.json"]
1516
},
1617
"formatter": {
1718
"enabled": true,

packages/aiinfo/cache/cache.csv

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
canvasInboxTranslation,2025.09.10,Inbox Translation,"Translation of inbox messages (""Inbox AI Translation"" feature flag) across 10 languages.",AWS Translate,Anthropic Claude models are provided via Instructure's in-house AI Platform.,No,Other,Inbox messages,Data is not stored or reused by the model.,Does not log data,,Global,,Not Exposed,PII in inbox messages may be sent to the model but no PII is intentionally sent to the model.,Yes,Yes,Users are displayed the translated copy of their message and can edit or remove it before they send the message.,,Machine translation may not fully capture the meaning of the original message.,Enable better multi-lingual communication in learning environments.,Canvas,2
22
canvasCourseTranslation,2025.09.10,Discussions Translation,"Translation of Discussion threads (""Course AI Translation"" feature flag) across 10 languages.",Haiku 3,Anthropic Claude models are provided via Instructure's in-house AI Platform.,No,Course,Discussion prompts and replies,Data is not stored or reused by the model.,Does not log data,,Global,,Not Exposed,"PII in discussion replies may be sent to the model, but no PII is intentionally sent to the model.",Yes,Yes,Untranslated content is available to review translations against,,Machine translation may not fully capture the meaning of the original message.,Improve participation for students who do not natively speak the language of instruction or other replies.,Canvas,2
33
IgniteAgent,2025.09.10,Agent,Ignite Agent is a faculty chat assistant capable of translating natural language requests into complex Canvas workflows.,"Haiku 3.5, Sonnet 3.5",Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Other,The model uses chat transcripts and information requested from the Canvas API to execute its actions.,Chat logs are retained indefinitely for troubleshooting and debugging.,Logs data,Chat logs are retained for troubleshooting and debugging purposes.,"Virginia, Oregon",,Exposed,"If requested during the the chat, user, course, and student identifiers or metadata may be shared with the model.",Yes,Yes,"The agent only takes action based on human requests, and all write actions must be confirmed by the user.",Access to the agent is limited to users with an Admin- or Teacher-based role. Data access and functions are scoped to the permissions available to the chat user.,The model may misinterpret user requests and require additional prompting.,"Users are able to save time by relying on the Agent to execute complex workflows, batch actions, and other time-consuming Canvas tasks.",IgniteAI,2
4-
rubricGenerator,2025.09.10,Rubric Creator,AI-generated rubric recommendations for Canvas assignments.,Haiku 3,Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,The Canvas assignment description field is used in generating rubric criteria.,Model responses are stored for debugging purposes.,Logs data,"Request, response, and feedback data is logged to assist in troubleshooting.",Global,,Not Exposed,,Yes,Yes,All created rubrics are reviewable and editable by the instructor.,The instructor may editcriteria before accepting the rubric.,The created rubric may not align with the assignment's intended learning outcomes.,A rubric aligned to learning outcomes is created for the instructor to use during grading.,Canvas,2
5-
canvasGradingAssistance,2025.09.10,Grading Assistance,"AI powered automatic grading and feedback suggestions to enable more consistent, fair, and efficient grading workflows.",Haiku 3.5,Anthropic Claude models are provided via Instructure's in-house AI Platform.,No,"Course, Student","Assignment information, rubric, and student submissions.",Transactional data is retained for the life of the request,Logs data,Complete response from the LLM is retained in the Canvas database for auditing purposes.,"Virginia, Oregon",,Not Exposed,"No PII is intentionally sent to the model. If there is incidental PII in any of the shared data, such as in the submission body, it will be sent to the model.",Yes,Yes,"Grade suggestion is displayed and selected by default, but the instructor much make the final decision to edit or accept the suggestions.",The Claude Sonnet model has inherent guardrails built in.,Model may work better with certain kinds of assignment types or disciplines. The grader must remain alert to incorrect assumptions from the model.,"Reduced bias in grading, fairness, and consistency. Grading efficiency, saving teachers time.",Canvas,2
6-
discussionInsights,2025.09.12,Discussion Insights,"Discussion Insights uses AI to evaluate student discussion replies, highlight relevant contributions, and flag those that may need instructor review.",Haiku 3,Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,"Discussion topic, prompt, and student replies are used.",No user data is stored or reused by the model.,Logs data,Model evaluations and reply labels are logged for debugging and troubleshooting purposes.,Global,,Exposed,"Known PII is masked before being sent to the model, though any PII present in the discussion reply is not and may be shared with the model.",Yes,Yes,Instructors may review AI-generated evaluations or review posts directly.,"Model responses are logged for quality assurance, and responses with low confidence are flagged ""Needs Review"" to encourage human intervention.",The model may misclassify some nuanced replies.,"Instructors are able to quickly assess the quality of student replies, identify low-effor or off-topic contributions, and focus their attention to where it is needed most.",Canvas,2
7-
smartSearch,2025.09.12,Smart Search,Natural language search of course content for students and instructors.,Cohere Embed Multilingual,Cohere models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,Course content is indexed by the model and then stored in the Canvas database.,Data is not stored or reused by the model. Indexed course content is stored in the Canvas database.,Does not log data,,Global,,Not Exposed,"PII in course content may be indexed, but no PII is intentionally sent to the model.",Yes,Yes,Users are presented with a list of results related to their search query and can act or not act on them.,,Search results may be incorrectly sorted or may not be relevant to the search term.,"Student are able to quicly find answers to questions, and instructors are able to quickly navigate their courses.",Canvas,2
4+
rubricGenerator,2025.10.09,Rubric Creator,AI-generated rubric recommendations for Canvas assignments.,Haiku 3,Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,The Canvas assignment description field is used in generating rubric criteria.,Model responses are stored for debugging purposes.,Logs data,"Request, response, and feedback data is logged to assist in troubleshooting.",Global,,Not Exposed,,Yes,Yes,All created rubrics are reviewable and editable by the instructor.,The instructor may edit criteria before accepting the rubric.,The created rubric may not align with the assignment's intended learning outcomes.,A rubric aligned to learning outcomes is created for the instructor to use during grading.,Canvas,2
5+
canvasGradingAssistance,2025.10.14,Grading Assistance,"AI powered automatic grading and feedback suggestions to enable more consistent, fair, and efficient grading workflows.",Haiku 3.5,Anthropic Claude models are provided via Instructure's in-house AI Platform.,No,"Course, Student","Assignment information, rubric, and student submissions.",Transactional data is retained for the life of the request,Logs data,Complete response from the LLM is retained in the Canvas database for auditing purposes.,Global,,Not Exposed,"No PII is intentionally sent to the model. If there is incidental PII in any of the shared data, such as in the submission body, it will be sent to the model.",Yes,Yes,"Grade suggestion is displayed and selected by default, but the instructor much make the final decision to edit or accept the suggestions.",The Claude Sonnet model has inherent guardrails built in.,Model may work better with certain kinds of assignment types or disciplines. The grader must remain alert to incorrect assumptions from the model.,"Reduced bias in grading, fairness, and consistency. Grading efficiency, saving teachers time.",Canvas,2
6+
discussionInsights,2025.10.02,Discussion Insights,"Discussion Insights uses AI to evaluate student discussion replies, highlight relevant contributions, and flag those that may need instructor review.",Haiku 3,Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,"Discussion topic, prompt, and student replies are used.",No user data is stored or reused by the model.,Logs data,Model evaluations and reply labels are logged for debugging and troubleshooting purposes.,Global,,Exposed,"Known PII is masked before being sent to the model, though any PII present in the discussion reply is not and may be shared with the model.",Yes,Yes,Instructors may review AI-generated evaluations or review posts directly.,"Model responses are logged for quality assurance, and responses with low confidence are flagged ""Needs Review"" to encourage human intervention.",The model may misclassify some nuanced replies.,"Instructors are able to quickly assess the quality of student replies, identify low-effort or off-topic contributions, and focus their attention to where it is needed most.",Canvas,2
7+
smartSearch,2025.10.02,Smart Search,Natural language search of course content for students and instructors.,Cohere Embed Multilingual,Cohere models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,Course content is indexed by the model and then stored in the Canvas database.,Data is not stored or reused by the model. Indexed course content is stored in the Canvas database.,Does not log data,,Global,,Not Exposed,"PII in course content may be indexed, but no PII is intentionally sent to the model.",Yes,Yes,Users are presented with a list of results related to their search query and can act or not act on them.,,Search results may be incorrectly sorted or may not be relevant to the search term.,"Students are able to quickly find answers to questions, and instructors are able to quickly navigate their courses.",Canvas,2
88
askyourdata,2025.09.12,Ask Your Data,AI-powered query tool enables users to ask natural language questions and receive textual or visual responses with detailed explanations of the methodology.,Doowii (multiple),"Doowii is a third-party sub-processor for Intelligent Insights. Doowii's tools use OpenAI GPT-4o, GPT-3.5 Turbo, and Claude Sonnet 3.5",No,Other,"Doowii is trained on the Canvas LMS database schema, and receives no data from Canvas. The user's prompt and heuristics (such as summary statistics) are shared with the model to generate a response.",Data is retained through the life of your contract with Instructure.,Logs data,,Global,,Exposed,"Prompt, summary statistics.",Yes,Yes,Ask your data returns a methodology description along with a generated query. Users have the ability to edit the generated SQL directly.,"Questions are scoped to the domain only, highly ambiguous terms ask for clarification.",Incorrect interpretation of the question. Inaccurate SQL may be generated. Suggested questions or methodologies may not be relevant.,Provide accurate data retrieval and analysis through natural language prompting.,Intelligent Insights,2
99
canvasDiscussionSummaries,2025.09.12,Discussion Summaries,"Discussion summaries of key points, questions, and insights.",Haiku 3,Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,Discussion prompt and replies.,Data is not stored or reused by the model.,Logs data,Summaries are logged in the Canvas database for review and reuse.,Global,,Not Exposed,"Pii in discussion replies may be sent to the model, but no PII is intentionally sent to the model.",Yes,Yes,Instructors may regenerate summaries or fine-tune them with additional instructions.,,Summaries may not capture all desired information.,Summaries allow discussion topics to be used in large-format courses and other environments where discussions were previously infeasible.,Canvas,2
1010
BCEAltText,2025.10.01,Block Content Editor Alt Text Generator,,Haiku 3,Anthropic Claude models are provided via Amazon Bedrock Foundation Models (FMs).,No,Course,Content Editor Images.,Model responses are stored for debugging purposes.,Logs data,"Request, response, and feedback data is logged to assist in troubleshooting.",Global,,Not Exposed,,No,Yes,"User initiated, User must confirm output.",,Alt text might not always be accurate. ,An accessible Alt Text description of the image is generated.,Canvas,2
Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,13 @@
11
{
2-
"CSV": "392985dcd57444c35cef079a0a184b44bb8ab4e2b11b77a5098f820dda7f87be"
2+
"askyourdata": "8de9e2815ff3aec88e14be9ae042be0b9b40319ad6e9be5985c918fc8b5a63b5",
3+
"bcealttext": "757060c8e6a7fad9d79489ac69de4ae0c484e4b82d5e362ad243e1b10ba29572",
4+
"CSV": "d781584823e37c17452687527d2fa3fb57d11f4f22c8af74b1825ebf8c927bc1",
5+
"canvascoursetranslation": "493b6f3ce5a8650cd5c760b7aa1136de6fc88897e81c353f5be19de2c917e9e1",
6+
"canvasdiscussionsummaries": "8dea644532ad2b211f6c5bca6bfeebe3a79f0286b2f0a8ba2f44fda2903d32e0",
7+
"canvasgradingassistance": "edb6de555dfc2e53ad80cba3f893dd929af293de53642c9a57a8f94f4374cffb",
8+
"canvasinboxtranslation": "83554f0eb098ac592eedf73cdccf04e3e570ca670682e6e96719239075b3a545",
9+
"discussioninsights": "bf8f800481a6a884bf573692903d4ffdcb2842d33da5d4ee4f3c4d349f53dc11",
10+
"igniteagent": "422effb260b4e53ba74b387832f7d1d835824de58645c1c28ee39620f6c5334e",
11+
"rubricgenerator": "c462f99c082872bcdbd49d5f5ccf25dc97134e30d1bd90b43ff8e056e2d22640",
12+
"smartsearch": "4b5c8873fcb95dc7dcff194f499c84ade3b1e3ed4e37d717172834ef43338c79"
313
}

packages/aiinfo/cache/index.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import type { Checksum } from "../types";
44
import checksum from "./checksum.json" with { type: "json" };
55

6-
const CSVChecksum: Checksum = checksum;
6+
const CSVChecksum: Checksum = Object.fromEntries(
7+
Object.entries(checksum).map(([key, value]) => [key, value]),
8+
);
79

810
export { default as cache } from "./cache.csv?raw";
911
export { CSVChecksum as checksum };

packages/aiinfo/package.json

Lines changed: 49 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,51 +1,51 @@
11
{
2-
"dependencies": {
3-
"@instructure/shared-types": ">=10.22.0 < 12",
4-
"@instructure/ui-buttons": ">=10.22.0 < 12",
5-
"@instructure/ui-instructure": ">=10.22.0 < 12"
6-
},
7-
"devDependencies": {
8-
"@instructure.ai/shared-configs": "workspace:^",
9-
"@types/papaparse": "^5.3.16",
10-
"ansis": "^4.2.0",
11-
"papaparse": "^5.5.3",
12-
"typescript": "^5.9.3",
13-
"vite-plugin-dts": "^4.5.4",
14-
"vite-tsconfig-paths": "^5.1.4"
15-
},
16-
"engines": {
17-
"node": ">=20"
18-
},
19-
"exports": {
20-
".": {
21-
"default": "./dist/index.mjs",
22-
"import": "./dist/index.mjs",
23-
"types": "./dist/index.d.ts"
24-
}
25-
},
26-
"files": [
27-
"dist",
28-
"*.md"
29-
],
30-
"module": "./dist/index.mjs",
31-
"name": "@instructure.ai/aiinfo",
32-
"peerDependencies": {
33-
"react": "^18 || ^19",
34-
"react-dom": "^18 || ^19"
35-
},
36-
"publishConfig": {
37-
"access": "public"
38-
},
39-
"scripts": {
40-
"build": "pnpm bundle && pnpm pack --pack-destination ./dist",
41-
"build:vite": "vite build",
42-
"bundle": "pnpm update:cache && pnpm build:vite && pnpm lint --write",
43-
"lint": "pnpm biome check",
44-
"typecheck": "tsgo --noEmit",
45-
"update:cache": "UPDATE=1 vite-node ./scripts/updateCache.mts"
46-
},
47-
"sideEffects": false,
48-
"type": "module",
49-
"types": "./dist/index.d.ts",
50-
"version": "1.1.1"
2+
"dependencies": {
3+
"@instructure/shared-types": ">=10.22.0 < 12",
4+
"@instructure/ui-buttons": ">=10.22.0 < 12",
5+
"@instructure/ui-instructure": ">=10.22.0 < 12"
6+
},
7+
"devDependencies": {
8+
"@instructure.ai/shared-configs": "workspace:^",
9+
"@types/papaparse": "^5.3.16",
10+
"ansis": "^4.2.0",
11+
"papaparse": "^5.5.3",
12+
"typescript": "^5.9.3",
13+
"vite-plugin-dts": "^4.5.4",
14+
"vite-tsconfig-paths": "^5.1.4"
15+
},
16+
"engines": {
17+
"node": ">=20"
18+
},
19+
"exports": {
20+
".": {
21+
"import": "./dist/index.mjs",
22+
"types": "./dist/index.d.ts",
23+
"default": "./dist/index.mjs"
24+
}
25+
},
26+
"files": [
27+
"dist",
28+
"*.md"
29+
],
30+
"module": "./dist/index.mjs",
31+
"name": "@instructure.ai/aiinfo",
32+
"peerDependencies": {
33+
"react": "^18 || ^19",
34+
"react-dom": "^18 || ^19"
35+
},
36+
"publishConfig": {
37+
"access": "public"
38+
},
39+
"scripts": {
40+
"build": "pnpm cache:update && pnpm build:vite && pnpm lint --write",
41+
"build:vite": "vite build",
42+
"cache:clear": "CLEAR=1 vite-node ./scripts/clearCache.mts",
43+
"cache:update": "UPDATE=1 vite-node ./scripts/updateCache.mts",
44+
"lint": "pnpm biome check",
45+
"typecheck": "tsgo --noEmit"
46+
},
47+
"sideEffects": false,
48+
"type": "module",
49+
"types": "./dist/index.d.ts",
50+
"version": "1.2.0"
5151
}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
import fs from "node:fs";
2+
import path from "node:path";
3+
import { Log } from "../utils";
4+
5+
const main = async () => {
6+
const checksumPath = path.resolve(__dirname, "../cache/checksum.json");
7+
const emptyChecksum = { CSV: "" };
8+
fs.writeFileSync(checksumPath, JSON.stringify(emptyChecksum, null, 2));
9+
};
10+
11+
export { main, main as ClearCache };
12+
13+
if (process.env.CLEAR) {
14+
main().catch((error) => {
15+
Log({ color: "redBright", message: ["Error updating cache:", error] });
16+
process.exit(2);
17+
});
18+
}

packages/aiinfo/scripts/index.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,2 @@
1+
export { ClearCache } from "./clearCache.mts";
12
export { parseCSV, UpdateCache } from "./updateCache.mts";

0 commit comments

Comments
 (0)