briyah 1.2.2 → 1.2.4

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.
Files changed (54) hide show
  1. package/data/common/config/model_prices.json +41788 -41670
  2. package/data/common/config/story_models.json +18 -10
  3. package/data/common/config/story_models_full.json +23 -5
  4. package/dist-sdk/server/src/ai/LLM/anthropic.service.js +5 -2
  5. package/dist-sdk/server/src/ai/LLM/deepseek.service.js +1 -1
  6. package/dist-sdk/server/src/room/room.js +14 -1
  7. package/docs/classes/Agent.html +14 -14
  8. package/docs/classes/Briyah.html +10 -10
  9. package/docs/classes/BriyahConfigService.html +5 -5
  10. package/docs/classes/Room.html +24 -24
  11. package/docs/classes/RoomMessage.html +10 -10
  12. package/docs/enums/MessageAction.html +3 -3
  13. package/docs/hierarchy.html +1 -1
  14. package/docs/index.html +2 -2
  15. package/docs/interfaces/AgentInfo.html +2 -2
  16. package/docs/interfaces/AgentMessagesResponse.html +2 -2
  17. package/docs/interfaces/AppService.html +109 -109
  18. package/docs/interfaces/Artifact.html +3 -3
  19. package/docs/interfaces/ArtifactMetadata.html +2 -2
  20. package/docs/interfaces/AttachDocumentResponse.html +2 -2
  21. package/docs/interfaces/BriyahConfigOptions.html +7 -7
  22. package/docs/interfaces/ChapterInfo.html +2 -2
  23. package/docs/interfaces/Character.html +2 -2
  24. package/docs/interfaces/CreateAgentResponse.html +2 -2
  25. package/docs/interfaces/CreateRoomResponse.html +2 -2
  26. package/docs/interfaces/CreateStoryResponse.html +2 -2
  27. package/docs/interfaces/FileList.html +2 -2
  28. package/docs/interfaces/FileMetadata.html +3 -3
  29. package/docs/interfaces/IConfigService.html +3 -3
  30. package/docs/interfaces/LoggingOptions.html +6 -6
  31. package/docs/interfaces/Message.html +2 -2
  32. package/docs/interfaces/ModelInfo.html +2 -2
  33. package/docs/interfaces/PreparedPromptResponse.html +2 -2
  34. package/docs/interfaces/ProcessTextResponse.html +2 -2
  35. package/docs/interfaces/PromptFile.html +2 -2
  36. package/docs/interfaces/PromptFileContent.html +2 -2
  37. package/docs/interfaces/PromptFilesResponse.html +2 -2
  38. package/docs/interfaces/PromptFolder.html +2 -2
  39. package/docs/interfaces/PromptFoldersResponse.html +2 -2
  40. package/docs/interfaces/RoomDetails.html +2 -2
  41. package/docs/interfaces/RoomInfo.html +2 -2
  42. package/docs/interfaces/RoomMessagesResponse.html +2 -2
  43. package/docs/interfaces/StoryErrorEvent.html +3 -3
  44. package/docs/interfaces/StoryIdea.html +2 -2
  45. package/docs/interfaces/StoryInfo.html +3 -3
  46. package/docs/interfaces/StoryIntroduceCharacterEvent.html +3 -3
  47. package/docs/interfaces/StoryProgressChapterEvent.html +3 -3
  48. package/docs/interfaces/StoryState.html +5 -5
  49. package/docs/interfaces/StoryStateEvent.html +3 -3
  50. package/docs/interfaces/Transaction.html +2 -2
  51. package/docs/interfaces/TransactionHistoryResponse.html +2 -2
  52. package/docs/modules.html +1 -1
  53. package/docs/types/PromptScope.html +1 -1
  54. package/package.json +1 -1
@@ -12,30 +12,38 @@
12
12
  "description": "",
13
13
  "service": "Anthropic",
14
14
  "model": "claude-haiku-4-5",
15
+ "small_model": "claude-haiku-4-5",
15
16
  "cost": "80"
16
17
  },
17
18
  {
18
- "name": "Claude Opus 4.7",
19
+ "name": "Claude Opus 4.8",
19
20
  "description": "Overkill for storytelling",
20
21
  "service": "Anthropic",
21
- "model": "claude-opus-4-7",
22
+ "model": "claude-opus-4-8",
22
23
  "small_model": "claude-haiku-4-5",
23
24
  "cost": "1500"
24
25
  },
26
+ {
27
+ "name": "Claude Fable 5",
28
+ "description": "Way overkill for storytelling",
29
+ "service": "Anthropic",
30
+ "model": "claude-fable-5",
31
+ "small_model": "claude-haiku-4-5",
32
+ "cost": "3000"
33
+ },
25
34
  {
26
35
  "name": "Grok 4.20",
27
36
  "description": "",
28
37
  "service": "Grok",
29
38
  "model": "grok-4.20-0309-reasoning",
30
- "small_model": "grok-4.20-beta-0309-non-reasoning",
31
39
  "cost": "300"
32
40
  },
33
41
  {
34
- "name": "Mock",
35
- "description": "Mock LLM for testing (no real API calls)",
36
- "service": "Mock",
37
- "model": "mock-fast-v1",
38
- "cost": "0"
42
+ "name": "DeepSeek v4",
43
+ "description": "",
44
+ "service": "DeepSeek",
45
+ "model": "deepseek-v4-pro",
46
+ "small_model": "deepseek-v4-flash",
47
+ "cost": "3"
39
48
  }
