crewAIInc / crewAI

Framework for orchestrating role-playing, autonomous AI agents. By fostering collaborative intelligence, CrewAI empowers agents to work together seamlessly, tackling complex tasks.
https://crewai.com
MIT License
19k stars 2.62k forks source link

Unable to set endpoint for PDFSearchTool #1053

Open bprager opened 1 month ago

bprager commented 1 month ago

I can't find a way to set a custom endpoint for PDFSearchTool. I tried various key names in 'config' without success:

        pdf_tool = PDFSearchTool(
            config=dict(
                llm=dict(
                    provider="azure_openai",
                    config=dict(
                        model=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
                        api_key=os.getenv("AZURE_OPENAI_API_KEY"),
                        azure_endpoint=os.getenv("AZURE_OPENAI_ENDPOINT"),
                        temperature=0.0,
                    ),
                ),
            ),
            pdf=document,
        )

The example above gives me the error: schema.SchemaError: Key 'llm' error: Key 'config' error: Wrong key 'azure_endpoint' What key name do I have to use or is this feature missing?

JimFran commented 1 month ago

@bprager Try this base_url:

pdf_tool = PDFSearchTool(
            config=dict(
                llm=dict(
                    provider="azure_openai",
                    config=dict(
                        model=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
                        api_key=os.getenv("AZURE_OPENAI_API_KEY"),
                        base_url=os.getenv("AZURE_OPENAI_ENDPOINT"),
                        temperature=0.0,
                    ),
                ),
            ),
            pdf=document,
        )

You have some information here:

bprager commented 1 month ago

That worked @JimFran , thank you. Do you know by any chance how the "embedder" keyword syntax would look like?

ashiwalv commented 1 month ago

I tried with the same but got this error about KeyError: 'OPENAI_API_KEY' (Even though I am using AzureOpenAI key)

pdf_tool = PDFSearchTool(
            config=dict(
                llm=dict(
                    provider="azure_openai",
                    config=dict(
                        model=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
                        api_key=os.getenv("AZURE_OPENAI_API_KEY"),
                        base_url=os.getenv("AZURE_OPENAI_ENDPOINT"),
                        temperature=0.0,
                    ),
                ),
            ),
            pdf=pdf_path,
        )

But got this error:

----> 7 pdf_tool = PDFSearchTool(
      8             config=dict(
      9                 llm=dict(
     10                     provider="azure_openai",
     11                     config=dict(
     12                         model=os.getenv("AZURE_OPENAI_DEPLOYMENT_NAME"),
     13                         api_key=os.getenv("AZURE_OPENAI_API_KEY"),
     14                         base_url=os.getenv("AZURE_OPENAI_ENDPOINT"),
     15                         temperature=0.0,
     16                     ),
     17                 ),
     18             ),
     19             pdf=pdf_path,
     20         )

File ~/demo/venv_crewai/lib/python3.11/site-packages/crewai_tools/tools/pdf_search_tool/pdf_search_tool.py:32, in PDFSearchTool.__init__(self, pdf, **kwargs)
     31 def __init__(self, pdf: Optional[str] = None, **kwargs):
---> 32     super().__init__(**kwargs)
     33     if pdf is not None:
     34         self.add(pdf)

    [... skipping hidden 1 frame]

File ~/demo/venv_crewai/lib/python3.11/site-packages/crewai_tools/tools/pdf_search_tool/pdf_search_tool.py:48, in PDFSearchTool._set_default_adapter(self)
     42     from embedchain import App
     44     from crewai_tools.adapters.pdf_embedchain_adapter import (
     45         PDFEmbedchainAdapter,
     46     )
---> 48     app = App.from_config(config=self.config) if self.config else App()
     49     self.adapter = PDFEmbedchainAdapter(
     50         embedchain_app=app, summarize=self.summarize
     51     )
     53 return self

File ~/demo/venv_crewai/lib/python3.11/site-packages/embedchain/app.py:402, in App.from_config(cls, config_path, config, auto_deploy, yaml_path)
    399     llm = None
    401 embedding_model_provider = embedding_model_config_data.get("provider", "openai")
--> 402 embedding_model = EmbedderFactory.create(
    403     embedding_model_provider, embedding_model_config_data.get("config", {})
    404 )
    406 if cache_config_data is not None:
    407     cache_config = CacheConfig.from_config(cache_config_data)

File ~/demo/venv_crewai/lib/python3.11/site-packages/embedchain/factory.py:84, in EmbedderFactory.create(cls, provider_name, config_data)
     82     embedder_class = load_class(class_type)
     83     embedder_config_class = load_class(config_class_type)
---> 84     return embedder_class(config=embedder_config_class(**config_data))
     85 else:
     86     raise ValueError(f"Unsupported Embedder provider: {provider_name}")

File ~/demo/venv_crewai/lib/python3.11/site-packages/embedchain/embedder/openai.py:19, in OpenAIEmbedder.__init__(self, config)
     16 if self.config.model is None:
     17     self.config.model = "text-embedding-ada-002"
---> 19 api_key = self.config.api_key or os.environ["OPENAI_API_KEY"]
     20 api_base = self.config.api_base or os.environ.get("OPENAI_API_BASE")
     22 if api_key is None and os.getenv("OPENAI_ORGANIZATION") is None:

File <frozen os>:679, in __getitem__(self, key)

KeyError: 'OPENAI_API_KEY'
bprager commented 1 month ago

That worked @JimFran , thank you. Do you know by any chance how the "embedder" keyword syntax would look like?

I have to partially correct myself. While the schema.SchemaError is gone, the tools still tries to connect to OpenAI instead of the base_url address.