Skip to main content

Python client to manage PrimedIO

Project description

pyprimed: a python library to manage PrimedIO

Create a personalized web application that is unique and relevant for each and every user with Primed.io.

Installation

pip install pyprimed

Quickstart

Import the SDK and initiate the connection

from pyprimed.pio import Pio

pio = Pio(uri='http://<user>:<password>@<api_url>:<port>')

Create a Universe, and attach a few Targets

# create a new universe and attach a single target
pio\
  .universes\
  .create(name='myfirstuniverse')\
  .targets\
  .upsert([{'key':'ARTICLE-1', 'value':{'url': 'www.example.com/article-1'}}])

# retrieving the newly created universe
u = pio.universes.filter(name='myfirstuniverse').first

# list all targets currently associated with this universe
for target in u.targets.all():
  print(target.key, target.created_at)

# prepare a list of new targets
new_targets = [
  {'key': 'ARTICLE-2', 'value': {'url': 'www.example.com/article-2'}}, 
  {'key': 'ARTICLE-3', 'value': {'url': 'www.example.com/article-3'}}
]

# upsert the new targets
u.targets.upsert(new_targets)

# targets are upserted, which means that for a given key there
# can be only one instance in the database. Trying to create an
# instance with the same key will update the value of the record
# in the database
u.targets.upsert([{'key':'ARTICLE-1', 'value':{'url': 'THIS IS NEW!'}}])
u.targets.filter(key='ARTICLE-1').first.value 

Create a Model, and attach a few Signals

# create a new model and attach a single signal
pio\
  .models\
  .create(name='myfirstmodel')\
  .signals\
  .upsert([{'key':'ALICE'}])

# retrieving the created model
m = pio.models.filter(name='myfirstmodel').first

# list all signals currently associated with this model
for signal in m.signals.all():
  print(signal.key, signal.created_at)

# prepare a list of new signals
new_signals = [
  {'key': 'BOB'}, 
  {'key': 'CHRIS'}
]

# create the new signals
m.signals.upsert(new_signals)

# prepare a set of predictions (sk stand for signal.key, and tk for target.key)
# WARNING: `sk` and `tk` should always be a string!
predictions = [
  {'sk': 'ALICE', 'tk': 'ARTICLE-1', 'score': 0.35},
  {'sk': 'BOB', 'tk': 'ARTICLE-1', 'score': 0.75}, 
  {'sk': 'CHRIS', 'tk': 'ARTICLE-1', 'score': 0.15}
]

# create the new predictions 
u = pio.universes.filter(name='myfirstuniverse').first

pio\
    .predictions\
    .on(model=m, universe=u)\
    .upsert(predictions)

Create a Campaign, Experiment and set up an AB test to start using the Predictions

from pyprimed.models.abvariant import ControlAbvariant, CustomAbvariant

e = mycampaign.experiments.create(name="myexperiment")

# ControlAbvariant assigns uniformly random scores
# to each of the targets of the associated universe, for
# each personalise call
control = ControlAbvariant(label='A')

# The CustomAbvariant takes a `models` argument that
# allows specifiying multiple models and how much each
# contributes to the final blended score
ab = CustomAbvariant(label='B', models={mymodel: 1.0})

# When attaching A/B variants to the experiment we can
# specify how much traffic should flow to each A/B
# variant
e.abvariants.create({ab: 0.01, control: 0.99})

res = c.personalise(
  pubkey='mypubkey',
  secretkey='mysecretkey',
  signals={'userid': 'BOB'},
  abvariant='A'
)  # abvariant with label 'A' will be returned

Developer

Build the documentation:

cd docs && pydocmd build

Preview documentation on http://localhost:8000

cd docs && pydocmd serve

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pyprimed-2.1.8.tar.gz (29.7 kB view details)

Uploaded Source

File details

Details for the file pyprimed-2.1.8.tar.gz.

File metadata

  • Download URL: pyprimed-2.1.8.tar.gz
  • Upload date:
  • Size: 29.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/1.12.1 pkginfo/1.4.2 requests/2.18.4 setuptools/40.5.0 requests-toolbelt/0.8.0 tqdm/4.27.0 CPython/3.6.3

File hashes

Hashes for pyprimed-2.1.8.tar.gz
Algorithm Hash digest
SHA256 f966e36ae3e1d1ea11f955aae60e0f906ac41ff7c1e65a1b61ccd88b8f9f2385
MD5 970493b6fd1874cc906178d668e4ddd9
BLAKE2b-256 fdf6194c96a79224311a0a7a744589b1edf79ecd00f49906c0e5cf5a94090062

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page