PrefectHQ / ControlFlow

🦾 Take control of your AI agents
https://controlflow.ai
Apache License 2.0
670 stars 45 forks source link

langchain_google_genai/_function_utils.py "type_": TYPE_ENUM[v["type"]] - KeyError: 'type' #239

Closed MarkEdmondson1234 closed 3 weeks ago

MarkEdmondson1234 commented 3 months ago

Description

Attempting to run a Google example makes this error.

I also reported it here: https://github.com/langchain-ai/langchain-google/issues/376

Full stack trace:

Traceback (most recent call last):
  File "/usr/local/lib/python3.10/site-packages/prefect/flow_engine.py", line 635, in run_context
    yield self
  File "/usr/local/lib/python3.10/site-packages/prefect/flow_engine.py", line 676, in run_flow_sync
    engine.call_flow_fn()
  File "/usr/local/lib/python3.10/site-packages/prefect/flow_engine.py", line 655, in call_flow_fn
    result = call_with_parameters(self.flow.fn, self.parameters)
  File "/usr/local/lib/python3.10/site-packages/prefect/utilities/callables.py", line 208, in call_with_parameters
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/controlflow/decorators.py", line 110, in wrapper
    result = fn(*args, **kwargs)
  File "/app/flow.py", line 27, in team_flow
    who = task_master.run()
  File "/usr/local/lib/python3.10/site-packages/prefect/tasks.py", line 845, in __call__
    return run_task(
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 918, in run_task
    return run_task_sync(**kwargs)
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 731, in run_task_sync
    return engine.state if return_type == "state" else engine.result()
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 343, in result
    raise self._raised
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 673, in run_context
    yield self
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 729, in run_task_sync
    engine.call_task_fn(txn)
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 702, in call_task_fn
    result = call_with_parameters(self.task.fn, parameters)
  File "/usr/local/lib/python3.10/site-packages/prefect/utilities/callables.py", line 208, in call_with_parameters
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/controlflow/tasks/task.py", line 360, in run
    controller.run()
  File "/usr/local/lib/python3.10/site-packages/prefect/tasks.py", line 845, in __call__
    return run_task(
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 918, in run_task
    return run_task_sync(**kwargs)
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 731, in run_task_sync
    return engine.state if return_type == "state" else engine.result()
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 343, in result
    raise self._raised
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 673, in run_context
    yield self
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 729, in run_task_sync
    engine.call_task_fn(txn)
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 702, in call_task_fn
    result = call_with_parameters(self.task.fn, parameters)
  File "/usr/local/lib/python3.10/site-packages/prefect/utilities/callables.py", line 208, in call_with_parameters
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/controlflow/controllers/controller.py", line 340, in run
    new_messages = self.run_once()
  File "/usr/local/lib/python3.10/site-packages/prefect/tasks.py", line 845, in __call__
    return run_task(
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 918, in run_task
    return run_task_sync(**kwargs)
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 731, in run_task_sync
    return engine.state if return_type == "state" else engine.result()
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 343, in result
    raise self._raised
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 673, in run_context
    yield self
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 729, in run_task_sync
    engine.call_task_fn(txn)
  File "/usr/local/lib/python3.10/site-packages/prefect/task_engine.py", line 702, in call_task_fn
    result = call_with_parameters(self.task.fn, parameters)
  File "/usr/local/lib/python3.10/site-packages/prefect/utilities/callables.py", line 208, in call_with_parameters
    return fn(*args, **kwargs)
  File "/usr/local/lib/python3.10/site-packages/controlflow/controllers/controller.py", line 291, in run_once
    for _ in response_gen:
  File "/usr/local/lib/python3.10/site-packages/controlflow/llm/completions.py", line 307, in _handle_events
    for event in generator:
  File "/usr/local/lib/python3.10/site-packages/controlflow/llm/completions.py", line 125, in _completion_generator
    model = model.bind_tools([t.to_lc_tool() for t in as_tools(tools)])
  File "/usr/local/lib/python3.10/site-packages/langchain_google_genai/chat_models.py", line 1000, in bind_tools
    genai_tools = [
  File "/usr/local/lib/python3.10/site-packages/langchain_google_genai/chat_models.py", line 1001, in <listcomp>
    tool_to_dict(convert_to_genai_function_declarations(tool)) for tool in tools
  File "/usr/local/lib/python3.10/site-packages/langchain_google_genai/_function_utils.py", line 103, in convert_to_genai_function_declarations
    return GoogleTool(function_declarations=_convert_dict_to_genai_functions(tool))  # type: ignore
  File "/usr/local/lib/python3.10/site-packages/langchain_google_genai/_function_utils.py", line 180, in _convert_dict_to_genai_functions
    return [_convert_dict_to_genai_function(d)]
  File "/usr/local/lib/python3.10/site-packages/langchain_google_genai/_function_utils.py", line 204, in _convert_dict_to_genai_function
    "properties": {
  File "/usr/local/lib/python3.10/site-packages/langchain_google_genai/_function_utils.py", line 206, in <dictcomp>
    "type_": TYPE_ENUM[v["type"]],
KeyError: 'type'

Example Code

No response

Version Information

controlflow                    0.8.2
langchain                      0.2.6
langchain-community            0.2.6
langchain-core                 0.2.11
langchain-experimental         0.0.62
langchain-google-genai         1.0.7
langchain-google-vertexai      1.0.6

Additional Context

No response

MarkEdmondson1234 commented 3 months ago

Alright I found the issue, which was puzzling as they said it was fixed in latest version - when I used the env var it triggers:

CONTROLFLOW_LLM_MODEL=google/gemini-1.5-flash

so perhaps that is using an older version of the Langchain lib than what I have installed? When I removed that env var, all is well again.

jlowin commented 3 weeks ago

Ok, that's odd -- I think everything's been bumped with the LC 0.3 release, so I'm going to clsoe this for now unless it shows up again!