public async Task GetConceptResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""concept"": {
        ""id"": ""@conceptID"",
        ""name"": ""@conceptName"",
        ""created_at"": ""2017-10-02T11:34:20.419915Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.GetConcept("").ExecuteAsync();

            Assert.True(response.IsSuccessful);

            Concept concept = response.Get();

            Assert.AreEqual("@conceptID", concept.ID);
            Assert.AreEqual("@conceptName", concept.Name);
            Assert.AreEqual("@appID", concept.AppID);
        }
示例#2
0
        public async Task GetModelVersionResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""model_version"": {
        ""id"": ""@versionID"",
        ""created_at"": ""2017-01-01T00:00:00.000000Z"",
        ""status"": {
            ""code"": 21100,
            ""description"": ""Model trained successfully""
        },
        ""active_concept_count"": 2,
        ""metrics"": {
            ""status"": {
                ""code"": 21303,
                ""description"": ""@modelDESCRIPTION""
            }
        },
        ""total_input_count"": 30
    }
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <ModelVersion> response = await client.GetModelVersion("@modelID", "@versionID").ExecuteAsync();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(response.Get().ID, "@versionID");
            Assert.AreEqual(response.Get().ActiveConceptCount, 2);
            Assert.AreEqual(response.Get().ModelMetricsStatus.Description, "@modelDESCRIPTION");
        }
        public async Task GetInputsStatusResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
  ""status"": {
    ""code"": 10000,
    ""description"": ""Ok""
  },
  ""counts"": {
    ""processed"": 1,
    ""to_process"": 2,
    ""errors"": 3,
    ""processing"": 4,
    ""reindexed"": 5,
    ""to_reindex"": 6,
    ""reindex_errors"": 7,
    ""reindexing"": 8
  }
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <ClarifaiInputsStatus> response = await client.GetInputsStatus().ExecuteAsync();

            var status = (ClarifaiInputsStatus)response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(status.Processed, 1);
            Assert.AreEqual(status.ToProcess, 2);
            Assert.AreEqual(status.Errors, 3);
            Assert.AreEqual(status.Processing, 4);
        }
示例#4
0
        public async Task SearchesFeedbackRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"{""status"":{""code"":10000,""description"":""Ok""}}");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <EmptyResponse> response = await client.SearchesFeedback(
                "@inputID", "@searchID", "@endUserID", "@sessionID"
                ).ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
    ""input"": {
        ""id"": ""@inputID"",
        ""feedback_info"": {
            ""event_type"":   ""search_click"",
            ""search_id"":    ""@searchID"",
            ""end_user_id"":  ""@endUserID"",
            ""session_id"":   ""@sessionID""
        }
    }
}
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);
        }
        public async Task ModifyConceptRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                patchResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""concepts"": [{
        ""id"": ""@positiveConcept1"",
        ""name"": ""@positiveConceptName1"",
        ""created_at"": ""2017-10-15T16:28:28.901994Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }, {
        ""id"": ""@positiveConcept2"",
        ""created_at"": ""2017-10-15T16:26:46.667104Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <List <Concept> > response = await client.ModifyConcepts(
                new  List <Concept>
            {
                new Concept("@positiveConcept1", "@positiveConceptName1"),
                new Concept("@positiveConcept2")
            }
                ).ExecuteAsync();


            var expectedRequestBody = JObject.Parse(@"
{
    ""action"": ""overwrite"",
    ""concepts"": [
       {
        ""id"": ""@positiveConcept1"",
        ""name"": ""@positiveConceptName1""
       },
       {
        ""id"": ""@positiveConcept2"",
        ""name"": null
       }
    ]    
} 
");


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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            Assert.AreEqual(response.Get()[0].ID, "@positiveConcept1");
            Assert.AreEqual(response.Get()[0].Name, "@positiveConceptName1");
            Assert.AreEqual(response.Get()[1].ID, "@positiveConcept2");
        }
示例#6
0
        public async Task TrainModelRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {

        ""code"": 10000,
        ""description"": ""Ok""

    },
    ""model"": {
        ""id"": ""some-model-id"",
        ""name"": ""some-model-name"",
        ""created_at"": ""2017-05-16T19:20:38.733764Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""data"": {
                ""concepts"": [{
                    ""id"": ""some-concept-id"",
                    ""name"": ""safe"",
                    ""created_at"": ""2017-05-16T19:20:38.450157Z"",
                    ""language"": ""en"",
                    ""app_id"": ""main""
                }]
            },
            ""type"": ""concept"",
            ""type_ext"": ""concept""
        },
        ""model_version"": {
            ""id"": ""some-model-version-id"",
            ""created_at"": ""2017-05-16T19:20:38.733764Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            },
            ""active_concept_count"": 5
        },
        ""display_name"": ""Moderation""
    }
}
");

            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <IModel <Concept> > response = await client.TrainModel <Concept>("some-model-id").ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{}
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);
            Assert.AreEqual(response.Get().Name, "some-model-name");
            Assert.AreEqual(response.Get().ModelID, "some-model-id");
            Assert.AreEqual(response.Get().ModelVersion.ID, "some-model-version-id");
        }
