Spaces:
Running
Running
from flask import Flask, request, jsonify, render_template_string | |
from sentence_transformers import SentenceTransformer, util | |
import logging | |
import sys | |
import signal | |
# 初始化 Flask 应用 | |
app = Flask(__name__) | |
# 配置日志,级别设为 INFO | |
logging.basicConfig(level=logging.INFO) | |
app.logger = logging.getLogger("CodeSearchAPI") | |
# 预定义代码片段 | |
CODE_SNIPPETS = [ | |
"Console.WriteLine(\"Hello, World!\");", | |
"""int Sum(int a,int b){ | |
return a+b; | |
}""", | |
"var rnd = new Random().Next();", | |
"""bool IsEven(int n){ | |
return n % 2 == 0; | |
}""", | |
"int len = str.Length;", | |
"DateTime today = DateTime.Today;", | |
"bool exists = File.Exists(path);", | |
"string content = File.ReadAllText(path);", | |
"File.WriteAllText(path, content);", | |
"DateTime now = DateTime.Now;", | |
"string upper = s.ToUpper();", | |
"string lower = s.ToLower();", | |
"""string Reverse(string s){ | |
return new string(s.Reverse().ToArray()); | |
}""", | |
"int count = list.Count;", | |
"var max = list.Max();", | |
"var min = list.Min();", | |
"list.Sort();", | |
"var merged = list1.Concat(list2).ToList();", | |
"list.Remove(item);", | |
"bool empty = !list.Any();", | |
"""int CountChar(string s, char c){ | |
return s.Count(x => x == c); | |
}""", | |
"bool contains = s.Contains(sub);", | |
"string s2 = num.ToString();", | |
"int n2 = int.Parse(s);", | |
"""bool IsNumber(string s){ | |
return int.TryParse(s, out ); | |
}""", | |
"int idx = list.IndexOf(item);", | |
"list.Clear();", | |
"list.Reverse();", | |
"var unique = list.Distinct().ToList();", | |
"bool has = list.Contains(item);", | |
"var dict = new Dictionary<string, object>();", | |
"dict[key] = value;", | |
"dict.Remove(key);", | |
"var keys = dict.Keys;", | |
"var values = dict.Values;", | |
"var mergedDict = dict1.Concat(dict2).ToDictionary(kv => kv.Key, kv => kv.Value);", | |
"bool dictEmpty = dict.Count == 0;", | |
"var v = dict[key];", | |
"bool hasKey = dict.ContainsKey(key);", | |
"dict.Clear();", | |
"int lines = File.ReadAllLines(path).Length;", | |
"File.WriteAllLines(path, list);", | |
"var list2 = File.ReadAllLines(path).ToList();", | |
"int words = File.ReadAllText(path).Split().Length;", | |
"""bool IsLeap(int y){ | |
return DateTime.IsLeapYear(y); | |
}""", | |
"string timeStr = DateTime.Now.ToString("HH:mm:ss");", | |
"""int DaysBetween(DateTime a, DateTime b){ | |
return (int)(b - a).TotalDays; | |
}""", | |
"string cwd = Directory.GetCurrentDirectory();", | |
"var files = Directory.GetFiles(path);", | |
"Directory.CreateDirectory(path);", | |
"Directory.Delete(path);", | |
"bool isFile = File.Exists(path);", | |
"bool isDir = Directory.Exists(path);", | |
"long size = new FileInfo(path).Length;", | |
"File.Move(oldPath, newPath);", | |
"File.Copy(src, dest);", | |
"File.Move(src, dest);", | |
"File.Delete(path);", | |
"string env = Environment.GetEnvironmentVariable(name);", | |
"Environment.SetEnvironmentVariable(name, value);", | |
"Process.Start(new ProcessStartInfo(url){ UseShellExecute = true });", | |
"var response = await new HttpClient().GetAsync(url);", | |
"dynamic obj = JsonConvert.DeserializeObject(json);", | |
"File.WriteAllText(path, JsonConvert.SerializeObject(data));", | |
"var data = JsonConvert.DeserializeObject(File.ReadAllText(path));", | |
"string s3 = string.Join("", list);", | |
"var list3 = s.ToCharArray().ToList();", | |
"string s4 = string.Join(",", list);", | |
"string s5 = string.Join(Environment.NewLine, list);", | |
"var parts1 = s.Split(' ');", | |
"var parts2 = s.Split(delimiter);", | |
"var chars = s.ToCharArray();", | |
"string r2 = s.Replace(oldValue, newValue);", | |
"string r3 = s.Replace(" ","");", | |
"""string RemovePunct(string s){ | |
return new string(s.Where(c => !char.IsPunctuation(c)).ToArray()); | |
}""", | |
"bool strEmpty = string.IsNullOrEmpty(s);", | |
"""bool IsPal(string s){ | |
var r = new string(s.Reverse().ToArray()); | |
return s == r; | |
}""", | |
"File.WriteAllLines(path, rows);", | |
"var rows = File.ReadAllLines(path).Select(line => line.Split(',')).ToList();", | |
"int csvLines = File.ReadAllLines(path).Length;", | |
"""void Shuffle(List l){ | |
var r = new Random(); | |
for(int i = l.Count - 1; i > 0; i--){ | |
int j = r.Next(i + 1); | |
var t = l[i]; | |
l[i] = l[j]; | |
l[j] = t; | |
} | |
}""", | |
"var e = list[new Random().Next(list.Count)];", | |
"var items = list.OrderBy(x => Guid.NewGuid()).Take(n).ToList();", | |
"int dice = new Random().Next(1, 7);", | |
"string coin = new Random().Next(2) == 0 ? "Heads" : "Tails";", | |
"""string RandPwd(int l){ | |
const string chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789"; | |
var r = new Random(); | |
return new string(Enumerable.Range(0, l).Select( => chars[r.Next(chars.Length)]).ToArray()); | |
}""", | |
"""string RandColor(){ | |
var r = new Random(); | |
return $"#{r.Next(0x1000000):X6}"; | |
}""", | |
"string id = Guid.NewGuid().ToString();", | |
"""class MyClass{}""", | |
"var obj2 = new MyClass();", | |
"""class MyClass2{ | |
public void MyMethod(){} | |
}""", | |
"""class MyClass3{ | |
public int MyProperty { get; set; } | |
}""", | |
"""class SubClass : MyClass2{}""", | |
"""class SubClass2 : MyClass2{ | |
public override void MyMethod(){} | |
}""", | |
"obj2.MyMethod();", | |
"MyClass2.StaticMethod();", | |
"bool isType = obj2 is MyClass2;", | |
"var val2 = obj2.MyProperty;", | |
"obj2.MyProperty = value;", | |
"""((IDictionary<string, object>)obj2).Remove("MyProperty");"", | |
"try { SomeMethod(); } catch(Exception ex) { Console.WriteLine(ex.Message); }", | |
"""public class MyException:Exception{public MyException(string m):base(m){}} | |
throw new MyException("error");""", | |
"string message = ex.Message;", | |
"File.AppendAllText("error.log", ex.ToString());", | |
"""var sw=new System.Diagnostics.Stopwatch(); | |
sw.Start();""", | |
"sw.Stop(); var elapsed = sw.Elapsed;", | |
"""for(int i=0;i<=100;i++) | |
{ | |
Console.Write($"\r[{new string('#',i/10).PadRight(10,' ')}] {i}%"); | |
}""", | |
"System.Threading.Thread.Sleep(1000);", | |
"Func<int,int> square = x => x * x;", | |
"var mapped = list.Select(x => x * x);", | |
"var filtered = list.Where(x => x % 2 == 0);", | |
"var reduced = list.Aggregate((a, b) => a + b);", | |
"var listComp = (from x in list select x * x).ToList();", | |
"var dictComp = list.ToDictionary(x => x, x => x.ToString());", | |
"var setComp = new HashSet(list.Select(x => x));", | |
"var intersection = set1.Intersect(set2);", | |
"var union = set1.Union(set2);", | |
"var difference = set1.Except(set2);", | |
"var noNulls = list.Where(x => x != null).ToList();", | |
"""try | |
{ | |
using(var fs=File.Open(path,FileMode.Open)){} | |
} | |
catch{}""", | |
"if(obj is string) { /* type is string / }", | |
"bool b = bool.Parse(s);", | |
"if(x > 0) Console.WriteLine(x);", | |
"while(condition) DoWork();", | |
"foreach(var item in list) Console.WriteLine(item);", | |
"foreach(var kv in dict) Console.WriteLine(kv.Key + ":" + kv.Value);", | |
"foreach(var c in str) Console.Write(c);", | |
"for(int i=0;i<10;i++){ if(i==5) break; }", | |
"for(int i=0;i<10;i++){ if(i%2==0) continue; Console.Write(i); }", | |
"int Add(int a,int b){return a+b;}", | |
"int Mul(int a,int b=2){return ab;}", | |
"(int min,int max) GetMinMax(int[] a){return (a.Min(),a.Max());}", | |
"int Sum(params int[] a){return a.Sum();}", | |
"""void Foo(int x,int y){} | |
Foo(y:2,x:1);""", | |
"""T Timed(Func fn) | |
{ | |
var sw=new System.Diagnostics.Stopwatch(); | |
sw.Start(); | |
var result=fn(); | |
sw.Stop(); | |
Console.WriteLine(sw.Elapsed); | |
return result; | |
}""", | |
"""Func<int,int> memoized = null; | |
var cache = new Dictionary<int,int>(); | |
memoized = x => cache.ContainsKey(x)?cache[x]:(cache[x]=x* x);""", | |
"""IEnumerable Gen() | |
{ | |
for(int i=0;i<10;i++) yield return i; | |
}""", | |
"var e = Gen().GetEnumerator(); e.MoveNext(); var first = e.Current;", | |
"""class MyCollection : IEnumerable | |
{ | |
int[] data={1,2,3}; | |
public IEnumerator GetEnumerator(){foreach(var i in data)yield return i;} | |
IEnumerator IEnumerable.GetEnumerator()=>GetEnumerator(); | |
}""", | |
"""var enumerator = list.GetEnumerator(); | |
while(enumerator.MoveNext()) Console.WriteLine(enumerator.Current);""", | |
"foreach(var t in list.Select((v,i)=>new{v,i})) Console.WriteLine(t.i+":"+t.v);", | |
"var zipped = list1.Zip(list2,(a,b)=>(a,b));", | |
"var toDict = list1.Zip(list2,(a,b)=>new{a,b}).ToDictionary(x=>x.a,x=>x.b);", | |
"bool eqList = list1.SequenceEqual(list2);", | |
"bool eqDict = dict1.Count==dict2.Count && !dict1.Except(dict2).Any();", | |
"bool eqSet = set1.SetEquals(set2);", | |
"var unique = list.Distinct().ToList();", | |
"set.Clear();", | |
"bool isEmpty = set.Count==0;", | |
"set.Add(item);", | |
"set.Remove(item);", | |
"bool contains = set.Contains(item);", | |
"int count = set.Count;", | |
"bool hasOverlap = set1.Overlaps(set2);", | |
"bool isSubset = new HashSet(list1).IsSupersetOf(list2);", | |
"bool isSubstring = str.Contains(sub);", | |
"char first = str[0];", | |
"char last = str[^1];", | |
"bool isText = Path.GetExtension(path)==\".txt\";", | |
"bool isImage = new[]{\".png\",\".jpg\",\".jpeg\",\".gif\"}.Contains(Path.GetExtension(path));", | |
"double rounded = Math.Round(d);", | |
"double up = Math.Ceiling(d);", | |
"double down = Math.Floor(d);", | |
"string formatted = d.ToString(\"F2\");", | |
"""var rnd=new Random(); | |
var s=new string(Enumerable.Range(0,8).Select(_=>"ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rnd.Next(26)]).ToArray());""", | |
"bool exists = File.Exists(path)||Directory.Exists(path);", | |
"var files = Directory.GetFiles(dir, "", SearchOption.AllDirectories);", | |
"string ext = Path.GetExtension(path);", | |
"string name = Path.GetFileName(path);", | |
"string full = Path.GetFullPath(path);", | |
"""var p=new Process{ | |
StartInfo=new ProcessStartInfo("python","--version"){ | |
RedirectStandardOutput=true | |
} | |
}; | |
p.Start(); | |
string version=p.StandardOutput.ReadToEnd();""", | |
"string osInfo = Environment.OSVersion.ToString();", | |
"int cores = Environment.ProcessorCount;", | |
"ulong mem = new Microsoft.VisualBasic.Devices.ComputerInfo().TotalPhysicalMemory;", | |
"""var usage = DriveInfo.GetDrives() | |
.Select(d=>new{d.Name,d.TotalSize,d.AvailableFreeSpace});""", | |
"var ip = Dns.GetHostEntry(Dns.GetHostName()).AddressList.First(a=>a.AddressFamily==System.Net.Sockets.AddressFamily.InterNetwork);", | |
"bool online = new System.Net.NetworkInformation.Ping().Send("8.8.8.8").Status==System.Net.NetworkInformation.IPStatus.Success;", | |
"new WebClient().DownloadFile(url,path);", | |
"Console.WriteLine(\"Uploading \"+path);", | |
"var response=await new HttpClient().PostAsync(url,new StringContent(data));", | |
"var getResponse=await new HttpClient().GetAsync(url+"?"+query);", | |
"var client=new HttpClient(); client.DefaultRequestHeaders.Add("Header","Value");", | |
"""var doc=new HtmlAgilityPack.HtmlDocument(); | |
doc.LoadHtml(html);""", | |
"string title=doc.DocumentNode.SelectSingleNode(\"//title\").InnerText;", | |
"var links=doc.DocumentNode.SelectNodes(\"//a[@href]\").Select(n=>n.Attributes[\"href\"].Value);", | |
"""foreach(var img in links.Where(u=>u.EndsWith(".png")||u.EndsWith(".jpg"))) | |
new WebClient().DownloadFile(img,Path.GetFileName(img));""", | |
"""var freq=text.Split() | |
.GroupBy(w=>w) | |
.ToDictionary(g=>g.Key,g=>g.Count());""", | |
"""var loginResponse=await client.PostAsync(loginUrl,new FormUrlEncodedContent(new[]{new KeyValuePair<string,string>("user",u),("pass",p)})); | |
var content=await loginResponse.Content.ReadAsStringAsync();""", | |
"string plain=Regex.Replace(html,\"<.?>\"," ");", | |
"var emails=Regex.Matches(text,\"[\w.-]+@[\w.-]+\.[A-Za-z]{2,6}\");", | |
"var phones=Regex.Matches(text,"\d{3}-\d{4}-\d{4}");", | |
"var numbers=Regex.Matches(text,"\d+");", | |
"string replaced=Regex.Replace(text,"old","new");", | |
"bool isMatch=Regex.IsMatch(text,pattern);", | |
"string noTags=Regex.Replace(html,\"<.*?>\"," ");", | |
"string encoded=System.Net.WebUtility.HtmlEncode(s);", | |
"string decoded=System.Net.WebUtility.HtmlDecode(s);", | |
"""var form=new System.Windows.Forms.Form(); | |
System.Windows.Forms.Application.Run(form);""", | |
"var button = new Button { Text = \"Click Me\" }; window.Controls.Add(button);", | |
"button.Click += (sender, e) => { MessageBox.Show(\"Button Clicked!\"); };", | |
"MessageBox.Show(\"This is a popup message!\");", | |
"var input = textBox.Text;", | |
"window.Text = \"New Window Title\";", | |
"window.Size = new Size(800, 600);", | |
"window.StartPosition = FormStartPosition.CenterScreen;", | |
"var menuStrip = new MenuStrip(); window.Controls.Add(menuStrip);", | |
"var comboBox = new ComboBox(); window.Controls.Add(comboBox);", | |
"var radioButton = new RadioButton { Text = \"Option 1\" }; window.Controls.Add(radioButton);", | |
"var checkBox = new CheckBox { Text = \"Check Me\" }; window.Controls.Add(checkBox);", | |
"var pictureBox = new PictureBox { Image = Image.FromFile(\"image.jpg\") }; window.Controls.Add(pictureBox);", | |
"var player = new SoundPlayer(\"audio.wav\"); player.Play();", | |
"var player = new AxWMPLib.AxWindowsMediaPlayer(); player.URL = \"video.mp4\"; window.Controls.Add(player);", | |
"var currentTime = player.Ctlcontrols.currentPosition;", | |
"var bmp = new Bitmap(Screen.PrimaryScreen.Bounds.Width, Screen.PrimaryScreen.Bounds.Height); var g = Graphics.FromImage(bmp); g.CopyFromScreen(0, 0, 0, 0, bmp.Size); bmp.Save(\"screenshot.png\");", | |
"var recorder = new ScreenRecorder(); recorder.StartRecording(); Thread.Sleep(5000); recorder.StopRecording();", | |
"var mousePos = Cursor.Position;", | |
"SendKeys.Send(\"Hello World\");", | |
"Cursor.Position = new Point(100, 100); mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);", | |
"var timestamp = DateTimeOffset.UtcNow.ToUnixTimeSeconds();", | |
"var date = DateTimeOffset.FromUnixTimeSeconds(timestamp).DateTime;", | |
"var timestamp = new DateTimeOffset(date).ToUnixTimeSeconds();", | |
"var dayOfWeek = DateTime.Now.DayOfWeek;", | |
"var daysInMonth = DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month);", | |
"var firstDayOfYear = new DateTime(DateTime.Now.Year, 1, 1);", | |
"var lastDayOfYear = new DateTime(DateTime.Now.Year, 12, 31);", | |
"var firstDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, 1);", | |
"var lastDayOfMonth = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.DaysInMonth(DateTime.Now.Year, DateTime.Now.Month));", | |
"var isWeekday = DateTime.Now.DayOfWeek != DayOfWeek.Saturday && DateTime.Now.DayOfWeek != DayOfWeek.Sunday;", | |
"var isWeekend = DateTime.Now.DayOfWeek == DayOfWeek.Saturday || DateTime.Now.DayOfWeek == DayOfWeek.Sunday;", | |
"var currentHour = DateTime.Now.Hour;", | |
"var currentMinute = DateTime.Now.Minute;", | |
"var currentSecond = DateTime.Now.Second;", | |
"Thread.Sleep(1000);", | |
"var millisTimestamp = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();", | |
"var formattedTime = DateTime.Now.ToString(\"yyyy-MM-dd HH:mm:ss\");", | |
"var parsedTime = DateTime.Parse(\"2023-10-01 12:00:00\");", | |
"var thread = new Thread(() => { }); thread.Start();", | |
"Thread.Sleep(1000);", | |
"Parallel.Invoke(() => { }, () => { });", | |
"var threadName = Thread.CurrentThread.Name;", | |
"thread.IsBackground = true;", | |
"var lockObj = new object(); lock (lockObj) { }", | |
"var process = Process.Start(\"notepad.exe\");", | |
"var pid = process.Id;", | |
"var isAlive = !process.HasExited;", | |
"Parallel.Invoke(() => { }, () => { });", | |
"var queue = new Queue<int>(); queue.Enqueue(1); var value = queue.Dequeue();", | |
"var pipe = new AnonymousPipeServerStream();", | |
"Process.GetCurrentProcess().ProcessorAffinity = (IntPtr)1;", | |
"var process = Process.Start(\"cmd.exe\", \"/c dir\");", | |
"var output = process.StandardOutput.ReadToEnd();", | |
"var exitCode = process.ExitCode;", | |
"var isSuccess = exitCode == 0;", | |
"var scriptPath = System.Reflection.Assembly.GetExecutingAssembly().Location;", | |
"var args = Environment.GetCommandLineArgs();", | |
"var parser = new ArgumentParser(); var args = parser.ParseArgs();", | |
"var help = parser.PrintHelp();", | |
"var modules = AppDomain.CurrentDomain.GetAssemblies();", | |
"Process.Start(\"pip\", \"install package_name\").WaitForExit();", | |
"Process.Start(\"pip\", \"uninstall package_name\").WaitForExit();", | |
"var version = Assembly.GetExecutingAssembly().GetName().Version;", | |
"Process.Start(\"python\", \"-m venv venv\").WaitForExit();", | |
"var packages = Process.Start(\"pip\", \"list\").StandardOutput.ReadToEnd();", | |
"Process.Start(\"pip\", \"install --upgrade package_name\").WaitForExit();", | |
"var connection = new SqlConnection(\"Server=localhost;Database=test;User Id=sa;Password=password;\"); connection.Open();", | |
"var command = new SqlCommand(\"SELECT * FROM table\", connection); var reader = command.ExecuteReader();", | |
"var command = new SqlCommand(\"INSERT INTO table (column) VALUES ('value')\", connection); command.ExecuteNonQuery();", | |
"var command = new SqlCommand(\"DELETE FROM table WHERE id = 1\", connection); command.ExecuteNonQuery();", | |
"var command = new SqlCommand(\"UPDATE table SET column = 'value' WHERE id = 1\", connection); command.ExecuteNonQuery();", | |
"var command = new SqlCommand(\"SELECT * FROM table\", connection); var reader = command.ExecuteReader(); while (reader.Read()) { }", | |
"var command = new SqlCommand(\"SELECT * FROM table WHERE column = @value\", connection); command.Parameters.AddWithValue(\"@value\", \"value\"); var reader = command.ExecuteReader();", | |
"connection.Close();", | |
"var command = new SqlCommand(\"CREATE TABLE table (id INT PRIMARY KEY, column VARCHAR(255))\", connection); command.ExecuteNonQuery();", | |
"var command = new SqlCommand(\"DROP TABLE table\", connection); command.ExecuteNonQuery();", | |
"var exists = connection.GetSchema(\"Tables\").Rows.Cast<DataRow>().Any(row => row[\"TABLE_NAME\"].ToString() == \"table\");", | |
"var tables = connection.GetSchema(\"Tables\").Rows.Cast<DataRow>().Select(row => row[\"TABLE_NAME\"].ToString()).ToList();", | |
"var context = new DbContext(); context.Table.Add(new Model { Column = \"value\" }); context.SaveChanges();", | |
"var data = context.Table.Where(x => x.Column == \"value\").ToList();", | |
"var entity = context.Table.First(x => x.Id == 1); context.Table.Remove(entity); context.SaveChanges();", | |
"var entity = context.Table.First(x => x.Id == 1); entity.Column = \"new_value\"; context.SaveChanges();", | |
"public class Model { public int Id { get; set; } public string Column { get; set; } }", | |
"public class DerivedModel : Model { public string NewColumn { get; set; } }", | |
"public class Model { [Key] public int Id { get; set; } }", | |
"public class Model { [Unique] public string Column { get; set; } }", | |
"public class Model { public string Column { get; set; } = \"default_value\"; }", | |
"File.WriteAllLines(\"data.csv\", data.Select(x => string.Join(\",\", x)));", | |
"var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add(\"Sheet1\"); worksheet.Cell(1, 1).Value = \"Data\"; workbook.SaveAs(\"data.xlsx\");", | |
"var json = JsonConvert.SerializeObject(data); File.WriteAllText(\"data.json\", json);", | |
"var workbook = new XLWorkbook(\"data.xlsx\"); var worksheet = workbook.Worksheet(1); var data = worksheet.Rows().Select(row => row.Cell(1).Value.ToString()).ToList();", | |
"var mergedWorkbook = new XLWorkbook(); foreach (var file in files) { var workbook = new XLWorkbook(file); mergedWorkbook.AddWorksheet(workbook.Worksheet(1)); } mergedWorkbook.SaveAs(\"merged.xlsx\");", | |
"var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add(\"NewSheet\"); workbook.SaveAs(\"data.xlsx\");", | |
"var workbook = new XLWorkbook(\"data.xlsx\"); var worksheet = workbook.Worksheet(1); var style = worksheet.Cell(1, 1).Style; worksheet.Cell(2, 2).Style = style; workbook.SaveAs(\"data.xlsx\");", | |
"var workbook = new XLWorkbook(\"data.xlsx\"); var worksheet = workbook.Worksheet(1); worksheet.Cell(1, 1).Style.Fill.BackgroundColor = XLColor.Red; workbook.SaveAs(\"data.xlsx\");", | |
"var workbook = new XLWorkbook(\"data.xlsx\"); var worksheet = workbook.Worksheet(1); worksheet.Cell(1, 1).Style.Font.FontColor = XLColor.Blue; workbook.SaveAs(\"data.xlsx\");", | |
"var workbook = new XLWorkbook(\"data.xlsx\"); var worksheet = workbook.Worksheet(1); var content = worksheet.Cell(1, 1).Value.ToString();", | |
"var workbook = new XLWorkbook(\"data.xlsx\"); var worksheet = workbook.Worksheet(1); worksheet.Cell(1, 1).Value = \"New Content\"; workbook.SaveAs(\"data.xlsx\");", | |
"var image = Image.FromFile(\"image.jpg\"); var width = image.Width; var height = image.Height;", | |
"var image = Image.FromFile(\"image.jpg\"); var resizedImage = new Bitmap(image, new Size(100, 100)); resizedImage.Save(\"resized.jpg\");" | |
] | |
# 全局服务状态 | |
service_ready = False | |
# 优雅关闭处理 | |
def handle_shutdown(signum, frame): | |
app.logger.info("收到终止信号,开始关闭...") | |
sys.exit(0) | |
signal.signal(signal.SIGTERM, handle_shutdown) | |
signal.signal(signal.SIGINT, handle_shutdown) | |
# 初始化模型和预计算编码 | |
try: | |
app.logger.info("开始加载模型...") | |
model = SentenceTransformer( | |
"flax-sentence-embeddings/st-codesearch-distilroberta-base", | |
cache_folder="/model-cache" | |
) | |
# 预计算代码片段的编码(强制使用 CPU) | |
code_emb = model.encode(CODE_SNIPPETS, convert_to_tensor=True, device="cpu") | |
service_ready = True | |
app.logger.info("服务初始化完成") | |
except Exception as e: | |
app.logger.error("初始化失败: %s", str(e)) | |
raise | |
# Hugging Face 健康检查端点,必须响应根路径 | |
@app.route('/') | |
def hf_health_check(): | |
# 如果请求接受 HTML,则返回一个简单的 HTML 页面(包含测试链接) | |
if request.accept_mimetypes.accept_html: | |
html = """ | |
<h2>CodeSearch API</h2> | |
<p>服务状态:{{ status }}</p> | |
<p>你可以在地址栏输入 /search?query=你的查询 来测试接口</p> | |
""" | |
status = "ready" if service_ready else "initializing" | |
return render_template_string(html, status=status) | |
# 否则返回 JSON 格式的健康检查 | |
if service_ready: | |
return jsonify({"status": "ready"}), 200 | |
else: | |
return jsonify({"status": "initializing"}), 503 | |
# 搜索 API 端点,同时支持 GET 和 POST 请求 | |
@app.route('/search', methods=['GET', 'POST']) | |
def handle_search(): | |
if not service_ready: | |
app.logger.info("服务未就绪") | |
return jsonify({"error": "服务正在初始化"}), 503 | |
try: | |
# 根据请求方法提取查询内容 | |
if request.method == 'GET': | |
query = request.args.get('query', '').strip() | |
else: | |
data = request.get_json() or {} | |
query = data.get('query', '').strip() | |
if not query: | |
app.logger.info("收到空的查询请求") | |
return jsonify({"error": "查询不能为空"}), 400 | |
# 记录接收到的查询 | |
app.logger.info("收到查询请求: %s", query) | |
# 对查询进行编码,并进行语义搜索 | |
query_emb = model.encode(query, convert_to_tensor=True, device="cpu") | |
hits = util.semantic_search(query_emb, code_emb, top_k=1)[0] | |
best = hits[0] | |
result = { | |
"code": CODE_SNIPPETS[best['corpus_id']], | |
"score": round(float(best['score']), 4) | |
} | |
# 记录返回结果 | |
app.logger.info("返回结果: %s", result) | |
return jsonify(result) | |
except Exception as e: | |
app.logger.error("请求处理失败: %s", str(e)) | |
return jsonify({"error": "服务器内部错误"}), 500 | |
if __name__ == "__main__": | |
# 本地测试用,Hugging Face Spaces 通常通过 gunicorn 启动 | |
app.run(host='0.0.0.0', port=7860) | |