Install Future AGI

pip install futureagi

Set Environment Variables

import os
os.environ["OPENAI_API_KEY"] = "your-openai-api-key"
os.environ["FI_API_KEY"] = "your-futureagi-api-key"
os.environ["FI_SECRET_KEY"] = "your-futureagi-secret-key"

Define Evaluation Tags

from fi.integrations.otel.types import EvalName, EvalSpanKind, EvalTag, EvalTagType

eval_tags = [
    EvalTag(
        eval_name=EvalName.DETERMINISTIC_EVALS,
        value=EvalSpanKind.TOOL,
        type=EvalTagType.OBSERVATION_SPAN,
        config={
            "multi_choice": False,
            "choices": ["Yes", "No"],
            "rule_prompt": "Evaluate if the function call is correct",
        },
        custom_eval_name="det_eval_openai_1"
    )
]

Register Future AGI Tracer Provider

from fi.integrations.otel import register
from fi.integrations.otel.types import ProjectType

trace_provider = register(
    endpoint = "https://api.futureagi.com/tracer/observation-span/create_otel_span/",
    project_type=ProjectType.EXPERIMENT,
    project_name="function_calling_demo12",
    project_version_name="v1",
    eval_tags=eval_tags
)

Instrument OpenAI

from fi.integrations.otel import OpenAIInstrumentor

OpenAIInstrumentor().instrument(tracer_provider=trace_provider)

Define Function to Call OpenAI

import openai
from openai.types.chat import ChatCompletionToolMessageParam, ChatCompletionUserMessageParam

def get_weather_info():
    messages = [
        ChatCompletionUserMessageParam(
            role="user",
            content="What's the weather like in San Francisco?"
        )
    ]
    
    client = openai.OpenAI()
    response = client.chat.completions.create(
        model="gpt-4",
        tools=[{
            "type": "function",
            "function": {
                "name": "get_weather",
                "description": "Get weather information for a city",
                "parameters": {
                    "type": "object",
                    "properties": {
                        "city": {
                            "type": "string",
                            "description": "City name, e.g., 'San Francisco'"
                        }
                    },
                    "required": ["city"]
                }
            }
        }],
        messages=messages
    )
    
    message = response.choices[0].message
    if tool_calls := message.tool_calls:
        tool_call_id = tool_calls[0].id
        messages.append(message)
        
        messages.append(
            ChatCompletionToolMessageParam(
                content="72°F and sunny",
                role="tool",
                tool_call_id=tool_call_id
            )
        )
        
        final_response = client.chat.completions.create(
            model="gpt-4",
            messages=messages
        )
        return final_response.choices[0].message.content
    
    return "No function call was made"


if __name__ == "__main__":
try:
    result = get_weather_info()
    print(f"Response: {result}")
except Exception as e:
    print(f"Error: {e}")