@koda-sl/baker-bridge 0.124.0-dev.7e3937022 → 0.125.0-dev.ee2f8e252

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -14,9 +14,12 @@
14
14
  * layer left.
15
15
  *
16
16
  * Whether the accent fits is read by Jev from what the user said, in whatever language
17
- * they write: their own language, a regional accent of it, or a language or market they
18
- * asked for all fit. A wrong refusal leaves the user nothing to type, so a judge that
19
- * cannot answer lets the command through.
17
+ * they write, and from the company's own Knowledge (COMPANY.md): their own language, the
18
+ * language the company's content is written in, a regional accent of either, or a language
19
+ * or market they asked for all fit. An agency member writing in English for a
20
+ * Spanish-market client wants a Spanish presenter. A wrong refusal leaves the user nothing
21
+ * to type, so a judge that cannot answer, or a company whose Knowledge cannot be read, lets
22
+ * the command through.
20
23
  */
21
24
  import type { Judge } from "./jev.ts";
22
25
  /**
@@ -27,9 +30,12 @@ import type { Judge } from "./jev.ts";
27
30
  */
28
31
  export declare const ACCENT_WRITTEN_IN_QUESTION: string;
29
32
  export declare const ACCENT_ASKED_FOR_QUESTION: string;
33
+ export declare const ACCENT_COMPANY_LANGUAGE_QUESTION: string;
30
34
  export declare const ACCENT_NAMES_LANGUAGE_QUESTION = "Does `accent` name a language, a country or a regional accent?";
31
35
  /** Each answer is a yes at or above this. Measured in `scripts/avatar-guard-evals`. */
32
36
  export declare const ACCENT_HELD = 0.5;
37
+ /** The company's own description (COMPANY.md in the Company Workspace), or undefined when unreadable. */
38
+ export type CompanyText = () => Promise<string | undefined>;
33
39
  /** The `--accent` value in a `baker avatars create|update` command, if it has one. */
34
40
  export declare function accentFrom(command: string): string | null;
35
41
  /** The refusal, or null when the accent is consistent with what the user asked for. */
@@ -42,5 +48,5 @@ export declare function accentContradictsUser(command: string | undefined, userT
42
48
  * the UK, in English" — and writes the next in Spanish had their own decision refused,
43
49
  * with nothing they could type to get past it short of repeating themselves every time.
44
50
  */
45
- priorUserText: string | undefined, judge: Judge): Promise<string | null>;
51
+ priorUserText: string | undefined, judge: Judge, companyText?: CompanyText): Promise<string | null>;
46
52
  //# sourceMappingURL=avatar-accent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar-accent.d.ts","sourceRoot":"","sources":["../../src/hono/avatar-accent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAEtC;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAES,CAAC;AACjD,eAAO,MAAM,yBAAyB,QAG6E,CAAC;AACpH,eAAO,MAAM,8BAA8B,mEAAmE,CAAC;AAC/G,uFAAuF;AACvF,eAAO,MAAM,WAAW,MAAM,CAAC;AAI/B,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzD;AAED,uFAAuF;AACvF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS;AAC5B;;;;;;;GAOG;AACH,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,KAAK,EAAE,KAAK,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBxB"}
