Tachi67's picture
Update README.md
7bc8846 verified
|
raw
history blame
10.6 kB
InterpreterFlow provides code interpreters to run code given the language of code and the code content. It returns the execution results of the code.
code, language -> InterpreterFlow -> execution results
*Expected Input*:
- `code`
- `language`
*Expected Output*:
- `interpreter_output`: output of the code interpreter
# Table of Contents
* [run](#run)
* [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="run"></a>
# run
<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.
*Input Interface*:
- `code`
- `language`
*Output Interface*:
- `interpreter_output`: output of the code interpreter
*Configuration Parameters*:
- None
**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