File size: 3,455 Bytes
19499ad
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
71
72
73
74
75
76
77
78
# ============================================================================
#  Codex-as-API  ->  OpenAI Agents SDK  (personal "self AI" agent)
#  HOW TO USE: open https://colab.research.google.com  ->  new notebook  ->
#  paste this WHOLE file into ONE cell  ->  press Run.  That's it.
#
#  It does 4 things:
#    1. installs the OpenAI Agents SDK
#    2. points the SDK at YOUR Codex API (running on your Hugging Face Space)
#    3. runs an agent and proves session memory works
#    4. leaves you a reusable  ask("...")  helper for the next cells
# ============================================================================

# --- 1) install (quiet) ----------------------------------------------------
!pip -q install openai-agents nest_asyncio

import asyncio, nest_asyncio
from openai import AsyncOpenAI
from agents import Agent, Runner, OpenAIChatCompletionsModel, set_tracing_disabled

nest_asyncio.apply()          # lets asyncio.run() work inside Colab's loop

# --- 2) YOUR API settings (edit these) -------------------------------------
BASE_URL = "https://sarveshpatel-codex.hf.space/v1"   # your Space + /v1
API_KEY  = "CURSEOFWITCHER"                            # your API_TOKEN secret
MODEL    = "codex"                                     # always "codex"
SESSION  = "colab-self-ai"   # any string. Same string = persistent memory.

# --- 3) wire the Agents SDK to your Codex API ------------------------------
set_tracing_disabled(True)   # don't send traces to OpenAI

client = AsyncOpenAI(
    base_url=BASE_URL,
    api_key=API_KEY,
    default_headers={"X-Session-Id": SESSION},   # gives the agent memory
)
model = OpenAIChatCompletionsModel(model=MODEL, openai_client=client)

# This is your agent. Change `instructions` to define its personality/role.
self_ai = Agent(
    name="SelfAI",
    instructions=(
        "You are SelfAI, my personal coding and research assistant powered by "
        "Codex. Be concise, direct, and practical."
    ),
    model=model,
)

# --- 4) a reusable helper you can call in any later cell -------------------
def ask(prompt: str) -> str:
    """Send a message to your agent and return its reply (remembers the session)."""
    result = asyncio.run(Runner.run(self_ai, prompt))
    return result.final_output


# --- 5) quick demo: connectivity + memory ----------------------------------
print("ping  :", asyncio.run(
    client.chat.completions.create(
        model=MODEL, messages=[{"role": "user", "content": "Reply with exactly: PONG"}]
    )
).choices[0].message.content)

print("agent :", ask("In one sentence, what can you help me with?"))
print("memory>", ask("My favorite number is 42. Acknowledge in 3 words."))
print("recall:", ask("What is my favorite number? Reply with just the number."))

# ---------------------------------------------------------------------------
# NEXT CELLS — just call ask():
#     ask("Write a Python function to check if a string is a palindrome.")
#     ask("Now add a test for it.")          # it remembers the previous answer
#
# TIPS:
#   * New conversation? change SESSION (or set it to None for one-off calls).
#   * Streaming / tools: this API is OpenAI-compatible, so any OpenAI client
#     works. Note: OpenAI-style function tools aren't forwarded yet — but
#     Codex's own tools (running code, editing files) execute server-side
#     inside the session.
# ---------------------------------------------------------------------------