ValueError: No valid option generated in #select
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
https://github.com/microsoft/guidance/issues/36#issuecomment-1553723123
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?")
Remove the space in options and it works, i have no idea.
Assistant: {{#select "answer"}}Yes{{or}}No{{/select}}
Thanks for reporting this bug! This should now be fixed in 0.0.49 :)
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