Skip to content
Last updated

Complete, ready-to-run examples demonstrating agentic workflows for common use cases.


Weather Report Workflow

Get weather information for multiple cities with automatic multi-step execution.

Python

import os
import requests

# Set your API key
API_KEY = os.environ['FREDDY_API_KEY']
ORG_ID = "your_org_id"

# Define tools
tools = [
    {
        "type": "function",
        "name": "get_cities",
        "description": "Get a list of 5 major cities for a specific geographic region",
        "parameters": {
            "type": "object",
            "properties": {
                "region": {
                    "type": "string",
                    "enum": ["asia", "europe", "americas", "africa", "oceania"],
                    "description": "Geographic region to get cities from"
                }
            },
            "required": ["region"]
        }
    },
    {
        "type": "function",
        "name": "get_temperature",
        "description": "Get current temperature in Celsius for a specific city",
        "parameters": {
            "type": "object",
            "properties": {
                "city": {
                    "type": "string",
                    "description": "City name (e.g., 'Paris', 'Tokyo')"
                }
            },
            "required": ["city"]
        }
    }
]

# Single API call - backend handles everything!
response = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json"
    },
    json={
        "organizationId": ORG_ID,
        "model": "gpt-5",
        "inputs": [
            {
                "role": "user",
                "texts": [{
                    "text": "Get a comprehensive weather report for major European cities"
                }]
            }
        ],
        "functions": tools,
        "parallelToolCalls": False,
        "maxToolCalls": 10
    }
)

result = response.json()

print("="*80)
print("WEATHER REPORT")
print("="*80)
print(result['response'])
print("\n" + "="*80)
print(f"Iterations: {result['metadata']['iterations']}")
print(f"Tool Calls: {result['metadata']['tool_calls']}")
print(f"Execution Time: {result['metadata']['execution_time_ms']}ms")

JavaScript/Node.js

const fetch = require('node-fetch');

const API_KEY = process.env.FREDDY_API_KEY;
const ORG_ID = 'your_org_id';

// Define tools
const tools = [
  {
    type: 'function',
    name: 'get_cities',
    description: 'Get a list of 5 major cities for a specific geographic region',
    parameters: {
      type: 'object',
      properties: {
        region: {
          type: 'string',
          enum: ['asia', 'europe', 'americas', 'africa', 'oceania'],
          description: 'Geographic region to get cities from'
        }
      },
      required: ['region']
    }
  },
  {
    type: 'function',
    name: 'get_temperature',
    description: 'Get current temperature in Celsius for a specific city',
    parameters: {
      type: 'object',
      properties: {
        city: {
          type: 'string',
          description: 'City name (e.g., "Paris", "Tokyo")'
        }
      },
      required: ['city']
    }
  }
];

async function getWeatherReport() {
  const response = await fetch('https://api.freddy.aitronos.com/v1/model/response', {
    method: 'POST',
    headers: {
      'Authorization': `Bearer ${API_KEY}`,
      'Content-Type': 'application/json'
    },
    body: JSON.stringify({
      organizationId: ORG_ID,
      model: 'gpt-5',
      inputs: [
        {
          role: 'user',
          texts: [{
            text: 'Get a comprehensive weather report for major European cities'
          }]
        }
      ],
      functions: tools,
      parallelToolCalls: false,
      maxToolCalls: 10
    })
  });

  const result = await response.json();

  console.log('='.repeat(80));
  console.log('WEATHER REPORT');
  console.log('='.repeat(80));
  console.log(result.response);
  console.log('\n' + '='.repeat(80));
  console.log(`Iterations: ${result.metadata.iterations}`);
  console.log(`Tool Calls: ${result.metadata.tool_calls}`);
  console.log(`Execution Time: ${result.metadata.execution_time_ms}ms`);
}

getWeatherReport();

Multi-Region Comparison

Compare weather across different regions using parallel execution (Claude).

Python

import requests
import os

response = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {os.environ['FREDDY_API_KEY']}"},
    json={
        "organizationId": "your_org_id",
        "model": "claude-sonnet-4-20250514",  # Parallel execution
        "inputs": [
            {
                "role": "user",
                "texts": [{
                    "text": "Compare the weather in Asia, Europe, and Americas. Get the temperature for all major cities and create a regional comparison report."
                }]
            }
        ],
        "functions": [
            {
                "type": "function",
                "name": "get_cities",
                "description": "Get 5 cities for a region",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "region": {
                            "type": "string",
                            "enum": ["asia", "europe", "americas"]
                        }
                    },
                    "required": ["region"]
                }
            },
            {
                "type": "function",
                "name": "get_temperature",
                "description": "Get temperature for a city",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string"}
                    },
                    "required": ["city"]
                }
            }
        ],
        "parallelToolCalls": True,  # Claude can handle parallel calls!
        "maxToolCalls": 20
    }
)

result = response.json()
print(result['response'])

# Claude efficiently handles:
# 1. Call get_cities for all 3 regions (parallel)
# 2. Call get_temperature for all 15 cities (parallel batches)
# 3. Generate comprehensive comparison

