try profile
Browse files
src/lib/components/PicletGenerator/PicletGenerator.svelte
CHANGED
|
@@ -11,8 +11,9 @@
|
|
| 11 |
import { EnhancedCaptionService } from '$lib/services/enhancedCaption';
|
| 12 |
import { CanonicalService } from '$lib/services/canonicalService';
|
| 13 |
import { incrementDiscoveryCounter, addRarityScore, calculateRarityPoints } from '$lib/db/gameState';
|
|
|
|
| 14 |
// import { withQwenTimeout } from '$lib/utils/qwenTimeout'; // Unused since qwen is disabled
|
| 15 |
-
|
| 16 |
interface Props extends PicletGeneratorProps {}
|
| 17 |
|
| 18 |
let {
|
|
@@ -20,6 +21,9 @@
|
|
| 20 |
fluxClient,
|
| 21 |
gptOssClient
|
| 22 |
}: Props = $props();
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
// GPT-OSS-120B text generation
|
| 25 |
const generateText = async (prompt: string): Promise<string> => {
|
|
@@ -644,7 +648,8 @@ Create a concise visual description (1-3 sentences, max 100 words). Focus only o
|
|
| 644 |
picletData,
|
| 645 |
workflowState.objectName || undefined,
|
| 646 |
plainAttributes,
|
| 647 |
-
workflowState.visualDetails || undefined
|
|
|
|
| 648 |
);
|
| 649 |
|
| 650 |
const picletId = await savePicletInstance(picletInstance);
|
|
|
|
| 11 |
import { EnhancedCaptionService } from '$lib/services/enhancedCaption';
|
| 12 |
import { CanonicalService } from '$lib/services/canonicalService';
|
| 13 |
import { incrementDiscoveryCounter, addRarityScore, calculateRarityPoints } from '$lib/db/gameState';
|
| 14 |
+
import { authStore } from '$lib/stores/auth';
|
| 15 |
// import { withQwenTimeout } from '$lib/utils/qwenTimeout'; // Unused since qwen is disabled
|
| 16 |
+
|
| 17 |
interface Props extends PicletGeneratorProps {}
|
| 18 |
|
| 19 |
let {
|
|
|
|
| 21 |
fluxClient,
|
| 22 |
gptOssClient
|
| 23 |
}: Props = $props();
|
| 24 |
+
|
| 25 |
+
// Get current user info for discoverer attribution
|
| 26 |
+
const auth = $derived(authStore);
|
| 27 |
|
| 28 |
// GPT-OSS-120B text generation
|
| 29 |
const generateText = async (prompt: string): Promise<string> => {
|
|
|
|
| 648 |
picletData,
|
| 649 |
workflowState.objectName || undefined,
|
| 650 |
plainAttributes,
|
| 651 |
+
workflowState.visualDetails || undefined,
|
| 652 |
+
$auth.userInfo // Pass user info for discoverer attribution
|
| 653 |
);
|
| 654 |
|
| 655 |
const picletId = await savePicletInstance(picletInstance);
|
src/lib/components/PicletGenerator/PicletResult.svelte
CHANGED
|
@@ -5,6 +5,7 @@
|
|
| 5 |
import { generatedDataToPicletInstance } from '$lib/db/piclets';
|
| 6 |
import PicletCard from '../Piclets/PicletCard.svelte';
|
| 7 |
import PicletDetail from '../Piclets/PicletDetail.svelte';
|
|
|
|
| 8 |
|
| 9 |
interface Props {
|
| 10 |
workflowState: PicletWorkflowState;
|
|
@@ -18,6 +19,9 @@
|
|
| 18 |
let showDetailView = $state(false);
|
| 19 |
let saveError: string | null = $state(null);
|
| 20 |
|
|
|
|
|
|
|
|
|
|
| 21 |
// Create piclet instance from the generated data
|
| 22 |
$effect(() => {
|
| 23 |
if (workflowState.picletImage && workflowState.picletConcept && workflowState.picletStats) {
|
|
@@ -41,7 +45,8 @@
|
|
| 41 |
picletData,
|
| 42 |
workflowState.objectName || undefined,
|
| 43 |
plainAttributes,
|
| 44 |
-
workflowState.visualDetails || undefined
|
|
|
|
| 45 |
).then(instance => {
|
| 46 |
picletInstance = { ...instance, id: 0 }; // Add temporary id for display
|
| 47 |
}).catch(error => {
|
|
|
|
| 5 |
import { generatedDataToPicletInstance } from '$lib/db/piclets';
|
| 6 |
import PicletCard from '../Piclets/PicletCard.svelte';
|
| 7 |
import PicletDetail from '../Piclets/PicletDetail.svelte';
|
| 8 |
+
import { authStore } from '$lib/stores/auth';
|
| 9 |
|
| 10 |
interface Props {
|
| 11 |
workflowState: PicletWorkflowState;
|
|
|
|
| 19 |
let showDetailView = $state(false);
|
| 20 |
let saveError: string | null = $state(null);
|
| 21 |
|
| 22 |
+
// Get current user info for discoverer attribution
|
| 23 |
+
const auth = $derived(authStore);
|
| 24 |
+
|
| 25 |
// Create piclet instance from the generated data
|
| 26 |
$effect(() => {
|
| 27 |
if (workflowState.picletImage && workflowState.picletConcept && workflowState.picletStats) {
|
|
|
|
| 45 |
picletData,
|
| 46 |
workflowState.objectName || undefined,
|
| 47 |
plainAttributes,
|
| 48 |
+
workflowState.visualDetails || undefined,
|
| 49 |
+
$auth.userInfo // Pass user info for discoverer attribution
|
| 50 |
).then(instance => {
|
| 51 |
picletInstance = { ...instance, id: 0 }; // Add temporary id for display
|
| 52 |
}).catch(error => {
|
src/lib/db/piclets.ts
CHANGED
|
@@ -3,6 +3,7 @@ import type { PicletInstance } from './schema';
|
|
| 3 |
import { PicletType } from '../types/picletTypes';
|
| 4 |
import type { PicletStats } from '../types';
|
| 5 |
import { generatePicletId } from '../utils/picletId';
|
|
|
|
| 6 |
|
| 7 |
// Interface for generated piclet data (from PicletResult component)
|
| 8 |
interface GeneratedPicletData {
|
|
@@ -22,12 +23,14 @@ interface GeneratedPicletData {
|
|
| 22 |
* @param objectName - Optional normalized object name (e.g., "eiffel tower")
|
| 23 |
* @param attributes - Optional array of variation attributes (first item is the primary variation)
|
| 24 |
* @param visualDetails - Optional additional visual details
|
|
|
|
| 25 |
*/
|
| 26 |
export async function generatedDataToPicletInstance(
|
| 27 |
data: GeneratedPicletData,
|
| 28 |
objectName?: string,
|
| 29 |
attributes?: string[],
|
| 30 |
-
visualDetails?: string
|
|
|
|
| 31 |
): Promise<Omit<PicletInstance, 'id'>> {
|
| 32 |
if (!data.stats) {
|
| 33 |
throw new Error('Generated data must have stats to create PicletInstance');
|
|
@@ -56,7 +59,12 @@ export async function generatedDataToPicletInstance(
|
|
| 56 |
isCanonical: false, // Will be set by server
|
| 57 |
canonicalId: undefined,
|
| 58 |
variationAttributes: attributes || [],
|
| 59 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 60 |
discoveredAt: new Date(),
|
| 61 |
scanCount: 1,
|
| 62 |
|
|
|
|
| 3 |
import { PicletType } from '../types/picletTypes';
|
| 4 |
import type { PicletStats } from '../types';
|
| 5 |
import { generatePicletId } from '../utils/picletId';
|
| 6 |
+
import type { UserInfo } from '../stores/auth';
|
| 7 |
|
| 8 |
// Interface for generated piclet data (from PicletResult component)
|
| 9 |
interface GeneratedPicletData {
|
|
|
|
| 23 |
* @param objectName - Optional normalized object name (e.g., "eiffel tower")
|
| 24 |
* @param attributes - Optional array of variation attributes (first item is the primary variation)
|
| 25 |
* @param visualDetails - Optional additional visual details
|
| 26 |
+
* @param userInfo - Optional HF user info for discoverer attribution
|
| 27 |
*/
|
| 28 |
export async function generatedDataToPicletInstance(
|
| 29 |
data: GeneratedPicletData,
|
| 30 |
objectName?: string,
|
| 31 |
attributes?: string[],
|
| 32 |
+
visualDetails?: string,
|
| 33 |
+
userInfo?: UserInfo | null
|
| 34 |
): Promise<Omit<PicletInstance, 'id'>> {
|
| 35 |
if (!data.stats) {
|
| 36 |
throw new Error('Generated data must have stats to create PicletInstance');
|
|
|
|
| 59 |
isCanonical: false, // Will be set by server
|
| 60 |
canonicalId: undefined,
|
| 61 |
variationAttributes: attributes || [],
|
| 62 |
+
// Populate discoverer info from auth if available
|
| 63 |
+
discoveredBy: userInfo?.preferred_username || 'Player', // Legacy field
|
| 64 |
+
discovererSub: userInfo?.sub,
|
| 65 |
+
discovererUsername: userInfo?.preferred_username,
|
| 66 |
+
discovererName: userInfo?.name,
|
| 67 |
+
discovererPicture: userInfo?.picture,
|
| 68 |
discoveredAt: new Date(),
|
| 69 |
scanCount: 1,
|
| 70 |
|