Skip to content

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.