forked from cgvr/DeltaVR
153 lines
3.9 KiB
Plaintext
153 lines
3.9 KiB
Plaintext
{
|
|
"cells": [
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "1dc6faae",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"import os\n",
|
|
"import base64\n",
|
|
"import requests\n",
|
|
"from dotenv import load_dotenv"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "b3107275",
|
|
"metadata": {},
|
|
"outputs": [],
|
|
"source": [
|
|
"load_dotenv()\n",
|
|
"\n",
|
|
"ACCOUNT_ID = os.environ[\"CLOUDFLARE_ACCOUNT_ID\"]\n",
|
|
"API_TOKEN = os.environ[\"CLOUDFLARE_API_TOKEN\"]"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "999adf95",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Text to image"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": null,
|
|
"id": "40b35163",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"Saved: output.jpg (263282 bytes)\n",
|
|
"Saved: image9.jpg (263282 bytes)\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"MODEL = \"@cf/black-forest-labs/flux-1-schnell\"\n",
|
|
"URL = f\"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/{MODEL}\"\n",
|
|
"\n",
|
|
"payload = {\n",
|
|
" \"prompt\": \"a slightly curved broadsword with a fancy golden crossguard\",\n",
|
|
"}\n",
|
|
"\n",
|
|
"headers = {\n",
|
|
" \"Authorization\": f\"Bearer {API_TOKEN}\",\n",
|
|
" \"Content-Type\": \"application/json\",\n",
|
|
"}\n",
|
|
"\n",
|
|
"resp = requests.post(URL, json=payload, headers=headers, timeout=60)\n",
|
|
"resp.raise_for_status()\n",
|
|
"\n",
|
|
"data = resp.json()\n",
|
|
"b64 = data[\"result\"][\"image\"]\n",
|
|
"if not b64:\n",
|
|
" raise RuntimeError(f\"Unexpected response structure: {data}\")\n",
|
|
"\n",
|
|
"img_bytes = base64.b64decode(b64)\n",
|
|
"\n",
|
|
"out_path = \"output.jpg\"\n",
|
|
"with open(out_path, \"wb\") as f:\n",
|
|
" f.write(img_bytes)\n",
|
|
"\n",
|
|
"print(f\"Saved: {out_path} ({len(img_bytes)} bytes)\")"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "markdown",
|
|
"id": "14a874c4",
|
|
"metadata": {},
|
|
"source": [
|
|
"## Text prompt refinement"
|
|
]
|
|
},
|
|
{
|
|
"cell_type": "code",
|
|
"execution_count": 13,
|
|
"id": "485f6f46",
|
|
"metadata": {},
|
|
"outputs": [
|
|
{
|
|
"name": "stdout",
|
|
"output_type": "stream",
|
|
"text": [
|
|
"\"dark wooden battleaxe with bronze blade\"\n"
|
|
]
|
|
}
|
|
],
|
|
"source": [
|
|
"MODEL = \"@cf/meta/llama-3.2-3b-instruct\"\n",
|
|
"URL = f\"https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/run/{MODEL}\"\n",
|
|
"\n",
|
|
"instructions = \"\"\"\n",
|
|
"User is talking about some object. Your task is to generate a short and concise description of it. Use only user's own words, keep it as short as possible.\n",
|
|
"Example:\n",
|
|
"User: 'Umm, okay, I would like a really cool sword, with for example a bright orange crossguard. And also it should be slightly curved.'\n",
|
|
"You: 'a slightly curved sword with bright orange crossguard'\n",
|
|
"\"\"\"\n",
|
|
"prompt = \"Umm, alright, can you please give me an epic battleaxe? It should have a dark wooden shaft and bronze blade.\"\n",
|
|
"\n",
|
|
"response = requests.post(URL,\n",
|
|
" headers={\"Authorization\": f\"Bearer {API_TOKEN}\"},\n",
|
|
" json={\n",
|
|
" \"messages\": [\n",
|
|
" {\"role\": \"system\", \"content\": instructions},\n",
|
|
" {\"role\": \"user\", \"content\": prompt}\n",
|
|
" ]\n",
|
|
" }\n",
|
|
")\n",
|
|
"data = response.json()\n",
|
|
"result_text = data[\"result\"][\"response\"]\n",
|
|
"print(result_text)"
|
|
]
|
|
}
|
|
],
|
|
"metadata": {
|
|
"kernelspec": {
|
|
"display_name": ".venv",
|
|
"language": "python",
|
|
"name": "python3"
|
|
},
|
|
"language_info": {
|
|
"codemirror_mode": {
|
|
"name": "ipython",
|
|
"version": 3
|
|
},
|
|
"file_extension": ".py",
|
|
"mimetype": "text/x-python",
|
|
"name": "python",
|
|
"nbconvert_exporter": "python",
|
|
"pygments_lexer": "ipython3",
|
|
"version": "3.10.0"
|
|
}
|
|
},
|
|
"nbformat": 4,
|
|
"nbformat_minor": 5
|
|
}
|