guidance icon indicating copy to clipboard operation
guidance copied to clipboard

ValueError: No valid option generated in #select

Open jackzhouusa opened this issue 2 years ago • 3 comments

The bug ValueError: No valid option generated in #select

To Reproduce Give a full working code snippet that can be pasted into a notebook cell or python file. Make sure to include the LLM load step so we know which model you are using.

import os
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

import guidance

d = '''
    User: Question: Which is the best MCU film?

    Assistant: Yes. I need to search the web for the best MCU film.

    User: Question: {{question}}

    Assistant {{#select "answer"}} Yes{{or}} No{{/select}}
'''

chatgpt = guidance.llms.OpenAI("text-davinci-003")

prompt = guidance(d)

prompt = prompt(llm = chatgpt, question = "What is Google's Headquarter address?")
Traceback (most recent call last):
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 94, in run
    await self.visit(self.parse_tree)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 423, in visit
    visited_children.append(await self.visit(child, inner_next_node, inner_next_next_node, inner_prev_node, node, parent_node))
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 423, in visit
    visited_children.append(await self.visit(child, inner_next_node, inner_next_next_node, inner_prev_node, node, parent_node))
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 390, in visit
    command_output = await command_function(*positional_args, **named_args)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py)", line 138, in select
    raise ValueError("No valid option generated in #select! Please post a GitHub issue since this should not happen :)")
ValueError: No valid option generated in #select! Please post a GitHub issue since this should not happen :)

Error in program:  No valid option generated in #select! Please post a GitHub issue since this should not happen :)
Output exceeds the [size limit](command:workbench.action.openSettings?%5B%22notebook.output.textLineLimit%22%5D). Open the full output data [in a text editor](command:workbench.action.openLargeOutput?3f937783-9df6-4db8-8cc8-185d951c685d)---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
Cell In[7], line 20
     16 chatgpt = guidance.llms.OpenAI("text-davinci-003")
     18 prompt = guidance(d)
---> 20 prompt = prompt(llm = chatgpt, question = "What is Google's Headquarter address?")

File [~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program.py:225](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/test/jack4/agents/~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program.py:225), in Program.__call__(self, **kwargs)
    223     loop = asyncio.new_event_loop()
    224     loop.create_task(new_program.update_display.run()) # start the display updater
--> 225     loop.run_until_complete(new_program.execute())
    227 return new_program

File [~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/nest_asyncio.py:90](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/test/jack4/agents/~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/nest_asyncio.py:90), in _patch_loop..run_until_complete(self, future)
     87 if not f.done():
     88     raise RuntimeError(
     89         'Event loop stopped before Future completed.')
---> 90 return f.result()

File [~/.pyenv/versions/3.10.0/lib/python3.10/asyncio/futures.py:201](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/test/jack4/agents/~/.pyenv/versions/3.10.0/lib/python3.10/asyncio/futures.py:201), in Future.result(self)
    199 self.__log_traceback = False
    200 if self._exception is not None:
--> 201     raise self._exception
    202 return self._result
...
    137 if max(option_logprobs.values()) <= -1000:
--> 138     raise ValueError("No valid option generated in #select! Please post a GitHub issue since this should not happen :)")
    140 partial_output(selected_option)

ValueError: No valid option generated in #select! Please post a GitHub issue since this should not happen :)

System info (please complete the following information):

  • OS (e.g. Ubuntu, Windows 11, Mac OS, etc.): Mac OS
  • Guidance Version (guidance.__version__): guidance-0.0.47

jackzhouusa avatar May 18 '23 20:05 jackzhouusa

https://github.com/microsoft/guidance/issues/36#issuecomment-1553723123

amanape avatar May 18 '23 22:05 amanape

I tried. Still the same type of error.

import os
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")

from guidance.llms import OpenAI
from guidance import Guidance

d = '''
    User: Question: Which is the best MCU film?

    Assistant: Yes. I need to search the web for the best MCU film.

    User: Question: {{question}}

    Assistant: {{#select "answer"}} Yes{{or}} No{{/select}}
'''

chatgpt = OpenAI(model='text-davinci-003')

guidance = Guidance('guidance-name')

prompt = guidance(d)

prompt = prompt(llm = chatgpt, question = "What is Google's Headquarter address?")

