(self, request, context)
| 681 | ) |
| 682 | |
| 683 | def TTS(self, request, context): |
| 684 | try: |
| 685 | # Check if dst is provided |
| 686 | if not request.dst: |
| 687 | return backend_pb2.Result( |
| 688 | success=False, message="dst (output path) is required" |
| 689 | ) |
| 690 | |
| 691 | # Prepare text |
| 692 | text = request.text.strip() |
| 693 | if not text: |
| 694 | return backend_pb2.Result(success=False, message="Text is empty") |
| 695 | |
| 696 | # Get language (auto-detect if not provided) |
| 697 | language = ( |
| 698 | request.language |
| 699 | if hasattr(request, "language") and request.language |
| 700 | else None |
| 701 | ) |
| 702 | if not language or language == "": |
| 703 | language = "Auto" # Auto-detect language |
| 704 | |
| 705 | # Detect mode |
| 706 | mode = self._detect_mode(request) |
| 707 | print(f"Detected mode: {mode}", file=sys.stderr) |
| 708 | |
| 709 | # Get generation parameters from options |
| 710 | max_new_tokens = self.options.get("max_new_tokens", None) |
| 711 | top_p = self.options.get("top_p", None) |
| 712 | temperature = self.options.get("temperature", None) |
| 713 | do_sample = self.options.get("do_sample", None) |
| 714 | |
| 715 | # Prepare generation kwargs |
| 716 | generation_kwargs = {} |
| 717 | if max_new_tokens is not None: |
| 718 | generation_kwargs["max_new_tokens"] = max_new_tokens |
| 719 | if top_p is not None: |
| 720 | generation_kwargs["top_p"] = top_p |
| 721 | if temperature is not None: |
| 722 | generation_kwargs["temperature"] = temperature |
| 723 | if do_sample is not None: |
| 724 | generation_kwargs["do_sample"] = do_sample |
| 725 | |
| 726 | # Prefer the per-request instruction (TTSRequest.instructions) over the |
| 727 | # static YAML `instruct` option. This lets clients set a different style |
| 728 | # (CustomVoice emotion) or designed voice (VoiceDesign) per request. |
| 729 | instruct = self._effective_instruct(request) |
| 730 | if instruct is not None and instruct != "": |
| 731 | generation_kwargs["instruct"] = instruct |
| 732 | |
| 733 | # Merge any per-request backend-specific params (TTSRequest.params). |
| 734 | # Values arrive as strings on the wire; coerce to int/float/bool so the |
| 735 | # model receives the types it expects. These override YAML-derived kwargs. |
| 736 | if hasattr(request, "params") and request.params: |
| 737 | for key, value in request.params.items(): |
| 738 | generation_kwargs[key] = coerce_param_value(value) |
| 739 | |
| 740 | # Generate audio based on mode |
nothing calls this directly
no test coverage detected