region:us
# Table of Contents

* [InterpreterAtomicFlow](#InterpreterAtomicFlow)
  * [InterpreterAtomicFlow](#InterpreterAtomicFlow.InterpreterAtomicFlow)
    * [set\_up\_flow\_state](#InterpreterAtomicFlow.InterpreterAtomicFlow.set_up_flow_state)
* [\_\_init\_\_](#__init__)
* [code\_interpreters](#code_interpreters)
* [code\_interpreters.language\_map](#code_interpreters.language_map)
* [code\_interpreters.create\_code\_interpreter](#code_interpreters.create_code_interpreter)
* [code\_interpreters.languages.javascript](#code_interpreters.languages.javascript)
  * [preprocess\_javascript](#code_interpreters.languages.javascript.preprocess_javascript)
* [code\_interpreters.languages.shell](#code_interpreters.languages.shell)
  * [preprocess\_shell](#code_interpreters.languages.shell.preprocess_shell)
  * [add\_active\_line\_prints](#code_interpreters.languages.shell.add_active_line_prints)
* [code\_interpreters.languages.python](#code_interpreters.languages.python)
  * [preprocess\_python](#code_interpreters.languages.python.preprocess_python)
  * [add\_active\_line\_prints](#code_interpreters.languages.python.add_active_line_prints)
  * [AddLinePrints](#code_interpreters.languages.python.AddLinePrints)
    * [insert\_print\_statement](#code_interpreters.languages.python.AddLinePrints.insert_print_statement)
    * [process\_body](#code_interpreters.languages.python.AddLinePrints.process_body)
    * [visit](#code_interpreters.languages.python.AddLinePrints.visit)
* [code\_interpreters.languages.html](#code_interpreters.languages.html)
* [code\_interpreters.languages.r](#code_interpreters.languages.r)
  * [R](#code_interpreters.languages.r.R)
    * [preprocess\_code](#code_interpreters.languages.r.R.preprocess_code)
* [code\_interpreters.languages.powershell](#code_interpreters.languages.powershell)
  * [preprocess\_powershell](#code_interpreters.languages.powershell.preprocess_powershell)
  * [add\_active\_line\_prints](#code_interpreters.languages.powershell.add_active_line_prints)
  * [wrap\_in\_try\_catch](#code_interpreters.languages.powershell.wrap_in_try_catch)
* [code\_interpreters.languages](#code_interpreters.languages)
* [code\_interpreters.languages.applescript](#code_interpreters.languages.applescript)
  * [AppleScript](#code_interpreters.languages.applescript.AppleScript)
    * [preprocess\_code](#code_interpreters.languages.applescript.AppleScript.preprocess_code)
    * [add\_active\_line\_indicators](#code_interpreters.languages.applescript.AppleScript.add_active_line_indicators)
    * [detect\_active\_line](#code_interpreters.languages.applescript.AppleScript.detect_active_line)
    * [detect\_end\_of\_execution](#code_interpreters.languages.applescript.AppleScript.detect_end_of_execution)
* [code\_interpreters.subprocess\_code\_interpreter](#code_interpreters.subprocess_code_interpreter)
  * [SubprocessCodeInterpreter](#code_interpreters.subprocess_code_interpreter.SubprocessCodeInterpreter)
    * [preprocess\_code](#code_interpreters.subprocess_code_interpreter.SubprocessCodeInterpreter.preprocess_code)
* [code\_interpreters.base\_code\_interpreter](#code_interpreters.base_code_interpreter)
  * [BaseCodeInterpreter](#code_interpreters.base_code_interpreter.BaseCodeInterpreter)

<a id="InterpreterAtomicFlow"></a>

# InterpreterAtomicFlow

<a id="InterpreterAtomicFlow.InterpreterAtomicFlow"></a>

## InterpreterAtomicFlow Objects

```python
class InterpreterAtomicFlow(AtomicFlow)
```

This flow is used to run the code passed from the caller.
*Expected Input*:
- `code`
- `language_of_code`

*Expected Output*:
- `interpreter_output`: output of the code interpreter

**Full credits to open-interpreter (https://github.com/KillianLucas/open-interpreter)
for the usage of code interpreters (package `code_interpreters`) and the function truncate_output()**

I'm extracting the code interpreter part from open-interpreter because the litellm version of open-interpreter
is not compatible with that of the current version of aiflows(v.0.1.7).

<a id="InterpreterAtomicFlow.InterpreterAtomicFlow.set_up_flow_state"></a>

#### set\_up\_flow\_state

```python
def set_up_flow_state()
```

class-specific flow state: language and code,
which describes the programming language and the code to run.

<a id="__init__"></a>

# \_\_init\_\_

<a id="code_interpreters"></a>

# code\_interpreters

<a id="code_interpreters.language_map"></a>

# code\_interpreters.language\_map

<a id="code_interpreters.create_code_interpreter"></a>

# code\_interpreters.create\_code\_interpreter

<a id="code_interpreters.languages.javascript"></a>

# code\_interpreters.languages.javascript

<a id="code_interpreters.languages.javascript.preprocess_javascript"></a>

#### preprocess\_javascript

```python
def preprocess_javascript(code)
```

Add active line markers
Wrap in a try catch
Add end of execution marker

<a id="code_interpreters.languages.shell"></a>

# code\_interpreters.languages.shell

<a id="code_interpreters.languages.shell.preprocess_shell"></a>

#### preprocess\_shell

```python
def preprocess_shell(code)
```

Add active line markers
Wrap in a try except (trap in shell)
Add end of execution marker

<a id="code_interpreters.languages.shell.add_active_line_prints"></a>

#### add\_active\_line\_prints

```python
def add_active_line_prints(code)
```

Add echo statements indicating line numbers to a shell string.

<a id="code_interpreters.languages.python"></a>

# code\_interpreters.languages.python

<a id="code_interpreters.languages.python.preprocess_python"></a>

#### preprocess\_python

```python
def preprocess_python(code)
```

Add active line markers
Wrap in a try except
Add end of execution marker

<a id="code_interpreters.languages.python.add_active_line_prints"></a>

#### add\_active\_line\_prints

```python
def add_active_line_prints(code)
```

Add print statements indicating line numbers to a python string.

<a id="code_interpreters.languages.python.AddLinePrints"></a>

## AddLinePrints Objects

```python
class AddLinePrints(ast.NodeTransformer)
```

Transformer to insert print statements indicating the line number
before every executable line in the AST.

<a id="code_interpreters.languages.python.AddLinePrints.insert_print_statement"></a>

#### insert\_print\_statement

```python
def insert_print_statement(line_number)
```

Inserts a print statement for a given line number.

<a id="code_interpreters.languages.python.AddLinePrints.process_body"></a>

#### process\_body

```python
def process_body(body)
```

Processes a block of statements, adding print calls.

<a id="code_interpreters.languages.python.AddLinePrints.visit"></a>

#### visit

```python
def visit(node)
```

Overridden visit to transform nodes.

<a id="code_interpreters.languages.html"></a>

# code\_interpreters.languages.html

<a id="code_interpreters.languages.r"></a>

# code\_interpreters.languages.r

<a id="code_interpreters.languages.r.R"></a>

## R Objects

```python
class R(SubprocessCodeInterpreter)
```

<a id="code_interpreters.languages.r.R.preprocess_code"></a>

#### preprocess\_code

```python
def preprocess_code(code)
```

Add active line markers
Wrap in a tryCatch for better error handling in R
Add end of execution marker

<a id="code_interpreters.languages.powershell"></a>

# code\_interpreters.languages.powershell

<a id="code_interpreters.languages.powershell.preprocess_powershell"></a>

#### preprocess\_powershell

```python
def preprocess_powershell(code)
```

Add active line markers
Wrap in try-catch block
Add end of execution marker

<a id="code_interpreters.languages.powershell.add_active_line_prints"></a>

#### add\_active\_line\_prints

```python
def add_active_line_prints(code)
```

Add Write-Output statements indicating line numbers to a PowerShell script.

<a id="code_interpreters.languages.powershell.wrap_in_try_catch"></a>

#### wrap\_in\_try\_catch

```python
def wrap_in_try_catch(code)
```

Wrap PowerShell code in a try-catch block to catch errors and display them.

<a id="code_interpreters.languages"></a>

# code\_interpreters.languages

<a id="code_interpreters.languages.applescript"></a>

# code\_interpreters.languages.applescript

<a id="code_interpreters.languages.applescript.AppleScript"></a>

## AppleScript Objects

```python
class AppleScript(SubprocessCodeInterpreter)
```

<a id="code_interpreters.languages.applescript.AppleScript.preprocess_code"></a>

#### preprocess\_code

```python
def preprocess_code(code)
```

Inserts an end_of_execution marker and adds active line indicators.

<a id="code_interpreters.languages.applescript.AppleScript.add_active_line_indicators"></a>

#### add\_active\_line\_indicators

```python
def add_active_line_indicators(code)
```

Adds log commands to indicate the active line of execution in the AppleScript.

<a id="code_interpreters.languages.applescript.AppleScript.detect_active_line"></a>

#### detect\_active\_line

```python
def detect_active_line(line)
```

Detects active line indicator in the output.

<a id="code_interpreters.languages.applescript.AppleScript.detect_end_of_execution"></a>

#### detect\_end\_of\_execution

```python
def detect_end_of_execution(line)
```

Detects end of execution marker in the output.

<a id="code_interpreters.subprocess_code_interpreter"></a>

# code\_interpreters.subprocess\_code\_interpreter

<a id="code_interpreters.subprocess_code_interpreter.SubprocessCodeInterpreter"></a>

## SubprocessCodeInterpreter Objects

```python
class SubprocessCodeInterpreter(BaseCodeInterpreter)
```

<a id="code_interpreters.subprocess_code_interpreter.SubprocessCodeInterpreter.preprocess_code"></a>

#### preprocess\_code

```python
def preprocess_code(code)
```

This needs to insert an end_of_execution marker of some kind,
which can be detected by detect_end_of_execution.

Optionally, add active line markers for detect_active_line.

<a id="code_interpreters.base_code_interpreter"></a>

# code\_interpreters.base\_code\_interpreter

<a id="code_interpreters.base_code_interpreter.BaseCodeInterpreter"></a>

## BaseCodeInterpreter Objects

```python
class BaseCodeInterpreter()
```

.run is a generator that yields a dict with attributes: active_line, output

