Skip to content

Commit dfdb8d9

Browse files
committed
Fixes; Rdx 1.1.0 beta; #70 #71
1 parent f4db044 commit dfdb8d9

28 files changed

+268
-151
lines changed

SmartImage.Lib/Engines/BaseSearchEngine.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ static BaseSearchEngine()
4444
builder.OnError(f =>
4545
{
4646
// Debugger.Break();
47-
Logger.LogError(f.Exception, $"from {f.Request}");
47+
Logger.LogError(f.Exception, "Request: {Req}", f.Request);
48+
4849
});
4950

5051
builder.AddMiddleware(() => new HttpLoggingHandler(Logger));
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
// Author: Deci | Project: SmartImage.Lib | Name: OllamaModel.cs
2+
// Date: 2025/07/15 @ 23:07:47
3+
4+
using System.Text.Json;
5+
using System.Text.Json.Nodes;
6+
using Flurl.Http;
7+
using Kantan.Net.Utilities;
8+
using Microsoft.Extensions.Logging;
9+
using Microsoft.Net.Http.Headers;
10+
using SmartImage.Lib.Engines.Results;
11+
using SmartImage.Lib.Images;
12+
using SmartImage.Lib.Utilities;
13+
using SmartImage.Lib.Utilities.Diagnostics;
14+
15+
namespace SmartImage.Lib.Engines;
16+
17+
public class OllamaModel
18+
{
19+
20+
protected static IFlurlClient Client { get; }
21+
22+
protected static readonly ILogger Logger = AppSupport.Factory.CreateLogger(nameof(OllamaModel));
23+
24+
static OllamaModel()
25+
{
26+
Client = (FlurlClient) FlurlHttp.Clients.GetOrAdd(nameof(OllamaModel), "http://localhost:11434", builder =>
27+
{
28+
29+
// builder.Headers.AddOrReplace(HeaderNames.UserAgent, HttpUtilities.UserAgent);
30+
31+
// builder.Settings.JsonSerializer = new DefaultJsonSerializer();
32+
33+
builder.Settings.AllowedHttpStatusRange = "*";
34+
35+
builder.OnError(f =>
36+
{
37+
// Debugger.Break();
38+
Logger.LogError(f.Exception, "Request: {Req}", f.Request);
39+
});
40+
41+
builder.AddMiddleware(() => new HttpLoggingHandler(Logger));
42+
43+
});
44+
}
45+
46+
public OllamaModel() { }
47+
48+
public class OllamaRequest
49+
{
50+
51+
public string Model { get; set; }
52+
53+
public string Prompt { get; set; }
54+
55+
public List<string> Images { get; set; }
56+
57+
public string Format { get; set; }
58+
59+
public bool Stream { get; set; }
60+
61+
public OllamaRequest() { }
62+
63+
}
64+
65+
public Task<IFlurlResponse> CreateRequestAsync(SearchQuery query, CancellationToken ct = default)
66+
{
67+
using Stream stream = query.Source.Image.ToStream();
68+
var rg = ((MemoryStream) stream).ToArray();
69+
70+
var b64 = Convert.ToBase64String(rg);
71+
72+
73+
var ollamaRequest = new OllamaRequest()
74+
{
75+
Model = "gemma3",
76+
Images = [b64],
77+
Prompt = "Find the source of this image. Respond using JSON",
78+
Format = "json",
79+
Stream = false
80+
};
81+
82+
var req = Client.Request("api/generate")
83+
.PostJsonAsync(ollamaRequest, cancellationToken: ct);
84+
85+
return req;
86+
}
87+
88+
}

SmartImage.Lib/Engines/Search/ArchiveMoeEngine.cs

Lines changed: 5 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
using SmartImage.Lib.Engines.Results;
1111
using SmartImage.Lib.Engines.Results.Model;
1212
using SmartImage.Lib.Images;
13+
using SmartImage.Lib.Utilities;
1314

1415
namespace SmartImage.Lib.Engines.Search;
1516

@@ -27,7 +28,7 @@ protected ArchiveMoeEngine(string baseUrl) : base(baseUrl) { }
2728

2829
protected override Url GetRawUrl(SearchQuery query)
2930
{
30-
Base64Hash = GetHash(query);
31+
Base64Hash = SearchUtil.GetHash(query);
3132

3233
var r = Url.Combine(BaseUrl, "image", Base64Hash);
3334
return r;
@@ -36,20 +37,6 @@ protected override Url GetRawUrl(SearchQuery query)
3637
}
3738

3839

