Documentation Index
Fetch the complete documentation index at: https://docs.upsonic.ai/llms.txt
Use this file to discover all available pages before exploring further.
Prompt Registry
Load versioned prompt templates from PromptLayer and use them as system prompts.import os
from upsonic import Agent, Task
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# Get a prompt by name (latest version)
system_prompt = pl.get_prompt("my-agent-v2")
agent = Agent(
"openai/gpt-4o",
system_prompt=system_prompt,
promptlayer=pl,
)
task = Task(description="Hello!")
agent.print_do(task)
pl.shutdown()
Dataset Groups
Dataset groups organize your evaluation data. Each group can contain multiple versions.Create and List Dataset Groups
import os
import uuid
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# Create a dataset group
name = f"my-dataset-{uuid.uuid4().hex[:8]}"
result = pl.create_dataset_group(name)
group_id = result["dataset_group"]["id"]
print(f"Created dataset group: {name} (ID: {group_id})")
# List all dataset groups
datasets = pl.list_datasets()
for ds in datasets["datasets"]:
group = ds.get("dataset_group", {})
print(f" {group.get('name')}: ID {group.get('id')}")
# Filter by name
filtered = pl.list_datasets(name=name)
print(f"Found {len(filtered['datasets'])} matching datasets")
pl.shutdown()
Async Variants
import asyncio
import os
import uuid
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
async def main():
name = f"async-dataset-{uuid.uuid4().hex[:8]}"
result = await pl.acreate_dataset_group(name)
print(f"Created: {result['dataset_group']['name']}")
datasets = await pl.alist_datasets()
print(f"Total datasets: {len(datasets['datasets'])}")
await pl.ashutdown()
asyncio.run(main())
Dataset Versions
Upload CSV data as new dataset versions.Upload from CSV (Base64)
import os
import base64
import uuid
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# Create a dataset group first
name = f"csv-upload-{uuid.uuid4().hex[:8]}"
group_result = pl.create_dataset_group(name)
group_id = group_result["dataset_group"]["id"]
# Prepare CSV content
csv_content = "query,expected_output\nWhat is 2+2?,4\nWhat is 3+3?,6\n"
b64 = base64.b64encode(csv_content.encode()).decode()
# Upload as a new dataset version
result = pl.create_dataset_version_from_file(
group_id,
file_name="eval_data.csv",
file_content_base64=b64,
)
print(f"Upload success: {result.get('success')}")
print(f"Dataset version ID: {result.get('dataset_id')}")
pl.shutdown()
Create Version from Filter
Pull logged requests into a dataset version using tag filters:import os
import uuid
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# Assumes you already have a dataset group
name = f"filter-dataset-{uuid.uuid4().hex[:8]}"
group_result = pl.create_dataset_group(name)
group_id = group_result["dataset_group"]["id"]
result = pl.create_dataset_version_from_filter(
group_id,
tags=["upsonic-eval", "accuracy-eval"],
columns=[
{
"name": "query",
"type": "TEXT",
"metadata_key": "eval_type",
}
],
)
print(f"Filter version result: {result}")
pl.shutdown()
Reports
Reports let you run evaluations on your datasets directly in PromptLayer.Create, Get, and Delete a Report
import os
import base64
import time
import uuid
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# 1. Create a dataset group with data
name = f"report-test-{uuid.uuid4().hex[:8]}"
group_result = pl.create_dataset_group(name)
group_id = group_result["dataset_group"]["id"]
# 2. Upload a CSV version
csv_content = "query,expected_output\nWhat is 2+2?,4\nWhat is 3+3?,6\n"
b64 = base64.b64encode(csv_content.encode()).decode()
pl.create_dataset_version_from_file(group_id, "data.csv", b64)
# 3. Wait for CSV processing (async on PromptLayer side)
time.sleep(10)
# 4. Create a report
report_result = pl.create_report(group_id, name=name)
report_id = report_result["report_id"]
print(f"Report ID: {report_id}")
# 5. Get report details
time.sleep(2)
report = pl.get_report(report_id)
print(f"Report: {report['report']['id']}")
# 6. Get report score
score = pl.get_report_score(report_id)
print(f"Score: {score}")
# 7. Delete report by name
delete_result = pl.delete_report_by_name(name)
print(f"Deleted: {delete_result.get('success')}")
pl.shutdown()
Async Variants
import asyncio
import os
import base64
import time
import uuid
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
async def main():
name = f"async-report-{uuid.uuid4().hex[:8]}"
group_result = await pl.acreate_dataset_group(name)
group_id = group_result["dataset_group"]["id"]
csv_content = "query,expected_output\nWhat is 1+1?,2\n"
b64 = base64.b64encode(csv_content.encode()).decode()
await pl.acreate_dataset_version_from_file(group_id, "data.csv", b64)
time.sleep(10)
report_result = await pl.acreate_report(group_id, name=name)
report_id = report_result["report_id"]
print(f"Report ID: {report_id}")
time.sleep(2)
fetched = await pl.aget_report(report_id)
print(f"Report: {fetched['report']['id']}")
await pl.adelete_report_by_name(name)
print("Deleted")
await pl.ashutdown()
asyncio.run(main())
List Evaluations
Query evaluations stored in PromptLayer.import os
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# List all evaluations
evals = pl.list_evaluations()
print(f"Total evaluations: {len(evals['evaluations'])}")
# With pagination
evals = pl.list_evaluations(page=1, per_page=10)
print(f"Page 1: {len(evals['evaluations'])} evaluations")
# Filter by name
evals = pl.list_evaluations(name="accuracy")
print(f"Accuracy evaluations: {len(evals['evaluations'])}")
pl.shutdown()
Async Variant
import asyncio
import os
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
async def main():
evals = await pl.alist_evaluations()
print(f"Total: {len(evals['evaluations'])}")
await pl.ashutdown()
asyncio.run(main())
Manual Logging
Log custom requests to PromptLayer with full control.import os
import time
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
pl.log(
provider="openai",
model="gpt-4o",
input_text="What is 2 + 2?",
output_text="4",
start_time=time.time() - 1.5,
end_time=time.time(),
input_tokens=10,
output_tokens=1,
price=0.001,
tags=["custom-tag", "my-project"],
metadata={"experiment": "v1", "user": "dogan"},
score=95,
status="SUCCESS",
function_name="math_qa",
)
print("Request logged")
pl.shutdown()
Async Variant
import asyncio
import os
import time
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
async def main():
await pl.alog(
provider="openai",
model="gpt-4o",
input_text="What is 2 + 2?",
output_text="4",
start_time=time.time() - 1.5,
end_time=time.time(),
input_tokens=10,
output_tokens=1,
price=0.001,
tags=["custom-tag"],
)
print("Request logged")
await pl.ashutdown()
asyncio.run(main())
Scoring and Metadata
Add scores and metadata to logged requests.import os
import time
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# Log a request first
request_id = pl.log(
provider="openai",
model="gpt-4o",
input_text="Hello",
output_text="Hi there!",
start_time=time.time() - 1,
end_time=time.time(),
)
print(f"Request ID: {request_id}")
# Add a score
pl.score(request_id, score=85)
print("Score added")
# Add metadata
pl.add_metadata(request_id, metadata={"reviewer": "dogan", "quality": "good"})
print("Metadata added")
pl.shutdown()
Workflows
Manage PromptLayer workflows.import os
from upsonic.integrations.promptlayer import PromptLayer
pl = PromptLayer()
# List existing workflows
workflows = pl.list_workflows()
print(f"Total workflows: {len(workflows.get('workflows', []))}")
# Create a workflow
workflow = pl.create_workflow(
name="My Evaluation Pipeline",
steps=[
{"name": "step1", "type": "prompt", "prompt_name": "my-agent-v2"},
],
)
print(f"Workflow ID: {workflow.get('id')}")
# Patch a workflow
pl.patch_workflow(
workflow_id=workflow["id"],
name="Updated Pipeline",
)
print("Workflow updated")
pl.shutdown()

