Models. NL Serialization
This commit is contained in:
parent
9cb901873d
commit
e9245294a4
9 changed files with 184 additions and 9 deletions
7
src/Nyanlabs.Umogen.Core/Models/ApiRequest.cs
Normal file
7
src/Nyanlabs.Umogen.Core/Models/ApiRequest.cs
Normal file
|
@ -0,0 +1,7 @@
|
|||
namespace Nyanlabs.Umogen.Core.Models;
|
||||
|
||||
public record ApiRequest
|
||||
{
|
||||
public string Model { get; set; } = "gpt-3.5-turbo";
|
||||
public float Temperature { get; set; } = 0.7f;
|
||||
}
|
6
src/Nyanlabs.Umogen.Core/Models/NLSerializable.cs
Normal file
6
src/Nyanlabs.Umogen.Core/Models/NLSerializable.cs
Normal file
|
@ -0,0 +1,6 @@
|
|||
namespace Nyanlabs.Umogen.Core.Models;
|
||||
|
||||
public interface INLSerializable
|
||||
{
|
||||
public string NLSerialize();
|
||||
}
|
15
src/Nyanlabs.Umogen.Core/Models/Person.cs
Normal file
15
src/Nyanlabs.Umogen.Core/Models/Person.cs
Normal file
|
@ -0,0 +1,15 @@
|
|||
namespace Nyanlabs.Umogen.Core.Models;
|
||||
|
||||
public record Person(string Name, string Surname, string? Id = null, string? Pesel = null, DateTime? DoB = null) : INLSerializable
|
||||
{
|
||||
public string Name { get; set; } = Name;
|
||||
public string Surname { get; set; } = Surname;
|
||||
public string? IDCode { get; set; } = Id;
|
||||
public string? Pesel { get; set; } = Pesel;
|
||||
public DateTime? DoB { get; set; } = DoB;
|
||||
|
||||
public string NLSerialize()
|
||||
{
|
||||
return $"{Name} {Surname}; {(Pesel != null ? $"PESEL {Pesel}" : "unknown PESEL")}; {(IDCode != null ? $"ID series {IDCode}" : "unknown ID series")}; {(DoB != null ? $"born {DoB.Value:dd MMM yyyy}" : "unknown date of birth")}";
|
||||
}
|
||||
}
|
50
src/Nyanlabs.Umogen.Core/Models/UmoDocument.cs
Normal file
50
src/Nyanlabs.Umogen.Core/Models/UmoDocument.cs
Normal file
|
@ -0,0 +1,50 @@
|
|||
namespace Nyanlabs.Umogen.Core.Models;
|
||||
|
||||
public enum UmoDoctype
|
||||
{
|
||||
CONTR_EMPLOYMENT,
|
||||
CONTR_SERVICE,
|
||||
CONTR_ASS
|
||||
}
|
||||
|
||||
public static class UmoDoctypeBindings
|
||||
{
|
||||
private static readonly Dictionary<UmoDoctype, (string, string)> s_umoass = new()
|
||||
{
|
||||
{ UmoDoctype.CONTR_EMPLOYMENT, ("Contract of Employment", "Umowa o Pracę")},
|
||||
{ UmoDoctype.CONTR_SERVICE, ("Contract of Service", "Umowa Zlecenie") },
|
||||
{ UmoDoctype.CONTR_ASS, ("Contract for Assignment", "Umowa o Dzieło") }
|
||||
};
|
||||
|
||||
public static (string, string) Name(this UmoDoctype t)
|
||||
{
|
||||
return s_umoass[t];
|
||||
}
|
||||
|
||||
public static UmoDoctype? GetFromName(string name)
|
||||
{
|
||||
KeyValuePair<UmoDoctype, (string, string)>? entry = s_umoass.FirstOrDefault((a) => a.Value.Item1.Equals(name.Trim(), StringComparison.OrdinalIgnoreCase) || a.Value.Item2.Equals(name.Trim(), StringComparison.OrdinalIgnoreCase));
|
||||
return entry?.Key;
|
||||
}
|
||||
}
|
||||
|
||||
public class UmoDocument : INLSerializable
|
||||
{
|
||||
public UmoDocument(UmoDoctype type, Person employer, Person employee, ValidTime? validTime = null)
|
||||
{
|
||||
Doctype = type;
|
||||
Employer = employer;
|
||||
Employee = employee;
|
||||
ValidTime = validTime;
|
||||
}
|
||||
|
||||
public UmoDoctype Doctype { get; set; }
|
||||
public Person Employer { get; set; }
|
||||
public Person Employee { get; set; }
|
||||
//Null is 'unspecified time'
|
||||
public ValidTime? ValidTime { get; set; }
|
||||
public string NLSerialize()
|
||||
{
|
||||
return $"{Doctype.Name().Item1} for {Employee.NLSerialize()} working for {Employer.NLSerialize()}; valid {ValidTime?.NLSerialize() ?? "for unspecified time"}.";
|
||||
}
|
||||
}
|
22
src/Nyanlabs.Umogen.Core/Models/ValidTime.cs
Normal file
22
src/Nyanlabs.Umogen.Core/Models/ValidTime.cs
Normal file
|
@ -0,0 +1,22 @@
|
|||
namespace Nyanlabs.Umogen.Core.Models;
|
||||
|
||||
public readonly struct ValidTime : INLSerializable
|
||||
{
|
||||
public ValidTime(DateTime start, DateTime end)
|
||||
{
|
||||
Start = start;
|
||||
End = end;
|
||||
}
|
||||
|
||||
public ValidTime(DateTime start, TimeSpan duration)
|
||||
{
|
||||
Start = start;
|
||||
End = start + duration;
|
||||
}
|
||||
|
||||
public readonly DateTime Start { get; }
|
||||
public readonly DateTime End { get; }
|
||||
public readonly TimeSpan Duration => End - Start;
|
||||
|
||||
public string NLSerialize() => $"from {Start:dd MMM yyyy} until {End:dd MMM yyyy}";
|
||||
}
|
|
@ -1,8 +1,4 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Nyanlabs.Umogen.Core;
|
||||
|
||||
|
|
16
src/Nyanlabs.Umogen.Core/UmoProcess.cs
Normal file
16
src/Nyanlabs.Umogen.Core/UmoProcess.cs
Normal file
|
@ -0,0 +1,16 @@
|
|||
namespace Nyanlabs.Umogen.Core;
|
||||
|
||||
public class UmoProcess
|
||||
{
|
||||
public UmoProcess(UmoEngine eng)
|
||||
{
|
||||
_eng = eng;
|
||||
}
|
||||
|
||||
private readonly UmoEngine _eng;
|
||||
|
||||
public async Task Ask()
|
||||
{
|
||||
|
||||
}
|
||||
}
|
|
@ -1,11 +1,7 @@
|
|||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Threading.Tasks;
|
||||
|
||||
namespace Nyanlabs.Umogen.Core;
|
||||
|
||||
public class Umogen
|
||||
{
|
||||
public const string DEFAULT_API_KEY_FILE = "umogenkey.secret";
|
||||
public const string PROMPT = "You write Polish legal document in markdown format.";
|
||||
}
|
||||
|
|
67
test/Nyanlabs.Umogen.CoreTests/NLSerializationTests.cs
Normal file
67
test/Nyanlabs.Umogen.CoreTests/NLSerializationTests.cs
Normal file
|
@ -0,0 +1,67 @@
|
|||
using Nyanlabs.Umogen.Core.Models;
|
||||
|
||||
namespace Nyanlabs.Umogen.CoreTests;
|
||||
|
||||
public class NLSerializationTests
|
||||
{
|
||||
private Person ModelEmployer => new("Kotek", "Miauczyński", "CBS4327563", "04281308999", new DateTime(2004, 08, 13));
|
||||
|
||||
private Person ModelEmployee => new("Miau", "Kotczyński", "CBS69696969", "76011694336", new DateTime(1976, 1, 16));
|
||||
|
||||
[Fact]
|
||||
public void FullDocumentNLTest()
|
||||
{
|
||||
// Given
|
||||
UmoDocument doc = new(UmoDoctype.CONTR_EMPLOYMENT, ModelEmployer, ModelEmployee);
|
||||
|
||||
// When
|
||||
var query = doc.NLSerialize();
|
||||
|
||||
// Then
|
||||
Assert.Equal($"Contract of Employment for {ModelEmployee.NLSerialize()} working for {ModelEmployer.NLSerialize()}; valid for unspecified time.", query);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void FullDocumentNLTestSpecifiedTime()
|
||||
{
|
||||
// Given
|
||||
UmoDocument doc = new(UmoDoctype.CONTR_EMPLOYMENT, ModelEmployer, ModelEmployee, new(new DateTime(2023, 11, 17), TimeSpan.FromDays(1)));
|
||||
|
||||
// When
|
||||
var query = doc.NLSerialize();
|
||||
|
||||
// Then
|
||||
Assert.Equal($"Contract of Employment for {ModelEmployee.NLSerialize()} working for {ModelEmployer.NLSerialize()}; valid from 17 Nov 2023 until 18 Nov 2023.", query);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PersonNLTest()
|
||||
{
|
||||
// Given
|
||||
Person p = ModelEmployer;
|
||||
|
||||
// When
|
||||
var query = p.NLSerialize();
|
||||
|
||||
// Then
|
||||
Assert.Equal("Kotek Miauczyński; PESEL 04281308999; ID series CBS4327563; born 13 Aug 2004", query);
|
||||
}
|
||||
|
||||
[Fact]
|
||||
public void PersonNLTestNoData()
|
||||
{
|
||||
// Given
|
||||
Person p = ModelEmployer with
|
||||
{
|
||||
IDCode = null,
|
||||
Pesel = null,
|
||||
DoB = null,
|
||||
};
|
||||
|
||||
// When
|
||||
var query = p.NLSerialize();
|
||||
|
||||
// Then
|
||||
Assert.Equal("Kotek Miauczyński; unknown PESEL; unknown ID series; unknown date of birth", query);
|
||||
}
|
||||
}
|
Loading…
Reference in a new issue