39-
protected static string GetHash(SearchQuery q)
40-
{
41-
//var digestBase64URL = digestBase64.replace('==', '').replace(/\//g, '_').replace(/\+/g, '-');
42-
using Stream stream = q.Source.Image.ToStream();
43-
var data = MD5.HashData(stream);
44-
var b64 = Convert.ToBase64String(data).Replace("==", "");
45-
b64 = Regex.Replace(b64, @"\//", "_");
46-
b64 = Regex.Replace(b64, @"\+", "-");
47-
48-
// q.Source.Stream.TrySeek();
49-
50-
return b64;
51-
}
52-
5340
public override ValueTask<bool> ApplyConfigAsync(SearchConfig cfg, CancellationToken ct = default)
5441
{
5542
return ValueTask.FromResult(true);
@@ -66,11 +53,11 @@ protected override ValueTask<IList<INode>> GetSource(IDocument d)
6653
return ValueTask.FromResult<IList<INode>>(d.Body.SelectNodes("//article[contains(@class,'post')]"));
6754
}
6855

69-
protected override ValueTask<IEnumerable<ChanPost>> GetItems(IList<INode> rs, SearchResult r)
56+
protected override ValueTask<IEnumerable<ChanPost>> GetItems(IList<INode> source, SearchResult r)
7057
{
71-
var buf = new List<ChanPost>(rs.Count);
58+
var buf = new List<ChanPost>(source.Count);
7259

73-
foreach (INode node in rs)
60+
foreach (INode node in source)
7461
{
7562
buf.Add(ChanPost.ParseResultItem(node, r));
7663
}

SmartImage.Lib/Engines/Search/Ascii2DEngine.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -141,11 +141,11 @@ protected override ValueTask<IList<INode>> GetSource(IDocument d)
141141
return ValueTask.FromResult<IList<INode>>(nodes);
142142
}
143143

144-
protected override ValueTask<IEnumerable<Ascii2DItem>> GetItems(IList<INode> rs, SearchResult r)
144+
protected override ValueTask<IEnumerable<Ascii2DItem>> GetItems(IList<INode> source, SearchResult r)
145145
{
146-
var buf = new List<Ascii2DItem>(rs.Count);
146+
var buf = new List<Ascii2DItem>(source.Count);
147147

148-
foreach (var node in rs)
148+
foreach (var node in source)
149149
{
150150
var item = Ascii2DItem.ParseResultItem(node, r);
151151
buf.Add(item);

SmartImage.Lib/Engines/Search/EHentaiEngine.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -186,11 +186,11 @@ protected override ValueTask<IList<INode>> GetSource(IDocument d)
186186
return ValueTask.FromResult((IList<INode>) array);
187187
}
188188

189-
protected override ValueTask<IEnumerable<EhResult>> GetItems(IList<INode> n, SearchResult r)
189+
protected override ValueTask<IEnumerable<EhResult>> GetItems(IList<INode> source, SearchResult r)
190190
{
191-
var buf = new List<EhResult>(n.Count);
191+
var buf = new List<EhResult>(source.Count);
192192

193-
foreach (INode node in n)
193+
foreach (INode node in source)
194194
{
195195
var eh = EhResult.ParseResultItem(node, r);
196196
buf.Add(eh);

SmartImage.Lib/Engines/Search/GoogleLensEngine.cs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -110,11 +110,11 @@ protected override ValueTask<IList<INode>> GetSource(IDocument d)
110110
return ValueTask.FromResult<IList<INode>>(nodes);
111111
}
112112

113-
protected override ValueTask<IEnumerable<GoogleLensItem>> GetItems(IList<INode> rs, SearchResult r)
113+
protected override ValueTask<IEnumerable<GoogleLensItem>> GetItems(IList<INode> source, SearchResult r)
114114
{
115-
var buf = new List<GoogleLensItem>(rs.Count);
115+
var buf = new List<GoogleLensItem>(source.Count);
116116

117-
foreach (INode node in rs)
117+
foreach (INode node in source)
118118
{
119119
buf.Add(GoogleLensItem.ParseResultItem(node, r));
120120
}

SmartImage.Lib/Engines/Search/IqdbEngine.cs

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -57,7 +57,7 @@ protected IqdbEngine(string b) : base(b)
5757
];
5858

5959

60-
private async Task<IDocument> GetDocumentAsync(SearchQuery query, CancellationToken ct)
60+
protected override async Task<IDocument> GetDocumentAsync(SearchResult sr, SearchQuery query, CancellationToken token = default)
6161
{
6262

6363
IDocument document = null;
@@ -94,7 +94,7 @@ private async Task<IDocument> GetDocumentAsync(SearchQuery query, CancellationTo
9494
m.AddString("url", query.Upload);
9595

9696
return;
97-
}, cancellationToken: ct);
97+
}, cancellationToken: token);
9898

