import os
from dotenv import load_dotenv
from openai import AsyncOpenAI
from cai.sdk.agents import OpenAIChatCompletionsModel, Agent, Runner
from cai.sdk.agents import set_default_openai_client, set_tracing_disabled
from openai.types.responses import ResponseTextDeltaEvent

# Load environment variables from .env file
load_dotenv()

external_client = AsyncOpenAI(
    base_url=os.getenv("LITELLM_BASE_URL", "http://localhost:4000"),
    api_key=os.getenv("LITELLM_API_KEY", "key"),
)

set_default_openai_client(external_client)
set_tracing_disabled(True)

# llm_model=os.getenv('LLM_MODEL', 'gpt-4o')
# llm_model=os.getenv('LLM_MODEL', 'claude-3-7')
llm_model = os.getenv("LLM_MODEL", "qwen2.5:14b")

# For Qwen models, we need to skip system instructions as they're not supported
instructions = None if "qwen" in llm_model.lower() else "You are a helpful assistant"

agent = Agent(
    name="Assistant",
    instructions=instructions,
    model=OpenAIChatCompletionsModel(
        model=llm_model,
        openai_client=external_client,
    ),
)


def run_sync_haiku():
    result = Runner.run_sync(agent, "Write a haiku about recursion in programming.")
    print(result.final_output)


async def stream_jokes():
    result = Runner.run_streamed(agent, input="Please tell me 5 jokes.")
    async for event in result.stream_events():
        if event.type == "raw_response_event" and isinstance(event.data, ResponseTextDeltaEvent):
            print(event.data.delta, end="", flush=True)


########################################################

# async
# import asyncio
# asyncio.run(stream_jokes())

# sync
run_sync_haiku()