示例#7
0
        public async Task DeleteModelResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                deleteResponse: @"{""status"":{""code"":10000,""description"":""Ok""}}");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <EmptyResponse> response = await client.DeleteModel("@modelID").ExecuteAsync();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);
        }
示例#8
0
        public async Task GetModelResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {

        ""code"": 10000,
        ""description"": ""Ok""

    },
    ""model"": {
        ""id"": ""some-model-id"",
        ""name"": ""some-model-name"",
        ""created_at"": ""2017-05-16T19:20:38.733764Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""data"": {
                ""concepts"": [{
                    ""id"": ""some-concept-id"",
                    ""name"": ""safe"",
                    ""created_at"": ""2017-05-16T19:20:38.450157Z"",
                    ""language"": ""en"",
                    ""app_id"": ""main""
                }]
            },
            ""type"": ""concept"",
            ""type_ext"": ""concept""
        },
        ""model_version"": {
            ""id"": ""some-model-version-id"",
            ""created_at"": ""2017-05-16T19:20:38.733764Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            },
            ""active_concept_count"": 5
        },
        ""display_name"": ""Moderation""
    }
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.GetModel <Concept>("").ExecuteAsync();

            var model = (ConceptModel)response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("some-model-id", model.ModelID);
            Assert.AreEqual("some-model-name", model.Name);
            Assert.AreEqual("some-concept-id", model.OutputInfo.Concepts.First().ID);
            Assert.AreEqual("some-model-version-id", model.ModelVersion.ID);
        }
示例#9
0
        public async Task SearchModelsByNameAndTypeRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""models"": [{
        ""id"": ""@modelID"",
        ""name"": ""color"",
        ""created_at"": ""2017-03-06T22:57:00.660603Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""message"": ""Show output_info with: GET /models/{model_id}/output_info"",
            ""type"": ""color"",
            ""type_ext"": ""color""
        },
        ""model_version"": {
            ""id"": ""@modelVersionID"",
            ""created_at"": ""2017-03-06T22:57:00.684652Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            }
        },
        ""display_name"": ""Color""
    }]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.SearchModels("*", ModelType.Color).ExecuteAsync();


            var expectedRequestBody = JObject.Parse(@"
{
    ""model_query"": {
      ""name"": ""*"",
      ""type"": ""color""
    }
}
");

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

            List <IModel> models = response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(1, models.Count);
            Assert.AreEqual("@modelID", models[0].ModelID);
            Assert.AreEqual("@modelVersionID", models[0].ModelVersion.ID);
        }
        public async Task SearchModelsByNameRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""models"": [{
        ""id"": ""@modelID"",
        ""name"": ""celeb-v1.3"",
        ""created_at"": ""2016-10-25T19:30:38.541073Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""message"": ""Show output_info with: GET /models/{model_id}/output_info"",
            ""type"": ""concept"",
            ""type_ext"": ""facedetect-identity""
        },
        ""model_version"": {
            ""id"": ""@modelVersionID"",
            ""created_at"": ""2016-10-25T19:30:38.541073Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            },
            ""active_concept_count"": 10554
        },
        ""display_name"": ""Celebrity""
    }]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.SearchModels("celeb*").ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
    ""model_query"": {
      ""name"": ""celeb*""
    }
}
");

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

            List <IModel> models = response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(1, models.Count);
            Assert.AreEqual("@modelID", models[0].ModelID);
            Assert.AreEqual("@modelVersionID", models[0].ModelVersion.ID);
        }
