Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Rename json.py in outlines/generate #879

Closed
sorgfresser opened this issue May 9, 2024 · 3 comments
Closed

Rename json.py in outlines/generate #879

sorgfresser opened this issue May 9, 2024 · 3 comments
Labels

Comments

@sorgfresser
Copy link

sorgfresser commented May 9, 2024

Describe the issue as clearly as possible:

I am trying to debug outlines in PyCharm using pydev debugger (build 233.11799.298).
Upon running the debugger, I get the following error
AttributeError: partially initialized module 'json' has no attribute 'loads' (most likely due to a circular import)
which results from the naming of the json.py file. Renaming this file to anything other than the default python library resolved the issue.

Steps/code to reproduce the bug:

from transformers import MixtralForCausalLM, MixtralConfig, AutoTokenizer
import outlines
import tracemalloc

tracemalloc.start()

# Initializing a Mixtral 7B style configuration
configuration = MixtralConfig(
    hidden_size=256,
    intermediate_size=896,
    num_hidden_layers=8,
    num_attention_heads=8,
    num_key_value_heads=8,
    num_local_experts=4,
    num_experts_per_tok=1
)

# Initializing a model from the Mixtral 7B style configuration
model = MixtralForCausalLM(configuration)

# Accessing the model configuration
configuration = model.config

print(tracemalloc.get_traced_memory()[1])

tok = AutoTokenizer.from_pretrained("mistralai/Mixtral-8x7B-v0.1")
print(tracemalloc.get_traced_memory()[1])

prompt = "My favourite condiment is"

model_inputs = tok([prompt], return_tensors="pt")

generate_ids = model.generate(**model_inputs, max_length=30)
print(tok.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0])

print(tracemalloc.get_traced_memory()[1])


# Outline part
arithmetic_grammar = """
    ?start: expression

    ?expression: term (("+" | "-") term)*

    ?term: factor (("*" | "/") factor)*

    ?factor: NUMBER
           | "-" factor
           | "(" expression ")"

    %import common.NUMBER
"""
outline_model = outlines.models.Transformers(model, tokenizer=tok)
generator = outlines.generate.cfg(outline_model, arithmetic_grammar)
sequence = generator("Alice had 4 apples and Bob ate 2. Write an expression for Alice's apples:")
print(sequence)
print(tracemalloc.get_traced_memory()[1])

Press the debug button on the top right of the UI in pycharm.

Expected result:

No circular imports

Error message:

Traceback (most recent call last):
  File "/home/simon/.local/share/JetBrains/Toolbox/apps/pycharm-professional/plugins/python/helpers/pydev/pydevd.py", line 45, in <module>
    from _pydevd_bundle import pydevd_utils
  File "/home/simon/.local/share/JetBrains/Toolbox/apps/pycharm-professional/plugins/python/helpers/pydev/_pydevd_bundle/pydevd_utils.py", line 6, in <module>
    import pydevd_file_utils
  File "/home/simon/.local/share/JetBrains/Toolbox/apps/pycharm-professional/plugins/python/helpers/pydev/pydevd_file_utils.py", line 48, in <module>
    import json
  File "/home/simon/PycharmProjects/outlines/outlines/generate/json.py", line 7, in <module>
    from outlines.fsm.json_schema import build_regex_from_schema, get_schema_from_signature
  File "/home/simon/PycharmProjects/outlines/outlines/__init__.py", line 2, in <module>
    import outlines.generate
  File "/home/simon/PycharmProjects/outlines/outlines/generate/__init__.py", line 6, in <module>
    from .json import json
  File "/home/simon/PycharmProjects/outlines/outlines/generate/json.py", line 7, in <module>
    from outlines.fsm.json_schema import build_regex_from_schema, get_schema_from_signature
  File "/home/simon/PycharmProjects/outlines/outlines/fsm/json_schema.py", line 6, in <module>
    from jsonschema.protocols import Validator
  File "/home/simon/PycharmProjects/outlines/.venv/lib/python3.11/site-packages/jsonschema/__init__.py", line 16, in <module>
    from jsonschema.validators import (
  File "/home/simon/PycharmProjects/outlines/.venv/lib/python3.11/site-packages/jsonschema/validators.py", line 20, in <module>
    from jsonschema_specifications import REGISTRY as SPECIFICATIONS
  File "/home/simon/PycharmProjects/outlines/.venv/lib/python3.11/site-packages/jsonschema_specifications/__init__.py", line 10, in <module>
    REGISTRY = (_schemas() @ _EMPTY_REGISTRY).crawl()
                ~~~~~~~~~~~^~~~~~~~~~~~~~~~~
  File "/home/simon/PycharmProjects/outlines/.venv/lib/python3.11/site-packages/referencing/_core.py", line 384, in __rmatmul__
    for resource in new:
  File "/home/simon/PycharmProjects/outlines/.venv/lib/python3.11/site-packages/jsonschema_specifications/_core.py", line 37, in _schemas
    contents = json.loads(path.read_text(encoding="utf-8"))
               ^^^^^^^^^^
AttributeError: partially initialized module 'json' has no attribute 'loads' (most likely due to a circular import)

Outlines/Python version information:

Version information
Outlines: 0.1.dev587+g4f8433d
Python3: Python 3.11.8 (main, Feb 12 2024, 14:50:05) [GCC 13.2.1 20230801]

``` aiohttp==3.9.5 aiosignal==1.3.1 annotated-types==0.6.0 attrs==23.2.0 certifi==2024.2.2 charset-normalizer==3.3.2 cloudpickle==3.0.0 datasets==2.19.1 dill==0.3.8 diskcache==5.6.3 filelock==3.14.0 frozenlist==1.4.1 fsspec==2024.3.1 huggingface-hub==0.23.0 idna==3.7 interegular==0.3.3 Jinja2==3.1.4 jsonschema==4.22.0 jsonschema-specifications==2023.12.1 lark==1.1.9 llvmlite==0.42.0 MarkupSafe==2.1.5 mpmath==1.3.0 multidict==6.0.5 multiprocess==0.70.16 nest-asyncio==1.6.0 networkx==3.3 numba==0.59.1 numpy==1.26.4 nvidia-cublas-cu12==12.1.3.1 nvidia-cuda-cupti-cu12==12.1.105 nvidia-cuda-nvrtc-cu12==12.1.105 nvidia-cuda-runtime-cu12==12.1.105 nvidia-cudnn-cu12==8.9.2.26 nvidia-cufft-cu12==11.0.2.54 nvidia-curand-cu12==10.3.2.106 nvidia-cusolver-cu12==11.4.5.107 nvidia-cusparse-cu12==12.1.0.106 nvidia-nccl-cu12==2.20.5 nvidia-nvjitlink-cu12==12.4.127 nvidia-nvtx-cu12==12.1.105 -e git+https://github.com/sorgfresser/outlines.git@4f8433d#egg=outlines packaging==24.0 pandas==2.2.2 pyairports==2.1.1 pyarrow==16.0.0 pyarrow-hotfix==0.6 pycountry==23.12.11 pydantic==2.7.1 pydantic_core==2.18.2 python-dateutil==2.9.0.post0 pytz==2024.1 PyYAML==6.0.1 referencing==0.35.1 regex==2024.4.28 requests==2.31.0 rpds-py==0.18.1 safetensors==0.4.3 six==1.16.0 sympy==1.12 tokenizers==0.19.1 torch==2.3.0 tqdm==4.66.4 transformers==4.40.2 triton==2.3.0 typing_extensions==4.11.0 tzdata==2024.1 urllib3==2.2.1 xxhash==3.4.1 yarl==1.9.4 ```

Context for the issue:

See this stack overflow issue for a similar problem
https://stackoverflow.com/questions/20082730/module-object-has-no-attribute-loads-while-parsing-json-using-python

@sorgfresser sorgfresser added the bug label May 9, 2024
@sorgfresser
Copy link
Author

Oh and btw, if I resolve this one, same happens with the types module

Fatal Python error: init_import_site: Failed to import the site module
Python runtime state: initialized
Traceback (most recent call last):
  File "<frozen site>", line 195, in addpackage
  File "<string>", line 1, in <module>
  File "/home/simon/PycharmProjects/outlines/.venv/lib/python3.11/site-packages/__editable___outlines_0_1_dev587_g4f8433d_finder.py", line 4, in <module>
    from importlib.util import spec_from_file_location
  File "<frozen importlib.util>", line 14, in <module>
  File "/usr/lib/python3.11/contextlib.py", line 7, in <module>
    from functools import wraps
  File "/usr/lib/python3.11/functools.py", line 22, in <module>
    from types import GenericAlias
  File "/home/simon/PycharmProjects/outlines/outlines/fsm/types.py", line 2, in <module>
    from enum import EnumMeta
  File "/usr/lib/python3.11/enum.py", line 3, in <module>
    from types import MappingProxyType, DynamicClassAttribute
ImportError: cannot import name 'MappingProxyType' from partially initialized module 'types' (most likely due to a circular import) (/home/simon/PycharmProjects/outlines/outlines/fsm/types.py)

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "<frozen site>", line 626, in <module>
  File "<frozen site>", line 609, in main
  File "<frozen site>", line 541, in venv
  File "<frozen site>", line 394, in addsitepackages
  File "<frozen site>", line 236, in addsitedir
  File "<frozen site>", line 205, in addpackage
  File "/usr/lib/python3.11/traceback.py", line 5, in <module>
    import linecache
  File "/usr/lib/python3.11/linecache.py", line 8, in <module>
    import functools
  File "/usr/lib/python3.11/functools.py", line 22, in <module>
    from types import GenericAlias
  File "/home/simon/PycharmProjects/outlines/outlines/fsm/types.py", line 2, in <module>
    from enum import EnumMeta
  File "/usr/lib/python3.11/enum.py", line 3, in <module>
    from types import MappingProxyType, DynamicClassAttribute
ImportError: cannot import name 'MappingProxyType' from partially initialized module 'types' (most likely due to a circular import) (/home/simon/PycharmProjects/outlines/outlines/fsm/types.py)

@lapp0
Copy link
Contributor

lapp0 commented May 10, 2024

This seems to be an issue with the way PyCharm is configured on your machine. Could you please try the solution from this similar issue and report back?

Tribler/py-ipv8#981 (comment)

@sorgfresser
Copy link
Author

It is related to PYTHONPATH for me. Agreed that this issue only happens with Pycharm due to the way they handle Pythonpath, but I still think that naming modules similar to native python modules is a bit confusing.

@rlouf rlouf closed this as not planned Won't fix, can't repro, duplicate, stale May 19, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

3 participants