@hed-hog/core 0.0.400 → 0.0.401

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 (203) hide show
  1. package/dist/ai/ai.controller.d.ts +2 -0
  2. package/dist/ai/ai.controller.d.ts.map +1 -1
  3. package/dist/ai/ai.service.d.ts +86 -2
  4. package/dist/ai/ai.service.d.ts.map +1 -1
  5. package/dist/ai/ai.service.js +304 -23
  6. package/dist/ai/ai.service.js.map +1 -1
  7. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts +12 -0
  8. package/dist/ai-instruction/ai-prompt-resolver.service.d.ts.map +1 -1
  9. package/dist/ai-instruction/ai-prompt-resolver.service.js +26 -0
  10. package/dist/ai-instruction/ai-prompt-resolver.service.js.map +1 -1
  11. package/dist/core.module.d.ts.map +1 -1
  12. package/dist/core.module.js +3 -0
  13. package/dist/core.module.js.map +1 -1
  14. package/dist/document-kit/document-kit.module.d.ts +3 -0
  15. package/dist/document-kit/document-kit.module.d.ts.map +1 -0
  16. package/dist/document-kit/document-kit.module.js +24 -0
  17. package/dist/document-kit/document-kit.module.js.map +1 -0
  18. package/dist/document-kit/document-kit.registry.d.ts +55 -0
  19. package/dist/document-kit/document-kit.registry.d.ts.map +1 -0
  20. package/dist/document-kit/document-kit.registry.js +91 -0
  21. package/dist/document-kit/document-kit.registry.js.map +1 -0
  22. package/dist/document-kit/document-kit.service.d.ts +49 -0
  23. package/dist/document-kit/document-kit.service.d.ts.map +1 -0
  24. package/dist/document-kit/document-kit.service.js +135 -0
  25. package/dist/document-kit/document-kit.service.js.map +1 -0
  26. package/dist/file/file.service.d.ts +15 -1
  27. package/dist/file/file.service.d.ts.map +1 -1
  28. package/dist/file/file.service.js +52 -24
  29. package/dist/file/file.service.js.map +1 -1
  30. package/dist/file/mcp-file-source.schema.d.ts.map +1 -1
  31. package/dist/file/mcp-file-source.schema.js +8 -5
  32. package/dist/file/mcp-file-source.schema.js.map +1 -1
  33. package/dist/index.d.ts +5 -0
  34. package/dist/index.d.ts.map +1 -1
  35. package/dist/index.js +5 -0
  36. package/dist/index.js.map +1 -1
  37. package/dist/integration-profile/integration-profile.secrets.d.ts.map +1 -1
  38. package/dist/integration-profile/integration-profile.secrets.js +21 -0
  39. package/dist/integration-profile/integration-profile.secrets.js.map +1 -1
  40. package/dist/integration-profile/testers/ai.testers.d.ts.map +1 -1
  41. package/dist/integration-profile/testers/ai.testers.js +46 -8
  42. package/dist/integration-profile/testers/ai.testers.js.map +1 -1
  43. package/dist/mcp/mcp.module.d.ts.map +1 -1
  44. package/dist/mcp/mcp.module.js +2 -0
  45. package/dist/mcp/mcp.module.js.map +1 -1
  46. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts +17 -0
  47. package/dist/mcp/tools/core-access-log.mcp-tools.d.ts.map +1 -0
  48. package/dist/mcp/tools/core-access-log.mcp-tools.js +74 -0
  49. package/dist/mcp/tools/core-access-log.mcp-tools.js.map +1 -0
  50. package/dist/mcp/tools/core-files.mcp-tools.js +4 -4
  51. package/dist/mcp/tools/core-files.mcp-tools.js.map +1 -1
  52. package/dist/meeting/meeting-provider.registry.d.ts +72 -0
  53. package/dist/meeting/meeting-provider.registry.d.ts.map +1 -1
  54. package/dist/meeting/meeting-provider.registry.js.map +1 -1
  55. package/dist/oauth/oauth-token-broker.service.d.ts +50 -1
  56. package/dist/oauth/oauth-token-broker.service.d.ts.map +1 -1
  57. package/dist/oauth/oauth-token-broker.service.js +105 -3
  58. package/dist/oauth/oauth-token-broker.service.js.map +1 -1
  59. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts +6 -0
  60. package/dist/oauth/providers/microsoft-entra-id.provider.d.ts.map +1 -1
  61. package/dist/oauth/providers/microsoft-entra-id.provider.js +30 -4
  62. package/dist/oauth/providers/microsoft-entra-id.provider.js.map +1 -1
  63. package/dist/pdf/document/charts/chart-bar.d.ts +24 -0
  64. package/dist/pdf/document/charts/chart-bar.d.ts.map +1 -0
  65. package/dist/pdf/document/charts/chart-bar.js +117 -0
  66. package/dist/pdf/document/charts/chart-bar.js.map +1 -0
  67. package/dist/pdf/document/charts/chart-donut.d.ts +16 -0
  68. package/dist/pdf/document/charts/chart-donut.d.ts.map +1 -0
  69. package/dist/pdf/document/charts/chart-donut.js +89 -0
  70. package/dist/pdf/document/charts/chart-donut.js.map +1 -0
  71. package/dist/pdf/document/charts/chart-gauge.d.ts +15 -0
  72. package/dist/pdf/document/charts/chart-gauge.d.ts.map +1 -0
  73. package/dist/pdf/document/charts/chart-gauge.js +60 -0
  74. package/dist/pdf/document/charts/chart-gauge.js.map +1 -0
  75. package/dist/pdf/document/charts/chart-line.d.ts +29 -0
  76. package/dist/pdf/document/charts/chart-line.d.ts.map +1 -0
  77. package/dist/pdf/document/charts/chart-line.js +89 -0
  78. package/dist/pdf/document/charts/chart-line.js.map +1 -0
  79. package/dist/pdf/document/charts/chart-primitives.d.ts +64 -0
  80. package/dist/pdf/document/charts/chart-primitives.d.ts.map +1 -0
  81. package/dist/pdf/document/charts/chart-primitives.js +110 -0
  82. package/dist/pdf/document/charts/chart-primitives.js.map +1 -0
  83. package/dist/pdf/document/charts/chart-radar.d.ts +13 -0
  84. package/dist/pdf/document/charts/chart-radar.d.ts.map +1 -0
  85. package/dist/pdf/document/charts/chart-radar.js +83 -0
  86. package/dist/pdf/document/charts/chart-radar.js.map +1 -0
  87. package/dist/pdf/document/charts/chart-scale.d.ts +39 -0
  88. package/dist/pdf/document/charts/chart-scale.d.ts.map +1 -0
  89. package/dist/pdf/document/charts/chart-scale.js +118 -0
  90. package/dist/pdf/document/charts/chart-scale.js.map +1 -0
  91. package/dist/pdf/document/charts/index.d.ts +8 -0
  92. package/dist/pdf/document/charts/index.d.ts.map +1 -0
  93. package/dist/pdf/document/charts/index.js +24 -0
  94. package/dist/pdf/document/charts/index.js.map +1 -0
  95. package/dist/pdf/document/index.d.ts +8 -0
  96. package/dist/pdf/document/index.d.ts.map +1 -0
  97. package/dist/pdf/document/index.js +24 -0
  98. package/dist/pdf/document/index.js.map +1 -0
  99. package/dist/pdf/document/pdf-document.chrome.d.ts +20 -0
  100. package/dist/pdf/document/pdf-document.chrome.d.ts.map +1 -0
  101. package/dist/pdf/document/pdf-document.chrome.js +36 -0
  102. package/dist/pdf/document/pdf-document.chrome.js.map +1 -0
  103. package/dist/pdf/document/pdf-document.css.d.ts +20 -0
  104. package/dist/pdf/document/pdf-document.css.d.ts.map +1 -0
  105. package/dist/pdf/document/pdf-document.css.js +239 -0
  106. package/dist/pdf/document/pdf-document.css.js.map +1 -0
  107. package/dist/pdf/document/pdf-document.renderer.d.ts +10 -0
  108. package/dist/pdf/document/pdf-document.renderer.d.ts.map +1 -0
  109. package/dist/pdf/document/pdf-document.renderer.js +153 -0
  110. package/dist/pdf/document/pdf-document.renderer.js.map +1 -0
  111. package/dist/pdf/document/pdf-document.service.d.ts +27 -0
  112. package/dist/pdf/document/pdf-document.service.d.ts.map +1 -0
  113. package/dist/pdf/document/pdf-document.service.js +81 -0
  114. package/dist/pdf/document/pdf-document.service.js.map +1 -0
  115. package/dist/pdf/document/pdf-document.theme.d.ts +41 -0
  116. package/dist/pdf/document/pdf-document.theme.d.ts.map +1 -0
  117. package/dist/pdf/document/pdf-document.theme.js +105 -0
  118. package/dist/pdf/document/pdf-document.theme.js.map +1 -0
  119. package/dist/pdf/document/pdf-document.types.d.ts +108 -0
  120. package/dist/pdf/document/pdf-document.types.d.ts.map +1 -0
  121. package/dist/pdf/document/pdf-document.types.js +18 -0
  122. package/dist/pdf/document/pdf-document.types.js.map +1 -0
  123. package/dist/pdf/pdf.module.d.ts.map +1 -1
  124. package/dist/pdf/pdf.module.js +3 -2
  125. package/dist/pdf/pdf.module.js.map +1 -1
  126. package/dist/pdf/pdf.service.d.ts +69 -1
  127. package/dist/pdf/pdf.service.d.ts.map +1 -1
  128. package/dist/pdf/pdf.service.js +164 -63
  129. package/dist/pdf/pdf.service.js.map +1 -1
  130. package/dist/pdf/templates/commercial-proposal.template.d.ts +96 -0
  131. package/dist/pdf/templates/commercial-proposal.template.d.ts.map +1 -0
  132. package/dist/pdf/templates/commercial-proposal.template.js +276 -0
  133. package/dist/pdf/templates/commercial-proposal.template.js.map +1 -0
  134. package/dist/setting/favicon.controller.d.ts +26 -0
  135. package/dist/setting/favicon.controller.d.ts.map +1 -0
  136. package/dist/setting/favicon.controller.js +130 -0
  137. package/dist/setting/favicon.controller.js.map +1 -0
  138. package/dist/setting/setting.module.d.ts.map +1 -1
  139. package/dist/setting/setting.module.js +2 -1
  140. package/dist/setting/setting.module.js.map +1 -1
  141. package/dist/whatsapp-sender/whatsapp-sender.service.d.ts.map +1 -1
  142. package/dist/whatsapp-sender/whatsapp-sender.service.js +25 -2
  143. package/dist/whatsapp-sender/whatsapp-sender.service.js.map +1 -1
  144. package/hedhog/data/integration_type.yaml +6 -0
  145. package/hedhog/data/route.yaml +8 -0
  146. package/hedhog/data/setting_group.yaml +52 -0
  147. package/hedhog/frontend/messages/en.json +54 -1
  148. package/hedhog/frontend/messages/pt.json +54 -1
  149. package/package.json +4 -4
  150. package/src/ai/ai-attachment.fragments.spec.ts +56 -3
  151. package/src/ai/ai.service.responses.spec.ts +429 -0
  152. package/src/ai/ai.service.ts +409 -27
  153. package/src/ai-instruction/ai-prompt-resolver.service.spec.ts +44 -0
  154. package/src/ai-instruction/ai-prompt-resolver.service.ts +29 -0
  155. package/src/core.module.ts +3 -0
  156. package/src/document-kit/document-kit.module.ts +12 -0
  157. package/src/document-kit/document-kit.registry.ts +125 -0
  158. package/src/document-kit/document-kit.service.spec.ts +156 -0
  159. package/src/document-kit/document-kit.service.ts +173 -0
  160. package/src/file/file.service.spec.ts +168 -1
  161. package/src/file/file.service.ts +72 -34
  162. package/src/file/mcp-file-source.schema.ts +8 -5
  163. package/src/index.ts +5 -0
  164. package/src/integration-profile/integration-profile.secrets.ts +21 -0
  165. package/src/integration-profile/testers/ai.testers.ts +70 -5
  166. package/src/integration-profile/testers/remaining.testers.spec.ts +65 -1
  167. package/src/integration-profile/testers/tester-coverage.spec.ts +10 -0
  168. package/src/mcp/mcp.module.ts +2 -0
  169. package/src/mcp/tools/core-access-log.mcp-tools.ts +66 -0
  170. package/src/mcp/tools/core-files.mcp-tools.ts +4 -4
  171. package/src/meeting/meeting-provider.registry.ts +80 -0
  172. package/src/oauth/oauth-token-broker.service.spec.ts +108 -0
  173. package/src/oauth/oauth-token-broker.service.ts +129 -2
  174. package/src/oauth/providers/microsoft-entra-id.provider.spec.ts +133 -0
  175. package/src/oauth/providers/microsoft-entra-id.provider.ts +29 -2
  176. package/src/pdf/document/charts/chart-bar.ts +217 -0
  177. package/src/pdf/document/charts/chart-donut.ts +163 -0
  178. package/src/pdf/document/charts/chart-gauge.ts +94 -0
  179. package/src/pdf/document/charts/chart-line.ts +159 -0
  180. package/src/pdf/document/charts/chart-primitives.ts +188 -0
  181. package/src/pdf/document/charts/chart-radar.ts +136 -0
  182. package/src/pdf/document/charts/chart-scale.spec.ts +93 -0
  183. package/src/pdf/document/charts/chart-scale.ts +141 -0
  184. package/src/pdf/document/charts/charts.spec.ts +157 -0
  185. package/src/pdf/document/charts/index.ts +7 -0
  186. package/src/pdf/document/index.ts +7 -0
  187. package/src/pdf/document/pdf-document.chrome.ts +38 -0
  188. package/src/pdf/document/pdf-document.css.ts +238 -0
  189. package/src/pdf/document/pdf-document.renderer.spec.ts +129 -0
  190. package/src/pdf/document/pdf-document.renderer.ts +215 -0
  191. package/src/pdf/document/pdf-document.service.ts +77 -0
  192. package/src/pdf/document/pdf-document.theme.ts +146 -0
  193. package/src/pdf/document/pdf-document.types.ts +97 -0
  194. package/src/pdf/pdf.module.ts +3 -2
  195. package/src/pdf/pdf.service.spec.ts +131 -0
  196. package/src/pdf/pdf.service.ts +245 -82
  197. package/src/pdf/templates/commercial-proposal.template.spec.ts +177 -0
  198. package/src/pdf/templates/commercial-proposal.template.ts +400 -0
  199. package/src/setting/favicon.controller.spec.ts +92 -0
  200. package/src/setting/favicon.controller.ts +135 -0
  201. package/src/setting/setting.module.ts +2 -1
  202. package/src/whatsapp-sender/whatsapp-sender.service.spec.ts +73 -0
  203. package/src/whatsapp-sender/whatsapp-sender.service.ts +32 -2
