TalentPerformer

Profitability Optimizer

The Profitability Optimizer agent focuses on maximizing the institution's financial performance by advising on asset allocation, liability mix, and yield/cost optimization. It consults a knowledge base containing best practices, historical benchmarks, and profitability thresholds, while using optimization tools to refine strategic decisions.

LIVE

Instructions

Step 1: Asset Yield Optimization
    - Input: Current asset mix including amounts, yields, and asset classes.
    - Tool: optimize_yield
    - Knowledge: Reference the knowledge base for acceptable risk levels, regulatory constraints, and historical yields.
    - Action: Recommend adjustments to asset allocation to maximize yield while maintaining liquidity and compliance.

    Step 2: Funding Cost Optimization
    - Input: Current liability mix including amounts, costs, and liability classes.
    - Tool: optimize_funding_cost
    - Knowledge: Reference the knowledge base for funding limits, cost benchmarks, and risk considerations.
    - Action: Suggest adjustments to the liability structure to minimize funding costs without breaching risk limits.

    Step 3: Reporting & Recommendations
    - Input: Results from yield and cost optimization tools.
    - Action: Summarize findings, quantify potential profitability improvements, and provide actionable recommendations for asset and liability management.

Knowledge Base (.md)

Business reference guide

Drag & Drop or Click

.md, .txt, .pdf

Data Files

Upload data for analysis (CSV, JSON, Excel, PDF)

Drag & Drop or Click

Multiple files: .json, .csv, .xlsx, .xls, .pdf, .docx, .pptx, .txt

Tools 3

optimize_yield

Optimize asset allocation to maximize yield while maintaining liquidity and risk limits. Parameters: - assets: JSON string — list of objects with keys AssetClass (str), Amount (float), Yield (float). Example: '[{"AssetClass":"Cash","Amount":1000000,"Yield":0.01},{"AssetClass":"Bonds","Amount":4000000,"Yield":0.04}]' - liquidity_buffer_pct: Minimum fraction of total assets to keep liquid. - max_asset_share: Maximum fraction of total assets per asset class. Returns: - JSON string with suggested allocation per asset class.

def optimize_yield(assets: str, liquidity_buffer_pct: float = 0.10, max_asset_share: float = 0.25) -> str:
    """
    Optimize asset allocation to maximize yield while maintaining liquidity and risk limits.

    Parameters:
    - assets: JSON string — list of objects with keys AssetClass(str), Amount(float), Yield(float).
              Example: '[{"AssetClass":"Cash","Amount":1000000,"Yield":0.01},{"AssetClass":"Bonds","Amount":4000000,"Yield":0.04}]'
    - liquidity_buffer_pct: Minimum fraction of total assets to keep liquid.
    - max_asset_share: Maximum fraction of total assets per asset class.

    Returns:
    - JSON string with suggested allocation per asset class.
    """
    try:
        data = json.loads(assets) if isinstance(assets, str) else assets
        df = pd.DataFrame(data)
        total_assets = float(df['Amount'].sum())
        min_liquid_amount = total_assets * liquidity_buffer_pct

        if 'Cash' in df['AssetClass'].values:
            cash_idx = df[df['AssetClass'] == 'Cash'].index[0]
            df.loc[cash_idx, 'AdjustedAmount'] = max(
                float(df.loc[cash_idx, 'Amount']), min_liquid_amount
            )

        df['AdjustedAmount'] = df.get('AdjustedAmount', df['Amount']).fillna(df['Amount']).apply(
            lambda x: min(x, total_assets * max_asset_share)
        )

        excess = total_assets - float(df['AdjustedAmount'].sum())
        if excess > 0:
            high_yield_idx = df['Yield'].idxmax()
            df.loc[high_yield_idx, 'AdjustedAmount'] += excess

        return df[['AssetClass', 'AdjustedAmount', 'Yield']].to_json(orient='records', indent=2)

    except Exception as e:
        return json.dumps({'error': str(e)})

optimize_funding_cost

Recommend adjustments to liability mix to reduce funding cost while staying within risk limits. Parameters: - liabilities: JSON string — list of objects with keys LiabilityClass (str), Amount (float), Cost (float). Example: '[{"LiabilityClass":"Deposits","Amount":3000000,"Cost":0.015},{"LiabilityClass":"Wholesale","Amount":1000000,"Cost":0.03}]' - short_term_threshold: Maximum fraction of short-term funding. Returns: - JSON string with recommended allocation per liability class.

def optimize_funding_cost(liabilities: str, short_term_threshold: float = 0.15) -> str:
    """
    Recommend adjustments to liability mix to reduce funding cost while staying within risk limits.

    Parameters:
    - liabilities: JSON string — list of objects with keys LiabilityClass(str), Amount(float), Cost(float).
                   Example: '[{"LiabilityClass":"Deposits","Amount":3000000,"Cost":0.015},{"LiabilityClass":"Wholesale","Amount":1000000,"Cost":0.03}]'
    - short_term_threshold: Maximum fraction of short-term funding.

    Returns:
    - JSON string with recommended allocation per liability class.
    """
    try:
        data = json.loads(liabilities) if isinstance(liabilities, str) else liabilities
        df = pd.DataFrame(data)
        total_liabilities = float(df['Amount'].sum())

        df['AdjustedAmount'] = df['Amount'].copy()
        short_term_classes = ['Wholesale', 'ShortTerm']
        for cls in short_term_classes:
            if cls in df['LiabilityClass'].values:
                idx = df[df['LiabilityClass'] == cls].index[0]
                max_allowed = total_liabilities * short_term_threshold
                df.loc[idx, 'AdjustedAmount'] = min(float(df.loc[idx, 'Amount']), max_allowed)

        remaining = total_liabilities - float(df['AdjustedAmount'].sum())
        if remaining > 0:
            low_cost_idx = df['Cost'].idxmin()
            df.loc[low_cost_idx, 'AdjustedAmount'] += remaining

        return df[['LiabilityClass', 'AdjustedAmount', 'Cost']].to_json(orient='records', indent=2)

    except Exception as e:
        return json.dumps({'error': str(e)})

file_tools

FileTools from agno framework

Test Agent

Configure model settings at the top, then test the agent below

Enter your question or instruction for the agent