Metadata-Version: 2.1
Name: segmind-workflow
Version: 0.1.13
Summary: A package for managing workflows with various functions.
Author: Srujan
Author-email: nagamallisrujan@gmail.com
License: MIT
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
License-File: LICENSE
Requires-Dist: pillow
Requires-Dist: importlib
Requires-Dist: requests

# SegmindWorkflow

**SegmindWorkflow** is a Python package that provides a structured approach to handling multiple API calls in a sequence. It is designed to query a prompt, manage a function call sequence based on API responses, and execute these functions in a defined order. The package keeps track of the context, cost, and credits left after each function call.

## Installation

To install the `SegmindWorkflow` package, use pip:

```bash
pip install segmind-workflow
```

## Usage

### Import the Package

First, import the `Workflow` class from the `segmindworkflow` package:

```python
from segmindworkflow import Workflow
```

### Initialization

Initialize the `Workflow` class by passing an API key, which will be used for external API requests.

```python
api_key = "your_api_key_here"
workflow = Workflow(api_key)
```

### 1. Query the Workflow

The `query` method allows you to send a prompt to the external API. Based on the prompt, the API will return a sequence of function calls and an updated context for further queries or function executions.

**Parameters:**

- `prompt` (str): The input string (or query) you want to send to the API.

```python
prompt = "Find the best solution for my query"
workflow.query(prompt)
```

This method will update:
- The function call sequence.
- The context for future requests.

### 2. Execute the Function Sequence

Once the function call sequence is generated, you can execute it using the `call` method. This method will go through each function in the sequence and make API requests to execute them in order. After makint the call to a function, the output of the function will be stored in the `outputs` folder(this is default folder and you can change it by passing `output_dir` param while initialising the Workflow class).

**Parameters:**

- `input_data` (dict): The input data required by the functions in the sequence.

```python
input_data = ["INP0", "INP1"]
workflow.call(input_data)
```

### 3. Get the Function Call Sequence

You can retrieve the sequence of function calls generated by the last query using the `get_sequence` method.

```python
sequence = workflow.get_sequence()
print("Function call sequence:", sequence)
```

### 4. Get the Results

After executing the function call sequence, you can retrieve the results using the `get_result` method.

```python
results = workflow.get_result()
print("Results:", results)
```

### 5. Check Remaining Credits

Each function call reduces the available credits. You can check how many credits you have left after making function calls with the `total_credits_left` method.

```python
credits_left = workflow.total_credits_left()
print("Credits left:", credits_left)
```

### 6. Calculate Total Cost

The `call_cost` method calculates the total cost of the function call sequence based on the prices defined for each function.

```python
total_cost = workflow.call_cost()
print("Total cost:", total_cost)
```

### 7. Reset the Workflow

If you need to reset the workflow (clear context, query sequence, etc.), you can use the `reset` method. This will reset everything except the credits left.

```python
# workflow.reset()
workflow.reset(outputs = True) # also deletes the output directory
```



### Error Handling

Each method will raise meaningful errors if they are called in the wrong order. For example:
- Calling `get_sequence()` before `query()` will raise an error.
- Calling `get_result()` before `call()` will raise an error.
- You cannot calculate the cost of the function sequence before generating it with a query.

These checks ensure that the workflow is followed properly.

### Example Usage

Here's a complete example that showcases the usage of the `SegmindWorkflow` package:

```python
from segmindworkflow import Workflow

# Step 1: Initialize the workflow with an API key
api_key = "your_api_key"
workflow = Workflow(api_key)

# Step 2: Query the workflow with a prompt
prompt = "Optimize the cost of running my application"
workflow.query(prompt)

# Step 3: Execute the sequence of function calls
input_data = {"param1": "value1"}
workflow.call(input_data)

# Step 4: Retrieve the function call sequence
sequence = workflow.get_sequence()
print("Function Call Sequence:", sequence)

# Step 5: Retrieve the results of the function calls
results = workflow.get_result()
print("Results:", results)

# Step 6: Check remaining credits
credits_left = workflow.w_of_credits_left()
print("Credits left:", credits_left)

# Step 7: Calculate the total cost
total_cost = workflow.w_of_cost()
print("Total cost:", total_cost)

# Step 8: Reset the workflow for a new session
workflow.reset()
```

### Code for changing the parameters of the function call sequence

```python
from segmind_workflow import Workflow
workflow = Workflow(api_key)
prompt = 'generate an image of cat using flux dev'
workflow.query(prompt)
print("Sequence Obtained before changing anything")
print(workflow.get_sequence())
prompt = "Change the number of steps in flux dev model t0 15"
workflow.query(prompt)
print("Sequence Obtained before changing steps parameter in flux dev model")
print(workflow.get_sequence())
```

### Code for changing the parameters of the function call sequence

```python
from segmind_workflow import Workflow
workflow = Workflow(api_key)
prompt = 'generate an image of cat using flux dev'
workflow.query(prompt)
print("Sequence Obtained before changing anything")
print(workflow.get_sequence())
workflow.change_params({'flux_1_dev':{'steps':15}})
print("Sequence Obtained before changing steps param in flux dev model")
print(workflow.get_sequence())
workflow.change_function_names([['flux_1_dev', 'flux_1_schnell']])
print("Sequence Obtained before changing flux dev model to schnell model")
print(workflow.get_sequence())
```

## License

This project is licensed under the MIT License.

## Contributing

If you want to contribute to this package, feel free to fork the repository and submit a pull request.