示例#11
0
        public async Task GetInputResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""input"": {
        ""id"": ""@inputID"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL""
            },
            ""concepts"": [
                {
                  ""id"": ""@positiveConcept"",
                  ""value"": 1
                },
                {
                  ""id"": ""@negativeConcept1"",
                  ""value"": 0
                },
                {
                  ""id"": ""@negativeConcept2"",
                  ""value"": 0
                }
            ]
        },
        ""created_at"": ""2017-10-13T20:53:00.253139Z"",
        ""modified_at"": ""2017-10-13T20:53:00.868659782Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    }
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <IClarifaiInput> response = await client.GetInput("@inputID").ExecuteAsync();

            var input = (ClarifaiURLImage)response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(input.ID, "@inputID");
            Assert.AreEqual(input.URL, "@imageURL");
            Assert.AreEqual(input.PositiveConcepts.ElementAt(0).ID, "@positiveConcept");
            Assert.AreEqual(input.NegativeConcepts.ElementAt(0).ID, "@negativeConcept1");
            Assert.AreEqual(input.NegativeConcepts.ElementAt(1).ID, "@negativeConcept2");
        }
示例#12
0
        public async Task ModelFeedbackRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"{""status"":{""code"":10000,""description"":""Ok""}}");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <EmptyResponse> response = await client.ModelFeedback(
                "@modelID", "@imageURL", "@inputID", "@outputID", "@endUserID", "@sessionID",
                new List <ConceptFeedback>
            {
                new ConceptFeedback("dog", true),
                new ConceptFeedback("cat", false)
            }).ExecuteAsync();


            var expectedRequestBody = JObject.Parse(@"
{
    ""input"": {
        ""id"": ""@inputID"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL""
            },
            ""concepts"": [
            {
                ""id"": ""dog"",
                ""value"": true
            },
            {
                ""id"": ""cat"",
                ""value"": false
            }
            ]
        },
        ""feedback_info"": {
            ""event_type"": ""annotation"",
            ""output_id"": ""@outputID"",
            ""end_user_id"": ""@endUserID"",
            ""session_id"": ""@sessionID""
        }
    }
}
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);
        }
        public async Task ModelEvaluationResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""model_version"": {
        ""id"": ""@versionID"",
        ""created_at"": ""2017-01-01T00:00:00.000000Z"",
        ""status"": {
            ""code"": 21100,
            ""description"": ""Model trained successfully""
        },
        ""active_concept_count"": 2,
        ""metrics"": {
            ""status"": {
                ""code"": 21303,
                ""description"": ""Model is queued for evaluation.""
            }
        },
        ""total_input_count"": 30
    }
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <ModelVersion> response = await client.ModelEvaluation(
                "", "").ExecuteAsync();


            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            ModelVersion modelVersion = response.Get();

            Assert.AreEqual("@versionID", modelVersion.ID);
            Assert.AreEqual(21100, modelVersion.Status.StatusCode);
            Assert.AreEqual("Model trained successfully", modelVersion.Status.Description);
            Assert.AreEqual(21303, modelVersion.ModelMetricsStatus.StatusCode);
            Assert.AreEqual("Model is queued for evaluation.",
                            modelVersion.ModelMetricsStatus.Description);
            Assert.AreEqual(2, modelVersion.ActiveConceptCount);
            Assert.AreEqual(30, modelVersion.TotalInputCount);
        }
        public async Task GetConceptsResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""concepts"": [{
        ""id"": ""@conceptID1"",
        ""name"": ""@conceptName1"",
        ""created_at"": ""2017-10-15T16:28:28.901994Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }, {
        ""id"": ""@conceptID2"",
        ""name"": ""@conceptName2"",
        ""created_at"": ""2017-10-15T16:26:46.667104Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.GetConcepts().ExecuteAsync();

            Assert.True(response.IsSuccessful);

            List <Concept> concepts = response.Get();

            Assert.AreEqual(2, concepts.Count);

            Concept concept1 = concepts[0];
            Concept concept2 = concepts[1];

            Assert.AreEqual("@conceptID1", concept1.ID);
            Assert.AreEqual("@conceptName1", concept1.Name);
            Assert.AreEqual("@appID", concept1.AppID);

            Assert.AreEqual("@conceptID2", concept2.ID);
            Assert.AreEqual("@conceptName2", concept2.Name);
            Assert.AreEqual("@appID", concept2.AppID);
        }
        public async Task SearchConceptsRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""concepts"": [{
        ""id"": ""@positiveConcept1"",
        ""name"": ""@positiveConceptName1"",
        ""created_at"": ""2017-10-15T16:28:28.901994Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }, {
        ""id"": ""@positiveConcept2"",
        ""created_at"": ""2017-10-15T16:26:46.667104Z"",
        ""language"": ""en"",
        ""app_id"": ""@appID""
    }]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.SearchConcepts("positives", "en").ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
    ""concept_query"": {
      ""name"": ""positives"",
      ""language"": ""en""
    }
}
");

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

            Assert.True(response.IsSuccessful);

            Assert.AreEqual(response.Get()[0].ID, "@positiveConcept1");
            Assert.AreEqual(response.Get()[0].Name, "@positiveConceptName1");
            Assert.AreEqual(response.Get()[1].ID, "@positiveConcept2");
        }
