Skip to content

Commit d06a93f

Browse files
committed
fix: add try-import guards for optional deps (fastapi, humanfriendly, transformers)
- funasr/bin/_server_app.py: wrap fastapi import with helpful error message - funasr/bin/tokenize_text.py: guard cli_utils import - funasr/utils/type_utils.py: guard humanfriendly import - funasr/frontends/s3prl.py: guard humanfriendly import - funasr/utils/types.py: add compat shim (types -> type_utils) - funasr/frontends/abs_frontend.py: add missing abstract class - funasr/models/fun_asr_nano/model.py: guard transformers import Fixes #2937 - users seeing import errors on fresh pip install
1 parent 31ac626 commit d06a93f

7 files changed

Lines changed: 45 additions & 7 deletions

File tree

funasr/bin/_server_app.py

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,13 @@
77
import logging
88
from typing import Optional
99

10-
from fastapi import FastAPI, UploadFile, File, Form, HTTPException
11-
from fastapi.responses import JSONResponse
10+
try:
11+
from fastapi import FastAPI, UploadFile, File, Form, HTTPException
12+
from fastapi.responses import JSONResponse
13+
except ImportError:
14+
raise ImportError(
15+
"funasr-server requires fastapi. Install with: pip install fastapi uvicorn python-multipart"
16+
)
1217

1318
logger = logging.getLogger("funasr.server")
1419

funasr/bin/tokenize_text.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,11 @@
88
from typing import Optional
99

1010

11-
from funasr.utils.cli_utils import get_commandline_args
11+
try:
12+
from funasr.utils.cli_utils import get_commandline_args
13+
except ImportError:
14+
def get_commandline_args():
15+
return {}
1216
from funasr.tokenizer.build_tokenizer import build_tokenizer
1317
from funasr.tokenizer.cleaner import TextCleaner
1418
from funasr.tokenizer.phoneme_tokenizer import g2p_classes

funasr/frontends/abs_frontend.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
from abc import ABC, abstractmethod
2+
import torch
3+
4+
5+
class AbsFrontend(ABC, torch.nn.Module):
6+
@abstractmethod
7+
def output_size(self) -> int:
8+
raise NotImplementedError
9+
10+
@abstractmethod
11+
def forward(self, input, input_lengths):
12+
raise NotImplementedError

funasr/frontends/s3prl.py

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,10 @@
66
from typing import Tuple
77
from typing import Union
88

9-
import humanfriendly
9+
try:
10+
import humanfriendly
11+
except ImportError:
12+
humanfriendly = None
1013
import torch
1114
import torch.nn as nn
1215

@@ -50,7 +53,10 @@ def __init__(
5053
"""
5154
super().__init__()
5255
if isinstance(fs, str):
53-
fs = humanfriendly.parse_size(fs)
56+
if humanfriendly is not None:
57+
fs = humanfriendly.parse_size(fs)
58+
else:
59+
fs = int(fs)
5460

5561
if download_dir is not None:
5662
torch.hub.set_dir(download_dir)

funasr/models/fun_asr_nano/model.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@
1515
from funasr.train_utils.device_funcs import force_gatherable, to_device
1616
from funasr.utils.datadir_writer import DatadirWriter
1717
from funasr.utils.load_utils import extract_fbank, load_audio_text_image_video
18-
from transformers import AutoConfig, AutoModelForCausalLM
18+
try:
19+
from transformers import AutoConfig, AutoModelForCausalLM
20+
except ImportError:
21+
AutoConfig = None
22+
AutoModelForCausalLM = None
1923

2024
from .ctc import CTC
2125
from .tools.utils import forced_align

funasr/utils/type_utils.py

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,10 @@
33
from typing import Tuple
44
from typing import Union
55

6-
import humanfriendly
6+
try:
7+
import humanfriendly
8+
except ImportError:
9+
humanfriendly = None
710

811

912
def str2bool(value: str) -> bool:
@@ -95,6 +98,8 @@ def humanfriendly_parse_size_or_none(value) -> Optional[float]:
9598
"""
9699
if value.strip().lower() in ("none", "null", "nil"):
97100
return None
101+
if humanfriendly is None:
102+
raise ImportError("humanfriendly is required for parse_size. Install with: pip install humanfriendly")
98103
return humanfriendly.parse_size(value)
99104

100105

funasr/utils/types.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
# Compatibility shim: types was renamed to type_utils
2+
from funasr.utils.type_utils import *

0 commit comments

Comments
 (0)