import os
import json
import grpc
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
from arize.otel import register
from openinference.instrumentation.openllmetry import OpenInferenceSpanProcessor
from traceloop.sdk import Traceloop
from openai import OpenAI
from dotenv import load_dotenv
load_dotenv()
# Configuration
SPACE_ID = os.getenv("SPACE_ID")
API_KEY = os.getenv("API_KEY")
OPENAI_API_KEY = os.getenv("OPENAI_API_KEY")
if __name__ == "__main__":
# Setup Arize tracing
trace_provider = register(
space_id=SPACE_ID,
api_key=API_KEY,
project_name="traceloop-demo",
set_global_tracer_provider=True,
)
# Add OpenInference conversion processor
trace_provider.add_span_processor(OpenInferenceSpanProcessor())
# Create Arize exporter
arize_exporter = OTLPSpanExporter(
endpoint="otlp.arize.com:443",
headers={
"authorization": f"Bearer {API_KEY}",
"api_key": API_KEY,
"arize-space-id": SPACE_ID,
"arize-interface": "python",
"user-agent": "arize-python",
},
compression=grpc.Compression.Gzip,
)
# Initialize Traceloop
Traceloop.init(exporter=arize_exporter, disable_batch=True)
# Initialize OpenAI client
client = OpenAI(api_key=OPENAI_API_KEY)
# Define function tools
tools = [
{
"type": "function",
"function": {
"name": "get_weather",
"description": "Returns today's weather conditions at a given city.",
"parameters": {
"type": "object",
"properties": {
"city": {"type": "string"},
"unit": {"type": "string", "enum": ["C", "F"]},
},
"required": ["city"],
},
},
}
]
# Make request with function calling
response = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[
{"role": "user", "content": "What is the weather in Paris today? Please use the tool."}
],
tools=tools,
tool_choice="auto",
max_tokens=32,
)
print("Assistant response:", response.choices[0].message.content)
# Handle function calls if present
if response.choices[0].message.tool_calls:
print("Function calls detected:")
for call in response.choices[0].message.tool_calls:
print(f" - {call.function.name}: {call.function.arguments}")