示例#16
0
        public async Task GetModelInputsResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""inputs"": [{
        ""id"": ""@inputID"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL""
            },
            ""concepts"": [{
                ""id"": ""@conceptID"",
                ""name"": ""@conceptName"",
                ""value"": 1,
                ""app_id"": ""@conceptAppID""
            }]
        },
        ""created_at"": ""2017-10-15T16:30:52.964888Z"",
        ""status"": {
            ""code"": 30000,
            ""description"": ""Download complete""
        }
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <List <IClarifaiInput> > response = await client.GetModelInputs(
                "", "").ExecuteAsync();


            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            IClarifaiInput input = response.Get()[0];

            Assert.AreEqual("@inputID", input.ID);
            Assert.AreEqual("@conceptID", input.PositiveConcepts.First().ID);
        }
示例#17
0
        public async Task InvalidJsonShouldReturnNetworkErrorResponse()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {

        ""code"": 10000,
        ""description"": ""Ok""

    },
    ""model"": {
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.GetModel <Concept>("").ExecuteAsync();

            Assert.False(response.IsSuccessful);
            Assert.AreEqual(ClarifaiStatus.StatusType.NetworkError, response.Status.Type);
            Assert.NotNull(response.Status.Description);
            Assert.NotNull(response.Status.ErrorDetails);
        }
示例#18
0
        public async Task SearchInputWithByImageVisuallyPaginationRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
  ""status"": {
    ""code"": 10000,
    ""description"": ""Ok"",
    ""req_id"": ""@requestID""
  },
  ""id"": ""@ID"",
  ""hits"": [
      {
        ""score"": 0.60579073,
        ""input"": {
          ""id"": ""@inputID"",
          ""data"": {
            ""image"": {
              ""url"": ""@found-url""
            },
            ""concepts"": [
            {
              ""id"": ""wedding"",
              ""name"": ""wedding"",
              ""value"": 1,
              ""app_id"": ""@appID""
            }
            ]
          },
          ""created_at"": ""2019-05-24T10:45:35.225638Z"",
          ""modified_at"": ""2019-05-24T10:45:35.809871Z"",
          ""status"": {
            ""code"": 30000,
            ""description"": ""Download complete""
          }
        }
      },
    ],
    ""query"": {
      ""ands"": [
      {
        ""output"": {
          ""input"": {
            ""data"": {
              ""image"": {
                ""url"": ""@input-url""
              }
            }
          }
        }
      }
      ]
    }
  }
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.SearchInputs(SearchBy.ImageVisually(
                                                         new ClarifaiURLImage(url: "@input-url")
                                                         ))
                           .Page(5)
                           .PerPage(2)
                           .ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
  ""query"": {
    ""ands"": [
      {
        ""output"": {
          ""input"": {
            ""data"": {
              ""image"": {
                ""url"": ""@input-url""
              }
            }
          }
        }
      }
    ]
  },
  ""pagination"": {
    ""page"": 5,
    ""per_page"": 2
  }
}
");

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

            List <SearchHit> searchHits = response.Get().SearchHits;

            Assert.AreEqual(1, searchHits.Count);

            IClarifaiInput input = searchHits[0].Input;

            Assert.AreEqual(InputType.Image, input.Type);
            Assert.AreEqual(InputForm.URL, input.Form);

            ClarifaiURLImage image = (ClarifaiURLImage)input;

            Assert.AreEqual("@found-url", image.URL);
        }
