QuivrHQ / quivr

Open-source RAG Framework for building GenAI Second Brains 🧠 Build productivity assistant (RAG) ⚡️🤖 Chat with your docs (PDF, CSV, ...) & apps using Langchain, GPT 3.5 / 4 turbo, Private, Anthropic, VertexAI, Ollama, LLMs, Groq that you can share with users ! Efficient retrieval augmented generation framework
https://quivr.com
Other
34.35k stars 3.36k forks source link

[Bug]: Unable to start backend-core #2583

Closed remmen-io closed 2 months ago

remmen-io commented 2 months ago

What happened?

I've reinstalled quivr from scratch, started the db, setup .env, but I'm unable to get the backend-core running. I get a pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key" error.

Relevant log output

backend-core

backend-core  | Process SpawnProcess-6:
backend-core  | Traceback (most recent call last):
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
backend-core  |     self.run()
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 108, in run
backend-core  |     self._target(*self._args, **self._kwargs)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 78, in subprocess_started
backend-core  |     target(sockets=sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 65, in run
backend-core  |     return asyncio.run(self.serve(sockets=sockets))
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
backend-core  |     return runner.run(main)
backend-core  |            ^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
backend-core  |     return self._loop.run_until_complete(task)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 69, in serve
backend-core  |     await self._serve(sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 76, in _serve
backend-core  |     config.load()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/config.py", line 433, in load
backend-core  |     self.loaded_app = import_from_string(self.app)
backend-core  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-core  |     module = importlib.import_module(module_str)
backend-core  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
backend-core  |     return _bootstrap._gcd_import(name[level:], package, level)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
backend-core  |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
backend-core  |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
backend-core  |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
backend-core  |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
backend-core  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
backend-core  |   File "/code/main.py", line 19, in <module>
backend-core  |     from modules.assistant.controller import assistant_router
backend-core  |   File "/code/modules/assistant/controller/__init__.py", line 1, in <module>
backend-core  |     from .assistant_routes import assistant_router
backend-core  |   File "/code/modules/assistant/controller/assistant_routes.py", line 8, in <module>
backend-core  |     from modules.assistant.ito.difference import DifferenceAssistant
backend-core  |   File "/code/modules/assistant/ito/difference.py", line 24, in <module>
backend-core  |     from modules.assistant.ito.ito import ITO
backend-core  |   File "/code/modules/assistant/ito/ito.py", line 14, in <module>
backend-core  |     from modules.chat.controller.chat.utils import update_user_usage
backend-core  |   File "/code/modules/chat/controller/__init__.py", line 1, in <module>
backend-core  |     from .chat_routes import chat_router
backend-core  |   File "/code/modules/chat/controller/chat_routes.py", line 12, in <module>
backend-core  |     from modules.chat.controller.chat.brainful_chat import BrainfulChat
backend-core  |   File "/code/modules/chat/controller/chat/brainful_chat.py", line 5, in <module>
backend-core  |     from modules.brain.integrations.GPT4.Brain import GPT4Brain
backend-core  |   File "/code/modules/brain/integrations/GPT4/Brain.py", line 18, in <module>
backend-core  |     from modules.tools import (
backend-core  |   File "/code/modules/tools/__init__.py", line 2, in <module>
backend-core  |     from .web_search import WebSearchTool
backend-core  |   File "/code/modules/tools/web_search.py", line 22, in <module>
backend-core  |     class WebSearchTool(BaseTool):
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/main.py", line 221, in __new__
backend-core  |     inferred = ModelField.infer(
backend-core  |                ^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 504, in infer
backend-core  |     return cls(
backend-core  |            ^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 434, in __init__
backend-core  |     self.prepare()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 544, in prepare
backend-core  |     self._set_default_and_type()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 576, in _set_default_and_type
backend-core  |     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
backend-core  | pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key"
backend-core  | Process SpawnProcess-4:
backend-core  | Process SpawnProcess-3:
backend-core  | Process SpawnProcess-1:
backend-core  | Traceback (most recent call last):
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
backend-core  |     self.run()
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 108, in run
backend-core  |     self._target(*self._args, **self._kwargs)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 78, in subprocess_started
backend-core  |     target(sockets=sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 65, in run
backend-core  |     return asyncio.run(self.serve(sockets=sockets))
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
backend-core  |     return runner.run(main)
backend-core  |            ^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
backend-core  |     return self._loop.run_until_complete(task)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 69, in serve
backend-core  |     await self._serve(sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 76, in _serve
backend-core  |     config.load()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/config.py", line 433, in load
backend-core  |     self.loaded_app = import_from_string(self.app)
backend-core  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-core  |     module = importlib.import_module(module_str)
backend-core  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
backend-core  |     return _bootstrap._gcd_import(name[level:], package, level)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
backend-core  |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
backend-core  |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
backend-core  |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
backend-core  |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
backend-core  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
backend-core  |   File "/code/main.py", line 19, in <module>
backend-core  |     from modules.assistant.controller import assistant_router
backend-core  |   File "/code/modules/assistant/controller/__init__.py", line 1, in <module>
backend-core  |     from .assistant_routes import assistant_router
backend-core  |   File "/code/modules/assistant/controller/assistant_routes.py", line 8, in <module>
backend-core  |     from modules.assistant.ito.difference import DifferenceAssistant
backend-core  |   File "/code/modules/assistant/ito/difference.py", line 24, in <module>
backend-core  |     from modules.assistant.ito.ito import ITO
backend-core  |   File "/code/modules/assistant/ito/ito.py", line 14, in <module>
backend-core  |     from modules.chat.controller.chat.utils import update_user_usage
backend-core  |   File "/code/modules/chat/controller/__init__.py", line 1, in <module>
backend-core  |     from .chat_routes import chat_router
backend-core  |   File "/code/modules/chat/controller/chat_routes.py", line 12, in <module>
backend-core  |     from modules.chat.controller.chat.brainful_chat import BrainfulChat
backend-core  |   File "/code/modules/chat/controller/chat/brainful_chat.py", line 5, in <module>
backend-core  |     from modules.brain.integrations.GPT4.Brain import GPT4Brain
backend-core  |   File "/code/modules/brain/integrations/GPT4/Brain.py", line 18, in <module>
backend-core  |     from modules.tools import (
backend-core  |   File "/code/modules/tools/__init__.py", line 2, in <module>
backend-core  |     from .web_search import WebSearchTool
backend-core  |   File "/code/modules/tools/web_search.py", line 22, in <module>
backend-core  |     class WebSearchTool(BaseTool):
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/main.py", line 221, in __new__
backend-core  |     inferred = ModelField.infer(
backend-core  |                ^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 504, in infer
backend-core  |     return cls(
backend-core  |            ^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 434, in __init__
backend-core  |     self.prepare()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 544, in prepare
backend-core  |     self._set_default_and_type()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 576, in _set_default_and_type
backend-core  |     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
backend-core  | pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key"
backend-core  | Traceback (most recent call last):
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
backend-core  |     self.run()
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 108, in run
backend-core  |     self._target(*self._args, **self._kwargs)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 78, in subprocess_started
backend-core  |     target(sockets=sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 65, in run
backend-core  |     return asyncio.run(self.serve(sockets=sockets))
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
backend-core  |     return runner.run(main)
backend-core  |            ^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
backend-core  |     return self._loop.run_until_complete(task)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 69, in serve
backend-core  |     await self._serve(sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 76, in _serve
backend-core  |     config.load()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/config.py", line 433, in load
backend-core  |     self.loaded_app = import_from_string(self.app)
backend-core  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-core  |     module = importlib.import_module(module_str)
backend-core  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
backend-core  |     return _bootstrap._gcd_import(name[level:], package, level)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
backend-core  |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
backend-core  |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
backend-core  |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
backend-core  |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
backend-core  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
backend-core  |   File "/code/main.py", line 19, in <module>
backend-core  |     from modules.assistant.controller import assistant_router
backend-core  |   File "/code/modules/assistant/controller/__init__.py", line 1, in <module>
backend-core  |     from .assistant_routes import assistant_router
backend-core  |   File "/code/modules/assistant/controller/assistant_routes.py", line 8, in <module>
backend-core  |     from modules.assistant.ito.difference import DifferenceAssistant
backend-core  |   File "/code/modules/assistant/ito/difference.py", line 24, in <module>
backend-core  |     from modules.assistant.ito.ito import ITO
backend-core  |   File "/code/modules/assistant/ito/ito.py", line 14, in <module>
backend-core  |     from modules.chat.controller.chat.utils import update_user_usage
backend-core  |   File "/code/modules/chat/controller/__init__.py", line 1, in <module>
backend-core  |     from .chat_routes import chat_router
backend-core  |   File "/code/modules/chat/controller/chat_routes.py", line 12, in <module>
backend-core  |     from modules.chat.controller.chat.brainful_chat import BrainfulChat
backend-core  |   File "/code/modules/chat/controller/chat/brainful_chat.py", line 5, in <module>
backend-core  |     from modules.brain.integrations.GPT4.Brain import GPT4Brain
backend-core  |   File "/code/modules/brain/integrations/GPT4/Brain.py", line 18, in <module>
backend-core  |     from modules.tools import (
backend-core  |   File "/code/modules/tools/__init__.py", line 2, in <module>
backend-core  |     from .web_search import WebSearchTool
backend-core  |   File "/code/modules/tools/web_search.py", line 22, in <module>
backend-core  |     class WebSearchTool(BaseTool):
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/main.py", line 221, in __new__
backend-core  |     inferred = ModelField.infer(
backend-core  |                ^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 504, in infer
backend-core  |     return cls(
backend-core  |            ^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 434, in __init__
backend-core  |     self.prepare()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 544, in prepare
backend-core  |     self._set_default_and_type()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 576, in _set_default_and_type
backend-core  |     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
backend-core  | pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key"
backend-core  | Traceback (most recent call last):
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
backend-core  |     self.run()
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 108, in run
backend-core  |     self._target(*self._args, **self._kwargs)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 78, in subprocess_started
backend-core  |     target(sockets=sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 65, in run
backend-core  |     return asyncio.run(self.serve(sockets=sockets))
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
backend-core  |     return runner.run(main)
backend-core  |            ^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
backend-core  |     return self._loop.run_until_complete(task)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 69, in serve
backend-core  |     await self._serve(sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 76, in _serve
backend-core  |     config.load()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/config.py", line 433, in load
backend-core  |     self.loaded_app = import_from_string(self.app)
backend-core  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-core  |     module = importlib.import_module(module_str)
backend-core  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
backend-core  |     return _bootstrap._gcd_import(name[level:], package, level)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
backend-core  |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
backend-core  |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
backend-core  |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
backend-core  |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
backend-core  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
backend-core  |   File "/code/main.py", line 19, in <module>
backend-core  |     from modules.assistant.controller import assistant_router
backend-core  |   File "/code/modules/assistant/controller/__init__.py", line 1, in <module>
backend-core  |     from .assistant_routes import assistant_router
backend-core  |   File "/code/modules/assistant/controller/assistant_routes.py", line 8, in <module>
backend-core  |     from modules.assistant.ito.difference import DifferenceAssistant
backend-core  |   File "/code/modules/assistant/ito/difference.py", line 24, in <module>
backend-core  |     from modules.assistant.ito.ito import ITO
backend-core  |   File "/code/modules/assistant/ito/ito.py", line 14, in <module>
backend-core  |     from modules.chat.controller.chat.utils import update_user_usage
backend-core  |   File "/code/modules/chat/controller/__init__.py", line 1, in <module>
backend-core  |     from .chat_routes import chat_router
backend-core  |   File "/code/modules/chat/controller/chat_routes.py", line 12, in <module>
backend-core  |     from modules.chat.controller.chat.brainful_chat import BrainfulChat
backend-core  |   File "/code/modules/chat/controller/chat/brainful_chat.py", line 5, in <module>
backend-core  |     from modules.brain.integrations.GPT4.Brain import GPT4Brain
backend-core  |   File "/code/modules/brain/integrations/GPT4/Brain.py", line 18, in <module>
backend-core  |     from modules.tools import (
backend-core  |   File "/code/modules/tools/__init__.py", line 2, in <module>
backend-core  |     from .web_search import WebSearchTool
backend-core  |   File "/code/modules/tools/web_search.py", line 22, in <module>
backend-core  |     class WebSearchTool(BaseTool):
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/main.py", line 221, in __new__
backend-core  |     inferred = ModelField.infer(
backend-core  |                ^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 504, in infer
backend-core  |     return cls(
backend-core  |            ^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 434, in __init__
backend-core  |     self.prepare()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 544, in prepare
backend-core  |     self._set_default_and_type()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 576, in _set_default_and_type
backend-core  |     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
backend-core  | pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key"
backend-core  | Process SpawnProcess-2:
backend-core  | Traceback (most recent call last):
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
backend-core  |     self.run()
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 108, in run
backend-core  |     self._target(*self._args, **self._kwargs)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 78, in subprocess_started
backend-core  |     target(sockets=sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 65, in run
backend-core  |     return asyncio.run(self.serve(sockets=sockets))
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
backend-core  |     return runner.run(main)
backend-core  |            ^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
backend-core  |     return self._loop.run_until_complete(task)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 69, in serve
backend-core  |     await self._serve(sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 76, in _serve
backend-core  |     config.load()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/config.py", line 433, in load
backend-core  |     self.loaded_app = import_from_string(self.app)
backend-core  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-core  |     module = importlib.import_module(module_str)
backend-core  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
backend-core  |     return _bootstrap._gcd_import(name[level:], package, level)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
backend-core  |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
backend-core  |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
backend-core  |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
backend-core  |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
backend-core  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
backend-core  |   File "/code/main.py", line 19, in <module>
backend-core  |     from modules.assistant.controller import assistant_router
backend-core  |   File "/code/modules/assistant/controller/__init__.py", line 1, in <module>
backend-core  |     from .assistant_routes import assistant_router
backend-core  |   File "/code/modules/assistant/controller/assistant_routes.py", line 8, in <module>
backend-core  |     from modules.assistant.ito.difference import DifferenceAssistant
backend-core  |   File "/code/modules/assistant/ito/difference.py", line 24, in <module>
backend-core  |     from modules.assistant.ito.ito import ITO
backend-core  |   File "/code/modules/assistant/ito/ito.py", line 14, in <module>
backend-core  |     from modules.chat.controller.chat.utils import update_user_usage
backend-core  |   File "/code/modules/chat/controller/__init__.py", line 1, in <module>
backend-core  |     from .chat_routes import chat_router
backend-core  |   File "/code/modules/chat/controller/chat_routes.py", line 12, in <module>
backend-core  |     from modules.chat.controller.chat.brainful_chat import BrainfulChat
backend-core  |   File "/code/modules/chat/controller/chat/brainful_chat.py", line 5, in <module>
backend-core  |     from modules.brain.integrations.GPT4.Brain import GPT4Brain
backend-core  |   File "/code/modules/brain/integrations/GPT4/Brain.py", line 18, in <module>
backend-core  |     from modules.tools import (
backend-core  |   File "/code/modules/tools/__init__.py", line 2, in <module>
backend-core  |     from .web_search import WebSearchTool
backend-core  |   File "/code/modules/tools/web_search.py", line 22, in <module>
backend-core  |     class WebSearchTool(BaseTool):
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/main.py", line 221, in __new__
backend-core  |     inferred = ModelField.infer(
backend-core  |                ^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 504, in infer
backend-core  |     return cls(
backend-core  |            ^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 434, in __init__
backend-core  |     self.prepare()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 544, in prepare
backend-core  |     self._set_default_and_type()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 576, in _set_default_and_type
backend-core  |     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
backend-core  | pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key"
backend-core  | Process SpawnProcess-5:
backend-core  | Traceback (most recent call last):
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 314, in _bootstrap
backend-core  |     self.run()
backend-core  |   File "/usr/local/lib/python3.11/multiprocessing/process.py", line 108, in run
backend-core  |     self._target(*self._args, **self._kwargs)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/_subprocess.py", line 78, in subprocess_started
backend-core  |     target(sockets=sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 65, in run
backend-core  |     return asyncio.run(self.serve(sockets=sockets))
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 190, in run
backend-core  |     return runner.run(main)
backend-core  |            ^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/asyncio/runners.py", line 118, in run
backend-core  |     return self._loop.run_until_complete(task)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "uvloop/loop.pyx", line 1517, in uvloop.loop.Loop.run_until_complete
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 69, in serve
backend-core  |     await self._serve(sockets)
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/server.py", line 76, in _serve
backend-core  |     config.load()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/config.py", line 433, in load
backend-core  |     self.loaded_app = import_from_string(self.app)
backend-core  |                       ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/uvicorn/importer.py", line 19, in import_from_string
backend-core  |     module = importlib.import_module(module_str)
backend-core  |              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/importlib/__init__.py", line 126, in import_module
backend-core  |     return _bootstrap._gcd_import(name[level:], package, level)
backend-core  |            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
backend-core  |   File "<frozen importlib._bootstrap>", line 1204, in _gcd_import
backend-core  |   File "<frozen importlib._bootstrap>", line 1176, in _find_and_load
backend-core  |   File "<frozen importlib._bootstrap>", line 1147, in _find_and_load_unlocked
backend-core  |   File "<frozen importlib._bootstrap>", line 690, in _load_unlocked
backend-core  |   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
backend-core  |   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
backend-core  |   File "/code/main.py", line 19, in <module>
backend-core  |     from modules.assistant.controller import assistant_router
backend-core  |   File "/code/modules/assistant/controller/__init__.py", line 1, in <module>
backend-core  |     from .assistant_routes import assistant_router
backend-core  |   File "/code/modules/assistant/controller/assistant_routes.py", line 8, in <module>
backend-core  |     from modules.assistant.ito.difference import DifferenceAssistant
backend-core  |   File "/code/modules/assistant/ito/difference.py", line 24, in <module>
backend-core  |     from modules.assistant.ito.ito import ITO
backend-core  |   File "/code/modules/assistant/ito/ito.py", line 14, in <module>
backend-core  |     from modules.chat.controller.chat.utils import update_user_usage
backend-core  |   File "/code/modules/chat/controller/__init__.py", line 1, in <module>
backend-core  |     from .chat_routes import chat_router
backend-core  |   File "/code/modules/chat/controller/chat_routes.py", line 12, in <module>
backend-core  |     from modules.chat.controller.chat.brainful_chat import BrainfulChat
backend-core  |   File "/code/modules/chat/controller/chat/brainful_chat.py", line 5, in <module>
backend-core  |     from modules.brain.integrations.GPT4.Brain import GPT4Brain
backend-core  |   File "/code/modules/brain/integrations/GPT4/Brain.py", line 18, in <module>
backend-core  |     from modules.tools import (
backend-core  |   File "/code/modules/tools/__init__.py", line 2, in <module>
backend-core  |     from .web_search import WebSearchTool
backend-core  |   File "/code/modules/tools/web_search.py", line 22, in <module>
backend-core  |     class WebSearchTool(BaseTool):
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/main.py", line 221, in __new__
backend-core  |     inferred = ModelField.infer(
backend-core  |                ^^^^^^^^^^^^^^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 504, in infer
backend-core  |     return cls(
backend-core  |            ^^^^
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 434, in __init__
backend-core  |     self.prepare()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 544, in prepare
backend-core  |     self._set_default_and_type()
backend-core  |   File "/usr/local/lib/python3.11/site-packages/pydantic/v1/fields.py", line 576, in _set_default_and_type
backend-core  |     raise errors_.ConfigError(f'unable to infer type for attribute "{self.name}"')
backend-core  | pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key"


### Twitter / LinkedIn details

_No response_
dosubot[bot] commented 2 months ago

The error you're encountering, pydantic.v1.errors.ConfigError: unable to infer type for attribute "api_key", indicates an issue with Pydantic's ability to determine the type of the api_key attribute. This can often be due to the environment variable for api_key not being correctly loaded or accessible at the point where an instance of the relevant Pydantic model is being created. Here are steps to troubleshoot and potentially resolve this issue:

  1. Ensure Environment Variables Are Loaded First: Verify that the code loading the .env file is executed before any Pydantic models are instantiated. This is crucial for making sure that all environment variables are available when needed.

  2. Explicitly Define Type and Source for api_key: In your Pydantic model, explicitly define the type of api_key and, if it's coming from an environment variable, use Pydantic's Field to specify its environment variable name, like so:

    from pydantic import BaseModel, Field
    
    class ApiKey(BaseModel):
       api_key: str = Field(..., env='API_KEY_ENV_VARIABLE')

    This approach clarifies the expected type and source of api_key.

  3. Check the Environment Variable Directly: Before the Pydantic model instantiation, add a debug statement to print out the environment variable value to ensure it's being correctly set and recognized by your application.

  4. Manually Test Model Initialization: Try manually initializing your Pydantic model with a hardcoded api_key value to see if the error still occurs. If it doesn't, the issue likely lies in how the environment variable is being passed or loaded.

  5. Review Pydantic and Project Documentation: Double-check the Pydantic documentation for any nuances related to environment variable loading or type inference that might be affecting your setup. Additionally, consult the project's documentation or forums for any known issues or specific guidance related to api_key handling.

By following these steps, you should be able to identify and correct the issue with the api_key attribute in your Pydantic model.

#### Details **Sources** - [backend/modules/api_key/entity/api_key.py](https://github.com/QuivrHQ/quivr/blob/main/backend/modules/api_key/entity/api_key.py) - [backend/models/sqlalchemy_repository.py](https://github.com/QuivrHQ/quivr/blob/main/backend/models/sqlalchemy_repository.py) - [backend/modules/api_key/repository/api_keys.py](https://github.com/QuivrHQ/quivr/blob/main/backend/modules/api_key/repository/api_keys.py) - [docs/configuring/environment-variables.mdx](https://github.com/QuivrHQ/quivr/blob/main/docs/configuring/environment-variables.mdx) - [.env.example](https://github.com/QuivrHQ/quivr/blob/main/.env.example) - [backend/requirements.txt](https://github.com/QuivrHQ/quivr/blob/main/backend/requirements.txt) - [frontend/app/user/components/ApiKeyConfig/hooks/useApiKeyConfig.ts](https://github.com/QuivrHQ/quivr/blob/main/frontend/app/user/components/ApiKeyConfig/hooks/useApiKeyConfig.ts) - [frontend/app/user/components/ApiKeyConfig/ApiKeyConfig.tsx](https://github.com/QuivrHQ/quivr/blob/main/frontend/app/user/components/ApiKeyConfig/ApiKeyConfig.tsx) - [backend/modules/api_key/tests/test_api_key.py](https://github.com/QuivrHQ/quivr/blob/main/backend/modules/api_key/tests/test_api_key.py) - [backend/modules/api_key/service/api_key_service.py](https://github.com/QuivrHQ/quivr/blob/main/backend/modules/api_key/service/api_key_service.py)
**About Dosu** This response is meant to be useful and save you time. It is **not meant to be a precise solution**, but rather a starting point for your own research. Help me be more useful! Please leave a 👍 if this is helpful and 👎 if it is irrelevant.

To continue the conversation, mention @dosu.

StanGirard commented 2 months ago

@remmen-io can you git pull ;)

tuninger commented 2 months ago

I'm having the same problem, is there a definitive solution so far?

enesj commented 2 months ago

Same, MacBook Pro M1

StanGirard commented 2 months ago

Can you uncomment the BRAVE_SEARCH api key in the env file ?

enesj commented 2 months ago

Looks as it works now :)

enesj commented 2 months ago

BRAVE SEARCH API KEY

BRAVE_SEARCH_API_KEY=CHANGE_ME

remmen-io commented 2 months ago

Uncommenting BRAVE_SEARCH_API_KEY also worked here. Thanks!