/// <inheritdoc />
 protected override ClarifaiOutput <T> Unmarshaller(dynamic jsonObject)
 {
     if (jsonObject.outputs != null && jsonObject.outputs.Count == 1)
     {
         var jsonOutput = jsonObject.outputs[0];
         return(ClarifaiOutput <T> .Deserialize(HttpClient, jsonOutput));
     }
     throw new ClarifaiException("The response does not contain exactly one output.");
 }
 /// <inheritdoc />
 protected override ClarifaiOutput <T> Unmarshaller(dynamic jsonObject)
 {
     if (jsonObject.outputs != null && jsonObject.outputs.Count == 1)
     {
         var jsonOutput = jsonObject.outputs[0];
         return(ClarifaiOutput <T> .Deserialize(jsonOutput));
     }
     throw new ClarifaiException("A single output is not present in the API");
 }
Exemple #3
0
        /// <inheritdoc />
        protected override List <ClarifaiOutput <T> > Unmarshaller(dynamic jsonObject)
        {
            var outputs = new List <ClarifaiOutput <T> >();

            foreach (var jsonOutput in jsonObject.outputs)
            {
                outputs.Add(ClarifaiOutput <T> .Deserialize(HttpClient, jsonOutput));
            }
            return(outputs);
        }
Exemple #4
0
        /// <summary>
        /// Deserializes the object out of a JSON dynamic object.
        /// </summary>
        /// <param name="httpClient">the HTTP client</param>
        /// <param name="jsonObject">the JSON object</param>
        /// <returns>the deserialized object</returns>
        public static WorkflowResult Deserialize(IClarifaiHttpClient httpClient, dynamic jsonObject)
        {
            var status = ClarifaiStatus.Deserialize(jsonObject.status);
            var input  = ClarifaiInput.Deserialize(jsonObject.input);

            var predictions = new List <ClarifaiOutput>();

            foreach (dynamic output in jsonObject.outputs)
            {
                dynamic   model     = output.model;
                ModelType modelType = ModelType.DetermineModelType(
                    (string)model.output_info.type_ext);

                predictions.Add(ClarifaiOutput.Deserialize(httpClient, modelType, output));
            }

            return(new WorkflowResult(status, input, predictions));
        }
        public async Task ConceptPredictRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""outputs"": [{
        ""id"": ""@outputID"",
        ""status"": {
            ""code"": 10000,
            ""description"": ""Ok""
        },
        ""created_at"": ""2017-11-17T19:32:58.760477937Z"",
        ""model"": {
            ""id"": ""@modelID"",
            ""name"": ""@modelName"",
            ""created_at"": ""2016-03-09T17:11:39.608845Z"",
            ""app_id"": ""main"",
            ""output_info"": {
                ""message"": ""Show output_info with: GET /models/{model_id}/output_info"",
                ""type"": ""concept"",
                ""type_ext"": ""concept""
            },
            ""model_version"": {
                ""id"": ""@modelVersionID"",
                ""created_at"": ""2016-07-13T01:19:12.147644Z"",
                ""status"": {
                    ""code"": 21100,
                    ""description"": ""Model trained successfully""
                }
            },
            ""display_name"": ""@modelDisplayName""
        },
        ""input"": {
            ""id"": ""@inputID"",
            ""data"": {
                ""image"": {
                    ""url"": ""@imageUrl""
                }
            }
        },
        ""data"": {
            ""concepts"": [{
                ""id"": ""@conceptID1"",
                ""name"": ""@conceptName1"",
                ""value"": 0.99,
                ""app_id"": ""main""
            }, {
                ""id"": ""@conceptID2"",
                ""name"": ""@conceptName2"",
                ""value"": 0.98,
                ""app_id"": ""main""
            }]
        }
    }]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.Predict <Concept>(
                "", new ClarifaiURLImage("@url"))
                           .ExecuteAsync();

            ClarifaiOutput <Concept> output = response.Get();

            var expectedRequestBody = JObject.Parse(@"
{
  ""inputs"": [
    {
      ""id"": null,
      ""data"": {
        ""image"": {
          ""url"": ""@url""
        }
      }
    }
  ]
}
");

            Assert.True(JToken.DeepEquals(expectedRequestBody, httpClient.PostedBody));

            Assert.True(response.IsSuccessful);

            Assert.AreEqual("@inputID", output.Input.ID);

            Assert.AreEqual("@outputID", output.ID);
            Assert.AreEqual("@conceptID1", output.Data[0].ID);
        }
        public async Task WorkflowPredictRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
  ""status"": {
    ""code"": 10000,
    ""description"": ""Ok""
  },
  ""workflow"": {
    ""id"": ""@workflowID"",
    ""app_id"": ""@appID"",
    ""created_at"": ""2017-07-10T01:45:05.672880Z""
  },
  ""results"": [
    {
      ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
      },
      ""input"": {
        ""id"": ""@inputID"",
        ""data"": {
          ""image"": {
            ""url"": ""@inputURL""
          }
        }
      },
      ""outputs"": [
        {
          ""id"": ""@outputID1"",
          ""status"": {
            ""code"": 10000,
            ""description"": ""Ok""
          },
          ""created_at"": ""2017-07-10T12:01:44.929928529Z"",
          ""model"": {
            ""id"": ""d16f390eb32cad478c7ae150069bd2c6"",
            ""name"": ""moderation"",
            ""created_at"": ""2017-05-12T21:28:00.471607Z"",
            ""app_id"": ""main"",
            ""output_info"": {
              ""message"": ""Show output_info with: GET /models/{model_id}/output_info"",
              ""type"": ""concept"",
              ""type_ext"": ""concept""
            },
            ""model_version"": {
              ""id"": ""b42ac907ac93483484483a0040a386be"",
              ""created_at"": ""2017-05-12T21:28:00.471607Z"",
              ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
              }
            }
          },
          ""data"": {
            ""concepts"": [
              {
                ""id"": ""@conceptID11"",
                ""name"": ""safe"",
                ""value"": 0.99999714,
                ""app_id"": ""main""
              }
            ]
          }
        },
        {
          ""id"": ""@outputID2"",
          ""status"": {
            ""code"": 10000,
            ""description"": ""Ok""
          },
          ""created_at"": ""2017-07-10T12:01:44.929941126Z"",
          ""model"": {
            ""id"": ""aaa03c23b3724a16a56b629203edc62c"",
            ""name"": ""general-v1.3"",
            ""created_at"": ""2016-02-26T23:38:40.086101Z"",
            ""app_id"": ""main"",
            ""output_info"": {
              ""message"": ""Show output_info with: GET /models/{model_id}/output_info"",
              ""type"": ""concept"",
              ""type_ext"": ""concept""
            },
            ""model_version"": {
              ""id"": ""aa9ca48295b37401f8af92ad1af0d91d"",
              ""created_at"": ""2016-07-13T00:58:55.915745Z"",
              ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
              }
            }
          },
          ""data"": {
            ""concepts"": [
              {
                ""id"": ""@conceptID21"",
                ""name"": ""train"",
                ""value"": 0.9989112,
                ""app_id"": ""main""
              },
              {
                ""id"": ""@conceptID22"",
                ""name"": ""railway"",
                ""value"": 0.9975532,
                ""app_id"": ""main""
              }
            ]
          }
        }
      ]
    }
  ]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.WorkflowPredict(
                "", new ClarifaiURLImage("@url"))
                           .ExecuteAsync();

            var workflow = response.Get();

            var expectedRequestBody = JObject.Parse(@"
{
  ""inputs"": [
    {
      ""id"": null,
      ""data"": {
        ""image"": {
          ""url"": ""@url""
        }
      }
    }
  ]
}
");

            Assert.True(JToken.DeepEquals(expectedRequestBody, httpClient.PostedBody));

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("@workflowID", workflow.Workflow.ID);
            Assert.AreEqual("@appID", workflow.Workflow.AppID);

            WorkflowResult results = workflow.WorkflowResult;

            Assert.AreEqual("@inputID", results.Input.ID);

            ClarifaiOutput output1 = results.Predictions[0];

            Assert.AreEqual("@outputID1", output1.ID);
            Assert.AreEqual("@conceptID11", ((Concept)output1.Data[0]).ID);

            ClarifaiOutput output2 = results.Predictions[1];

            Assert.AreEqual("@outputID2", output2.ID);
            Assert.AreEqual("@conceptID21", ((Concept)output2.Data[0]).ID);
            Assert.AreEqual("@conceptID22", ((Concept)output2.Data[1]).ID);
        }