Research and Summarize

Combine web search with data processing.

Python

import requests
import os

response = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {os.environ['FREDDY_API_KEY']}"},
    json={
        "organizationId": "your_org_id",
        "model": "gpt-4o",
        "inputs": [
            {
                "role": "user",
                "texts": [{
                    "text": "Research the latest AI developments in 2025 and create a summary with key trends"
                }]
            }
        ],
        "tools": [
            {
                "type": "webSearch",  # Built-in tool!
                "searchContextSize": "high"
            }
        ],
        "maxToolCalls": 5
    }
)

result = response.json()
print(result['response'])

# Backend automatically:
# 1. Performs web search for "AI developments 2025"
# 2. Analyzes search results
# 3. May perform additional targeted searches
# 4. Synthesizes findings into summary

Data Analysis with Code Interpreter

Analyze data and create visualizations.

Python

import requests
import os

response = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {os.environ['FREDDY_API_KEY']}"},
    json={
        "organizationId": "your_org_id",
        "model": "gpt-4o",
        "inputs": [
            {
                "role": "user",
                "texts": [{
                    "text": "Analyze the sales data in sales.csv and create a chart showing monthly revenue trends"
                }],
                "files": [{"fileId": "file_sales_csv_123"}]
            }
        ],
        "tools": [
            {
                "type": "codeInterpreter",
                "container": {
                    "type": "auto",
                    "fileIds": ["file_sales_csv_123"]
                }
            }
        ],
        "include": ["code_interpreter.outputs"]  # Get generated files
    }
)

result = response.json()
print(result['response'])

# Access generated chart
for output in result.get('outputs', []):
    if output['type'] == 'image':
        print(f"Chart URL: {output['imageUrl']}")

# Backend automatically:
# 1. Loads sales.csv into Python environment
# 2. Analyzes data with pandas
# 3. Creates visualization with matplotlib
# 4. Generates insights report

Conditional Workflow

Execute different actions based on conditions.

Python

import requests
import os

def check_and_reorder():
    """Check inventory and reorder if stock is low"""
    
    response = requests.post(
        "https://api.freddy.aitronos.com/v1/model/response",
        headers={"Authorization": f"Bearer {os.environ['FREDDY_API_KEY']}"},
        json={
            "organizationId": "your_org_id",
            "model": "gpt-5",
            "inputs": [
                {
                    "role": "user",
                    "texts": [{
                        "text": "Check inventory for product WIDGET-100. If stock is below 10 units, automatically place a reorder for 50 units."
                    }]
                }
            ],
            "functions": [
                {
                    "type": "function",
                    "name": "check_inventory",
                    "description": "Check current stock level for a product",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "product_id": {"type": "string"}
                        },
                        "required": ["product_id"]
                    }
                },
                {
                    "type": "function",
                    "name": "place_reorder",
                    "description": "Place a reorder for a product",
                    "parameters": {
                        "type": "object",
                        "properties": {
                            "product_id": {"type": "string"},
                            "quantity": {"type": "integer"}
                        },
                        "required": ["product_id", "quantity"]
                    }
                }
            ],
            "parallelToolCalls": False
        }
    )
    
    result = response.json()
    print(result['response'])
    
    # Model automatically:
    # 1. Calls check_inventory("WIDGET-100")
    # 2. Sees stock is 5 (below threshold)
    # 3. Calls place_reorder("WIDGET-100", 50)
    # 4. Confirms action taken

check_and_reorder()

Multi-Turn Conversation

Continue a workflow across multiple requests using threads.

Python

import requests
import os

API_KEY = os.environ['FREDDY_API_KEY']
ORG_ID = "your_org_id"
THREAD_ID = "thread_persistent_123"

# First request
response1 = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "organizationId": ORG_ID,
        "model": "gpt-5",
        "threadId": THREAD_ID,  # Create thread
        "inputs": [
            {
                "role": "user",
                "texts": [{"text": "Get weather for European cities"}]
            }
        ],
        "functions": [
            {"type": "function", "name": "get_cities", "parameters": {...}},
            {"type": "function", "name": "get_temperature", "parameters": {...}}
        ]
    }
)

print("First Response:")
print(response1.json()['response'])

# Follow-up request - uses same thread!
response2 = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {API_KEY}"},
    json={
        "organizationId": ORG_ID,
        "model": "gpt-5",
        "threadId": THREAD_ID,  # Same thread
        "inputs": [
            {
                "role": "user",
                "texts": [{"text": "Now compare those with Asian cities"}]
            }
        ],
        "functions": [
            {"type": "function", "name": "get_cities", "parameters": {...}},
            {"type": "function", "name": "get_temperature", "parameters": {...}}
        ]
    }
)

print("\nFollow-up Response:")
print(response2.json()['response'])

# Model remembers:
# - Previous conversation
# - European cities and temperatures
# - Can make comparisons

Error Handling

Gracefully handle tool failures.

Python

import requests
import os

response = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {os.environ['FREDDY_API_KEY']}"},
    json={
        "organizationId": "your_org_id",
        "model": "gpt-5",
        "inputs": [
            {
                "role": "user",
                "texts": [{"text": "Get weather data from our weather service"}]
            }
        ],
        "functions": [
            {
                "type": "function",
                "name": "get_weather_primary",
                "description": "Primary weather service (may be unavailable)",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string"}
                    },
                    "required": ["city"]
                }
            },
            {
                "type": "function",
                "name": "get_weather_backup",
                "description": "Backup weather service (always available)",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {"type": "string"}
                    },
                    "required": ["city"]
                }
            }
        ]
    }
)

result = response.json()
print(result['response'])

# Model automatically:
# 1. Tries get_weather_primary()
# 2. Receives error response
# 3. Switches to get_weather_backup()
# 4. Returns results successfully
#
# No manual error handling needed!

Streaming with Agentic Workflows

See progress as the workflow executes (advanced).

Python

import requests
import os
import json

response = requests.post(
    "https://api.freddy.aitronos.com/v1/model/response",
    headers={"Authorization": f"Bearer {os.environ['FREDDY_API_KEY']}"},
    json={
        "organizationId": "your_org_id",
        "model": "gpt-5",
        "stream": True,  # Enable streaming
        "inputs": [
            {
                "role": "user",
                "texts": [{"text": "Get weather for European cities"}]
            }
        ],
        "functions": [
            {"type": "function", "name": "get_cities", "parameters": {...}},
            {"type": "function", "name": "get_temperature", "parameters": {...}}
        ]
    },
    stream=True
)

print("Streaming workflow progress:\n")

for line in response.iter_lines():
    if line:
        line = line.decode('utf-8')
        if line.startswith('data: '):
            data = json.loads(line[6:])
            
            # Tool call event
            if data.get('type') == 'tool_call.started':
                print(f"🔧 Calling {data['tool']['name']}...")
            
            # Tool result event
            elif data.get('type') == 'tool_call.completed':
                print(f"✅ {data['tool']['name']} completed")
            
            # Text delta
            elif data.get('type') == 'response.text.delta':
                print(data['delta'], end='', flush=True)
            
            # Final completion
            elif data.get('type') == 'response.completed':
                print("\n\n✅ Workflow completed!")

Best Practices

1. Set Appropriate Limits

{
    "maxToolCalls": 15,  # Prevent runaway execution
    "parallelToolCalls": False  # Sequential for dependent tasks
}

2. Use Clear Descriptions

{
    "name": "get_customer_orders",
    "description": "Retrieve all orders for a specific customer. Returns order ID, date, total, and status for each order. Use this when you need to check order history or find specific purchases."
}

3. Combine Built-In and Custom Tools

{
    "tools": [
        {"type": "webSearch"},  # Built-in: Fast server-side
        {
            "type": "function",  # Custom: Your business logic
            "name": "save_to_crm",
            "parameters": {...}
        }
    ]
}

4. Enable Detailed Logging for Development

{
    "include": [
        "function_calls.logs",
        "request.logs",
        "usage.detailed"
    ]
}

5. Use Threads for Contextual Workflows

{
    "threadId": "thread_user_session_123",  # Maintain context
    "threadContextMode": "smart"  # Intelligent history management
}

Common Patterns

Pattern: Data Enrichment

# Get basic data then enrich with additional calls
{
    "inputs": [{
        "role": "user",
        "texts": [{"text": "Get customer profile and enrich with order history and preferences"}]
    }],
    "functions": [
        "get_customer_profile",     # Returns basic info
        "get_order_history",        # Called with customer_id from profile
        "get_preferences"           # Called with customer_id from profile
    ]
}

Pattern: Validation and Action

# Validate before taking action
{
    "inputs": [{
        "role": "user",
        "texts": [{"text": "Process refund for order #12345 if it's eligible"}]
    }],
    "functions": [
        "check_refund_eligibility",  # Validation
        "process_refund"             # Action (only if eligible)
    ]
}

Pattern: Search and Summarize

# Search multiple sources and synthesize
{
    "tools": [
        {"type": "webSearch"},
        {"type": "fileSearch", "vectorStoreIds": ["vs_docs"]}
    ],
    "inputs": [{
        "role": "user",
        "texts": [{"text": "Find information about X from web and our docs, then summarize"}]
    }]
}

Troubleshooting

Issue: Model Not Using Tools

Symptoms: Model responds without calling tools

Solutions:

{
    "toolChoice": "required",  # Force tool usage
    # Or be more specific in the prompt:
    "text": "Use the get_weather tool to check the temperature in Paris"
}

Issue: Too Many Tool Calls

Symptoms: Workflow takes too long, excessive iterations

Solutions:

{
    "maxToolCalls": 5,  # Lower limit
    # Or improve tool descriptions to be more specific
}

Issue: Incomplete Results

Symptoms: Response doesn't include expected information

Solutions:

{
    "parallelToolCalls": False,  # Ensure sequential processing
    # Or add more explicit instructions:
    "text": "Make sure to check temperature for ALL cities before responding"
}

Next Steps