in src/vw-serving/src/vw_serving/serve.py [0:0]
def _score_json(model, observation, response_content_type=CONTENT_TYPE_JSON):
event_id = uuid.uuid1().int
dt = datetime.datetime.now()
timestamp = int(dt.strftime("%s"))
action_probs = model.predict(observation)
nchoices = len(action_probs)
action_probs = (action_probs / action_probs.sum())
action = np.random.choice(nchoices, p=action_probs) + 1
action_prob = action_probs[action - 1]
# add sample_prob for later dataset sampling
sample_prob = random.uniform(0.0, 1.0)
if response_content_type in (CONTENT_TYPE_JSON, CONTENT_TYPE_JSONLINES):
# convert to JSON
response_payload = json.dumps({"action": action,
"action_prob": action_prob,
"event_id": event_id,
"timestamp": timestamp,
"sample_prob": sample_prob,
"model_id": ScoringService._model_id})
else:
# convert to CSV
response_payload = ",".join([
str(x) for x in
[action, action_prob, event_id, timestamp, sample_prob, ScoringService._model_id]
])
blob_to_log = json.dumps({"action": action,
"action_prob": action_prob,
"event_id": event_id,
"observation": observation,
"timestamp": timestamp,
"model_id": ScoringService._model_id,
"sample_prob": sample_prob,
"type": "actions"})
if ScoringService.LOG_INFERENCE_DATA:
# TODO: Log state, action, eventID
ScoringService._redis_client.publish(REDIS_PUBLISHER_CHANNEL, blob_to_log)
return response_payload