"backends/v3/src/client/grpc_client.rs" did not exist on "8e8dd984d807dac30a752ae3025925883b11ebc8"
route.ts 1.18 KB
Newer Older
Jeffrey Morgan's avatar
Jeffrey Morgan committed
1
2
3
4
5
6
import { NextResponse } from 'next/server'
import semver from 'semver'

export async function GET(req: Request) {
  const { searchParams } = new URL(req.url)

7
8
  const os = searchParams.get('os') || 'darwin'
  const version = searchParams.get('version') || '0.0.0'
Jeffrey Morgan's avatar
Jeffrey Morgan committed
9

Jeffrey Morgan's avatar
Jeffrey Morgan committed
10
11
12
13
  if (!version) {
    return new Response('not found', { status: 404 })
  }

14
15
16
  const res = await fetch('https://api.github.com/repos/jmorganca/ollama/releases', { next: { revalidate: 60 } })
  const data = await res.json()

Jeffrey Morgan's avatar
Jeffrey Morgan committed
17
18
19
  const latest = data?.filter((f: any) => !f.prerelease)?.[0]

  if (!latest) {
20
21
22
23
    return new Response('not found', { status: 404 })
  }

  const assets = latest.assets || []
Jeffrey Morgan's avatar
Jeffrey Morgan committed
24

25
26
27
  if (assets.length === 0) {
    return new Response('not found', { status: 404 })
  }
Jeffrey Morgan's avatar
Jeffrey Morgan committed
28

29
30
  // todo: get the correct asset for the current arch/os
  const asset = assets.find((a: any) => a.name.toLowerCase().includes(os) && a.name.toLowerCase().includes('.zip'))
Jeffrey Morgan's avatar
Jeffrey Morgan committed
31

32
33
34
  if (!asset) {
    return new Response('not found', { status: 404 })
  }
Jeffrey Morgan's avatar
Jeffrey Morgan committed
35

36
  console.log(asset)
Jeffrey Morgan's avatar
Jeffrey Morgan committed
37

38
39
  if (semver.lt(version, latest.tag_name)) {
    return NextResponse.json({ version: data.tag_name, url: asset.browser_download_url })
Jeffrey Morgan's avatar
Jeffrey Morgan committed
40
  }
41
42

  return new Response(null, { status: 204 })
Jeffrey Morgan's avatar
Jeffrey Morgan committed
43
}