示例#19
0
        public async Task ModifyInputRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                patchResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""inputs"": [{
        ""id"": ""@inputID"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL""
            },
            ""concepts"": [
                {
                  ""id"": ""@positiveConcept1"",
                  ""name"": ""@positiveConceptName1"",
                  ""value"": 1
                },
                {
                  ""id"": ""@positiveConcept2"",
                  ""value"": 1
                },
                {
                  ""id"": ""@negativeConcept1"",
                  ""name"": ""@negativeConceptName1"",
                  ""value"": 0
                },
                {
                  ""id"": ""@negativeConcept2"",
                  ""value"": 0
                }
            ]
        },
        ""created_at"": ""2017-10-13T20:53:00.253139Z"",
        ""modified_at"": ""2017-10-13T20:53:00.868659782Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <IClarifaiInput> response = await client.ModifyInput(
                "@inputID", ModifyAction.Merge,
                positiveConcepts : new List <Concept>
            {
                new Concept("@positiveConcept1", "@positiveConceptName1"),
                new Concept("@positiveConcept2")
            },
                negativeConcepts : new List <Concept>
            {
                new Concept("@negativeConcept1", "@negativeConceptName1"),
                new Concept("@negativeConcept2")
            }
                ).ExecuteAsync();


            var expectedRequestBody = JObject.Parse(@"
{
    ""inputs"": [
      {
        ""id"": ""@inputID"",
        ""data"": {
          ""concepts"": [
            {
              ""id"": ""@positiveConcept1"",
              ""name"": ""@positiveConceptName1"",
              ""value"": true
            },
            {
              ""id"": ""@positiveConcept2"",
              ""value"": true
            },
            {
              ""id"": ""@negativeConcept1"",
              ""name"": ""@negativeConceptName1"",
              ""value"": false
            },
            {
              ""id"": ""@negativeConcept2"",
              ""value"": false
            },
          ]
        }
      }
    ],
    ""action"":""merge""
}
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            List <string> posConcepts = response.Get().PositiveConcepts.Select(c => c.ID).ToList();
            List <string> negConcepts = response.Get().NegativeConcepts.Select(c => c.ID).ToList();

            CollectionAssert.AreEqual(
                new List <string> {
                "@positiveConcept1", "@positiveConcept2"
            },
                posConcepts);
            CollectionAssert.AreEqual(
                new List <string> {
                "@negativeConcept1", "@negativeConcept2"
            },
                negConcepts);
        }
示例#20
0
        public async Task ModifyInputMetadataRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                patchResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""inputs"": [{
        ""id"": ""@inputID"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL""
            },
            ""concepts"": [{
                ""id"": ""concept1"",
                ""name"": ""concept1"",
                ""value"": 1,
                ""app_id"": ""@appID""
            }],
            ""metadata"": {
                ""@key1"": ""@value1"",
                ""@key2"": ""@value2""
            }
        },
        ""created_at"": ""2017-11-02T15:08:22.005157Z"",
        ""modified_at"": ""2017-11-02T15:08:23.071624222Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <IClarifaiInput> response = await client.ModifyInputMetadata(
                "@inputID",
                new JObject(
                    new JProperty("@key1", "@value1"),
                    new JProperty("@key2", "@value2"))
                ).ExecuteAsync();


            var expectedRequestBody = JObject.Parse(@"
{
    ""inputs"": [
      {
        ""id"": ""@inputID"",
        ""data"": {
          ""metadata"": {
            ""@key1"": ""@value1"",
            ""@key2"": ""@value2""
          }
        }
      }
    ],
    ""action"":""overwrite""
}
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            JObject metadata = response.Get().Metadata;

            Assert.AreEqual(2, metadata.Count);
            Assert.AreEqual("@value1", metadata["@key1"].Value <string>());
            Assert.AreEqual("@value2", metadata["@key2"].Value <string>());
        }
        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);
        }