40
-
41
- ]
49
+ ]
@@ -1,9 +1,10 @@
1
1
  [
2
2
  {
3
- "name": "Claude Sonnet 4.5",
3
+ "name": "Claude Sonnet 4.6",
4
4
  "description": "Best storyteller, bar none",
5
5
  "service": "Anthropic",
6
- "model": "claude-sonnet-4-5",
6
+ "model": "claude-sonnet-4-6",
7
+ "small_model": "claude-haiku-4-5",
7
8
  "cost": "300"
8
9
  },
9
10
  {
@@ -11,15 +12,25 @@
11
12
  "description": "",
12
13
  "service": "Anthropic",
13
14
  "model": "claude-haiku-4-5",
15
+ "small_model": "claude-haiku-4-5",
14
16
  "cost": "80"
15
17
  },
16
18
  {
17
- "name": "Claude Opus 4.6",
19
+ "name": "Claude Opus 4.8",
18
20
  "description": "Overkill for storytelling",
19
21
  "service": "Anthropic",
20
- "model": "claude-opus-4-6",
22
+ "model": "claude-opus-4-8",
23
+ "small_model": "claude-haiku-4-5",
21
24
  "cost": "1500"
22
25
  },
26
+ {
27
+ "name": "Claude Fable 5",
28
+ "description": "Way overkill for storytelling",
29
+ "service": "Anthropic",
30
+ "model": "claude-fable-5",
31
+ "small_model": "claude-haiku-4-5",
32
+ "cost": "3000"
33
+ },
23
34
  {
24
35
  "name": "Qwen",
25
36
  "description": "",
@@ -40,6 +51,13 @@
40
51
  "service": "Grok",
41
52
  "model": "grok-4.20-0309-reasoning",
42
53
  "cost": "300"
54
+ },
55
+ {
56
+ "name": "DeepSeek v4",
57
+ "description": "",
58
+ "service": "DeepSeek",
59
+ "model": "deepseek-v4-pro",
60
+ "small_model": "deepseek-v4-flash",
61
+ "cost": "3"
43
62
  }
44
-
45
63
  ]
@@ -17,6 +17,7 @@ const base_ai_service_1 = require("./base-ai.service");
17
17
  const model_prices_1 = require("../model_prices");
18
18
  const errors_1 = require("../../common/errors");
19
19
  const logger_1 = require("../../common/logger");
20
+ const ai_debug_logger_1 = require("../ai-debug-logger");
20
21
  let AnthropicAiService = class AnthropicAiService extends base_ai_service_1.BaseAiService {
21
22
  static { AnthropicAiService_1 = this; }
22
23
  anthropic;
@@ -215,7 +216,9 @@ let AnthropicAiService = class AnthropicAiService extends base_ai_service_1.Base
215
216
  };
216
217
  if (this.usesEffortConfig(agent.modelName)) {
217
218
  if (agent.reasoningEffort) {
218
- createParams.thinking = { type: 'adaptive' };
219
+ createParams.thinking = ai_debug_logger_1.AiDebugLogger.isEnabled()
220
+ ? { type: 'adaptive', display: 'summarized' }
221
+ : { type: 'adaptive' };
219
222
  createParams.output_config = { effort: agent.reasoningEffort };
220
223
  }
221
224
  }
@@ -316,7 +319,7 @@ let AnthropicAiService = class AnthropicAiService extends base_ai_service_1.Base
316
319
  }
317
320
  throw new Error(`Failed to get valid response after ${maxRetries} attempts. Last error: ${lastError?.message || 'Unknown error'}`);
318
321
  }
319
- static EFFORT_CONFIG_MODEL_VERSIONS = ['4-7', '4-8'];
322
+ static EFFORT_CONFIG_MODEL_VERSIONS = ['4-7', '4-8', 'fable'];
320
323
  usesEffortConfig(modelName) {
321
324
  return AnthropicAiService_1.EFFORT_CONFIG_MODEL_VERSIONS.some((v) => modelName.includes(v));
322
325
  }
@@ -200,7 +200,7 @@ let DeepSeekAiService = class DeepSeekAiService extends base_ai_service_1.BaseAi
200
200
  model: this.deepseekClient(agent.modelName),
201
201
  messages: messages,
202
202
  temperature: 0,
203
- schema: jsonSchema,
203
+ schema: this.jsonSchemaToZod(jsonSchema),
204
204
  providerOptions: {
205
205
  deepseek: {
206
206
  reasoningEffort: reasoningEffort,
@@ -249,6 +249,10 @@ class Room {
249
249
  let i = 0;
250
250
  while (i < lines.length && lines[i].trim() === '')
251
251
  i++;
252
+ const fenceRe = /^\s*```\w*\s*$/;
253
+ const hadLeadingFence = i < lines.length && fenceRe.test(lines[i]);
254
+ if (hadLeadingFence)
255
+ i++;
252
256
  const tagLineRe = /^\s*<\w+>[\s\S]*?<\/\w+>\s*$/;
253
257
  if (i >= lines.length || !tagLineRe.test(lines[i]))
254
258
  return null;
@@ -261,7 +265,16 @@ class Room {
261
265
  const preamble = preambleLines.join('\n');
262
266
  if (j < lines.length && lines[j].trim() === '')
263
267
  j++;
264
- const content = lines.slice(j).join('\n').trimStart();
268
+ let contentLines = lines.slice(j);
269
+ if (hadLeadingFence) {
270
+ let k = contentLines.length - 1;
271
+ while (k >= 0 && contentLines[k].trim() === '')
272
+ k--;
273
+ if (k >= 0 && fenceRe.test(contentLines[k])) {
274
+ contentLines = contentLines.slice(0, k);
275
+ }
276
+ }
277
+ const content = contentLines.join('\n').trimStart();
265
278
  return { preamble, content };
266
279
  }
267
280
  static coerceMessageAction(raw) {