1
+ {"version":3,"file":"avatar-accent.d.ts","sourceRoot":"","sources":["../../src/hono/avatar-accent.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AAGtC;;;;;GAKG;AACH,eAAO,MAAM,0BAA0B,QAES,CAAC;AACjD,eAAO,MAAM,yBAAyB,QAG6E,CAAC;AACpH,eAAO,MAAM,gCAAgC,QAEwD,CAAC;AACtG,eAAO,MAAM,8BAA8B,mEAAmE,CAAC;AAC/G,uFAAuF;AACvF,eAAO,MAAM,WAAW,MAAM,CAAC;AAM/B,yGAAyG;AACzG,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;AAO5D,sFAAsF;AACtF,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIzD;AAED,uFAAuF;AACvF,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,MAAM,GAAG,SAAS,EAC3B,QAAQ,EAAE,MAAM,GAAG,SAAS;AAC5B;;;;;;;GAOG;AACH,aAAa,EAAE,MAAM,GAAG,SAAS,EACjC,KAAK,EAAE,KAAK,EACZ,WAAW,GAAE,WAA6B,GACzC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqCxB"}
@@ -1,3 +1,4 @@
1
+ import { bridgeRuntimeFiles, runtimeFileStore } from "./runtime-files.js";
1
2
  /**
2
3
  * Three judgments, each its own Noul in one request: an accent fits when the user writes in
3
4
  * its language, or asked for it, or it names no language at all. Asked as one question, a
@@ -9,11 +10,19 @@ export const ACCENT_WRITTEN_IN_QUESTION = "`accent` is how an ad's presenter wil
9
10
  export const ACCENT_ASKED_FOR_QUESTION = "`accent` is how an ad's presenter will speak. Does `conversation` ask for the ad or presenter in the language " +
10
11
  "`accent` names, or for a country, region or market where that language is spoken? Asking for how the " +
11
12
  "presenter should look (a European, Nordic, Asian, Mediterranean or American look) is not asking for a language.";
13
+ export const ACCENT_COMPANY_LANGUAGE_QUESTION = "`accent` is how an ad's presenter will speak. `company` is the company's own description of itself. " +
14
+ "Is `company` written in the language `accent` names? Any regional accent of that language counts.";
12
15
  export const ACCENT_NAMES_LANGUAGE_QUESTION = "Does `accent` name a language, a country or a regional accent?";
13
16
  /** Each answer is a yes at or above this. Measured in `scripts/avatar-guard-evals`. */
14
17
  export const ACCENT_HELD = 0.5;
15
18
  /** The most of the conversation read, from its end: the latest turns carry the decision. */
16
19
  const CONVERSATION_CHARS = 12_000;
20
+ /** The most of the company's Knowledge read, from its start: enough to tell its language. */
21
+ const COMPANY_CHARS = 4_000;
22
+ const readCompanyFile = async () => {
23
+ const read = await runtimeFileStore.readText(bridgeRuntimeFiles.companyFile());
24
+ return read.ok ? read.value : undefined;
25
+ };
17
26
  /** The `--accent` value in a `baker avatars create|update` command, if it has one. */
18
27
  export function accentFrom(command) {
19
28
  if (!/\bbaker\s+avatars\s+(create|update)\b/.test(command))
@@ -31,23 +40,38 @@ export async function accentContradictsUser(command, userText,
31
40
  * the UK, in English" — and writes the next in Spanish had their own decision refused,
32
41
  * with nothing they could type to get past it short of repeating themselves every time.
33
42
  */
34
- priorUserText, judge) {
43
+ priorUserText, judge, companyText = readCompanyFile) {
35
44
  const said = [priorUserText ?? "", userText ?? ""].join("\n").trim().slice(-CONVERSATION_CHARS);
36
45
  const accent = command ? accentFrom(command) : null;
37
46
  if (!accent || !said)
38
47
  return null;
39
- const answers = await judge([ACCENT_WRITTEN_IN_QUESTION, ACCENT_ASKED_FOR_QUESTION, ACCENT_NAMES_LANGUAGE_QUESTION].map((question) => ({
40
- instructions: { accent, conversation: said, question },
41
- })));
42
- const [writtenIn, askedFor, namesLanguage] = answers ?? [];
43
- if (writtenIn === undefined || askedFor === undefined || namesLanguage === undefined)
48
+ const company = (await companyText())?.trim().slice(0, COMPANY_CHARS);
49
+ if (!company)
44
50
  return null;
45
- if (writtenIn >= ACCENT_HELD || askedFor >= ACCENT_HELD || namesLanguage < ACCENT_HELD)
51
+ const answers = await judge([
52
+ ...[ACCENT_WRITTEN_IN_QUESTION, ACCENT_ASKED_FOR_QUESTION, ACCENT_NAMES_LANGUAGE_QUESTION].map((question) => ({
53
+ instructions: { accent, conversation: said, question },
54
+ })),
55
+ { instructions: { accent, company, question: ACCENT_COMPANY_LANGUAGE_QUESTION } },
56
+ ]);
57
+ const [writtenIn, askedFor, namesLanguage, companyWritesIt] = answers ?? [];
58
+ if (writtenIn === undefined ||
59
+ askedFor === undefined ||
60
+ namesLanguage === undefined ||
61
+ companyWritesIt === undefined) {
46
62
  return null;
47
- return (`Blocked: --accent "${accent}" sets the language this avatar speaks, and nothing the user said asks for it: ` +
48
- `it is not the language they write to you in, nor one they asked for. --accent sets the LANGUAGE of every ` +
49
- `clip, not the person's looks — "aspecto europeo", "Nordic" and "Mediterranean" describe a FACE and belong ` +
50
- `in --subject. Use the user's own language and accent. If the ad really is for a market that speaks another ` +
51
- `language, ask them first and say so in the same turn.`);
63
+ }
64
+ if (writtenIn >= ACCENT_HELD ||
65
+ askedFor >= ACCENT_HELD ||
66
+ companyWritesIt >= ACCENT_HELD ||
67
+ namesLanguage < ACCENT_HELD) {
68
+ return null;
69
+ }
70
+ return (`Blocked: --accent "${accent}" sets the language this avatar speaks, and nothing points to it: it is not the ` +
71
+ `language the user writes to you in, nor one they asked for, nor the language the company's own content is ` +
72
+ `written in. --accent sets the LANGUAGE of every clip, not the person's looks — "aspecto europeo", "Nordic" ` +
73
+ `and "Mediterranean" describe a FACE and belong in --subject. Use the language of the market the ad is for: ` +
74
+ `the user's own, or the company's. If the ad really is for a market that speaks another language, ask them ` +
75
+ `first and say so in the same turn.`);
52
76
  }
53
77
  //# sourceMappingURL=avatar-accent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"avatar-accent.js","sourceRoot":"","sources":["../../src/hono/avatar-accent.ts"],"names":[],"mappings":"AAsBA;;;;;GAKG;AACH,MAAM,CAAC,MAAM,0BAA0B,GACrC,0GAA0G;IAC1G,8CAA8C,CAAC;AACjD,MAAM,CAAC,MAAM,yBAAyB,GACpC,gHAAgH;IAChH,uGAAuG;IACvG,iHAAiH,CAAC;AACpH,MAAM,CAAC,MAAM,8BAA8B,GAAG,gEAAgE,CAAC;AAC/G,uFAAuF;AACvF,MAAM,CAAC,MAAM,WAAW,GAAG,GAAG,CAAC;AAC/B,4FAA4F;AAC5F,MAAM,kBAAkB,GAAG,MAAM,CAAC;AAElC,sFAAsF;AACtF,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,CAAC,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACxE,MAAM,KAAK,GAAG,8CAA8C,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3E,OAAO,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACnE,CAAC;AAED,uFAAuF;AACvF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,OAA2B,EAC3B,QAA4B;AAC5B;;;;;;;GAOG;AACH,aAAiC,EACjC,KAAY;IAEZ,MAAM,IAAI,GAAG,CAAC,aAAa,IAAI,EAAE,EAAE,QAAQ,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,kBAAkB,CAAC,CAAC;IAChG,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IACpD,IAAI,CAAC,MAAM,IAAI,CAAC,IAAI;QAAE,OAAO,IAAI,CAAC;IAClC,MAAM,OAAO,GAAG,MAAM,KAAK,CACzB,CAAC,0BAA0B,EAAE,yBAAyB,EAAE,8BAA8B,CAAC,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;QACzG,YAAY,EAAE,EAAE,MAAM,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE;KACvD,CAAC,CAAC,CACJ,CAAC;IACF,MAAM,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC;IAC3D,IAAI,SAAS,KAAK,SAAS,IAAI,QAAQ,KAAK,SAAS,IAAI,aAAa,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAClG,IAAI,SAAS,IAAI,WAAW,IAAI,QAAQ,IAAI,WAAW,IAAI,aAAa,GAAG,WAAW;QAAE,OAAO,IAAI,CAAC;IACpG,OAAO,CACL,sBAAsB,MAAM,iFAAiF;QAC7G,2GAA2G;QAC3G,4GAA4G;QAC5G,6GAA6G;QAC7G,uDAAuD,CACxD,CAAC;AACJ,CAAC"}
1
+ {"version":3,"file":"avatar-accent.js","sourceRoot":"","sources":["../../src/hono/avatar-accent.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,8 @@
1
1
  import { describe, expect, it } from "vitest";
2
2
  import { ACCENT_ASKED_FOR_QUESTION, ACCENT_NAMES_LANGUAGE_QUESTION, accentContradictsUser, accentFrom, } from "./avatar-accent.js";
3
3
  const CREATE = (accent) => `baker avatars create --name "X" --accent "${accent}"`;
4
+ /** A company whose Knowledge `fitsWhen` never reads as written in the accent's language. */
5
+ const COMPANY = async () => "# Słoneczne Panele\n\nMontujemy panele słoneczne w Polsce.";
4
6
  /**
5
7
  * A judge that reads every accent as naming a language unless it mentions `noLanguage`, and
6
8
  * holds it asked for only when the conversation mentions `marker`. The user never writes in it.
@@ -18,30 +20,46 @@ function fitsWhen(marker, noLanguage = "warm") {
18
20
  }
19
21
  describe("accentContradictsUser", () => {
20
22
  it("refuses an accent the judge reads as a language nobody asked for, in any language the user writes", async () => {
21
- const refusal = await accentContradictsUser(CREATE("Swedish, neutral"), "Zrób awatara do reklamy na TikToka o panelach słonecznych, ma wyglądać skandynawsko.", undefined, fitsWhen("po szwedzku"));
23
+ const refusal = await accentContradictsUser(CREATE("Swedish, neutral"), "Zrób awatara do reklamy na TikToka o panelach słonecznych, ma wyglądać skandynawsko.", undefined, fitsWhen("po szwedzku"), COMPANY);
22
24
  expect(refusal).toContain("--accent sets the LANGUAGE");
25
+ expect(refusal).toContain("the market the ad is for");
26
+ });
27
+ it("lets the command through when the company's Knowledge cannot be read, rather than refuse on a guess", async () => {
28
+ const refusal = await accentContradictsUser(CREATE("Swedish, neutral"), "Zrób awatara do reklamy na TikToka o panelach słonecznych.", undefined, fitsWhen("po szwedzku"), async () => undefined);
29
+ expect(refusal).toBeNull();
30
+ });
31
+ it("allows the language the company's own Knowledge is written in, when the conversation is in another", async () => {
32
+ // An agency member writing in English for a Spanish-market client: the ad is for the
33
+ // client's market, so its presenter speaks the client's language.
34
+ const companyWritesIt = async (questions) => questions.map(({ instructions }) => {
35
+ if (instructions.question === ACCENT_NAMES_LANGUAGE_QUESTION)
36
+ return 0.9;
37
+ return instructions.company?.includes("Clínica dental en Valencia") ? 0.95 : 0.05;
38
+ });
39
+ const refusal = await accentContradictsUser(CREATE("Spanish from Spain"), "UGC ad for our summer promo", undefined, companyWritesIt, async () => "# Sonrisa\n\nClínica dental en Valencia con tres sedes.");
40
+ expect(refusal).toBeNull();
23
41
  });
24
42
  it("allows an accent the judge reads as asked for", async () => {
25
- const refusal = await accentContradictsUser(CREATE("German, standard"), "Reklama jest na rynek niemiecki, awatar ma mówić po niemiecku.", undefined, fitsWhen("po niemiecku"));
43
+ const refusal = await accentContradictsUser(CREATE("German, standard"), "Reklama jest na rynek niemiecki, awatar ma mówić po niemiecku.", undefined, fitsWhen("po niemiecku"), COMPANY);
26
44
  expect(refusal).toBeNull();
27
45
  });
28
46
  it("reads what the user said in an earlier turn on the same footing as this one", async () => {
29
47
  // A user who settles the market in one turn and writes the next in Spanish had their
30
48
  // own decision refused, with nothing they could type short of repeating it every time.
31
- const refusal = await accentContradictsUser(CREATE("English from UK, Southern England accent"), "Crea el avatar y empieza con el primer clip.", "La campaña es para UK y el anuncio va en inglés.", fitsWhen("para UK"));
49
+ const refusal = await accentContradictsUser(CREATE("English from UK, Southern England accent"), "Crea el avatar y empieza con el primer clip.", "La campaña es para UK y el anuncio va en inglés.", fitsWhen("para UK"), COMPANY);
32
50
  expect(refusal).toBeNull();
33
51
  });
34
52
  it("allows the language the user writes in, which nobody has to ask for", async () => {
35
53
  const writesIt = async (questions) => questions.map(({ instructions }) => (instructions.question === ACCENT_ASKED_FOR_QUESTION ? 0.1 : 0.95));
36
- const refusal = await accentContradictsUser(CREATE("Polish, Warsaw"), "Zrób awatara do reklamy.", undefined, writesIt);
54
+ const refusal = await accentContradictsUser(CREATE("Polish, Warsaw"), "Zrób awatara do reklamy.", undefined, writesIt, COMPANY);
37
55
  expect(refusal).toBeNull();
38
56
  });
39
57
  it("lets an accent that names no language through: it cannot contradict anything", async () => {
40
- const refusal = await accentContradictsUser(CREATE("warm and friendly"), "Crea un avatar para la clínica dental.", undefined, fitsWhen("nothing asked"));
58
+ const refusal = await accentContradictsUser(CREATE("warm and friendly"), "Crea un avatar para la clínica dental.", undefined, fitsWhen("nothing asked"), COMPANY);
41
59
  expect(refusal).toBeNull();
42
60
  });
43
61
  it("lets the command through when the judge cannot answer, rather than refuse on a guess", async () => {
44
- expect(await accentContradictsUser(CREATE("German"), "Hazme un avatar", undefined, async () => null)).toBeNull();
62
+ expect(await accentContradictsUser(CREATE("German"), "Hazme un avatar", undefined, async () => null, COMPANY)).toBeNull();
45
63
  });
46
64
  it("ignores commands that set no accent, without asking the judge", async () => {
47
65
  const unreachable = () => Promise.reject(new Error("the judge should not be asked"));
@@ -1 +1 @@
1
- {"version":3,"file":"avatar-accent.test.js","sourceRoot":"","sources":["../../src/hono/avatar-accent.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"avatar-accent.test.js","sourceRoot":"","sources":["../../src/hono/avatar-accent.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@koda-sl/baker-bridge",
3
- "version": "0.124.0-dev.7e3937022",
3
+ "version": "0.125.0-dev.ee2f8e252",
4
4
  "description": "HTTP server wrapping the Claude Agent SDK. Persists chat events to Convex; the dashboard subscribes via Convex realtime",
5
5
  "license": "MIT",
6
6
  "type": "module",