示例#22
0
        public async Task GetModelsResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {

        ""code"": 10000,
        ""description"": ""Ok""

    },
    ""models"": [{
        ""id"": ""model-id1"",
        ""name"": ""model-name1"",
        ""created_at"": ""2017-05-16T19:20:38.733764Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""data"": {
                ""concepts"": [{
                    ""id"": ""concept-id1"",
                    ""name"": ""concept-name1"",
                    ""created_at"": ""2017-05-16T19:20:38.450157Z"",
                    ""language"": ""en"",
                    ""app_id"": ""main""
                }]
            },
            ""type"": ""concept"",
            ""type_ext"": ""concept""
        },
        ""model_version"": {
            ""id"": ""some-model-version-id"",
            ""created_at"": ""2017-05-16T19:20:38.733764Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            },
            ""active_concept_count"": 5
        },
        ""display_name"": ""Moderation""
    },
    {
        ""id"": ""model-id2"",
        ""name"": ""model-name2"",
        ""created_at"": ""2017-05-16T19:20:38.733764Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""data"": {
                ""concepts"": [{
                    ""id"": ""concept-id2"",
                    ""name"": ""concept-name2"",
                    ""created_at"": ""2017-05-16T19:20:38.450157Z"",
                    ""language"": ""en"",
                    ""app_id"": ""main""
                }]
            },
            ""type"": ""concept"",
            ""type_ext"": ""concept""
        },
        ""model_version"": {
            ""id"": ""some-model-version-id"",
            ""created_at"": ""2017-05-16T19:20:38.733764Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            },
            ""active_concept_count"": 5
        },
        ""display_name"": ""Moderation"" 
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <List <IModel> > response = await client.GetModels().ExecuteAsync();

            var models = (List <IModel>)response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(models[0].ModelID, "model-id1");
            Assert.AreEqual(models[0].Name, "model-name1");
            Assert.AreEqual(models[0].ModelVersion.ID, "some-model-version-id");
            Assert.AreEqual(models[1].ModelID, "model-id2");
            Assert.AreEqual(models[1].AppID, "main");
            Assert.AreEqual(models[1].OutputInfo.Type, "concept");
        }
示例#23
0
        public async Task GetInputsResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                getResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""inputs"": [{
        ""id"": ""@inputID1"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL1""
            },
            ""concepts"": [
                {
                  ""id"": ""@positiveConcept"",
                  ""value"": 1
                },
                {
                  ""id"": ""@negativeConcept"",
                  ""value"": 0
                }
            ]
        },
        ""created_at"": ""2017-10-13T20:53:00.253139Z"",
        ""modified_at"": ""2017-10-13T20:53:00.868659782Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    },
    {
        ""id"": ""@inputID2"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL2""
            },
            ""geo"": {
                ""geo_point"": {
                    ""longitude"": 55,
                    ""latitude"": 66
                }
            }
        },
        ""created_at"": ""2017-10-13T20:53:00.253139Z"",
        ""modified_at"": ""2017-10-13T20:53:00.868659782Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <List <IClarifaiInput> > response = await client.GetInputs().ExecuteAsync();

            var inputs = (List <IClarifaiInput>)response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(inputs[0].ID, "@inputID1");
            Assert.AreEqual(inputs[0].PositiveConcepts.ElementAt(0).ID, "@positiveConcept");
            Assert.AreEqual(inputs[0].NegativeConcepts.ElementAt(0).ID, "@negativeConcept");
            Assert.AreEqual(inputs[1].ID, "@inputID2");
            Assert.AreEqual(inputs[1].Geo.Longitude, 55);
            Assert.AreEqual(inputs[1].Geo.Latitude, 66);
        }
