1. Install Future AGI

pip install futureagi

2. 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"

3. 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.OBSERVE,
    project_name="function_calling_demo12",
    project_version_name="v1",
    session_name="s1"
)

4. Instrument OpenAI

from fi.integrations.otel import OpenAIInstrumentor

OpenAIInstrumentor().instrument(tracer_provider=trace_provider)

5. 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}")