evo360-types 1.3.746 → 1.3.750
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.
- package/dist/apps/evo-chat/thread-message/zod-schemas.d.ts +24 -0
- package/dist/apps/evo-chat/thread-message/zod-schemas.js +2 -0
- package/dist/apps/evo-chat/thread-message/zod-schemas.ts +2 -0
- package/dist/apps/evo-hub-ia/v1/zod-schemas.d.ts +328 -0
- package/dist/apps/evo-hub-ia/v1/zod-schemas.js +85 -1
- package/dist/apps/evo-hub-ia/v1/zod-schemas.ts +105 -0
- package/package.json +1 -1
|
@@ -63,6 +63,8 @@ export declare const zMessageMediaSchema: z.ZodObject<{
|
|
|
63
63
|
filename: z.ZodOptional<z.ZodString>;
|
|
64
64
|
caption: z.ZodOptional<z.ZodString>;
|
|
65
65
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
66
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
67
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
66
68
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
67
69
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
68
70
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -72,6 +74,8 @@ export declare const zMessageMediaSchema: z.ZodObject<{
|
|
|
72
74
|
filename: z.ZodOptional<z.ZodString>;
|
|
73
75
|
caption: z.ZodOptional<z.ZodString>;
|
|
74
76
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
77
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
78
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
75
79
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
76
80
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
77
81
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -81,6 +85,8 @@ export declare const zMessageMediaSchema: z.ZodObject<{
|
|
|
81
85
|
filename: z.ZodOptional<z.ZodString>;
|
|
82
86
|
caption: z.ZodOptional<z.ZodString>;
|
|
83
87
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
88
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
89
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
84
90
|
}, z.ZodTypeAny, "passthrough">>;
|
|
85
91
|
export declare const zMessageCreatedBySchema: z.ZodObject<{
|
|
86
92
|
type: z.ZodEnum<["human", "automation", "system"]>;
|
|
@@ -209,6 +215,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
209
215
|
filename: z.ZodOptional<z.ZodString>;
|
|
210
216
|
caption: z.ZodOptional<z.ZodString>;
|
|
211
217
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
218
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
219
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
212
220
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
213
221
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
214
222
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -218,6 +226,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
218
226
|
filename: z.ZodOptional<z.ZodString>;
|
|
219
227
|
caption: z.ZodOptional<z.ZodString>;
|
|
220
228
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
229
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
230
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
221
231
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
222
232
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
223
233
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -227,6 +237,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
227
237
|
filename: z.ZodOptional<z.ZodString>;
|
|
228
238
|
caption: z.ZodOptional<z.ZodString>;
|
|
229
239
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
240
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
241
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
230
242
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
231
243
|
location: z.ZodOptional<z.ZodObject<{
|
|
232
244
|
latitude: z.ZodNumber;
|
|
@@ -536,6 +548,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
536
548
|
filename: z.ZodOptional<z.ZodString>;
|
|
537
549
|
caption: z.ZodOptional<z.ZodString>;
|
|
538
550
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
551
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
552
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
539
553
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
540
554
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
541
555
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -545,6 +559,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
545
559
|
filename: z.ZodOptional<z.ZodString>;
|
|
546
560
|
caption: z.ZodOptional<z.ZodString>;
|
|
547
561
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
562
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
563
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
548
564
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
549
565
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
550
566
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -554,6 +570,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
554
570
|
filename: z.ZodOptional<z.ZodString>;
|
|
555
571
|
caption: z.ZodOptional<z.ZodString>;
|
|
556
572
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
573
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
574
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
557
575
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
558
576
|
location: z.ZodOptional<z.ZodObject<{
|
|
559
577
|
latitude: z.ZodNumber;
|
|
@@ -863,6 +881,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
863
881
|
filename: z.ZodOptional<z.ZodString>;
|
|
864
882
|
caption: z.ZodOptional<z.ZodString>;
|
|
865
883
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
884
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
885
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
866
886
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
867
887
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
868
888
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -872,6 +892,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
872
892
|
filename: z.ZodOptional<z.ZodString>;
|
|
873
893
|
caption: z.ZodOptional<z.ZodString>;
|
|
874
894
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
895
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
896
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
875
897
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
876
898
|
gcs_uri: z.ZodOptional<z.ZodString>;
|
|
877
899
|
url: z.ZodOptional<z.ZodString>;
|
|
@@ -881,6 +903,8 @@ export declare const zThreadMessageSchema: z.ZodObject<{
|
|
|
881
903
|
filename: z.ZodOptional<z.ZodString>;
|
|
882
904
|
caption: z.ZodOptional<z.ZodString>;
|
|
883
905
|
meta_media_id: z.ZodOptional<z.ZodString>;
|
|
906
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
907
|
+
voice: z.ZodOptional<z.ZodBoolean>;
|
|
884
908
|
}, z.ZodTypeAny, "passthrough">>>;
|
|
885
909
|
location: z.ZodOptional<z.ZodObject<{
|
|
886
910
|
latitude: z.ZodNumber;
|
|
@@ -23,6 +23,8 @@ exports.zMessageMediaSchema = zod_1.z.object({
|
|
|
23
23
|
filename: zod_1.z.string().optional(),
|
|
24
24
|
caption: zod_1.z.string().optional(),
|
|
25
25
|
meta_media_id: zod_1.z.string().optional(),
|
|
26
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
27
|
+
voice: zod_1.z.boolean().optional(),
|
|
26
28
|
}).passthrough();
|
|
27
29
|
exports.zMessageCreatedBySchema = zod_1.z.object({
|
|
28
30
|
type: zod_1.z.enum(['human', 'automation', 'system']),
|
|
@@ -22,6 +22,8 @@ export const zMessageMediaSchema = z.object({
|
|
|
22
22
|
filename: z.string().optional(),
|
|
23
23
|
caption: z.string().optional(),
|
|
24
24
|
meta_media_id: z.string().optional(),
|
|
25
|
+
/** feat-303: áudio enviado como nota de voz (OGG/Opus + `voice: true` na Meta). */
|
|
26
|
+
voice: z.boolean().optional(),
|
|
25
27
|
}).passthrough();
|
|
26
28
|
|
|
27
29
|
export const zMessageCreatedBySchema = z.object({
|
|
@@ -1611,6 +1611,175 @@ export declare const zHubiaRuleSchema: z.ZodEffects<z.ZodObject<{
|
|
|
1611
1611
|
/** Aborta sequência de ações no primeiro erro. */
|
|
1612
1612
|
stop_actions_on_error: z.ZodDefault<z.ZodBoolean>;
|
|
1613
1613
|
}, z.ZodTypeAny, "passthrough">>;
|
|
1614
|
+
/** Vozes do `gpt-4o-mini-tts` oferecidas na UI. O schema aceita qualquer string
|
|
1615
|
+
* para o provedor poder mudar sem novo contrato. */
|
|
1616
|
+
export declare const HUBIA_VOICE_REPLY_OPENAI_VOICES: readonly ["alloy", "ash", "ballad", "coral", "echo", "fable", "nova", "onyx", "sage", "shimmer", "verse", "marin", "cedar"];
|
|
1617
|
+
export declare const HUBIA_VOICE_REPLY_DEFAULT_VOICE = "coral";
|
|
1618
|
+
/** feat-303 F1.1: provedores de TTS. Ausente no binding = `openai`. */
|
|
1619
|
+
export declare const HUBIA_VOICE_REPLY_PROVIDERS: readonly ["openai", "elevenlabs"];
|
|
1620
|
+
export declare const zHubiaVoiceProviderSchema: z.ZodEnum<["openai", "elevenlabs"]>;
|
|
1621
|
+
export type HubiaVoiceProvider = z.infer<typeof zHubiaVoiceProviderSchema>;
|
|
1622
|
+
/** Modelo usado quando o binding não define `model`. */
|
|
1623
|
+
export declare const HUBIA_VOICE_REPLY_DEFAULT_MODEL: Record<HubiaVoiceProvider, string>;
|
|
1624
|
+
/** Modelos da ElevenLabs oferecidos na UI (o schema aceita qualquer string). */
|
|
1625
|
+
export declare const HUBIA_VOICE_REPLY_ELEVENLABS_MODELS: readonly ["eleven_v4", "eleven_v3", "eleven_multilingual_v2", "eleven_flash_v2_5"];
|
|
1626
|
+
/** Faixa de `speed` aceita pela ElevenLabs; o runtime limita a ela. */
|
|
1627
|
+
export declare const HUBIA_VOICE_REPLY_ELEVENLABS_SPEED: {
|
|
1628
|
+
readonly min: 0.7;
|
|
1629
|
+
readonly max: 1.2;
|
|
1630
|
+
};
|
|
1631
|
+
/** Liga a resposta em áudio no binding. QUANDO usar áudio é regra do prompt do
|
|
1632
|
+
* binding (o LLM decide por turno), não deste objeto. */
|
|
1633
|
+
export declare const zHubiaVoiceReplySchema: z.ZodObject<{
|
|
1634
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
1635
|
+
/** Ausente = `openai` (bindings gravados antes da F1.1). */
|
|
1636
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
1637
|
+
/** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
|
|
1638
|
+
model: z.ZodOptional<z.ZodString>;
|
|
1639
|
+
/** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
|
|
1640
|
+
voice: z.ZodDefault<z.ZodString>;
|
|
1641
|
+
/** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
|
|
1642
|
+
instructions: z.ZodOptional<z.ZodString>;
|
|
1643
|
+
/** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
|
|
1644
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
1645
|
+
/** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
|
|
1646
|
+
elevenlabs: z.ZodOptional<z.ZodObject<{
|
|
1647
|
+
stability: z.ZodOptional<z.ZodNumber>;
|
|
1648
|
+
similarity_boost: z.ZodOptional<z.ZodNumber>;
|
|
1649
|
+
style: z.ZodOptional<z.ZodNumber>;
|
|
1650
|
+
}, "strip", z.ZodTypeAny, {
|
|
1651
|
+
stability?: number | undefined;
|
|
1652
|
+
similarity_boost?: number | undefined;
|
|
1653
|
+
style?: number | undefined;
|
|
1654
|
+
}, {
|
|
1655
|
+
stability?: number | undefined;
|
|
1656
|
+
similarity_boost?: number | undefined;
|
|
1657
|
+
style?: number | undefined;
|
|
1658
|
+
}>>;
|
|
1659
|
+
}, "strip", z.ZodTypeAny, {
|
|
1660
|
+
enabled: boolean;
|
|
1661
|
+
voice: string;
|
|
1662
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
1663
|
+
model?: string | undefined;
|
|
1664
|
+
elevenlabs?: {
|
|
1665
|
+
stability?: number | undefined;
|
|
1666
|
+
similarity_boost?: number | undefined;
|
|
1667
|
+
style?: number | undefined;
|
|
1668
|
+
} | undefined;
|
|
1669
|
+
instructions?: string | undefined;
|
|
1670
|
+
speed?: number | undefined;
|
|
1671
|
+
}, {
|
|
1672
|
+
enabled?: boolean | undefined;
|
|
1673
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
1674
|
+
model?: string | undefined;
|
|
1675
|
+
voice?: string | undefined;
|
|
1676
|
+
elevenlabs?: {
|
|
1677
|
+
stability?: number | undefined;
|
|
1678
|
+
similarity_boost?: number | undefined;
|
|
1679
|
+
style?: number | undefined;
|
|
1680
|
+
} | undefined;
|
|
1681
|
+
instructions?: string | undefined;
|
|
1682
|
+
speed?: number | undefined;
|
|
1683
|
+
}>;
|
|
1684
|
+
export type IHubiaVoiceReply = z.infer<typeof zHubiaVoiceReplySchema>;
|
|
1685
|
+
export declare const zHubiaResponseModeSchema: z.ZodEnum<["text", "audio"]>;
|
|
1686
|
+
export type HubiaResponseMode = z.infer<typeof zHubiaResponseModeSchema>;
|
|
1687
|
+
/** `conversations/{id}.pending_suggestion` (modo hybrid_assist). */
|
|
1688
|
+
export declare const zHubiaPendingSuggestionSchema: z.ZodObject<{
|
|
1689
|
+
execution_id: z.ZodString;
|
|
1690
|
+
messages: z.ZodArray<z.ZodString, "many">;
|
|
1691
|
+
created_at: z.ZodAny;
|
|
1692
|
+
was_used: z.ZodOptional<z.ZodBoolean>;
|
|
1693
|
+
/** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
|
|
1694
|
+
response_mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
|
|
1695
|
+
/** Binding + canal permitiam áudio no turno da sugestão. */
|
|
1696
|
+
voice_available: z.ZodOptional<z.ZodBoolean>;
|
|
1697
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1698
|
+
execution_id: z.ZodString;
|
|
1699
|
+
messages: z.ZodArray<z.ZodString, "many">;
|
|
1700
|
+
created_at: z.ZodAny;
|
|
1701
|
+
was_used: z.ZodOptional<z.ZodBoolean>;
|
|
1702
|
+
/** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
|
|
1703
|
+
response_mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
|
|
1704
|
+
/** Binding + canal permitiam áudio no turno da sugestão. */
|
|
1705
|
+
voice_available: z.ZodOptional<z.ZodBoolean>;
|
|
1706
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1707
|
+
execution_id: z.ZodString;
|
|
1708
|
+
messages: z.ZodArray<z.ZodString, "many">;
|
|
1709
|
+
created_at: z.ZodAny;
|
|
1710
|
+
was_used: z.ZodOptional<z.ZodBoolean>;
|
|
1711
|
+
/** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
|
|
1712
|
+
response_mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
|
|
1713
|
+
/** Binding + canal permitiam áudio no turno da sugestão. */
|
|
1714
|
+
voice_available: z.ZodOptional<z.ZodBoolean>;
|
|
1715
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1716
|
+
export type IHubiaPendingSuggestion = z.infer<typeof zHubiaPendingSuggestionSchema>;
|
|
1717
|
+
/** Gravado na mensagem enviada a partir de uma sugestão da HubIA. */
|
|
1718
|
+
export declare const zHubiaSuggestionMessageRefSchema: z.ZodObject<{
|
|
1719
|
+
execution_id: z.ZodString;
|
|
1720
|
+
/** O operador alterou o texto antes de enviar. */
|
|
1721
|
+
edited: z.ZodBoolean;
|
|
1722
|
+
mode: z.ZodEnum<["text", "audio"]>;
|
|
1723
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1724
|
+
execution_id: z.ZodString;
|
|
1725
|
+
/** O operador alterou o texto antes de enviar. */
|
|
1726
|
+
edited: z.ZodBoolean;
|
|
1727
|
+
mode: z.ZodEnum<["text", "audio"]>;
|
|
1728
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1729
|
+
execution_id: z.ZodString;
|
|
1730
|
+
/** O operador alterou o texto antes de enviar. */
|
|
1731
|
+
edited: z.ZodBoolean;
|
|
1732
|
+
mode: z.ZodEnum<["text", "audio"]>;
|
|
1733
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1734
|
+
export type IHubiaSuggestionMessageRef = z.infer<typeof zHubiaSuggestionMessageRefSchema>;
|
|
1735
|
+
/** Desfecho da sugestão, gravado na execução que a gerou. */
|
|
1736
|
+
export declare const zHubiaSuggestionOutcomeSchema: z.ZodObject<{
|
|
1737
|
+
status: z.ZodEnum<["sent", "sent_edited", "discarded"]>;
|
|
1738
|
+
mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
|
|
1739
|
+
by_user_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1740
|
+
at: z.ZodAny;
|
|
1741
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1742
|
+
status: z.ZodEnum<["sent", "sent_edited", "discarded"]>;
|
|
1743
|
+
mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
|
|
1744
|
+
by_user_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1745
|
+
at: z.ZodAny;
|
|
1746
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1747
|
+
status: z.ZodEnum<["sent", "sent_edited", "discarded"]>;
|
|
1748
|
+
mode: z.ZodOptional<z.ZodEnum<["text", "audio"]>>;
|
|
1749
|
+
by_user_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
1750
|
+
at: z.ZodAny;
|
|
1751
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1752
|
+
export type IHubiaSuggestionOutcome = z.infer<typeof zHubiaSuggestionOutcomeSchema>;
|
|
1753
|
+
/** Metadados da nota de voz gerada pela HubIA, gravados na mensagem. */
|
|
1754
|
+
export declare const zHubiaTtsMessageMetaSchema: z.ZodObject<{
|
|
1755
|
+
/** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
|
|
1756
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
1757
|
+
model: z.ZodString;
|
|
1758
|
+
voice: z.ZodString;
|
|
1759
|
+
format: z.ZodEnum<["ogg", "mp3"]>;
|
|
1760
|
+
chars: z.ZodNumber;
|
|
1761
|
+
duration_seconds: z.ZodNullable<z.ZodNumber>;
|
|
1762
|
+
execution_id: z.ZodOptional<z.ZodString>;
|
|
1763
|
+
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
1764
|
+
/** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
|
|
1765
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
1766
|
+
model: z.ZodString;
|
|
1767
|
+
voice: z.ZodString;
|
|
1768
|
+
format: z.ZodEnum<["ogg", "mp3"]>;
|
|
1769
|
+
chars: z.ZodNumber;
|
|
1770
|
+
duration_seconds: z.ZodNullable<z.ZodNumber>;
|
|
1771
|
+
execution_id: z.ZodOptional<z.ZodString>;
|
|
1772
|
+
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
1773
|
+
/** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
|
|
1774
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
1775
|
+
model: z.ZodString;
|
|
1776
|
+
voice: z.ZodString;
|
|
1777
|
+
format: z.ZodEnum<["ogg", "mp3"]>;
|
|
1778
|
+
chars: z.ZodNumber;
|
|
1779
|
+
duration_seconds: z.ZodNullable<z.ZodNumber>;
|
|
1780
|
+
execution_id: z.ZodOptional<z.ZodString>;
|
|
1781
|
+
}, z.ZodTypeAny, "passthrough">>;
|
|
1782
|
+
export type IHubiaTtsMessageMeta = z.infer<typeof zHubiaTtsMessageMetaSchema>;
|
|
1614
1783
|
export declare const zAiBindingSchema: z.ZodObject<{
|
|
1615
1784
|
id: z.ZodString;
|
|
1616
1785
|
ref: z.ZodAny;
|
|
@@ -2377,6 +2546,59 @@ export declare const zAiBindingSchema: z.ZodObject<{
|
|
|
2377
2546
|
* com `hubia` em `usable_for`) usada neste departamento. Vence o
|
|
2378
2547
|
* `llm_connection_id` do canal. `null`/ausente = herda do canal. */
|
|
2379
2548
|
llm_connection_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
2549
|
+
/** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
|
|
2550
|
+
* estruturado (`respond_to_contact`) ligado no canal. */
|
|
2551
|
+
voice_reply: z.ZodOptional<z.ZodObject<{
|
|
2552
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
2553
|
+
/** Ausente = `openai` (bindings gravados antes da F1.1). */
|
|
2554
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
2555
|
+
/** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
|
|
2556
|
+
model: z.ZodOptional<z.ZodString>;
|
|
2557
|
+
/** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
|
|
2558
|
+
voice: z.ZodDefault<z.ZodString>;
|
|
2559
|
+
/** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
|
|
2560
|
+
instructions: z.ZodOptional<z.ZodString>;
|
|
2561
|
+
/** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
|
|
2562
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
2563
|
+
/** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
|
|
2564
|
+
elevenlabs: z.ZodOptional<z.ZodObject<{
|
|
2565
|
+
stability: z.ZodOptional<z.ZodNumber>;
|
|
2566
|
+
similarity_boost: z.ZodOptional<z.ZodNumber>;
|
|
2567
|
+
style: z.ZodOptional<z.ZodNumber>;
|
|
2568
|
+
}, "strip", z.ZodTypeAny, {
|
|
2569
|
+
stability?: number | undefined;
|
|
2570
|
+
similarity_boost?: number | undefined;
|
|
2571
|
+
style?: number | undefined;
|
|
2572
|
+
}, {
|
|
2573
|
+
stability?: number | undefined;
|
|
2574
|
+
similarity_boost?: number | undefined;
|
|
2575
|
+
style?: number | undefined;
|
|
2576
|
+
}>>;
|
|
2577
|
+
}, "strip", z.ZodTypeAny, {
|
|
2578
|
+
enabled: boolean;
|
|
2579
|
+
voice: string;
|
|
2580
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
2581
|
+
model?: string | undefined;
|
|
2582
|
+
elevenlabs?: {
|
|
2583
|
+
stability?: number | undefined;
|
|
2584
|
+
similarity_boost?: number | undefined;
|
|
2585
|
+
style?: number | undefined;
|
|
2586
|
+
} | undefined;
|
|
2587
|
+
instructions?: string | undefined;
|
|
2588
|
+
speed?: number | undefined;
|
|
2589
|
+
}, {
|
|
2590
|
+
enabled?: boolean | undefined;
|
|
2591
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
2592
|
+
model?: string | undefined;
|
|
2593
|
+
voice?: string | undefined;
|
|
2594
|
+
elevenlabs?: {
|
|
2595
|
+
stability?: number | undefined;
|
|
2596
|
+
similarity_boost?: number | undefined;
|
|
2597
|
+
style?: number | undefined;
|
|
2598
|
+
} | undefined;
|
|
2599
|
+
instructions?: string | undefined;
|
|
2600
|
+
speed?: number | undefined;
|
|
2601
|
+
}>>;
|
|
2380
2602
|
}, "passthrough", z.ZodTypeAny, z.objectOutputType<{
|
|
2381
2603
|
id: z.ZodString;
|
|
2382
2604
|
ref: z.ZodAny;
|
|
@@ -3143,6 +3365,59 @@ export declare const zAiBindingSchema: z.ZodObject<{
|
|
|
3143
3365
|
* com `hubia` em `usable_for`) usada neste departamento. Vence o
|
|
3144
3366
|
* `llm_connection_id` do canal. `null`/ausente = herda do canal. */
|
|
3145
3367
|
llm_connection_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
3368
|
+
/** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
|
|
3369
|
+
* estruturado (`respond_to_contact`) ligado no canal. */
|
|
3370
|
+
voice_reply: z.ZodOptional<z.ZodObject<{
|
|
3371
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
3372
|
+
/** Ausente = `openai` (bindings gravados antes da F1.1). */
|
|
3373
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
3374
|
+
/** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
|
|
3375
|
+
model: z.ZodOptional<z.ZodString>;
|
|
3376
|
+
/** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
|
|
3377
|
+
voice: z.ZodDefault<z.ZodString>;
|
|
3378
|
+
/** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
|
|
3379
|
+
instructions: z.ZodOptional<z.ZodString>;
|
|
3380
|
+
/** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
|
|
3381
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
3382
|
+
/** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
|
|
3383
|
+
elevenlabs: z.ZodOptional<z.ZodObject<{
|
|
3384
|
+
stability: z.ZodOptional<z.ZodNumber>;
|
|
3385
|
+
similarity_boost: z.ZodOptional<z.ZodNumber>;
|
|
3386
|
+
style: z.ZodOptional<z.ZodNumber>;
|
|
3387
|
+
}, "strip", z.ZodTypeAny, {
|
|
3388
|
+
stability?: number | undefined;
|
|
3389
|
+
similarity_boost?: number | undefined;
|
|
3390
|
+
style?: number | undefined;
|
|
3391
|
+
}, {
|
|
3392
|
+
stability?: number | undefined;
|
|
3393
|
+
similarity_boost?: number | undefined;
|
|
3394
|
+
style?: number | undefined;
|
|
3395
|
+
}>>;
|
|
3396
|
+
}, "strip", z.ZodTypeAny, {
|
|
3397
|
+
enabled: boolean;
|
|
3398
|
+
voice: string;
|
|
3399
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
3400
|
+
model?: string | undefined;
|
|
3401
|
+
elevenlabs?: {
|
|
3402
|
+
stability?: number | undefined;
|
|
3403
|
+
similarity_boost?: number | undefined;
|
|
3404
|
+
style?: number | undefined;
|
|
3405
|
+
} | undefined;
|
|
3406
|
+
instructions?: string | undefined;
|
|
3407
|
+
speed?: number | undefined;
|
|
3408
|
+
}, {
|
|
3409
|
+
enabled?: boolean | undefined;
|
|
3410
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
3411
|
+
model?: string | undefined;
|
|
3412
|
+
voice?: string | undefined;
|
|
3413
|
+
elevenlabs?: {
|
|
3414
|
+
stability?: number | undefined;
|
|
3415
|
+
similarity_boost?: number | undefined;
|
|
3416
|
+
style?: number | undefined;
|
|
3417
|
+
} | undefined;
|
|
3418
|
+
instructions?: string | undefined;
|
|
3419
|
+
speed?: number | undefined;
|
|
3420
|
+
}>>;
|
|
3146
3421
|
}, z.ZodTypeAny, "passthrough">, z.objectInputType<{
|
|
3147
3422
|
id: z.ZodString;
|
|
3148
3423
|
ref: z.ZodAny;
|
|
@@ -3909,6 +4184,59 @@ export declare const zAiBindingSchema: z.ZodObject<{
|
|
|
3909
4184
|
* com `hubia` em `usable_for`) usada neste departamento. Vence o
|
|
3910
4185
|
* `llm_connection_id` do canal. `null`/ausente = herda do canal. */
|
|
3911
4186
|
llm_connection_id: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
4187
|
+
/** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
|
|
4188
|
+
* estruturado (`respond_to_contact`) ligado no canal. */
|
|
4189
|
+
voice_reply: z.ZodOptional<z.ZodObject<{
|
|
4190
|
+
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
4191
|
+
/** Ausente = `openai` (bindings gravados antes da F1.1). */
|
|
4192
|
+
provider: z.ZodOptional<z.ZodEnum<["openai", "elevenlabs"]>>;
|
|
4193
|
+
/** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
|
|
4194
|
+
model: z.ZodOptional<z.ZodString>;
|
|
4195
|
+
/** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
|
|
4196
|
+
voice: z.ZodDefault<z.ZodString>;
|
|
4197
|
+
/** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
|
|
4198
|
+
instructions: z.ZodOptional<z.ZodString>;
|
|
4199
|
+
/** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
|
|
4200
|
+
speed: z.ZodOptional<z.ZodNumber>;
|
|
4201
|
+
/** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
|
|
4202
|
+
elevenlabs: z.ZodOptional<z.ZodObject<{
|
|
4203
|
+
stability: z.ZodOptional<z.ZodNumber>;
|
|
4204
|
+
similarity_boost: z.ZodOptional<z.ZodNumber>;
|
|
4205
|
+
style: z.ZodOptional<z.ZodNumber>;
|
|
4206
|
+
}, "strip", z.ZodTypeAny, {
|
|
4207
|
+
stability?: number | undefined;
|
|
4208
|
+
similarity_boost?: number | undefined;
|
|
4209
|
+
style?: number | undefined;
|
|
4210
|
+
}, {
|
|
4211
|
+
stability?: number | undefined;
|
|
4212
|
+
similarity_boost?: number | undefined;
|
|
4213
|
+
style?: number | undefined;
|
|
4214
|
+
}>>;
|
|
4215
|
+
}, "strip", z.ZodTypeAny, {
|
|
4216
|
+
enabled: boolean;
|
|
4217
|
+
voice: string;
|
|
4218
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
4219
|
+
model?: string | undefined;
|
|
4220
|
+
elevenlabs?: {
|
|
4221
|
+
stability?: number | undefined;
|
|
4222
|
+
similarity_boost?: number | undefined;
|
|
4223
|
+
style?: number | undefined;
|
|
4224
|
+
} | undefined;
|
|
4225
|
+
instructions?: string | undefined;
|
|
4226
|
+
speed?: number | undefined;
|
|
4227
|
+
}, {
|
|
4228
|
+
enabled?: boolean | undefined;
|
|
4229
|
+
provider?: "openai" | "elevenlabs" | undefined;
|
|
4230
|
+
model?: string | undefined;
|
|
4231
|
+
voice?: string | undefined;
|
|
4232
|
+
elevenlabs?: {
|
|
4233
|
+
stability?: number | undefined;
|
|
4234
|
+
similarity_boost?: number | undefined;
|
|
4235
|
+
style?: number | undefined;
|
|
4236
|
+
} | undefined;
|
|
4237
|
+
instructions?: string | undefined;
|
|
4238
|
+
speed?: number | undefined;
|
|
4239
|
+
}>>;
|
|
3912
4240
|
}, z.ZodTypeAny, "passthrough">>;
|
|
3913
4241
|
export type IAiBinding = z.infer<typeof zAiBindingSchema>;
|
|
3914
4242
|
/** Disposição de fechamento publicada no evento. Os bridges publicam `null`
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.zHubiaTicketClosedEventSchema = exports.zHubiaTicketClosedCloseSchema = exports.zAiBindingSchema = exports.zHubiaRuleSchema = exports.zHubiaRulesModeSchema = exports.zSendQuickReplyActionInputSchema = exports.zCreateTaskActionInputSchema = exports.zHubiaRuleActionSchema = exports.zHubiaRuleScopeSchema = exports.zHubiaConditionGroupSchema = exports.zHubiaConditionSchema = exports.zHubiaScheduleSchema = exports.zHubiaScheduleWindowSchema = exports.zHubiaConditionOpSchema = exports.zHubiaOutboundSourceSchema = exports.zHubiaRuleAppliesToSchema = exports.zHubiaRuleOutcomeSchema = exports.zHubiaRuleTriggerSchema = exports.zHubiaRulePhaseSchema = exports.zHubiaConversationModeSchema = exports.zHubiaConversationMessageSchema = exports.zHubiaV1ChannelConfigSchema = exports.zHubiaAttendanceModeSchema = void 0;
|
|
3
|
+
exports.zHubiaTicketClosedEventSchema = exports.zHubiaTicketClosedCloseSchema = exports.zAiBindingSchema = exports.zHubiaTtsMessageMetaSchema = exports.zHubiaSuggestionOutcomeSchema = exports.zHubiaSuggestionMessageRefSchema = exports.zHubiaPendingSuggestionSchema = exports.zHubiaResponseModeSchema = exports.zHubiaVoiceReplySchema = exports.HUBIA_VOICE_REPLY_ELEVENLABS_SPEED = exports.HUBIA_VOICE_REPLY_ELEVENLABS_MODELS = exports.HUBIA_VOICE_REPLY_DEFAULT_MODEL = exports.zHubiaVoiceProviderSchema = exports.HUBIA_VOICE_REPLY_PROVIDERS = exports.HUBIA_VOICE_REPLY_DEFAULT_VOICE = exports.HUBIA_VOICE_REPLY_OPENAI_VOICES = exports.zHubiaRuleSchema = exports.zHubiaRulesModeSchema = exports.zSendQuickReplyActionInputSchema = exports.zCreateTaskActionInputSchema = exports.zHubiaRuleActionSchema = exports.zHubiaRuleScopeSchema = exports.zHubiaConditionGroupSchema = exports.zHubiaConditionSchema = exports.zHubiaScheduleSchema = exports.zHubiaScheduleWindowSchema = exports.zHubiaConditionOpSchema = exports.zHubiaOutboundSourceSchema = exports.zHubiaRuleAppliesToSchema = exports.zHubiaRuleOutcomeSchema = exports.zHubiaRuleTriggerSchema = exports.zHubiaRulePhaseSchema = exports.zHubiaConversationModeSchema = exports.zHubiaConversationMessageSchema = exports.zHubiaV1ChannelConfigSchema = exports.zHubiaAttendanceModeSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
5
|
const zod_schemas_1 = require("../../shared/zod-schemas");
|
|
6
6
|
const zod_schemas_2 = require("../../evo-csq/zod-schemas");
|
|
@@ -350,6 +350,86 @@ const zHubiaPromptOverridesSchema = zod_1.z.object({
|
|
|
350
350
|
routing: zod_1.z.string().optional(),
|
|
351
351
|
tool_usage: zod_1.z.string().optional(),
|
|
352
352
|
});
|
|
353
|
+
// ───────── Resposta em áudio (feat-303) ─────────
|
|
354
|
+
/** Vozes do `gpt-4o-mini-tts` oferecidas na UI. O schema aceita qualquer string
|
|
355
|
+
* para o provedor poder mudar sem novo contrato. */
|
|
356
|
+
exports.HUBIA_VOICE_REPLY_OPENAI_VOICES = [
|
|
357
|
+
'alloy', 'ash', 'ballad', 'coral', 'echo', 'fable', 'nova',
|
|
358
|
+
'onyx', 'sage', 'shimmer', 'verse', 'marin', 'cedar',
|
|
359
|
+
];
|
|
360
|
+
exports.HUBIA_VOICE_REPLY_DEFAULT_VOICE = 'coral';
|
|
361
|
+
/** feat-303 F1.1: provedores de TTS. Ausente no binding = `openai`. */
|
|
362
|
+
exports.HUBIA_VOICE_REPLY_PROVIDERS = ['openai', 'elevenlabs'];
|
|
363
|
+
exports.zHubiaVoiceProviderSchema = zod_1.z.enum(exports.HUBIA_VOICE_REPLY_PROVIDERS);
|
|
364
|
+
/** Modelo usado quando o binding não define `model`. */
|
|
365
|
+
exports.HUBIA_VOICE_REPLY_DEFAULT_MODEL = {
|
|
366
|
+
openai: 'gpt-4o-mini-tts',
|
|
367
|
+
elevenlabs: 'eleven_v4',
|
|
368
|
+
};
|
|
369
|
+
/** Modelos da ElevenLabs oferecidos na UI (o schema aceita qualquer string). */
|
|
370
|
+
exports.HUBIA_VOICE_REPLY_ELEVENLABS_MODELS = [
|
|
371
|
+
'eleven_v4', 'eleven_v3', 'eleven_multilingual_v2', 'eleven_flash_v2_5',
|
|
372
|
+
];
|
|
373
|
+
/** Faixa de `speed` aceita pela ElevenLabs; o runtime limita a ela. */
|
|
374
|
+
exports.HUBIA_VOICE_REPLY_ELEVENLABS_SPEED = { min: 0.7, max: 1.2 };
|
|
375
|
+
/** Liga a resposta em áudio no binding. QUANDO usar áudio é regra do prompt do
|
|
376
|
+
* binding (o LLM decide por turno), não deste objeto. */
|
|
377
|
+
exports.zHubiaVoiceReplySchema = zod_1.z.object({
|
|
378
|
+
enabled: zod_1.z.boolean().default(false),
|
|
379
|
+
/** Ausente = `openai` (bindings gravados antes da F1.1). */
|
|
380
|
+
provider: exports.zHubiaVoiceProviderSchema.optional(),
|
|
381
|
+
/** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
|
|
382
|
+
model: zod_1.z.string().min(1).max(60).optional(),
|
|
383
|
+
/** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
|
|
384
|
+
voice: zod_1.z.string().min(1).max(40).default(exports.HUBIA_VOICE_REPLY_DEFAULT_VOICE),
|
|
385
|
+
/** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
|
|
386
|
+
instructions: zod_1.z.string().max(1000).optional(),
|
|
387
|
+
/** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
|
|
388
|
+
speed: zod_1.z.number().min(0.75).max(1.5).optional(),
|
|
389
|
+
/** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
|
|
390
|
+
elevenlabs: zod_1.z.object({
|
|
391
|
+
stability: zod_1.z.number().min(0).max(1).optional(),
|
|
392
|
+
similarity_boost: zod_1.z.number().min(0).max(1).optional(),
|
|
393
|
+
style: zod_1.z.number().min(0).max(1).optional(),
|
|
394
|
+
}).optional(),
|
|
395
|
+
});
|
|
396
|
+
exports.zHubiaResponseModeSchema = zod_1.z.enum(['text', 'audio']);
|
|
397
|
+
/** `conversations/{id}.pending_suggestion` (modo hybrid_assist). */
|
|
398
|
+
exports.zHubiaPendingSuggestionSchema = zod_1.z.object({
|
|
399
|
+
execution_id: zod_1.z.string(),
|
|
400
|
+
messages: zod_1.z.array(zod_1.z.string()),
|
|
401
|
+
created_at: zod_1.z.any(),
|
|
402
|
+
was_used: zod_1.z.boolean().optional(),
|
|
403
|
+
/** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
|
|
404
|
+
response_mode: exports.zHubiaResponseModeSchema.optional(),
|
|
405
|
+
/** Binding + canal permitiam áudio no turno da sugestão. */
|
|
406
|
+
voice_available: zod_1.z.boolean().optional(),
|
|
407
|
+
}).passthrough();
|
|
408
|
+
/** Gravado na mensagem enviada a partir de uma sugestão da HubIA. */
|
|
409
|
+
exports.zHubiaSuggestionMessageRefSchema = zod_1.z.object({
|
|
410
|
+
execution_id: zod_1.z.string(),
|
|
411
|
+
/** O operador alterou o texto antes de enviar. */
|
|
412
|
+
edited: zod_1.z.boolean(),
|
|
413
|
+
mode: exports.zHubiaResponseModeSchema,
|
|
414
|
+
}).passthrough();
|
|
415
|
+
/** Desfecho da sugestão, gravado na execução que a gerou. */
|
|
416
|
+
exports.zHubiaSuggestionOutcomeSchema = zod_1.z.object({
|
|
417
|
+
status: zod_1.z.enum(['sent', 'sent_edited', 'discarded']),
|
|
418
|
+
mode: exports.zHubiaResponseModeSchema.optional(),
|
|
419
|
+
by_user_id: zod_1.z.string().nullable().optional(),
|
|
420
|
+
at: zod_1.z.any(),
|
|
421
|
+
}).passthrough();
|
|
422
|
+
/** Metadados da nota de voz gerada pela HubIA, gravados na mensagem. */
|
|
423
|
+
exports.zHubiaTtsMessageMetaSchema = zod_1.z.object({
|
|
424
|
+
/** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
|
|
425
|
+
provider: exports.zHubiaVoiceProviderSchema.optional(),
|
|
426
|
+
model: zod_1.z.string(),
|
|
427
|
+
voice: zod_1.z.string(),
|
|
428
|
+
format: zod_1.z.enum(['ogg', 'mp3']),
|
|
429
|
+
chars: zod_1.z.number(),
|
|
430
|
+
duration_seconds: zod_1.z.number().nullable(),
|
|
431
|
+
execution_id: zod_1.z.string().optional(),
|
|
432
|
+
}).passthrough();
|
|
353
433
|
exports.zAiBindingSchema = zod_schemas_1.zFireDocSchema.extend({
|
|
354
434
|
agent_type: zod_1.z.string(), // 'evo-hubia-v1', future: 'evo-hubia-v2', etc.
|
|
355
435
|
agent_config_id: zod_1.z.string(), // ref to the agent's channel config doc
|
|
@@ -397,6 +477,10 @@ exports.zAiBindingSchema = zod_schemas_1.zFireDocSchema.extend({
|
|
|
397
477
|
* com `hubia` em `usable_for`) usada neste departamento. Vence o
|
|
398
478
|
* `llm_connection_id` do canal. `null`/ausente = herda do canal. */
|
|
399
479
|
llm_connection_id: zod_1.z.string().nullable().optional(),
|
|
480
|
+
// ───── Resposta em áudio (feat-303) ─────
|
|
481
|
+
/** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
|
|
482
|
+
* estruturado (`respond_to_contact`) ligado no canal. */
|
|
483
|
+
voice_reply: exports.zHubiaVoiceReplySchema.optional(),
|
|
400
484
|
}).passthrough();
|
|
401
485
|
// ───────── Evento `hubia-ticket-closed` (payload do tópico PubSub) ─────────
|
|
402
486
|
/** Disposição de fechamento publicada no evento. Os bridges publicam `null`
|
|
@@ -397,6 +397,106 @@ const zHubiaPromptOverridesSchema = z.object({
|
|
|
397
397
|
tool_usage: z.string().optional(),
|
|
398
398
|
});
|
|
399
399
|
|
|
400
|
+
// ───────── Resposta em áudio (feat-303) ─────────
|
|
401
|
+
|
|
402
|
+
/** Vozes do `gpt-4o-mini-tts` oferecidas na UI. O schema aceita qualquer string
|
|
403
|
+
* para o provedor poder mudar sem novo contrato. */
|
|
404
|
+
export const HUBIA_VOICE_REPLY_OPENAI_VOICES = [
|
|
405
|
+
'alloy', 'ash', 'ballad', 'coral', 'echo', 'fable', 'nova',
|
|
406
|
+
'onyx', 'sage', 'shimmer', 'verse', 'marin', 'cedar',
|
|
407
|
+
] as const;
|
|
408
|
+
|
|
409
|
+
export const HUBIA_VOICE_REPLY_DEFAULT_VOICE = 'coral';
|
|
410
|
+
|
|
411
|
+
/** feat-303 F1.1: provedores de TTS. Ausente no binding = `openai`. */
|
|
412
|
+
export const HUBIA_VOICE_REPLY_PROVIDERS = ['openai', 'elevenlabs'] as const;
|
|
413
|
+
export const zHubiaVoiceProviderSchema = z.enum(HUBIA_VOICE_REPLY_PROVIDERS);
|
|
414
|
+
export type HubiaVoiceProvider = z.infer<typeof zHubiaVoiceProviderSchema>;
|
|
415
|
+
|
|
416
|
+
/** Modelo usado quando o binding não define `model`. */
|
|
417
|
+
export const HUBIA_VOICE_REPLY_DEFAULT_MODEL: Record<HubiaVoiceProvider, string> = {
|
|
418
|
+
openai: 'gpt-4o-mini-tts',
|
|
419
|
+
elevenlabs: 'eleven_v4',
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
/** Modelos da ElevenLabs oferecidos na UI (o schema aceita qualquer string). */
|
|
423
|
+
export const HUBIA_VOICE_REPLY_ELEVENLABS_MODELS = [
|
|
424
|
+
'eleven_v4', 'eleven_v3', 'eleven_multilingual_v2', 'eleven_flash_v2_5',
|
|
425
|
+
] as const;
|
|
426
|
+
|
|
427
|
+
/** Faixa de `speed` aceita pela ElevenLabs; o runtime limita a ela. */
|
|
428
|
+
export const HUBIA_VOICE_REPLY_ELEVENLABS_SPEED = { min: 0.7, max: 1.2 } as const;
|
|
429
|
+
|
|
430
|
+
/** Liga a resposta em áudio no binding. QUANDO usar áudio é regra do prompt do
|
|
431
|
+
* binding (o LLM decide por turno), não deste objeto. */
|
|
432
|
+
export const zHubiaVoiceReplySchema = z.object({
|
|
433
|
+
enabled: z.boolean().default(false),
|
|
434
|
+
/** Ausente = `openai` (bindings gravados antes da F1.1). */
|
|
435
|
+
provider: zHubiaVoiceProviderSchema.optional(),
|
|
436
|
+
/** Ausente = `HUBIA_VOICE_REPLY_DEFAULT_MODEL[provider]`. */
|
|
437
|
+
model: z.string().min(1).max(60).optional(),
|
|
438
|
+
/** OpenAI: nome da voz (`coral`). ElevenLabs: `voice_id` (`RGymW84CSmfVugnA5tvA`). */
|
|
439
|
+
voice: z.string().min(1).max(40).default(HUBIA_VOICE_REPLY_DEFAULT_VOICE),
|
|
440
|
+
/** Tom/estilo da fala ("cordial, ritmo calmo"). Só a OpenAI usa. */
|
|
441
|
+
instructions: z.string().max(1000).optional(),
|
|
442
|
+
/** 1.0 = normal. Na ElevenLabs o runtime limita a 0.7–1.2. */
|
|
443
|
+
speed: z.number().min(0.75).max(1.5).optional(),
|
|
444
|
+
/** Ajustes da voz na ElevenLabs (`voice_settings`). Ausente = os da voz. */
|
|
445
|
+
elevenlabs: z.object({
|
|
446
|
+
stability: z.number().min(0).max(1).optional(),
|
|
447
|
+
similarity_boost: z.number().min(0).max(1).optional(),
|
|
448
|
+
style: z.number().min(0).max(1).optional(),
|
|
449
|
+
}).optional(),
|
|
450
|
+
});
|
|
451
|
+
export type IHubiaVoiceReply = z.infer<typeof zHubiaVoiceReplySchema>;
|
|
452
|
+
|
|
453
|
+
export const zHubiaResponseModeSchema = z.enum(['text', 'audio']);
|
|
454
|
+
export type HubiaResponseMode = z.infer<typeof zHubiaResponseModeSchema>;
|
|
455
|
+
|
|
456
|
+
/** `conversations/{id}.pending_suggestion` (modo hybrid_assist). */
|
|
457
|
+
export const zHubiaPendingSuggestionSchema = z.object({
|
|
458
|
+
execution_id: z.string(),
|
|
459
|
+
messages: z.array(z.string()),
|
|
460
|
+
created_at: z.any(),
|
|
461
|
+
was_used: z.boolean().optional(),
|
|
462
|
+
/** Escolha do LLM; pré-marca "enviar como áudio" na caixa de sugestão. */
|
|
463
|
+
response_mode: zHubiaResponseModeSchema.optional(),
|
|
464
|
+
/** Binding + canal permitiam áudio no turno da sugestão. */
|
|
465
|
+
voice_available: z.boolean().optional(),
|
|
466
|
+
}).passthrough();
|
|
467
|
+
export type IHubiaPendingSuggestion = z.infer<typeof zHubiaPendingSuggestionSchema>;
|
|
468
|
+
|
|
469
|
+
/** Gravado na mensagem enviada a partir de uma sugestão da HubIA. */
|
|
470
|
+
export const zHubiaSuggestionMessageRefSchema = z.object({
|
|
471
|
+
execution_id: z.string(),
|
|
472
|
+
/** O operador alterou o texto antes de enviar. */
|
|
473
|
+
edited: z.boolean(),
|
|
474
|
+
mode: zHubiaResponseModeSchema,
|
|
475
|
+
}).passthrough();
|
|
476
|
+
export type IHubiaSuggestionMessageRef = z.infer<typeof zHubiaSuggestionMessageRefSchema>;
|
|
477
|
+
|
|
478
|
+
/** Desfecho da sugestão, gravado na execução que a gerou. */
|
|
479
|
+
export const zHubiaSuggestionOutcomeSchema = z.object({
|
|
480
|
+
status: z.enum(['sent', 'sent_edited', 'discarded']),
|
|
481
|
+
mode: zHubiaResponseModeSchema.optional(),
|
|
482
|
+
by_user_id: z.string().nullable().optional(),
|
|
483
|
+
at: z.any(),
|
|
484
|
+
}).passthrough();
|
|
485
|
+
export type IHubiaSuggestionOutcome = z.infer<typeof zHubiaSuggestionOutcomeSchema>;
|
|
486
|
+
|
|
487
|
+
/** Metadados da nota de voz gerada pela HubIA, gravados na mensagem. */
|
|
488
|
+
export const zHubiaTtsMessageMetaSchema = z.object({
|
|
489
|
+
/** F1.1. Ausente nas mensagens gravadas antes = `openai`. */
|
|
490
|
+
provider: zHubiaVoiceProviderSchema.optional(),
|
|
491
|
+
model: z.string(),
|
|
492
|
+
voice: z.string(),
|
|
493
|
+
format: z.enum(['ogg', 'mp3']),
|
|
494
|
+
chars: z.number(),
|
|
495
|
+
duration_seconds: z.number().nullable(),
|
|
496
|
+
execution_id: z.string().optional(),
|
|
497
|
+
}).passthrough();
|
|
498
|
+
export type IHubiaTtsMessageMeta = z.infer<typeof zHubiaTtsMessageMetaSchema>;
|
|
499
|
+
|
|
400
500
|
export const zAiBindingSchema = zFireDocSchema.extend({
|
|
401
501
|
agent_type: z.string(), // 'evo-hubia-v1', future: 'evo-hubia-v2', etc.
|
|
402
502
|
agent_config_id: z.string(), // ref to the agent's channel config doc
|
|
@@ -447,6 +547,11 @@ export const zAiBindingSchema = zFireDocSchema.extend({
|
|
|
447
547
|
* com `hubia` em `usable_for`) usada neste departamento. Vence o
|
|
448
548
|
* `llm_connection_id` do canal. `null`/ausente = herda do canal. */
|
|
449
549
|
llm_connection_id: z.string().nullable().optional(),
|
|
550
|
+
|
|
551
|
+
// ───── Resposta em áudio (feat-303) ─────
|
|
552
|
+
/** Ausente/`enabled: false` = HubIA só responde em texto. Exige o contrato
|
|
553
|
+
* estruturado (`respond_to_contact`) ligado no canal. */
|
|
554
|
+
voice_reply: zHubiaVoiceReplySchema.optional(),
|
|
450
555
|
}).passthrough();
|
|
451
556
|
|
|
452
557
|
export type IAiBinding = z.infer<typeof zAiBindingSchema>;
|