示例#24
0
        public async Task CreateGenericModelRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {

        ""code"": 10000,
        ""description"": ""Ok""

    },
    ""model"": {
        ""id"": ""some-model-id"",
        ""name"": ""some-model-name"",
        ""created_at"": ""2017-05-16T19:20:38.733764Z"",
        ""app_id"": ""main"",
        ""output_info"": {
            ""data"": {
                ""concepts"": [{
                    ""id"": ""some-concept-id"",
                    ""name"": ""safe"",
                    ""created_at"": ""2017-05-16T19:20:38.450157Z"",
                    ""language"": ""en"",
                    ""app_id"": ""main""
                }]
            },
            ""type"": ""concept"",
            ""type_ext"": ""concept""
        },
        ""model_version"": {
            ""id"": ""some-model-version-id"",
            ""created_at"": ""2017-05-16T19:20:38.733764Z"",
            ""status"": {
                ""code"": 21100,
                ""description"": ""Model trained successfully""
            },
            ""active_concept_count"": 5
        },
        ""display_name"": ""Moderation""
    }
}
");

            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <IModel <Concept> > response = await client.CreateModelGeneric <Concept>(
                modelID : "@newmodelID",
                name : "@newModelName",
                outputInfo : new ConceptOutputInfo(new List <Concept> {
                new Concept("@conceptID1")
            })
                ).ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
    ""model"":
      {
        ""id"": ""@newmodelID"",
        ""name"": ""@newModelName"",
        ""output_info"": {
            ""output_config"": {
                ""concepts_mutually_exclusive"": false,
                ""closed_environment"": false
            },
          ""data"": {
            ""concepts"": [
              {
                ""id"": ""@conceptID1""
              }
            ]
          }
        }
      }
  }
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);
            Assert.AreEqual(response.Get().Name, "some-model-name");
            Assert.AreEqual(response.Get().ModelID, "some-model-id");
            Assert.AreEqual(response.Get().ModelVersion.ID, "some-model-version-id");
        }
        public async Task SearchInputsByNameRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
  ""status"": {
    ""code"": 10000,
    ""description"": ""Ok""
  },
  ""hits"": [
    {
      ""score"": 0.99,
      ""input"": {
        ""id"": ""@inputID"",
        ""created_at"": ""2016-11-22T17:06:02Z"",
        ""data"": {
          ""image"": {
            ""url"": ""@inputURL""
          }
        },
        ""status"": {
          ""code"": 30000,
          ""description"": ""Download complete""
        }
      }
    }
  ]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.SearchInputs(SearchBy.ConceptName("@conceptName"))
                           .ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
  ""query"": {
    ""ands"": [
      {
        ""output"": {
          ""data"": {
            ""concepts"": [
              {
                ""name"": ""@conceptName""
              }
            ]
          }
        }
      }
    ]
  }
}
");

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

            List <SearchHit> searchHits = response.Get().SearchHits;

            Assert.AreEqual(1, searchHits.Count);
            Assert.AreEqual("@inputID", searchHits[0].Input.ID);

            IClarifaiInput input = searchHits[0].Input;

            Assert.AreEqual(InputType.Image, input.Type);
            Assert.AreEqual(InputForm.URL, input.Form);

            ClarifaiURLImage image = (ClarifaiURLImage)input;

            Assert.AreEqual("@inputURL", image.URL);
        }
        public async Task SearchInputsByGeoLocationRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
  ""status"": {
    ""code"": 10000,
    ""description"": ""Ok""
  },
  ""hits"": [
    {
      ""score"": 0.99,
      ""input"": {
        ""id"": ""@inputID"",
        ""created_at"": ""2016-11-22T17:06:02Z"",
        ""data"": {
          ""image"": {
            ""url"": ""@inputURL""
          }
        },
        ""status"": {
          ""code"": 30000,
          ""description"": ""Download complete""
        }
      }
    }
  ]
}
");

            var client   = new ClarifaiClient(httpClient);
            var response = await client.SearchInputs(SearchBy.Geo(new GeoPoint(1.5M, -1),
                                                                  new GeoRadius(1, GeoRadius.RadiusUnit.WithinKilometers)))
                           .ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
  ""query"": {
    ""ands"": [
      {
        ""input"": {
          ""data"": {
            ""geo"": {
              ""geo_point"": {
                ""longitude"": 1.5,
                ""latitude"": -1.0
              },
              ""geo_limit"": {
                ""type"": ""withinKilometers"",
                ""value"": 1.0
              }
            }
          }
        }
      }
    ]
  }
}");

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

            List <SearchHit> searchHits = response.Get().SearchHits;

            Assert.AreEqual(1, searchHits.Count);
            Assert.AreEqual("@inputID", searchHits[0].Input.ID);

            IClarifaiInput input = searchHits[0].Input;

            Assert.AreEqual(InputType.Image, input.Type);
            Assert.AreEqual(InputForm.URL, input.Form);

            ClarifaiURLImage image = (ClarifaiURLImage)input;

            Assert.AreEqual("@inputURL", image.URL);
        }
        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);
        }