@@ -14,6 +14,7 @@ export declare class AiController {
14
14
  provider: "openai" | "deepseek" | "gemini" | "claude";
15
15
  model: string;
16
16
  content: string;
17
+ attachmentDelivery: import("./ai.service").AiAttachmentDelivery;
17
18
  }>;
18
19
  createAgent(data: CreateAgentDTO): Promise<{
19
20
  id: number;
@@ -79,6 +80,7 @@ export declare class AiController {
79
80
  provider: "openai" | "deepseek" | "gemini" | "claude";
80
81
  model: string;
81
82
  content: string;
83
+ attachmentDelivery: import("./ai.service").AiAttachmentDelivery;
82
84
  }>;
83
85
  editRichtextHtml(data: RichtextEditHtmlDTO): Promise<import("./richtext-ai.service").RichtextAiEditResult>;
84
86
  }
@@ -1 +1 @@
1
- {"version":3,"file":"ai.controller.d.ts","sourceRoot":"","sources":["../../src/ai/ai.controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBAEa,YAAY;IAGrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,SAAS,EAAE,SAAS,EAEpB,iBAAiB,EAAE,iBAAiB;IAKjD,IAAI,CAAS,IAAI,EAAE,OAAO,EAAkB,IAAI,CAAC,EAAE,UAAU;;;;;IAK7D,WAAW,CAAS,IAAI,EAAE,cAAc;;;;;;;;;;IAKxC,UAAU,CAAe,gBAAgB,KAAA;;;;;;;;;;;;;;;;IAKzC,YAAY,CAAiC,OAAO,EAAE,MAAM;;;;;;;;;;IAK5D,QAAQ,CAAgB,IAAI,EAAE,MAAM;;;;;;;;;;IAKpC,WAAW,CACiB,OAAO,EAAE,MAAM,EACvC,IAAI,EAAE,cAAc;;;;;;;;;;IAMxB,YAAY,CAAS,IAAI,EAAE,SAAS;;;IAMpC,aAAa,CACF,IAAI,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,EACV,IAAI,CAAC,EAAE,UAAU;;;;;;IAM7B,gBAAgB,CAAS,IAAI,EAAE,mBAAmB;CAGzD"}
1
+ {"version":3,"file":"ai.controller.d.ts","sourceRoot":"","sources":["../../src/ai/ai.controller.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AACzC,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,OAAO,EAAE,MAAM,gBAAgB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D,qBAEa,YAAY;IAGrB,OAAO,CAAC,QAAQ,CAAC,SAAS;IAE1B,OAAO,CAAC,QAAQ,CAAC,iBAAiB;gBAFjB,SAAS,EAAE,SAAS,EAEpB,iBAAiB,EAAE,iBAAiB;IAKjD,IAAI,CAAS,IAAI,EAAE,OAAO,EAAkB,IAAI,CAAC,EAAE,UAAU;;;;;;IAK7D,WAAW,CAAS,IAAI,EAAE,cAAc;;;;;;;;;;IAKxC,UAAU,CAAe,gBAAgB,KAAA;;;;;;;;;;;;;;;;IAKzC,YAAY,CAAiC,OAAO,EAAE,MAAM;;;;;;;;;;IAK5D,QAAQ,CAAgB,IAAI,EAAE,MAAM;;;;;;;;;;IAKpC,WAAW,CACiB,OAAO,EAAE,MAAM,EACvC,IAAI,EAAE,cAAc;;;;;;;;;;IAMxB,YAAY,CAAS,IAAI,EAAE,SAAS;;;IAMpC,aAAa,CACF,IAAI,EAAE,MAAM,EACnB,IAAI,EAAE,YAAY,EACV,IAAI,CAAC,EAAE,UAAU;;;;;;;IAM7B,gBAAgB,CAAS,IAAI,EAAE,mBAAmB;CAGzD"}
@@ -1,6 +1,6 @@
1
1
  import { PaginationDTO } from '@hed-hog/api-pagination';
2
2
  import { PrismaService } from '@hed-hog/api-prisma';
3
- import { OnModuleInit } from '@nestjs/common';
3
+ import { BadRequestException, OnModuleInit } from '@nestjs/common';
4
4
  import { AiExecutionService } from '../ai-instruction/ai-execution.service';
5
5
  import { AiPromptResolverService, type PromptSource } from '../ai-instruction/ai-prompt-resolver.service';
6
6
  import type { TemplateVars } from '../ai-instruction/ai-prompt-template.util';
@@ -34,6 +34,33 @@ type AiAgentRecord = {
34
34
  created_at: Date;
35
35
  updated_at: Date;
36
36
  };
37
+ /**
38
+ * Como o anexo efetivamente chegou ao modelo na última chamada.
39
+ *
40
+ * Sem isso quem chama só consegue adivinhar — foi exatamente o que o extrator
41
+ * de notas fiscais fazia, deduzindo pelo tamanho do texto do PDF, e por isso
42
+ * insistia em reperguntar ao modelo sobre um anexo que ele nunca recebeu.
43
+ * `unreadable-pdf` e `binary` são os dois casos em que o modelo recebeu um
44
+ * marcador no lugar do documento.
45
+ */
46
+ export type AiAttachmentDelivery = 'none' | 'image' | 'pdf-document' | 'pdf-text' | 'text' | 'unreadable-pdf' | 'binary';
47
+ export declare function isAttachmentDeliveredToModel(delivery?: AiAttachmentDelivery | null): boolean;
48
+ export declare function isAttachmentDeliveredAsPixels(delivery?: AiAttachmentDelivery | null): boolean;
49
+ /**
50
+ * O setting de um provider aponta para o perfil de outro provider.
51
+ *
52
+ * Classe própria, e não um `BadRequestException` solto, para uma escada de
53
+ * fallback conseguir parar antes de disparar chamadas que vão dar 4xx com
54
+ * certeza — era o que o extrator de notas fiscais fazia oito vezes por upload,
55
+ * engolindo cada uma delas.
56
+ */
57
+ export declare class AiProfileProviderMismatchError extends BadRequestException {
58
+ readonly requestedProvider: string;
59
+ readonly profileSlug: string;
60
+ readonly profileProviderSlug: string;
61
+ readonly settingSlug: string;
62
+ constructor(requestedProvider: string, profileSlug: string, profileProviderSlug: string, settingSlug: string);
63
+ }
37
64
  export declare class AiService implements OnModuleInit {
38
65
  private readonly prismaService;
39
66
  private readonly settingService;
@@ -47,6 +74,7 @@ export declare class AiService implements OnModuleInit {
47
74
  provider: AiProvider;
48
75
  model: string;
49
76
  content: string;
77
+ attachmentDelivery: AiAttachmentDelivery;
50
78
  }>;
51
79
  /**
52
80
  * Chat driven by prompts stored in `ai_instruction`.
@@ -139,6 +167,7 @@ export declare class AiService implements OnModuleInit {
139
167
  provider: AiProvider;
140
168
  model: string;
141
169
  content: string;
170
+ attachmentDelivery: AiAttachmentDelivery;
142
171
  }>;
143
172
  getAgentBySlug(slug: string): Promise<AiAgentRecord>;
144
173
  extractAttachmentText(file?: MulterFile, fileId?: number): Promise<string>;
@@ -147,7 +176,7 @@ export declare class AiService implements OnModuleInit {
147
176
  filename: string;
148
177
  mimeType: string;
149
178
  bytes: number;
150
- mode: "binary" | "text" | "image" | "pdf-text";
179
+ mode: "text" | "binary" | "image" | "pdf-text";
151
180
  textLength: number;
152
181
  textSample: string;
153
182
  sha256: string;
@@ -175,10 +204,56 @@ export declare class AiService implements OnModuleInit {
175
204
  private resolveProviderAndProfile;
176
205
  /** Resolves the active AI integration profile's credentials plus its optional model/timeout overrides. */
177
206
  private getAiProfile;
207
+ /**
208
+ * "Este provider dá para usar?", sem lançar.
209
+ *
210
+ * Existe para uma escada de fallback perguntar antes de tentar, em vez de
211
+ * gastar uma requisição HTTP por modelo só para descobrir que a credencial
212
+ * nem é daquele provider.
213
+ */
214
+ isProviderConfigured(provider: AiProvider): Promise<{
215
+ ok: boolean;
216
+ reason?: string;
217
+ }>;
178
218
  private loadAiProfileBySlug;
179
219
  /** Rejects with a timeout error if `promise` doesn't settle within `ms`. */
180
220
  private withTimeout;
181
221
  private chatWithOpenAi;
222
+ /**
223
+ * Bytes crus de PDF acima disto não vão inline: base64 infla ~1,37x e a
224
+ * OpenAI limita a requisição a 50 MB.
225
+ */
226
+ private static readonly OPENAI_RESPONSES_MAX_PDF_BYTES;
227
+ /** Acima disto a conta de tokens das páginas renderizadas deixa de compensar. */
228
+ private static readonly OPENAI_RESPONSES_MAX_PDF_PAGES;
229
+ /**
230
+ * Modelos que renderizam as páginas do PDF como imagem na Responses API.
231
+ *
232
+ * Um modelo sem visão recebendo `input_file` só recebe a camada de texto de
233
+ * volta — o mesmo nada do chat/completions, num endpoint diferente. Deixá-lo
234
+ * no caminho antigo mantém a falha conhecida em vez de criar uma nova.
235
+ */
236
+ private static readonly OPENAI_DOCUMENT_MODEL_RE;
237
+ private shouldUseOpenAiResponses;
238
+ private buildOpenAiResponsesBody;
239
+ /**
240
+ * Texto da resposta da Responses API.
241
+ *
242
+ * `output_text` é conveniência do SDK — o JSON HTTP cru normalmente não traz.
243
+ * O texto mora no array `output`, ao lado de itens `reasoning` que não têm
244
+ * `content` nenhum. Percorrer o array é o caminho real; o atalho pelo
245
+ * `output_text` só vale para quando o campo por acaso estiver lá.
246
+ */
247
+ private readOpenAiResponsesText;
248
+ /**
249
+ * PDF como documento, via `POST /v1/responses`.
250
+ *
251
+ * É o único caminho em que um PDF escaneado chega ao modelo: para modelos com
252
+ * visão a API extrai o texto e renderiza cada página como imagem. O
253
+ * chat/completions, mesmo aceitando um content part de PDF, só extrai texto —
254
+ * não serviria para um scan.
255
+ */
256
+ private chatWithOpenAiResponses;
182
257
  /**
183
258
  * Anthropic (Claude).
184
259
  *
@@ -194,12 +269,21 @@ export declare class AiService implements OnModuleInit {
194
269
  private chatWithClaude;
195
270
  private chatWithGemini;
196
271
  private resolveAttachment;
272
+ /**
273
+ * Conteúdo da mensagem do usuário no chat/completions, mais como o anexo foi
274
+ * parar lá dentro.
275
+ *
276
+ * O `delivery` sai daqui porque é aqui que a decisão acontece: um PDF sem
277
+ * camada de texto vira o marcador de ilegível, e só este método sabe disso.
278
+ */
197
279
  private buildOpenAiUserContent;
198
280
  private isImageMime;
199
281
  private isTextMime;
200
282
  private isPdfMime;
201
283
  private normalizeAttachmentMimeType;
202
284
  private extractPdfText;
285
+ /** Páginas do PDF, ou 0 quando ele não abre — nesse caso o teto não barra. */
286
+ private countPdfPages;
203
287
  private toUtf8Text;
204
288
  }
205
289
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"ai.service.d.ts","sourceRoot":"","sources":["../../src/ai/ai.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai.service.d.ts","sourceRoot":"","sources":["../../src/ai/ai.service.ts"],"names":[],"mappings":"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"}