jackzhouusa avatar May 19 '23 00:05 jackzhouusa

Remove the space in options and it works, i have no idea.

Assistant: {{#select "answer"}}Yes{{or}}No{{/select}}

PenutChen avatar May 19 '23 06:05 PenutChen

Thanks for reporting this bug! This should now be fixed in 0.0.49 :)

slundberg avatar May 19 '23 19:05 slundberg

I installed 0.0.49. Got this error:

Output exceeds the [size limit](command:workbench.action.openSettings?%5B%22notebook.output.textLineLimit%22%5D). Open the full output data [in a text editor](command:workbench.action.openLargeOutput?125f70f3-5d6d-4357-9ce6-d93cac4a2082)Traceback (most recent call last):
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 94, in run
    await self.visit(self.parse_tree)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 428, in visit
    visited_children.append(await self.visit(child, inner_next_node, inner_next_next_node, inner_prev_node, node, parent_node))
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 428, in visit
    visited_children.append(await self.visit(child, inner_next_node, inner_next_next_node, inner_prev_node, node, parent_node))
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program_executor.py)", line 395, in visit
    command_output = await command_function(*positional_args, **named_args)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py)", line 158, in select
    option_logprobs = await recursive_select("")
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py)", line 133, in recursive_select
    sub_logprobs = await recursive_select(rec_prefix)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py)", line 133, in recursive_select
    sub_logprobs = await recursive_select(rec_prefix)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py)", line 133, in recursive_select
    sub_logprobs = await recursive_select(rec_prefix)
  [Previous line repeated 2946 more times]
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/library/_select.py)", line 107, in recursive_select
    gen_obj = await parser.llm_session(
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/llms/_openai.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/llms/_openai.py)", line 339, in __call__
    return self.llm.__class__.cache[key]
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/diskcache/core.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/diskcache/core.py)", line 1232, in __getitem__
    value = self.get(key, default=ENOVAL, retry=True)
  File "[/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/diskcache/core.py](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/.pyenv/versions/3.10.0/lib/python3.10/site-packages/diskcache/core.py)", line 1173, in get
...
    if k[0] == "_" or k in self.__dict__:
RecursionError: maximum recursion depth exceeded in comparison

Error in program:  maximum recursion depth exceeded in comparison
Output exceeds the [size limit](command:workbench.action.openSettings?%5B%22notebook.output.textLineLimit%22%5D). Open the full output data [in a text editor](command:workbench.action.openLargeOutput?a28a8b7c-1d9f-4962-908f-8438ba9af04e)---------------------------------------------------------------------------
RecursionError                            Traceback (most recent call last)
Cell In[2], line 23
     19 guidance = Guidance('guidance-name')
     21 prompt = guidance(d)
---> 23 prompt = prompt(llm = chatgpt, question = "What is Google's Headquarter address?")

File [~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program.py:224](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/test/jack4/agents/~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/guidance/_program.py:224), in Program.__call__(self, **kwargs)
    222     loop = asyncio.new_event_loop()
    223     loop.create_task(new_program.update_display.run()) # start the display updater
--> 224     loop.run_until_complete(new_program.execute())
    226 return new_program

File [~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/nest_asyncio.py:90](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/test/jack4/agents/~/.pyenv/versions/3.10.0/lib/python3.10/site-packages/nest_asyncio.py:90), in _patch_loop..run_until_complete(self, future)
     87 if not f.done():
     88     raise RuntimeError(
     89         'Event loop stopped before Future completed.')
---> 90 return f.result()

File [~/.pyenv/versions/3.10.0/lib/python3.10/asyncio/futures.py:201](https://file+.vscode-resource.vscode-cdn.net/Users/jackzhou/test/jack4/agents/~/.pyenv/versions/3.10.0/lib/python3.10/asyncio/futures.py:201), in Future.result(self)
    199 self.__log_traceback = False
    200 if self._exception is not None:
--> 201     raise self._exception
    202 return self._result
...
---> 49     if k[0] == "_" or k in self.__dict__:
     50         return super(OpenAIObject, self).__setattr__(k, v)
     52     self[k] = v

RecursionError: maximum recursion depth exceeded in comparison

jackzhouusa avatar May 20 '23 01:05 jackzhouusa