File size: 1,617 Bytes
93cae01 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 | # test.py
import os
from fastapi import FastAPI
from fastapi.responses import StreamingResponse
from pydantic import BaseModel
from dotenv import load_dotenv
from agents import Agent, Runner, AsyncOpenAI, OpenAIChatCompletionsModel
from agents.run import RunConfig
from fastapi.middleware.cors import CORSMiddleware
load_dotenv()
GEMINI_API_KEY = os.getenv("GEMINI_API_KEY")
if not GEMINI_API_KEY:
raise ValueError("GEMINI_API_KEY missing")
app = FastAPI()
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
client = AsyncOpenAI(
api_key=GEMINI_API_KEY,
base_url="https://generativelanguage.googleapis.com/v1beta/openai/"
)
model = OpenAIChatCompletionsModel(
model="gemini-2.5-flash",
openai_client=client
)
agent = Agent(
name="SocialMediaPoster",
instructions="write social media posts about technology",
model=model
)
config = RunConfig()
chat_history = []
class ChatIn(BaseModel):
message: str
@app.post("/chat")
async def chat(data: ChatIn):
chat_history.append({"role": "user", "content": data.message})
async def stream():
output = Runner.run_streamed(
starting_agent=agent,
input=chat_history,
run_config=config
)
async for event in output.stream_events():
if event.type == "raw_response_event" and hasattr(event.data, "delta"):
yield event.data.delta
chat_history[:] = output.to_input_list()
return StreamingResponse(stream(), media_type="text/plain")
|