Skip to content

Functions and Schemas

2. Functions and Schemas

In GenSphere, you can define custom functions and schemas to extend the functionality of your workflows.

2.1 Functions

Custom functions are Python functions defined in a .py file that you specify when running your workflow. These functions can be used in function_call nodes or as tools in llm_service nodes.

Defining Functions

  • Functions must return a dictionary whose keys match the outputs defined in the YAML node.
  • All parameters must be type-annotated.
  • Include docstrings to describe the function's purpose, parameters, and return values.

Example (functions.py):

def process_data_function(data: str) -> dict:
    """
    Processes the input data.

    Args:
        data (str): The data to process.

    Returns:
        dict: A dictionary with 'processed_data' as key.
    """
    # Your processing logic here
    processed_data = data.upper()  # Example processing
    return {'processed_data': processed_data}

Using Functions in Nodes

Example YAML Node:

- name: process_data
  type: function_call
  function: process_data_function
  params:
    data: '{{ read_data.raw_data }}'
  outputs:
    - processed_data

2.2 Schemas

Schemas are used to define structured outputs for language model responses using Pydantic models.

Defining Schemas

Create a .py file (e.g., schemas.py) with Pydantic models representing the expected structure of your data.

Example (schemas.py):

from pydantic import BaseModel, Field
from typing import List

class Item(BaseModel):
    id: int = Field(..., description="The unique identifier of the item.")
    name: str = Field(..., description="The name of the item.")
    description: str = Field(..., description="A brief description of the item.")

class ItemList(BaseModel):
    items: List[Item]

Using Schemas in Nodes

Use the structured_output_schema field in an llm_service node to specify the schema.

Example YAML Node:

- name: extract_items
  type: llm_service
  service: openai
  model: "gpt-4"
  structured_output_schema: ItemList
  params:
    prompt: |
      Extract item information from the following text:
      {{ source_text }}
  outputs:
    - extracted_items

Key Points:

  • The structured_output_schema value should match the class name in your schema file.
  • The language model will attempt to produce output that conforms to the specified schema.

Accessing Structured Outputs

After execution, the output will be an instance of the schema class. You can access the data using standard attribute access.

Example:

items = flow.outputs['extract_items']['extracted_items']
for item in items.items:
    print(f"Item ID: {item.id}, Name: {item.name}")