Decoder
Making Decisions
Making choices and decisions is a core part of any intelligence system, and we wanted to make that as easy as possible.
The decoder service (accessible via Bot().llm.decoder) can be used to make decisions or navigate choices with minimal configuration or code.
Basic Decoder
Here is a simple example of how to use the decoder to return the family of an animal. The decoder uses a prompt, keys description, and keys/values mapping to make decisions.
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.11/site-packages/markdown_exec/_internal/formatters/python.py", line 89, in _run_python
exec_python(code, code_block_id, exec_globals)
File "/app/.heroku/python/lib/python3.11/site-packages/markdown_exec/_internal/formatters/_exec_python.py", line 26, in exec_python
exec(compiled, exec_globals) # noqa: S102
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<code block: session decoder; n1>", line 12, in <module>
animal_family = bot.llm.decoder.prompt_to_value(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/service.py", line 24, in prompt_to_value
return self.prompt_to_values(
^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/service.py", line 45, in prompt_to_values
return self.decoder.process(
^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/decoder.py", line 101, in process
for decoder_enum in self._process_decoder_prompt_to_intel(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/decoder.py", line 137, in _process_decoder_prompt_to_intel
self._llm_connector.prompt_to_intel(
File "/workspace/dandy/llm/connector.py", line 136, in prompt_to_intel
response_intel_object = self._request_to_intel()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/connector.py", line 156, in _request_to_intel
self._http_request_to_response_str()
File "/workspace/dandy/llm/connector.py", line 66, in _http_request_to_response_str
self.response_str = http_connector.request_to_response(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/http/connector.py", line 37, in request_to_response
raise HttpConnectorRecoverableError(message)
dandy.http.exceptions.HttpConnectorRecoverableError: HttpConnector request failed with status code 400 and the following message "Bad Request" and body text "{"error":{"message":"/chat/completions: Invalid model name passed in model=stratus.smart. Call `/v1/models` to view available models for your key.","type":"None","param":"None","code":"400","provider_specific_fields":{"error":"/chat/completions: Invalid model name passed in model=stratus.smart. Call `/v1/models` to view available models for your key."}}}" after 4 attempts
Multiple Values
You can also request multiple values to be returned using prompt_to_values with max_return_values:
Traceback (most recent call last):
File "/app/.heroku/python/lib/python3.11/site-packages/markdown_exec/_internal/formatters/python.py", line 89, in _run_python
exec_python(code, code_block_id, exec_globals)
File "/app/.heroku/python/lib/python3.11/site-packages/markdown_exec/_internal/formatters/_exec_python.py", line 26, in exec_python
exec(compiled, exec_globals) # noqa: S102
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "<code block: session decoder; n2>", line 13, in <module>
activities = bot.llm.decoder.prompt_to_values(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/service.py", line 45, in prompt_to_values
return self.decoder.process(
^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/decoder.py", line 101, in process
for decoder_enum in self._process_decoder_prompt_to_intel(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/decoder/decoder.py", line 137, in _process_decoder_prompt_to_intel
self._llm_connector.prompt_to_intel(
File "/workspace/dandy/llm/connector.py", line 136, in prompt_to_intel
response_intel_object = self._request_to_intel()
^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/llm/connector.py", line 156, in _request_to_intel
self._http_request_to_response_str()
File "/workspace/dandy/llm/connector.py", line 66, in _http_request_to_response_str
self.response_str = http_connector.request_to_response(
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/workspace/dandy/http/connector.py", line 37, in request_to_response
raise HttpConnectorRecoverableError(message)
dandy.http.exceptions.HttpConnectorRecoverableError: HttpConnector request failed with status code 400 and the following message "Bad Request" and body text "{"error":{"message":"/chat/completions: Invalid model name passed in model=stratus.smart. Call `/v1/models` to view available models for your key.","type":"None","param":"None","code":"400","provider_specific_fields":{"error":"/chat/completions: Invalid model name passed in model=stratus.smart. Call `/v1/models` to view available models for your key."}}}" after 4 attempts
Note
The decoder's keys_values dictionary can contain any type of object as values, allowing you to map to complex objects, not just strings.