9999
/*
100100
var response = await Client.Request(URL_QUERY)
@@ -119,7 +119,7 @@ private async Task<IDocument> GetDocumentAsync(SearchQuery query, CancellationTo
119119
var s = await response.GetStringAsync().ConfigureAwait(false);
120120

121121
var parser = new HtmlParser();
122-
document = await parser.ParseDocumentAsync(s, ct).ConfigureAwait(false);
122+
document = await parser.ParseDocumentAsync(s, token).ConfigureAwait(false);
123123

124124
// goto ret;
125125

@@ -162,11 +162,11 @@ protected override ValueTask<IEnumerable<IHtmlCollection<IElement>>> GetSource(I
162162
return ValueTask.FromResult(select);
163163
}
164164

165-
protected override ValueTask<IEnumerable<IqdbItem>> GetItems(IEnumerable<IHtmlCollection<IElement>> ree, SearchResult r)
165+
protected override ValueTask<IEnumerable<IqdbItem>> GetItems(IEnumerable<IHtmlCollection<IElement>> source, SearchResult r)
166166
{
167167
var buf = new List<IqdbItem>();
168168

169-
foreach (var c in ree)
169+
foreach (var c in source)
170170
{
171171
var iq = IqdbItem.ParseResultItem(c, r);
172172
buf.Add(iq);
@@ -220,8 +220,6 @@ public record IqdbItem : SearchResultItem, ISourceItemParseable<IHtmlCollection<
220220

221221
private IqdbItem(SearchResult r) : base(r) { }
222222

223-
#region Implementation of ISourceItemParseable<in INode,out IqdbItem>
224-
225223
public static IqdbItem ParseResultItem(IHtmlCollection<IElement> tr, SearchResult r)
226224
{
227225

@@ -323,6 +321,4 @@ public static IqdbItem ParseResultItem(IHtmlCollection<IElement> tr, SearchResul
323321
return result;
324322
}
325323

326-
#endregion
327-
328324
}

SmartImage.Lib/Engines/Search/TraceMoeEngine.cs

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -184,14 +184,24 @@ public class TraceMoeDoc
184184
public Url AnilistUrl { get; }
185185

186186
[JsonConstructor]
187-
public TraceMoeDoc()
187+
public TraceMoeDoc(double from, double to, long anilist, string filename, object episode, double similarity, string video, string image)
188188
{
189+
From = from;
190+
To = to;
191+
Anilist = anilist;
192+
Filename = filename;
193+
Episode = episode;
194+
Similarity = similarity;
195+
Video = video;
196+
Image = image;
197+
189198
AnilistUrl = Url.Combine(AnilistClient.ANILIST_URL, Anilist.ToString());
190199

191200
EpisodeString = Episode switch
192201
{
193202
not null and string => Episode.ToString(),
194-
203+
long l => l.ToString(),
204+
JsonElement e => e.ToString(),
195205
IEnumerable e => e.Cast<object>()
196206
.Select(x =>
197207
{
@@ -207,9 +217,9 @@ public TraceMoeDoc()
207217

208218
_ => string.Empty
209219
};
210-
211220
}
212221

222+
213223
public async ValueTask<SearchResultItem> ToItem(SearchResult sr)
214224
{
215225
var sim = Math.Round(Similarity * 100.0f, 2);

SmartImage.Lib/Engines/WebSearchEngine.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,7 @@ public override async Task<SearchResult> GetResultAsync(SearchQuery query, Cance
6464

6565
protected abstract ValueTask<TSource> GetSource(IDocument d);
6666

67-
protected abstract ValueTask<IEnumerable<TResultItem>> GetItems(TSource rs, SearchResult r);
67+
protected abstract ValueTask<IEnumerable<TResultItem>> GetItems(TSource source, SearchResult r);
6868

6969
[ICBN]
7070
[MURV]

SmartImage.Lib/Images/ImageScanner.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ static ImageScanner()
6363

6464
builder.Settings.AllowedHttpStatusRange = "*";
6565

66-
// builder.Headers.AddOrReplace("User-Agent", HttpUtilities.UserAgent);
66+
builder.Headers.AddOrReplace("User-Agent", HttpUtilities.UserAgent);
6767
// builder.AllowAnyHttpStatus();
6868

6969
builder.WithAutoRedirect(true);

0 commit comments

Comments
 (0)