示例#28
0
        public async Task AddInputsResponseAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                postResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""inputs"": [{
        ""id"": ""@inputID1"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL1""
            },
            ""concepts"": [
                {
                  ""id"": ""@positiveConcept"",
                  ""value"": 1
                },
                {
                  ""id"": ""@negativeConcept"",
                  ""value"": 0
                }
            ]
        },
        ""created_at"": ""2017-10-13T20:53:00.253139Z"",
        ""modified_at"": ""2017-10-13T20:53:00.868659782Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    },
    {
        ""id"": ""@inputID2"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL2""
            },
            ""geo"": {
                ""geo_point"": {
                    ""longitude"": 55,
                    ""latitude"": 66
                }
            }
        },
        ""created_at"": ""2017-10-13T20:53:00.253139Z"",
        ""modified_at"": ""2017-10-13T20:53:00.868659782Z"",
        ""status"": {
            ""code"": 30200,
            ""description"": ""Input image modification success""
        }
    }]
}
");
            var client = new ClarifaiClient(httpClient);
            ClarifaiResponse <List <IClarifaiInput> > response = await client.AddInputs(
                new  IClarifaiInput[]
            {
                new ClarifaiURLImage("@imageURL1", "@inputID1",
                                     positiveConcepts: new List <Concept> {
                    new Concept("@positiveConcept")
                },
                                     negativeConcepts: new List <Concept> {
                    new Concept("@negativeConcept")
                }),
                new ClarifaiURLImage("@imageURL2", "@inputID2",
                                     geo: new DTOs.GeoPoint(55, 66))
            }
                ).ExecuteAsync();


            var expectedRequestBody = JObject.Parse(@"
{
    ""inputs"": [
      {
        ""id"": ""@inputID1"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL1""
            },
            ""concepts"": [
                {
                  ""id"": ""@positiveConcept"",
                  ""value"": true
                },
                {
                  ""id"": ""@negativeConcept"",
                  ""value"": false
                }
            ]
        }
      },
      {
        ""id"": ""@inputID2"",
        ""data"": {
            ""image"": {
                ""url"": ""@imageURL2""
            },
            ""geo"": {
                ""geo_point"": {
                    ""longitude"": 55.0,
                    ""latitude"": 66.0
                }
            }
        }
      }  
   ]
}
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            var inputs = (List <IClarifaiInput>)response.Get();

            Assert.True(response.IsSuccessful);
            Assert.AreEqual(inputs[0].ID, "@inputID1");
            Assert.AreEqual(inputs[0].PositiveConcepts.ElementAt(0).ID, "@positiveConcept");
            Assert.AreEqual(inputs[0].NegativeConcepts.ElementAt(0).ID, "@negativeConcept");
            Assert.AreEqual(inputs[1].ID, "@inputID2");
            Assert.AreEqual(inputs[1].Geo.Longitude, 55);
            Assert.AreEqual(inputs[1].Geo.Latitude, 66);
        }
示例#29
0
        public async Task ModifyModelRequestAndResponseShouldBeCorrect()
        {
            var httpClient = new FkClarifaiHttpClient(
                patchResponse: @"
{
    ""status"": {
        ""code"": 10000,
        ""description"": ""Ok""
    },
    ""models"": [{
        ""id"": ""@modelID"",
        ""name"": ""@newModelName"",
        ""created_at"": ""2017-11-27T08:35:13.911899Z"",
        ""app_id"": ""@appID"",
        ""output_info"": {
            ""output_config"": {
                ""concepts_mutually_exclusive"": true,
                ""closed_environment"": true
            },
            ""message"": ""Show output_info with: GET /models/{model_id}/output_info"",
            ""type"": ""concept"",
            ""type_ext"": ""concept""
        },
        ""model_version"": {
            ""id"": ""@modelVersionID"",
            ""created_at"": ""2017-11-27T08:35:14.298376733Z"",
            ""status"": {
                ""code"": 21102,
                ""description"": ""Model not yet trained""
            }
        }
    }]
}
");
            var client   = new ClarifaiClient(httpClient);
            var response = await client.ModifyModel(
                "@modelID",
                ModifyAction.Merge,
                name : "@newModelName",
                concepts : new List <Concept> {
                new Concept("@conceptID1")
            },
                areConceptsMutuallyExclusive : true,
                isEnvironmentClosed : true)
                           .ExecuteAsync();

            var expectedRequestBody = JObject.Parse(@"
{
    ""models"": [
      {
        ""id"": ""@modelID"",
        ""name"": ""@newModelName"",
        ""output_info"": {
          ""data"": {
            ""concepts"": [
              {
                ""id"": ""@conceptID1""
              }
            ]
          },
          ""output_config"": {
            ""concepts_mutually_exclusive"": true,
            ""closed_environment"": true
          }
        }
      }
    ],
    ""action"": ""merge""
  }
");

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

            Assert.True(response.IsSuccessful);
            Assert.AreEqual("Ok", response.Status.Description);

            ConceptModel model = response.Get();

            Assert.AreEqual("@modelID", model.ModelID);
            Assert.AreEqual("@newModelName", model.Name);
            Assert.AreEqual("@modelVersionID", model.ModelVersion.ID);
            Assert.AreEqual(true, model.OutputInfo.AreConceptsMutuallyExclusive);
            Assert.AreEqual(true, model.OutputInfo.IsEnvironmentClosed);
        }