mirror of
https://github.com/farcasclaudiu/Flowise.git
synced 2026-06-28 19:00:59 +03:00
Merge pull request #409 from govind-kumarr/feature/Qdrant-VectorStore-Integration
Feature/Qdrant vector store integration
This commit is contained in:
@@ -0,0 +1,120 @@
|
||||
import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface'
|
||||
import { QdrantClient } from '@qdrant/js-client-rest'
|
||||
import { QdrantVectorStore, QdrantLibArgs } from 'langchain/vectorstores/qdrant'
|
||||
import { Embeddings } from 'langchain/embeddings/base'
|
||||
import { getBaseClasses } from '../../../src/utils'
|
||||
|
||||
class Qdrant_Existing_VectorStores implements INode {
|
||||
label: string
|
||||
name: string
|
||||
description: string
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
baseClasses: string[]
|
||||
inputs: INodeParams[]
|
||||
outputs: INodeOutputsValue[]
|
||||
|
||||
constructor() {
|
||||
this.label = 'Qdrant Load Existing Index'
|
||||
this.name = 'qdrantExistingIndex'
|
||||
this.type = 'Qdrant'
|
||||
this.icon = 'qdrant_logo.svg'
|
||||
this.category = 'Vector Stores'
|
||||
this.description = 'Load existing index from Qdrant (i.e., documents have been upserted)'
|
||||
this.baseClasses = [this.type, 'VectorStoreRetriever', 'BaseRetriever']
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Embeddings',
|
||||
name: 'embeddings',
|
||||
type: 'Embeddings'
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Server URL',
|
||||
name: 'qdrantServerUrl',
|
||||
type: 'string',
|
||||
placeholder: 'http://localhost:6333'
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Collection Name',
|
||||
name: 'qdrantCollection',
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
label: 'Qdrant API Key',
|
||||
name: 'qdrantApiKey',
|
||||
type: 'password',
|
||||
optional: true
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Collection Cofiguration',
|
||||
name: 'qdrantCollectionCofiguration',
|
||||
type: 'json',
|
||||
optional: true,
|
||||
additionalParams: true
|
||||
},
|
||||
{
|
||||
label: 'Top K',
|
||||
name: 'topK',
|
||||
description: 'Number of top results to fetch. Default to 4',
|
||||
placeholder: '4',
|
||||
type: 'number',
|
||||
additionalParams: true,
|
||||
optional: true
|
||||
}
|
||||
]
|
||||
this.outputs = [
|
||||
{
|
||||
label: 'Qdrant Retriever',
|
||||
name: 'retriever',
|
||||
baseClasses: this.baseClasses
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Vector Store',
|
||||
name: 'vectorStore',
|
||||
baseClasses: [this.type, ...getBaseClasses(QdrantVectorStore)]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData): Promise<any> {
|
||||
const qdrantServerUrl = nodeData.inputs?.qdrantServerUrl as string
|
||||
const collectionName = nodeData.inputs?.qdrantCollection as string
|
||||
const qdrantApiKey = nodeData.inputs?.qdrantApiKey as string
|
||||
let qdrantCollectionCofiguration = nodeData.inputs?.qdrantCollectionCofiguration
|
||||
const embeddings = nodeData.inputs?.embeddings as Embeddings
|
||||
const output = nodeData.outputs?.output as string
|
||||
const topK = nodeData.inputs?.topK as string
|
||||
const k = topK ? parseInt(topK, 10) : 4
|
||||
|
||||
// connect to Qdrant Cloud
|
||||
const client = new QdrantClient({
|
||||
url: qdrantServerUrl,
|
||||
apiKey: qdrantApiKey
|
||||
})
|
||||
|
||||
const dbConfig: QdrantLibArgs = {
|
||||
client,
|
||||
collectionName
|
||||
}
|
||||
|
||||
if (qdrantCollectionCofiguration) {
|
||||
qdrantCollectionCofiguration =
|
||||
typeof qdrantCollectionCofiguration === 'object' ? qdrantCollectionCofiguration : JSON.parse(qdrantCollectionCofiguration)
|
||||
dbConfig.collectionConfig = qdrantCollectionCofiguration
|
||||
}
|
||||
|
||||
const vectorStore = await QdrantVectorStore.fromExistingCollection(embeddings, dbConfig)
|
||||
|
||||
if (output === 'retriever') {
|
||||
const retriever = vectorStore.asRetriever(k)
|
||||
return retriever
|
||||
} else if (output === 'vectorStore') {
|
||||
;(vectorStore as any).k = k
|
||||
return vectorStore
|
||||
}
|
||||
return vectorStore
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: Qdrant_Existing_VectorStores }
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="451.84" height="152.4" fill="none" version="1.1" viewBox="0 0 451.84 152.4" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#dc244c">
|
||||
<path d="m212.69 116c0 5.523-4.477 10.001-10 10.001h-6.836v-7.808h-0.244c-0.732 1.057-1.708 2.155-2.928 3.293-1.139 1.058-2.521 2.034-4.148 2.929-1.545 0.894-3.294 1.626-5.246 2.196-1.871 0.569-3.823 0.853-5.856 0.853-4.392 0-8.377-0.732-11.956-2.196-3.579-1.545-6.669-3.66-9.272-6.344-2.521-2.765-4.473-6.018-5.856-9.759-1.383-3.742-2.074-7.849-2.074-12.322 0-4.148 0.61-8.093 1.83-11.835 1.301-3.822 3.091-7.198 5.368-10.126 2.359-2.9275 5.205-5.2455 8.54-6.9535 3.335-1.7893 7.117-2.684 11.346-2.684 3.823 0 7.361 0.61 10.614 1.83 3.335 1.1387 6.059 3.1313 8.174 5.9785h0.244v-29.284c0-5.5229 4.477-10 10-10h8.3zm-16.836-19.646c0-4.473-1.301-8.092-3.904-10.858-2.521-2.765-6.1-4.148-10.736-4.148s-8.255 1.383-10.858 4.148c-2.521 2.766-3.782 6.385-3.782 10.858 0 4.474 1.261 8.093 3.782 10.858 2.603 2.766 6.222 4.149 10.858 4.149s8.215-1.383 10.736-4.149c2.603-2.765 3.904-6.384 3.904-10.858z"/>
|
||||
<path d="m224.53 76.708c0-5.5223 4.477-9.9995 10-9.9995h8.3v9.5155h0.244c1.952-3.6595 4.27-6.3842 6.954-8.1735 2.684-1.8707 6.059-2.806 10.126-2.806 1.057 0 2.114 0.0407 3.172 0.122 1.057 0.0813 2.033 0.244 2.928 0.488v16.714c-1.302-0.407-2.603-0.692-3.904-0.855-1.22-0.244-2.522-0.366-3.904-0.366-3.498 0-6.263 0.488-8.296 1.464-2.034 0.976-3.62 2.359-4.758 4.148-1.058 1.708-1.749 3.782-2.074 6.222-0.326 2.441-0.488 5.124-0.488 8.052v14.766c0 5.523-4.477 10.001-10 10.001h-8.3z"/>
|
||||
<path d="m310.64 118.56h-0.244c-2.033 3.172-4.758 5.449-8.174 6.832-3.334 1.382-6.872 2.073-10.614 2.073-2.765 0-5.449-0.406-8.052-1.219-2.521-0.732-4.758-1.871-6.71-3.416-1.952-1.546-3.497-3.457-4.636-5.735-1.138-2.277-1.708-4.92-1.708-7.929 0-3.416 0.61-6.304 1.83-8.662 1.302-2.359 3.01-4.311 5.124-5.856 2.196-1.546 4.677-2.725 7.442-3.538 2.766-0.895 5.612-1.546 8.54-1.953 3.01-0.406 5.978-0.65 8.906-0.732 3.01-0.081 5.775-0.121 8.296-0.121 0-3.254-1.179-5.816-3.538-7.687-2.277-1.952-5.002-2.928-8.174-2.928-3.009 0-5.774 0.651-8.296 1.952-2.44 1.221-4.636 2.929-6.588 5.124l-9.76-10.004c3.416-3.1715 7.402-5.5302 11.956-7.0755 4.555-1.6267 9.272-2.44 14.152-2.44 5.368 0 9.76 0.6913 13.176 2.074 3.498 1.3013 6.263 3.2533 8.296 5.8555 2.115 2.603 3.579 5.816 4.392 9.638 0.814 3.742 1.22 8.093 1.22 13.054v20.135c0 5.522-4.477 10-10 10h-6.836zm-4.514-18.545c-1.382 0-3.131 0.082-5.246 0.244-2.033 0.082-4.026 0.407-5.978 0.976-1.87 0.57-3.497 1.424-4.88 2.562-1.301 1.139-1.952 2.725-1.952 4.759 0 2.196 0.936 3.822 2.806 4.879 1.871 1.058 3.823 1.586 5.856 1.586 1.79 0 3.498-0.244 5.124-0.732 1.708-0.488 3.213-1.179 4.514-2.074 1.302-0.894 2.318-2.033 3.05-3.416 0.814-1.382 1.22-3.009 1.22-4.879v-3.905z"/>
|
||||
<path d="m340.18 76.708c0-5.5223 4.477-9.9995 10-9.9995h7.568v8.0515h0.244c0.569-1.138 1.382-2.2768 2.44-3.4155 1.057-1.1387 2.318-2.1553 3.782-3.05s3.131-1.6267 5.002-2.196c1.87-0.5693 3.904-0.854 6.1-0.854 4.636 0 8.377 0.732 11.224 2.196 2.846 1.3827 5.042 3.3347 6.588 5.8555 1.626 2.522 2.724 5.49 3.294 8.906 0.569 3.416 0.854 7.117 0.854 11.103v22.695c0 5.523-4.477 10.001-10 10.001h-8.3v-29.037c0-1.708-0.082-3.456-0.244-5.246-0.082-1.87-0.448-3.578-1.098-5.123-0.57-1.546-1.505-2.807-2.806-3.783-1.22-0.976-3.01-1.464-5.368-1.464-2.359 0-4.27 0.448-5.734 1.342-1.464 0.814-2.603 1.952-3.416 3.416-0.732 1.383-1.22 2.969-1.464 4.758-0.244 1.79-0.366 3.66-0.366 5.612v19.524c0 5.523-4.477 10.001-10 10.001h-8.3z"/>
|
||||
<path d="m451.84 71.348c0 5.5225-4.477 9.9995-10 9.9995h-6.104v19.765c0 1.626 0.082 3.131 0.244 4.513 0.163 1.302 0.529 2.44 1.098 3.416 0.57 0.976 1.424 1.749 2.562 2.319 1.22 0.488 2.806 0.731 4.758 0.731 0.976 0 2.237-0.081 3.782-0.244 1.627-0.244 2.847-0.731 3.66-1.463v8.724c0 3.915-2.452 7.557-6.344 7.989-2.196 0.244-4.351 0.366-6.466 0.366-3.09 0-5.937-0.325-8.54-0.976-2.602-0.65-4.88-1.667-6.832-3.049-1.952-1.464-3.497-3.335-4.636-5.613-1.057-2.277-1.586-5.042-1.586-8.295v-28.183h-11.712v-4.64c0-5.5224 4.478-9.9995 10-9.9995h1.712v-7.568c0-5.5229 4.478-10 10-10h8.3v17.568h16.104z"/>
|
||||
</g>
|
||||
<g clip-rule="evenodd" fill-rule="evenodd">
|
||||
<path d="m103.79 140.09-3.0389-83.784-5.5036-22.089 36.735 3.8889v101.35l-22.44 12.951z" fill="#24386c"/>
|
||||
<path d="m131.98 38.1-22.44 12.96-46.308-10.158-54.203 22.069-9.0306-24.871 32.99-19.05 33-19.05 32.991 19.05z" fill="#7589be"/>
|
||||
<path d="m0 38.1 22.44 12.96 13.008 38.686 43.921 35.142-13.378 27.512-33-19.051-32.991-19.05v-76.2" fill="#b2bfe8"/>
|
||||
<path d="m80.868 104.56-14.877 21.932v25.91l21.11-12.18 10.877-16.242" fill="#24386c"/>
|
||||
<path d="m66 100.59-21.119-36.565 4.5489-12.119 17.293-8.3844 20.378 20.504z" fill="#7589be"/>
|
||||
<path d="m44.881 64.022 21.11 12.18v24.38l-19.524 0.84001-11.81-15.08 10.224-22.32" fill="#b2bfe8"/>
|
||||
<path d="m65.991 76.2 21.11-12.179 14.367 23.922-17.386 14.365-18.091-1.7272z" fill="#24386c"/>
|
||||
<path d="m87.101 140.22 22.44 12.181v-101.34l-21.78-12.57-21.77-12.57-21.78 12.57-21.77 12.57v50.289l21.77 12.57 21.78 12.571 21.11-12.191zm0-51.83-21.11 12.19-21.11-12.19v-24.37l21.11-12.19 21.11 12.19v24.37" fill="#dc244c"/>
|
||||
</g>
|
||||
<path d="m66 126.5v-25.914l-21-12.086v25.871z" fill="url(#paint0_linear_425_56)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_425_56" x1="62.128" x2="41.202" y1="105.54" y2="105.54" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF3364" offset="0"/>
|
||||
<stop stop-color="#C91540" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
@@ -0,0 +1,121 @@
|
||||
import { INode, INodeData, INodeOutputsValue, INodeParams } from '../../../src/Interface'
|
||||
import { QdrantClient } from '@qdrant/js-client-rest'
|
||||
import { QdrantVectorStore, QdrantLibArgs } from 'langchain/vectorstores/qdrant'
|
||||
import { Embeddings } from 'langchain/embeddings/base'
|
||||
import { Document } from 'langchain/document'
|
||||
import { getBaseClasses } from '../../../src/utils'
|
||||
import { flatten } from 'lodash'
|
||||
|
||||
class QdrantUpsert_VectorStores implements INode {
|
||||
label: string
|
||||
name: string
|
||||
description: string
|
||||
type: string
|
||||
icon: string
|
||||
category: string
|
||||
baseClasses: string[]
|
||||
inputs: INodeParams[]
|
||||
outputs: INodeOutputsValue[]
|
||||
|
||||
constructor() {
|
||||
this.label = 'Qdrant Upsert Document'
|
||||
this.name = 'qdrantUpsert'
|
||||
this.type = 'Qdrant'
|
||||
this.icon = 'qdrant_logo.svg'
|
||||
this.category = 'Vector Stores'
|
||||
this.description = 'Upsert documents to Qdrant'
|
||||
this.baseClasses = [this.type, 'VectorStoreRetriever', 'BaseRetriever']
|
||||
this.inputs = [
|
||||
{
|
||||
label: 'Document',
|
||||
name: 'document',
|
||||
type: 'Document',
|
||||
list: true
|
||||
},
|
||||
{
|
||||
label: 'Embeddings',
|
||||
name: 'embeddings',
|
||||
type: 'Embeddings'
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Server URL',
|
||||
name: 'qdrantServerUrl',
|
||||
type: 'string',
|
||||
placeholder: 'http://localhost:6333'
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Collection Name',
|
||||
name: 'qdrantCollection',
|
||||
type: 'string'
|
||||
},
|
||||
{
|
||||
label: 'Qdrant API Key',
|
||||
name: 'qdrantApiKey',
|
||||
type: 'password',
|
||||
optional: true
|
||||
},
|
||||
{
|
||||
label: 'Top K',
|
||||
name: 'topK',
|
||||
description: 'Number of top results to fetch. Default to 4',
|
||||
placeholder: '4',
|
||||
type: 'number',
|
||||
additionalParams: true,
|
||||
optional: true
|
||||
}
|
||||
]
|
||||
this.outputs = [
|
||||
{
|
||||
label: 'Qdrant Retriever',
|
||||
name: 'retriever',
|
||||
baseClasses: this.baseClasses
|
||||
},
|
||||
{
|
||||
label: 'Qdrant Vector Store',
|
||||
name: 'vectorStore',
|
||||
baseClasses: [this.type, ...getBaseClasses(QdrantVectorStore)]
|
||||
}
|
||||
]
|
||||
}
|
||||
|
||||
async init(nodeData: INodeData): Promise<any> {
|
||||
const qdrantServerUrl = nodeData.inputs?.qdrantServerUrl as string
|
||||
const collectionName = nodeData.inputs?.qdrantCollection as string
|
||||
const qdrantApiKey = nodeData.inputs?.qdrantApiKey as string
|
||||
const docs = nodeData.inputs?.document as Document[]
|
||||
const embeddings = nodeData.inputs?.embeddings as Embeddings
|
||||
const output = nodeData.outputs?.output as string
|
||||
const topK = nodeData.inputs?.topK as string
|
||||
const k = topK ? parseInt(topK, 10) : 4
|
||||
|
||||
// connect to Qdrant Cloud
|
||||
const client = new QdrantClient({
|
||||
url: qdrantServerUrl,
|
||||
apiKey: qdrantApiKey
|
||||
})
|
||||
|
||||
const flattenDocs = docs && docs.length ? flatten(docs) : []
|
||||
const finalDocs = []
|
||||
for (let i = 0; i < flattenDocs.length; i += 1) {
|
||||
finalDocs.push(new Document(flattenDocs[i]))
|
||||
}
|
||||
|
||||
const dbConfig: QdrantLibArgs = {
|
||||
client,
|
||||
url: qdrantServerUrl,
|
||||
collectionName
|
||||
}
|
||||
const vectorStore = await QdrantVectorStore.fromDocuments(finalDocs, embeddings, dbConfig)
|
||||
|
||||
if (output === 'retriever') {
|
||||
const retriever = vectorStore.asRetriever(k)
|
||||
return retriever
|
||||
} else if (output === 'vectorStore') {
|
||||
;(vectorStore as any).k = k
|
||||
return vectorStore
|
||||
}
|
||||
return vectorStore
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = { nodeClass: QdrantUpsert_VectorStores }
|
||||
@@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<svg width="451.84" height="152.4" fill="none" version="1.1" viewBox="0 0 451.84 152.4" xmlns="http://www.w3.org/2000/svg">
|
||||
<g fill="#dc244c">
|
||||
<path d="m212.69 116c0 5.523-4.477 10.001-10 10.001h-6.836v-7.808h-0.244c-0.732 1.057-1.708 2.155-2.928 3.293-1.139 1.058-2.521 2.034-4.148 2.929-1.545 0.894-3.294 1.626-5.246 2.196-1.871 0.569-3.823 0.853-5.856 0.853-4.392 0-8.377-0.732-11.956-2.196-3.579-1.545-6.669-3.66-9.272-6.344-2.521-2.765-4.473-6.018-5.856-9.759-1.383-3.742-2.074-7.849-2.074-12.322 0-4.148 0.61-8.093 1.83-11.835 1.301-3.822 3.091-7.198 5.368-10.126 2.359-2.9275 5.205-5.2455 8.54-6.9535 3.335-1.7893 7.117-2.684 11.346-2.684 3.823 0 7.361 0.61 10.614 1.83 3.335 1.1387 6.059 3.1313 8.174 5.9785h0.244v-29.284c0-5.5229 4.477-10 10-10h8.3zm-16.836-19.646c0-4.473-1.301-8.092-3.904-10.858-2.521-2.765-6.1-4.148-10.736-4.148s-8.255 1.383-10.858 4.148c-2.521 2.766-3.782 6.385-3.782 10.858 0 4.474 1.261 8.093 3.782 10.858 2.603 2.766 6.222 4.149 10.858 4.149s8.215-1.383 10.736-4.149c2.603-2.765 3.904-6.384 3.904-10.858z"/>
|
||||
<path d="m224.53 76.708c0-5.5223 4.477-9.9995 10-9.9995h8.3v9.5155h0.244c1.952-3.6595 4.27-6.3842 6.954-8.1735 2.684-1.8707 6.059-2.806 10.126-2.806 1.057 0 2.114 0.0407 3.172 0.122 1.057 0.0813 2.033 0.244 2.928 0.488v16.714c-1.302-0.407-2.603-0.692-3.904-0.855-1.22-0.244-2.522-0.366-3.904-0.366-3.498 0-6.263 0.488-8.296 1.464-2.034 0.976-3.62 2.359-4.758 4.148-1.058 1.708-1.749 3.782-2.074 6.222-0.326 2.441-0.488 5.124-0.488 8.052v14.766c0 5.523-4.477 10.001-10 10.001h-8.3z"/>
|
||||
<path d="m310.64 118.56h-0.244c-2.033 3.172-4.758 5.449-8.174 6.832-3.334 1.382-6.872 2.073-10.614 2.073-2.765 0-5.449-0.406-8.052-1.219-2.521-0.732-4.758-1.871-6.71-3.416-1.952-1.546-3.497-3.457-4.636-5.735-1.138-2.277-1.708-4.92-1.708-7.929 0-3.416 0.61-6.304 1.83-8.662 1.302-2.359 3.01-4.311 5.124-5.856 2.196-1.546 4.677-2.725 7.442-3.538 2.766-0.895 5.612-1.546 8.54-1.953 3.01-0.406 5.978-0.65 8.906-0.732 3.01-0.081 5.775-0.121 8.296-0.121 0-3.254-1.179-5.816-3.538-7.687-2.277-1.952-5.002-2.928-8.174-2.928-3.009 0-5.774 0.651-8.296 1.952-2.44 1.221-4.636 2.929-6.588 5.124l-9.76-10.004c3.416-3.1715 7.402-5.5302 11.956-7.0755 4.555-1.6267 9.272-2.44 14.152-2.44 5.368 0 9.76 0.6913 13.176 2.074 3.498 1.3013 6.263 3.2533 8.296 5.8555 2.115 2.603 3.579 5.816 4.392 9.638 0.814 3.742 1.22 8.093 1.22 13.054v20.135c0 5.522-4.477 10-10 10h-6.836zm-4.514-18.545c-1.382 0-3.131 0.082-5.246 0.244-2.033 0.082-4.026 0.407-5.978 0.976-1.87 0.57-3.497 1.424-4.88 2.562-1.301 1.139-1.952 2.725-1.952 4.759 0 2.196 0.936 3.822 2.806 4.879 1.871 1.058 3.823 1.586 5.856 1.586 1.79 0 3.498-0.244 5.124-0.732 1.708-0.488 3.213-1.179 4.514-2.074 1.302-0.894 2.318-2.033 3.05-3.416 0.814-1.382 1.22-3.009 1.22-4.879v-3.905z"/>
|
||||
<path d="m340.18 76.708c0-5.5223 4.477-9.9995 10-9.9995h7.568v8.0515h0.244c0.569-1.138 1.382-2.2768 2.44-3.4155 1.057-1.1387 2.318-2.1553 3.782-3.05s3.131-1.6267 5.002-2.196c1.87-0.5693 3.904-0.854 6.1-0.854 4.636 0 8.377 0.732 11.224 2.196 2.846 1.3827 5.042 3.3347 6.588 5.8555 1.626 2.522 2.724 5.49 3.294 8.906 0.569 3.416 0.854 7.117 0.854 11.103v22.695c0 5.523-4.477 10.001-10 10.001h-8.3v-29.037c0-1.708-0.082-3.456-0.244-5.246-0.082-1.87-0.448-3.578-1.098-5.123-0.57-1.546-1.505-2.807-2.806-3.783-1.22-0.976-3.01-1.464-5.368-1.464-2.359 0-4.27 0.448-5.734 1.342-1.464 0.814-2.603 1.952-3.416 3.416-0.732 1.383-1.22 2.969-1.464 4.758-0.244 1.79-0.366 3.66-0.366 5.612v19.524c0 5.523-4.477 10.001-10 10.001h-8.3z"/>
|
||||
<path d="m451.84 71.348c0 5.5225-4.477 9.9995-10 9.9995h-6.104v19.765c0 1.626 0.082 3.131 0.244 4.513 0.163 1.302 0.529 2.44 1.098 3.416 0.57 0.976 1.424 1.749 2.562 2.319 1.22 0.488 2.806 0.731 4.758 0.731 0.976 0 2.237-0.081 3.782-0.244 1.627-0.244 2.847-0.731 3.66-1.463v8.724c0 3.915-2.452 7.557-6.344 7.989-2.196 0.244-4.351 0.366-6.466 0.366-3.09 0-5.937-0.325-8.54-0.976-2.602-0.65-4.88-1.667-6.832-3.049-1.952-1.464-3.497-3.335-4.636-5.613-1.057-2.277-1.586-5.042-1.586-8.295v-28.183h-11.712v-4.64c0-5.5224 4.478-9.9995 10-9.9995h1.712v-7.568c0-5.5229 4.478-10 10-10h8.3v17.568h16.104z"/>
|
||||
</g>
|
||||
<g clip-rule="evenodd" fill-rule="evenodd">
|
||||
<path d="m103.79 140.09-3.0389-83.784-5.5036-22.089 36.735 3.8889v101.35l-22.44 12.951z" fill="#24386c"/>
|
||||
<path d="m131.98 38.1-22.44 12.96-46.308-10.158-54.203 22.069-9.0306-24.871 32.99-19.05 33-19.05 32.991 19.05z" fill="#7589be"/>
|
||||
<path d="m0 38.1 22.44 12.96 13.008 38.686 43.921 35.142-13.378 27.512-33-19.051-32.991-19.05v-76.2" fill="#b2bfe8"/>
|
||||
<path d="m80.868 104.56-14.877 21.932v25.91l21.11-12.18 10.877-16.242" fill="#24386c"/>
|
||||
<path d="m66 100.59-21.119-36.565 4.5489-12.119 17.293-8.3844 20.378 20.504z" fill="#7589be"/>
|
||||
<path d="m44.881 64.022 21.11 12.18v24.38l-19.524 0.84001-11.81-15.08 10.224-22.32" fill="#b2bfe8"/>
|
||||
<path d="m65.991 76.2 21.11-12.179 14.367 23.922-17.386 14.365-18.091-1.7272z" fill="#24386c"/>
|
||||
<path d="m87.101 140.22 22.44 12.181v-101.34l-21.78-12.57-21.77-12.57-21.78 12.57-21.77 12.57v50.289l21.77 12.57 21.78 12.571 21.11-12.191zm0-51.83-21.11 12.19-21.11-12.19v-24.37l21.11-12.19 21.11 12.19v24.37" fill="#dc244c"/>
|
||||
</g>
|
||||
<path d="m66 126.5v-25.914l-21-12.086v25.871z" fill="url(#paint0_linear_425_56)"/>
|
||||
<defs>
|
||||
<linearGradient id="paint0_linear_425_56" x1="62.128" x2="41.202" y1="105.54" y2="105.54" gradientUnits="userSpaceOnUse">
|
||||
<stop stop-color="#FF3364" offset="0"/>
|
||||
<stop stop-color="#C91540" stop-opacity="0" offset="1"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 5.4 KiB |
Reference in New Issue
Block a user