Files
ragflow/internal/engine/infinity/client.go

112 lines
2.7 KiB
Go
Raw Normal View History

//
// Copyright 2026 The InfiniFlow Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
package infinity
import (
"context"
"fmt"
"ragflow/internal/server"
"strconv"
"strings"
infinity "github.com/infiniflow/infinity-go-sdk"
)
// infinityClient Infinity SDK client wrapper
type infinityClient struct {
conn *infinity.InfinityConnection
dbName string
}
// NewInfinityClient creates a new Infinity client using the SDK
func NewInfinityClient(cfg *server.InfinityConfig) (*infinityClient, error) {
// Parse URI like "localhost:23817" to get IP and port
host := "127.0.0.1"
port := 23817
if cfg.URI != "" {
parts := strings.Split(cfg.URI, ":")
if len(parts) == 2 {
host = parts[0]
if p, err := strconv.Atoi(parts[1]); err == nil {
port = p
}
}
}
conn, err := infinity.Connect(infinity.NetworkAddress{IP: host, Port: port})
if err != nil {
return nil, fmt.Errorf("failed to connect to Infinity: %w", err)
}
return &infinityClient{
conn: conn,
dbName: cfg.DBName,
}, nil
}
// Engine Infinity engine implementation using Go SDK
type infinityEngine struct {
config *server.InfinityConfig
client *infinityClient
}
// NewEngine creates an Infinity engine
func NewEngine(cfg interface{}) (*infinityEngine, error) {
infConfig, ok := cfg.(*server.InfinityConfig)
if !ok {
return nil, fmt.Errorf("invalid infinity config type, expected *config.InfinityConfig")
}
client, err := NewInfinityClient(infConfig)
if err != nil {
return nil, err
}
engine := &infinityEngine{
config: infConfig,
client: client,
}
return engine, nil
}
// Type returns the engine type
func (e *infinityEngine) Type() string {
return "infinity"
}
// Ping checks if Infinity is accessible
func (e *infinityEngine) Ping(ctx context.Context) error {
if e.client == nil || e.client.conn == nil {
return fmt.Errorf("Infinity client not initialized")
}
if !e.client.conn.IsConnected() {
return fmt.Errorf("Infinity not connected")
}
return nil
}
// Close closes the Infinity connection
func (e *infinityEngine) Close() error {
if e.client != nil && e.client.conn != nil {
_, err := e.client.conn.Disconnect()
return err
}
return nil
}